Best Python code snippet using Testify_python
test_options.py
Source:test_options.py  
1import unittest2import copy3import numpy as np4import numpy.testing as np_test5import pandas as pd6import pandas.testing as pd_test7import warnings8from pyblackscholesanalytics.market.market import MarketEnvironment9from pyblackscholesanalytics.options.options import PlainVanillaOption, DigitalOption10from pyblackscholesanalytics.utils.utils import scalarize11class TestPlainVanillaOption(unittest.TestCase):12    """Class to test public methods of PlainVanillaOption class"""13    def setUp(self) -> None:14        warnings.filterwarnings("ignore")15        # common market environment16        mkt_env = MarketEnvironment()17        # option objects18        self.call_opt = PlainVanillaOption(mkt_env)19        self.put_opt = PlainVanillaOption(mkt_env, option_type="put")20        # pricing parameters21        S_scalar = 10022        S_vector = [90, 100, 110]23        t_scalar_string = "01-06-2020"24        t_date_range = pd.date_range(start="2020-04-19", end="2020-12-21", periods=5)25        # common pricing parameter setup26        common_params = {"np_output": True, "minimization_method": "Least-Squares"}27        # scalar parameters setup28        self.scalar_params = copy.deepcopy(common_params)29        self.scalar_params["S"] = S_scalar30        self.scalar_params["t"] = t_scalar_string31        # vector parameters setup32        self.vector_params = copy.deepcopy(common_params)33        self.vector_params["S"] = S_vector34        self.vector_params["t"] = t_date_range35        # complex pricing parameter setup36        # (S scalar, K and t vector, sigma distributed as Kxt grid, r distributed as Kxt grid)37        K_vector = [75, 85, 90, 95]38        mK = len(K_vector)39        n = 340        sigma_grid_K = np.array([0.1 * (1 + i) for i in range(mK * n)]).reshape(n, mK)41        r_grid_K = np.array([0.01 * (1 + i) for i in range(mK * n)]).reshape(n, mK)42        self.complex_params = {"S": S_vector[0],43                               "K": K_vector,44                               "t": pd.date_range(start="2020-04-19", end="2020-12-21", periods=n),45                               "sigma": sigma_grid_K,46                               "r": r_grid_K,47                               "np_output": False,48                               "minimization_method": "Least-Squares"}49    def test_price_scalar(self):50        """Test price - scalar case"""51        # call52        test_call = scalarize(self.call_opt.price(**self.scalar_params))53        expected_call = 7.54838171681183954        self.assertEqual(test_call, expected_call)55        # put56        test_put = scalarize(self.put_opt.price(**self.scalar_params))57        expected_put = 4.67273050640795958        self.assertEqual(test_put, expected_put)59    def test_price_vector_np(self):60        """Test price - np.ndarray output case"""61        # call62        test_call = self.call_opt.price(**self.vector_params)63        expected_call = np.array([[3.48740247e+00, 8.42523213e+00, 1.55968082e+01],64                                  [2.53045128e+00, 7.14167587e+00, 1.43217796e+01],65                                  [1.56095778e+00, 5.72684668e+00, 1.29736886e+01],66                                  [5.89165298e-01, 4.00605304e+00, 1.14939139e+01],67                                  [7.21585753e-04, 1.38927959e+00, 1.01386434e+01]])68        np_test.assert_allclose(test_call, expected_call)69        # put70        test_put = self.put_opt.price(**self.vector_params)71        expected_put = np.array([[1.00413306e+01, 4.97916024e+00, 2.15073633e+00],72                                 [9.90791873e+00, 4.51914332e+00, 1.69924708e+00],73                                 [9.75553655e+00, 3.92142545e+00, 1.16826738e+00],74                                 [9.62127704e+00, 3.03816479e+00, 5.26025639e-01],75                                 [9.86382907e+00, 1.25238707e+00, 1.75090342e-03]])76        np_test.assert_allclose(test_put, expected_put)77    def test_price_vector_df(self):78        """Test price - pd.DataFrame output case"""79        # request Pandas DataFrame as output format80        self.vector_params["np_output"] = False81        # call82        test_call = self.call_opt.price(**self.vector_params)83        expected_call = pd.DataFrame(data=[[3.48740247e+00, 8.42523213e+00, 1.55968082e+01],84                                           [2.53045128e+00, 7.14167587e+00, 1.43217796e+01],85                                           [1.56095778e+00, 5.72684668e+00, 1.29736886e+01],86                                           [5.89165298e-01, 4.00605304e+00, 1.14939139e+01],87                                           [7.21585753e-04, 1.38927959e+00, 1.01386434e+01]],88                                     index=self.vector_params["t"],89                                     columns=self.vector_params["S"])90        expected_call.rename_axis("S", axis='columns', inplace=True)91        expected_call.rename_axis("t", axis='rows', inplace=True)92        pd_test.assert_frame_equal(test_call, expected_call)93        # put94        test_put = self.put_opt.price(**self.vector_params)95        expected_put = pd.DataFrame(data=[[1.00413306e+01, 4.97916024e+00, 2.15073633e+00],96                                          [9.90791873e+00, 4.51914332e+00, 1.69924708e+00],97                                          [9.75553655e+00, 3.92142545e+00, 1.16826738e+00],98                                          [9.62127704e+00, 3.03816479e+00, 5.26025639e-01],99                                          [9.86382907e+00, 1.25238707e+00, 1.75090342e-03]],100                                    index=self.vector_params["t"],101                                    columns=self.vector_params["S"])102        expected_put.rename_axis("S", axis='columns', inplace=True)103        expected_put.rename_axis("t", axis='rows', inplace=True)104        pd_test.assert_frame_equal(test_put, expected_put)105    def test_PnL_scalar(self):106        """Test P&L - scalar case"""107        # call108        test_call = scalarize(self.call_opt.PnL(**self.scalar_params))109        expected_call = 4.060979245868182110        self.assertEqual(test_call, expected_call)111        # put112        test_put = scalarize(self.put_opt.PnL(**self.scalar_params))113        expected_put = -5.368600081057167114        self.assertEqual(test_put, expected_put)115    def test_PnL_vector_np(self):116        """Test P&L - np.ndarray output case"""117        # call118        test_call = self.call_opt.PnL(**self.vector_params)119        expected_call = np.array([[0., 4.93782966, 12.10940574],120                                  [-0.95695119, 3.6542734, 10.83437716],121                                  [-1.92644469, 2.2394442, 9.48628613],122                                  [-2.89823717, 0.51865057, 8.00651142],123                                  [-3.48668089, -2.09812288, 6.65124095]])124        np_test.assert_allclose(test_call, expected_call)125        # put126        test_put = self.put_opt.PnL(**self.vector_params)127        expected_put = np.array([[0., -5.06217034, -7.89059426],128                                 [-0.13341186, -5.52218727, -8.3420835],129                                 [-0.28579403, -6.11990513, -8.87306321],130                                 [-0.42005355, -7.0031658, -9.51530495],131                                 [-0.17750152, -8.78894351, -10.03957968]])132        np_test.assert_allclose(test_put, expected_put)133    def test_PnL_vector_df(self):134        """Test P&L - pd.DataFrame output case"""135        # request Pandas DataFrame as output format136        self.vector_params["np_output"] = False137        # call138        test_call = self.call_opt.PnL(**self.vector_params)139        expected_call = pd.DataFrame(data=[[0., 4.93782966, 12.10940574],140                                           [-0.95695119, 3.6542734, 10.83437716],141                                           [-1.92644469, 2.2394442, 9.48628613],142                                           [-2.89823717, 0.51865057, 8.00651142],143                                           [-3.48668089, -2.09812288, 6.65124095]],144                                     index=self.vector_params["t"],145                                     columns=self.vector_params["S"])146        expected_call.rename_axis("S", axis='columns', inplace=True)147        expected_call.rename_axis("t", axis='rows', inplace=True)148        pd_test.assert_frame_equal(test_call, expected_call)149        # put150        test_put = self.put_opt.PnL(**self.vector_params)151        expected_put = pd.DataFrame(data=[[0., -5.06217034, -7.89059426],152                                          [-0.13341186, -5.52218727, -8.3420835],153                                          [-0.28579403, -6.11990513, -8.87306321],154                                          [-0.42005355, -7.0031658, -9.51530495],155                                          [-0.17750152, -8.78894351, -10.03957968]],156                                    index=self.vector_params["t"],157                                    columns=self.vector_params["S"])158        expected_put.rename_axis("S", axis='columns', inplace=True)159        expected_put.rename_axis("t", axis='rows', inplace=True)160        pd_test.assert_frame_equal(test_put, expected_put)161    def test_delta_scalar(self):162        """Test Delta - scalar case"""163        # call164        test_call = scalarize(self.call_opt.delta(**self.scalar_params))165        expected_call = 0.6054075531684143166        self.assertEqual(test_call, expected_call)167        # put168        test_put = scalarize(self.put_opt.delta(**self.scalar_params))169        expected_put = -0.3945924468315857170        self.assertEqual(test_put, expected_put)171    def test_delta_vector_np(self):172        """Test Delta - np.ndarray output case"""173        # call174        test_call = self.call_opt.delta(**self.vector_params)175        expected_call = np.array([[3.68466757e-01, 6.15283790e-01, 8.05697003e-01],176                                  [3.20097309e-01, 6.00702480e-01, 8.18280131e-01],177                                  [2.54167521e-01, 5.83663527e-01, 8.41522350e-01],178                                  [1.49152172e-01, 5.61339299e-01, 8.91560577e-01],179                                  [8.89758553e-04, 5.23098767e-01, 9.98343116e-01]])180        np_test.assert_allclose(test_call, expected_call)181        # put182        test_put = self.put_opt.delta(**self.vector_params)183        expected_put = np.array([[-0.63153324, -0.38471621, -0.194303],184                                 [-0.67990269, -0.39929752, -0.18171987],185                                 [-0.74583248, -0.41633647, -0.15847765],186                                 [-0.85084783, -0.4386607, -0.10843942],187                                 [-0.99911024, -0.47690123, -0.00165688]])188        np_test.assert_allclose(test_put, expected_put, rtol=5e-6)189    def test_delta_vector_df(self):190        """Test Delta - pd.DataFrame output case"""191        # request Pandas DataFrame as output format192        self.vector_params["np_output"] = False193        # call194        test_call = self.call_opt.delta(**self.vector_params)195        expected_call = pd.DataFrame(data=[[3.68466757e-01, 6.15283790e-01, 8.05697003e-01],196                                           [3.20097309e-01, 6.00702480e-01, 8.18280131e-01],197                                           [2.54167521e-01, 5.83663527e-01, 8.41522350e-01],198                                           [1.49152172e-01, 5.61339299e-01, 8.91560577e-01],199                                           [8.89758553e-04, 5.23098767e-01, 9.98343116e-01]],200                                     index=self.vector_params["t"],201                                     columns=self.vector_params["S"])202        expected_call.rename_axis("S", axis='columns', inplace=True)203        expected_call.rename_axis("t", axis='rows', inplace=True)204        pd_test.assert_frame_equal(test_call, expected_call)205        # put206        test_put = self.put_opt.delta(**self.vector_params)207        expected_put = pd.DataFrame(data=[[-0.63153324, -0.38471621, -0.194303],208                                          [-0.67990269, -0.39929752, -0.18171987],209                                          [-0.74583248, -0.41633647, -0.15847765],210                                          [-0.85084783, -0.4386607, -0.10843942],211                                          [-0.99911024, -0.47690123, -0.00165688]],212                                    index=self.vector_params["t"],213                                    columns=self.vector_params["S"])214        expected_put.rename_axis("S", axis='columns', inplace=True)215        expected_put.rename_axis("t", axis='rows', inplace=True)216        pd_test.assert_frame_equal(test_put, expected_put)217    def test_gamma_scalar(self):218        """Test Gamma - scalar case"""219        # call220        test_call = scalarize(self.call_opt.gamma(**self.scalar_params))221        expected_call = 0.025194958512498786222        self.assertEqual(test_call, expected_call)223        # put224        test_put = scalarize(self.put_opt.gamma(**self.scalar_params))225        expected_put = copy.deepcopy(expected_call)226        self.assertEqual(test_put, expected_put)227        # assert call and put gamma coincide228        self.assertEqual(test_call, test_put)229    def test_gamma_vector_np(self):230        """Test Gamma - np.ndarray output case"""231        # call232        test_call = self.call_opt.gamma(**self.vector_params)233        expected_call = np.array([[0.02501273, 0.02281654, 0.01493167],234                                  [0.02725456, 0.02648423, 0.01645793],235                                  [0.02950243, 0.03231528, 0.01820714],236                                  [0.02925862, 0.0446913, 0.01918121],237                                  [0.00101516, 0.12030889, 0.00146722]])238        np_test.assert_allclose(test_call, expected_call, rtol=5e-6)239        # put240        test_put = self.put_opt.gamma(**self.vector_params)241        expected_put = copy.deepcopy(expected_call)242        np_test.assert_allclose(test_put, expected_put, rtol=5e-6)243        # assert call and put gamma coincide244        np_test.assert_allclose(test_call, test_put)245    def test_gamma_vector_df(self):246        """Test Gamma - pd.DataFrame output case"""247        # request Pandas DataFrame as output format248        self.vector_params["np_output"] = False249        # call250        test_call = self.call_opt.gamma(**self.vector_params)251        expected_call = pd.DataFrame(data=[[0.02501273, 0.02281654, 0.01493167],252                                           [0.02725456, 0.02648423, 0.01645793],253                                           [0.02950243, 0.03231528, 0.01820714],254                                           [0.02925862, 0.0446913, 0.01918121],255                                           [0.00101516, 0.12030889, 0.00146722]],256                                     index=self.vector_params["t"],257                                     columns=self.vector_params["S"])258        expected_call.rename_axis("S", axis='columns', inplace=True)259        expected_call.rename_axis("t", axis='rows', inplace=True)260        pd_test.assert_frame_equal(test_call, expected_call)261        # put262        test_put = self.put_opt.gamma(**self.vector_params)263        expected_put = copy.deepcopy(expected_call)264        pd_test.assert_frame_equal(test_put, expected_put)265        # assert call and put gamma coincide266        pd_test.assert_frame_equal(test_call, test_put)267    def test_vega_scalar(self):268        """Test Vega - scalar case"""269        # call270        test_call = scalarize(self.call_opt.vega(**self.scalar_params))271        expected_call = 0.29405622811847903272        self.assertEqual(test_call, expected_call)273        # put274        test_put = scalarize(self.put_opt.vega(**self.scalar_params))275        expected_put = copy.deepcopy(expected_call)276        self.assertEqual(test_put, expected_put)277        # assert call and put vega coincide278        self.assertEqual(test_call, test_put)279    def test_vega_vector_np(self):280        """Test Vega - np.ndarray output case"""281        # call282        test_call = self.call_opt.vega(**self.vector_params)283        expected_call = np.array([[0.28419942, 0.32005661, 0.2534375],284                                  [0.23467293, 0.28153094, 0.21168961],285                                  [0.17415326, 0.23550311, 0.16055207],286                                  [0.09220072, 0.17386752, 0.09029355],287                                  [0.00045056, 0.06592268, 0.00097279]])288        np_test.assert_allclose(test_call, expected_call, rtol=1e-5)289        # put290        test_put = self.put_opt.vega(**self.vector_params)291        expected_put = copy.deepcopy(expected_call)292        np_test.assert_allclose(test_put, expected_put, rtol=1e-5)293        # assert call and put vega coincide294        np_test.assert_allclose(test_call, test_put)295    def test_vega_vector_df(self):296        """Test Vega - pd.DataFrame output case"""297        # request Pandas DataFrame as output format298        self.vector_params["np_output"] = False299        # call300        test_call = self.call_opt.vega(**self.vector_params)301        expected_call = pd.DataFrame(data=[[0.28419942, 0.32005661, 0.2534375],302                                           [0.23467293, 0.28153094, 0.21168961],303                                           [0.17415326, 0.23550311, 0.16055207],304                                           [0.09220072, 0.17386752, 0.09029355],305                                           [0.00045056, 0.06592268, 0.00097279]],306                                     index=self.vector_params["t"],307                                     columns=self.vector_params["S"])308        expected_call.rename_axis("S", axis='columns', inplace=True)309        expected_call.rename_axis("t", axis='rows', inplace=True)310        pd_test.assert_frame_equal(test_call, expected_call, check_less_precise=True)311        # put312        test_put = self.put_opt.vega(**self.vector_params)313        expected_put = copy.deepcopy(expected_call)314        pd_test.assert_frame_equal(test_put, expected_put, check_less_precise=True)315        # assert call and put vega coincide316        pd_test.assert_frame_equal(test_call, test_put)317    def test_theta_scalar(self):318        """Test Theta - scalar case"""319        # call320        test_call = scalarize(self.call_opt.theta(**self.scalar_params))321        expected_call = -0.021064685979455443322        self.assertEqual(test_call, expected_call)323        # put324        test_put = scalarize(self.put_opt.theta(**self.scalar_params))325        expected_put = -0.007759980665812141326        self.assertEqual(test_put, expected_put)327    def test_theta_vector_np(self):328        """Test Theta - np.ndarray output case"""329        # call330        test_call = self.call_opt.theta(**self.vector_params)331        expected_call = np.array([[-0.01516655, -0.01977662, -0.01990399],332                                  [-0.01569631, -0.02176239, -0.0212802],333                                  [-0.01601397, -0.02491789, -0.02297484],334                                  [-0.01474417, -0.03162919, -0.02457737],335                                  [-0.00046144, -0.0728981, -0.01462746]])336        np_test.assert_allclose(test_call, expected_call, rtol=5e-4)337        # put338        test_put = self.put_opt.theta(**self.vector_params)339        expected_put = np.array([[-0.00193999, -0.00655005, -0.00667743],340                                 [-0.00235693, -0.00842301, -0.00794082],341                                 [-0.00256266, -0.01146658, -0.00952353],342                                 [-0.00117813, -0.01806315, -0.01101133],343                                 [0.01321844, -0.05921823, -0.00094758]])344        np_test.assert_allclose(test_put, expected_put, rtol=1e-5)345    def test_theta_vector_df(self):346        """Test Theta - pd.DataFrame output case"""347        # request Pandas DataFrame as output format348        self.vector_params["np_output"] = False349        # call350        test_call = self.call_opt.theta(**self.vector_params)351        expected_call = pd.DataFrame(data=[[-0.01516655, -0.01977662, -0.01990399],352                                           [-0.01569631, -0.02176239, -0.0212802],353                                           [-0.01601397, -0.02491789, -0.02297484],354                                           [-0.01474417, -0.03162919, -0.02457737],355                                           [-0.00046144, -0.0728981, -0.01462746]],356                                     index=self.vector_params["t"],357                                     columns=self.vector_params["S"])358        expected_call.rename_axis("S", axis='columns', inplace=True)359        expected_call.rename_axis("t", axis='rows', inplace=True)360        pd_test.assert_frame_equal(test_call, expected_call, check_less_precise=True)361        # put362        test_put = self.put_opt.theta(**self.vector_params)363        expected_put = pd.DataFrame(data=[[-0.00193999, -0.00655005, -0.00667743],364                                          [-0.00235693, -0.00842301, -0.00794082],365                                          [-0.00256266, -0.01146658, -0.00952353],366                                          [-0.00117813, -0.01806315, -0.01101133],367                                          [0.01321844, -0.05921823, -0.00094758]],368                                    index=self.vector_params["t"],369                                    columns=self.vector_params["S"])370        expected_put.rename_axis("S", axis='columns', inplace=True)371        expected_put.rename_axis("t", axis='rows', inplace=True)372        pd_test.assert_frame_equal(test_put, expected_put, check_less_precise=True)373    def test_rho_scalar(self):374        """Test Rho - scalar case"""375        # call376        test_call = scalarize(self.call_opt.rho(**self.scalar_params))377        expected_call = 0.309243166487844378        self.assertEqual(test_call, expected_call)379        # put380        test_put = scalarize(self.put_opt.rho(**self.scalar_params))381        expected_put = -0.2575372798733608382        self.assertEqual(test_put, expected_put)383    def test_rho_vector_np(self):384        """Test Rho - np.ndarray output case"""385        # call386        test_call = self.call_opt.rho(**self.vector_params)387        expected_call = np.array([[2.08128741e-01, 3.72449469e-01, 5.12209444e-01],388                                  [1.39670999e-01, 2.81318986e-01, 4.02292404e-01],389                                  [7.76651463e-02, 1.91809707e-01, 2.90026614e-01],390                                  [2.49657984e-02, 1.01399432e-01, 1.68411513e-01],391                                  [2.17415573e-05, 1.39508485e-02, 2.73093423e-02]])392        np_test.assert_allclose(test_call, expected_call, rtol=1e-5)393        # put394        test_put = self.put_opt.rho(**self.vector_params)395        expected_put = np.array([[-4.69071412e-01, -3.04750685e-01, -1.64990710e-01],396                                 [-3.77896910e-01, -2.36248923e-01, -1.15275505e-01],397                                 [-2.80139757e-01, -1.65995197e-01, -6.77782897e-02],398                                 [-1.67672008e-01, -9.12383748e-02, -2.42262934e-02],399                                 [-2.73380139e-02, -1.34089069e-02, -5.04131783e-05]])400        np_test.assert_allclose(test_put, expected_put, rtol=1e-5)401    def test_rho_vector_df(self):402        """Test Theta - pd.DataFrame output case"""403        # request Pandas DataFrame as output format404        self.vector_params["np_output"] = False405        # call406        test_call = self.call_opt.rho(**self.vector_params)407        expected_call = pd.DataFrame(data=[[2.08128741e-01, 3.72449469e-01, 5.12209444e-01],408                                           [1.39670999e-01, 2.81318986e-01, 4.02292404e-01],409                                           [7.76651463e-02, 1.91809707e-01, 2.90026614e-01],410                                           [2.49657984e-02, 1.01399432e-01, 1.68411513e-01],411                                           [2.17415573e-05, 1.39508485e-02, 2.73093423e-02]],412                                     index=self.vector_params["t"],413                                     columns=self.vector_params["S"])414        expected_call.rename_axis("S", axis='columns', inplace=True)415        expected_call.rename_axis("t", axis='rows', inplace=True)416        pd_test.assert_frame_equal(test_call, expected_call, check_less_precise=True)417        # put418        test_put = self.put_opt.rho(**self.vector_params)419        expected_put = pd.DataFrame(data=[[-4.69071412e-01, -3.04750685e-01, -1.64990710e-01],420                                          [-3.77896910e-01, -2.36248923e-01, -1.15275505e-01],421                                          [-2.80139757e-01, -1.65995197e-01, -6.77782897e-02],422                                          [-1.67672008e-01, -9.12383748e-02, -2.42262934e-02],423                                          [-2.73380139e-02, -1.34089069e-02, -5.04131783e-05]],424                                    index=self.vector_params["t"],425                                    columns=self.vector_params["S"])426        expected_put.rename_axis("S", axis='columns', inplace=True)427        expected_put.rename_axis("t", axis='rows', inplace=True)428        pd_test.assert_frame_equal(test_put, expected_put, check_less_precise=True)429    def test_Implied_Vol_scalar(self):430        """Test Implied Volatility - scalar case"""431        # call432        test_call = scalarize(self.call_opt.implied_volatility(**self.scalar_params))433        expected_call = 0.2434        self.assertAlmostEqual(test_call, expected_call)435        # put436        test_put = scalarize(self.put_opt.implied_volatility(**self.scalar_params))437        expected_put = 0.2438        self.assertAlmostEqual(test_put, expected_put)439    def test_Implied_Vol_vector_np(self):440        """Test Implied Volatility - np.ndarray output case"""441        # call442        test_call = self.call_opt.implied_volatility(**self.vector_params)443        expected_call = 0.2 + np.zeros_like(test_call)444        np_test.assert_allclose(test_call, expected_call, rtol=1e-5)445        # put446        test_put = self.put_opt.implied_volatility(**self.vector_params)447        expected_put = 0.2 + np.zeros_like(test_put)448        np_test.assert_allclose(test_put, expected_put, rtol=1e-5)449    def test_Implied_Vol_vector_df(self):450        """Test Implied Volatility - pd.DataFrame output case"""451        # request Pandas DataFrame as output format452        self.vector_params["np_output"] = False453        # call454        test_call = self.call_opt.implied_volatility(**self.vector_params)455        expected_call = pd.DataFrame(data=0.2 + np.zeros_like(test_call),456                                     index=self.vector_params["t"],457                                     columns=self.vector_params["S"])458        expected_call.rename_axis("S", axis='columns', inplace=True)459        expected_call.rename_axis("t", axis='rows', inplace=True)460        pd_test.assert_frame_equal(test_call, expected_call, check_less_precise=True)461        # put462        test_put = self.put_opt.implied_volatility(**self.vector_params)463        expected_put = pd.DataFrame(data=0.2 + np.zeros_like(test_put),464                                    index=self.vector_params["t"],465                                    columns=self.vector_params["S"])466        expected_put.rename_axis("S", axis='columns', inplace=True)467        expected_put.rename_axis("t", axis='rows', inplace=True)468        pd_test.assert_frame_equal(test_put, expected_put, check_less_precise=True)469    def test_complex_parameters_setup(self):470        """471        Test complex parameter setup:472        (S scalar, K and t vector, sigma distributed as Kxt grid, r distributed as Kxt grid)473        """474        # call475        test_call_price = self.call_opt.price(**self.complex_params)476        test_call_PnL = self.call_opt.PnL(**self.complex_params)477        test_call_delta = self.call_opt.delta(**self.complex_params)478        test_call_gamma = self.call_opt.gamma(**self.complex_params)479        test_call_vega = self.call_opt.vega(**self.complex_params)480        test_call_theta = self.call_opt.theta(**self.complex_params)481        test_call_rho = self.call_opt.rho(**self.complex_params)482        test_call_iv = self.call_opt.implied_volatility(**self.complex_params)483        expected_call_price = pd.DataFrame(data=[[15.55231058, 9.40714796, 9.87150919, 10.97983523],484                                                 [20.05777231, 16.15277891, 16.02977848, 16.27588191],485                                                 [15.81433361, 8.75227505, 6.65476799, 5.19785143]],486                                           index=self.complex_params["t"],487                                           columns=self.complex_params["K"])488        expected_call_price.rename_axis("K", axis='columns', inplace=True)489        expected_call_price.rename_axis("t", axis='rows', inplace=True)490        expected_call_PnL = pd.DataFrame(data=[[12.06490811, 5.91974549, 6.38410672, 7.49243276],491                                               [16.57036984, 12.66537644, 12.54237601, 12.78847944],492                                               [12.32693114, 5.26487258, 3.16736552, 1.71044896]],493                                         index=self.complex_params["t"],494                                         columns=self.complex_params["K"])495        expected_call_PnL.rename_axis("K", axis='columns', inplace=True)496        expected_call_PnL.rename_axis("t", axis='rows', inplace=True)497        expected_call_delta = pd.DataFrame(data=[[0.98935079, 0.69453583, 0.58292013, 0.53579465],498                                                 [0.79256302, 0.65515368, 0.60705014, 0.57529078],499                                                 [0.90573251, 0.6717088, 0.54283905, 0.43788167]],500                                           index=self.complex_params["t"],501                                           columns=self.complex_params["K"])502        expected_call_delta.rename_axis("K", axis='columns', inplace=True)503        expected_call_delta.rename_axis("t", axis='rows', inplace=True)504        expected_call_gamma = pd.DataFrame(data=[[0.00373538, 0.02325203, 0.01726052, 0.01317896],505                                                 [0.01053321, 0.01130107, 0.01011038, 0.0090151],506                                                 [0.01253481, 0.0242596, 0.02420515, 0.02204576]],507                                           index=self.complex_params["t"],508                                           columns=self.complex_params["K"])509        expected_call_gamma.rename_axis("K", axis='columns', inplace=True)510        expected_call_gamma.rename_axis("t", axis='rows', inplace=True)511        expected_call_vega = pd.DataFrame(data=[[0.02122104, 0.26419398, 0.29417607, 0.29948378],512                                                [0.15544424, 0.20013116, 0.20888592, 0.2128651],513                                                [0.02503527, 0.05383637, 0.05908709, 0.05870816]],514                                          index=self.complex_params["t"],515                                          columns=self.complex_params["K"])516        expected_call_vega.rename_axis("K", axis='columns', inplace=True)517        expected_call_vega.rename_axis("t", axis='rows', inplace=True)518        expected_call_theta = pd.DataFrame(data=[[-0.00242788, -0.01322973, -0.02073753, -0.02747845],519                                                 [-0.03624253, -0.0521798, -0.06237363, -0.07180046],520                                                 [-0.12885912, -0.28334665, -0.33769702, -0.36349655]],521                                           index=self.complex_params["t"],522                                           columns=self.complex_params["K"])523        expected_call_theta.rename_axis("K", axis='columns', inplace=True)524        expected_call_theta.rename_axis("t", axis='rows', inplace=True)525        expected_call_rho = pd.DataFrame(data=[[0.51543152, 0.37243495, 0.29872256, 0.26120194],526                                               [0.18683002, 0.15599644, 0.14066931, 0.12935721],527                                               [0.01800044, 0.0141648, 0.01156185, 0.00937301]],528                                         index=self.complex_params["t"],529                                         columns=self.complex_params["K"])530        expected_call_rho.rename_axis("K", axis='columns', inplace=True)531        expected_call_rho.rename_axis("t", axis='rows', inplace=True)532        expected_call_iv = pd.DataFrame(data=self.complex_params["sigma"],533                                        index=self.complex_params["t"],534                                        columns=self.complex_params["K"])535        expected_call_iv.rename_axis("K", axis='columns', inplace=True)536        expected_call_iv.rename_axis("t", axis='rows', inplace=True)537        pd_test.assert_frame_equal(test_call_price, expected_call_price)538        pd_test.assert_frame_equal(test_call_PnL, expected_call_PnL)539        pd_test.assert_frame_equal(test_call_delta, expected_call_delta)540        pd_test.assert_frame_equal(test_call_gamma, expected_call_gamma)541        pd_test.assert_frame_equal(test_call_vega, expected_call_vega)542        pd_test.assert_frame_equal(test_call_theta, expected_call_theta)543        pd_test.assert_frame_equal(test_call_rho, expected_call_rho)544        pd_test.assert_frame_equal(test_call_iv, expected_call_iv)545        # put546        test_put_price = self.put_opt.price(**self.complex_params)547        test_put_PnL = self.put_opt.PnL(**self.complex_params)548        test_put_delta = self.put_opt.delta(**self.complex_params)549        test_put_gamma = self.put_opt.gamma(**self.complex_params)550        test_put_vega = self.put_opt.vega(**self.complex_params)551        test_put_theta = self.put_opt.theta(**self.complex_params)552        test_put_rho = self.put_opt.rho(**self.complex_params)553        test_put_iv = self.put_opt.implied_volatility(**self.complex_params)554        expected_put_price = pd.DataFrame(data=[[0.02812357, 3.22314287, 7.9975943, 13.35166847],555                                                [3.70370639, 9.31459014, 13.76319167, 18.54654119],556                                                [0.62962992, 3.51971706, 6.38394341, 9.88603552]],557                                          index=self.complex_params["t"],558                                          columns=self.complex_params["K"])559        expected_put_price.rename_axis("K", axis='columns', inplace=True)560        expected_put_price.rename_axis("t", axis='rows', inplace=True)561        expected_put_PnL = pd.DataFrame(data=[[-10.01320701, -6.81818772, -2.04373628, 3.31033788],562                                              [-6.3376242, -0.72674045, 3.72186108, 8.5052106],563                                              [-9.41170067, -6.52161353, -3.65738717, -0.15529507]],564                                        index=self.complex_params["t"],565                                        columns=self.complex_params["K"])566        expected_put_PnL.rename_axis("K", axis='columns', inplace=True)567        expected_put_PnL.rename_axis("t", axis='rows', inplace=True)568        expected_put_delta = pd.DataFrame(data=[[-0.01064921, -0.30546417, -0.41707987, -0.46420535],569                                                [-0.20743698, -0.34484632, -0.39294986, -0.42470922],570                                                [-0.09426749, -0.3282912, -0.45716095, -0.56211833]],571                                          index=self.complex_params["t"],572                                          columns=self.complex_params["K"])573        expected_put_delta.rename_axis("K", axis='columns', inplace=True)574        expected_put_delta.rename_axis("t", axis='rows', inplace=True)575        expected_put_gamma = copy.deepcopy(expected_call_gamma)576        expected_put_vega = copy.deepcopy(expected_call_vega)577        expected_put_theta = pd.DataFrame(data=[[-0.00038744, -0.00863707, -0.01349429, -0.01735551],578                                                [-0.02615404, -0.03850937, -0.04554804, -0.05157676],579                                                [-0.11041151, -0.26012269, -0.31065535, -0.33236619]],580                                          index=self.complex_params["t"],581                                          columns=self.complex_params["K"])582        expected_put_theta.rename_axis("K", axis='columns', inplace=True)583        expected_put_theta.rename_axis("t", axis='rows', inplace=True)584        expected_put_rho = pd.DataFrame(data=[[-0.00691938, -0.21542518, -0.31936724, -0.38666626],585                                              [-0.08152366, -0.14703153, -0.17901683, -0.2068619],586                                              [-0.00249691, -0.00905916, -0.01302149, -0.01656895]],587                                        index=self.complex_params["t"],588                                        columns=self.complex_params["K"])589        expected_put_rho.rename_axis("K", axis='columns', inplace=True)590        expected_put_rho.rename_axis("t", axis='rows', inplace=True)591        expected_put_iv = pd.DataFrame(data=self.complex_params["sigma"],592                                       index=self.complex_params["t"],593                                       columns=self.complex_params["K"])594        expected_put_iv.rename_axis("K", axis='columns', inplace=True)595        expected_put_iv.rename_axis("t", axis='rows', inplace=True)596        pd_test.assert_frame_equal(test_put_price, expected_put_price)597        pd_test.assert_frame_equal(test_put_PnL, expected_put_PnL)598        pd_test.assert_frame_equal(test_put_delta, expected_put_delta)599        pd_test.assert_frame_equal(test_put_gamma, expected_put_gamma)600        pd_test.assert_frame_equal(test_put_vega, expected_put_vega)601        pd_test.assert_frame_equal(test_put_theta, expected_put_theta, check_less_precise=True)602        pd_test.assert_frame_equal(test_put_rho, expected_put_rho)603        pd_test.assert_frame_equal(test_put_iv, expected_put_iv)604        # test gamma and vega consistency605        pd_test.assert_frame_equal(test_call_gamma, test_put_gamma)606        pd_test.assert_frame_equal(test_call_vega, test_put_vega)607class TestDigitalOption(unittest.TestCase):608    """Class to test public methods of DigitalOption class"""609    def setUp(self) -> None:610        warnings.filterwarnings("ignore")611        # common market environment612        mkt_env = MarketEnvironment()613        # option objects614        self.call_opt = DigitalOption(mkt_env)615        self.put_opt = DigitalOption(mkt_env, option_type="put")616        # pricing parameters617        S_scalar = 100618        S_vector = [90, 100, 110]619        t_scalar_string = "01-06-2020"620        t_date_range = pd.date_range(start="2020-04-19", end="2020-12-21", periods=5)621        # common pricing parameter setup622        common_params = {"np_output": True, "minimization_method": "Least-Squares"}623        # scalar parameters setup624        self.scalar_params = copy.deepcopy(common_params)625        self.scalar_params["S"] = S_scalar626        self.scalar_params["t"] = t_scalar_string627        # vector parameters setup628        self.vector_params = copy.deepcopy(common_params)629        self.vector_params["S"] = S_vector630        self.vector_params["t"] = t_date_range631        # complex pricing parameter setup632        # (S scalar, K and t vector, sigma distributed as Kxt grid, r distributed as Kxt grid)633        K_vector = [75, 85, 90, 95]634        mK = len(K_vector)635        n = 3636        sigma_grid_K = np.array([0.1 * (1 + i) for i in range(mK * n)]).reshape(n, mK)637        r_grid_K = np.array([0.01 * (1 + i) for i in range(mK * n)]).reshape(n, mK)638        self.complex_params = {"S": S_vector[0],639                               "K": K_vector,640                               "t": pd.date_range(start="2020-04-19", end="2020-12-21", periods=n),641                               "sigma": sigma_grid_K,642                               "r": r_grid_K,643                               "np_output": False,644                               "minimization_method": "Least-Squares"}645    def test_price_scalar(self):646        """Test price - scalar case"""647        # call648        test_call = scalarize(self.call_opt.price(**self.scalar_params))649        expected_call = 0.529923736000296650        self.assertEqual(test_call, expected_call)651        # put652        test_put = scalarize(self.put_opt.price(**self.scalar_params))653        expected_put = 0.4413197518956652654        self.assertEqual(test_put, expected_put)655    def test_price_vector_np(self):656        """Test price - np.ndarray output case"""657        # call658        test_call = self.call_opt.price(**self.vector_params)659        expected_call = np.array([[2.96746057e-01, 5.31031469e-01, 7.30298621e-01],660                                  [2.62783065e-01, 5.29285722e-01, 7.56890348e-01],661                                  [2.13141191e-01, 5.26395060e-01, 7.95937699e-01],662                                  [1.28345302e-01, 5.21278768e-01, 8.65777496e-01],663                                  [7.93566840e-04, 5.09205971e-01, 9.96790994e-01]])664        np_test.assert_allclose(test_call, expected_call)665        # put666        test_put = self.put_opt.price(**self.vector_params)667        expected_put = np.array([[0.66879322, 0.43450781, 0.23524066],668                                 [0.71099161, 0.44448895, 0.21688433],669                                 [0.7688046, 0.45555073, 0.18600809],670                                 [0.86197582, 0.46904235, 0.12454362],671                                 [0.99783751, 0.4894251, 0.00184008]])672        np_test.assert_allclose(test_put, expected_put, rtol=1e-6)673    def test_price_vector_df(self):674        """Test price - pd.DataFrame output case"""675        # request Pandas DataFrame as output format676        self.vector_params["np_output"] = False677        # call678        test_call = self.call_opt.price(**self.vector_params)679        expected_call = pd.DataFrame(data=[[2.96746057e-01, 5.31031469e-01, 7.30298621e-01],680                                           [2.62783065e-01, 5.29285722e-01, 7.56890348e-01],681                                           [2.13141191e-01, 5.26395060e-01, 7.95937699e-01],682                                           [1.28345302e-01, 5.21278768e-01, 8.65777496e-01],683                                           [7.93566840e-04, 5.09205971e-01, 9.96790994e-01]],684                                     index=self.vector_params["t"],685                                     columns=self.vector_params["S"])686        expected_call.rename_axis("S", axis='columns', inplace=True)687        expected_call.rename_axis("t", axis='rows', inplace=True)688        pd_test.assert_frame_equal(test_call, expected_call)689        # put690        test_put = self.put_opt.price(**self.vector_params)691        expected_put = pd.DataFrame(data=[[0.66879322, 0.43450781, 0.23524066],692                                          [0.71099161, 0.44448895, 0.21688433],693                                          [0.7688046, 0.45555073, 0.18600809],694                                          [0.86197582, 0.46904235, 0.12454362],695                                          [0.99783751, 0.4894251, 0.00184008]],696                                    index=self.vector_params["t"],697                                    columns=self.vector_params["S"])698        expected_put.rename_axis("S", axis='columns', inplace=True)699        expected_put.rename_axis("t", axis='rows', inplace=True)700        pd_test.assert_frame_equal(test_put, expected_put)701    def test_PnL_scalar(self):702        """Test P&L - scalar case"""703        # call704        test_call = scalarize(self.call_opt.PnL(**self.scalar_params))705        expected_call = 0.23317767915072352706        self.assertEqual(test_call, expected_call)707        # put708        test_put = scalarize(self.put_opt.PnL(**self.scalar_params))709        expected_put = -0.22747347241997717710        self.assertEqual(test_put, expected_put)711    def test_PnL_vector_np(self):712        """Test P&L - np.ndarray output case"""713        # call714        test_call = self.call_opt.PnL(**self.vector_params)715        expected_call = np.array([[0., 0.23428541, 0.43355256],716                                  [-0.03396299, 0.23253966, 0.46014429],717                                  [-0.08360487, 0.229649, 0.49919164],718                                  [-0.16840076, 0.22453271, 0.56903144],719                                  [-0.29595249, 0.21245991, 0.70004494]])720        np_test.assert_allclose(test_call, expected_call)721        # put722        test_put = self.put_opt.PnL(**self.vector_params)723        expected_put = np.array([[0., -0.23428541, -0.43355256],724                                 [0.04219839, -0.22430427, -0.4519089],725                                 [0.10001137, -0.2132425, -0.48278514],726                                 [0.19318259, -0.19975088, -0.5442496],727                                 [0.32904428, -0.17936812, -0.66695314]])728        np_test.assert_allclose(test_put, expected_put, rtol=1e-6)729    def test_PnL_vector_df(self):730        """Test P&L - pd.DataFrame output case"""731        # request Pandas DataFrame as output format732        self.vector_params["np_output"] = False733        # call734        test_call = self.call_opt.PnL(**self.vector_params)735        expected_call = pd.DataFrame(data=[[0., 0.23428541, 0.43355256],736                                           [-0.03396299, 0.23253966, 0.46014429],737                                           [-0.08360487, 0.229649, 0.49919164],738                                           [-0.16840076, 0.22453271, 0.56903144],739                                           [-0.29595249, 0.21245991, 0.70004494]],740                                     index=self.vector_params["t"],741                                     columns=self.vector_params["S"])742        expected_call.rename_axis("S", axis='columns', inplace=True)743        expected_call.rename_axis("t", axis='rows', inplace=True)744        pd_test.assert_frame_equal(test_call, expected_call)745        # put746        test_put = self.put_opt.PnL(**self.vector_params)747        expected_put = pd.DataFrame(data=[[0., -0.23428541, -0.43355256],748                                          [0.04219839, -0.22430427, -0.4519089],749                                          [0.10001137, -0.2132425, -0.48278514],750                                          [0.19318259, -0.19975088, -0.5442496],751                                          [0.32904428, -0.17936812, -0.66695314]],752                                    index=self.vector_params["t"],753                                    columns=self.vector_params["S"])754        expected_put.rename_axis("S", axis='columns', inplace=True)755        expected_put.rename_axis("t", axis='rows', inplace=True)756        pd_test.assert_frame_equal(test_put, expected_put)757    def test_delta_scalar(self):758        """Test Delta - scalar case"""759        # call760        test_call = scalarize(self.call_opt.delta(**self.scalar_params))761        expected_call = 0.025194958512498786762        self.assertEqual(test_call, expected_call)763        # put764        test_put = scalarize(self.put_opt.delta(**self.scalar_params))765        expected_put = copy.deepcopy(-expected_call)766        self.assertEqual(test_put, expected_put)767        # assert call and put delta consistency768        self.assertEqual(test_call, -test_put)769    def test_delta_vector_np(self):770        """Test Delta - np.ndarray output case"""771        # call772        test_call = self.call_opt.delta(**self.vector_params)773        expected_call = np.array([[0.02251146, 0.02281654, 0.01642484],774                                  [0.0245291, 0.02648423, 0.01810373],775                                  [0.02655219, 0.03231528, 0.02002786],776                                  [0.02633276, 0.0446913, 0.02109933],777                                  [0.00091364, 0.12030889, 0.00161394]])778        np_test.assert_allclose(test_call, expected_call, rtol=5e-6)779        # put780        test_put = self.put_opt.delta(**self.vector_params)781        expected_put = copy.deepcopy(-expected_call)782        np_test.assert_allclose(test_put, expected_put, rtol=5e-6)783        # assert call and put delta consistency784        np_test.assert_allclose(test_call, -test_put)785    def test_delta_vector_df(self):786        """Test Delta - pd.DataFrame output case"""787        # request Pandas DataFrame as output format788        self.vector_params["np_output"] = False789        # call790        test_call = self.call_opt.delta(**self.vector_params)791        expected_call = pd.DataFrame(data=[[0.02251146, 0.02281654, 0.01642484],792                                           [0.0245291, 0.02648423, 0.01810373],793                                           [0.02655219, 0.03231528, 0.02002786],794                                           [0.02633276, 0.0446913, 0.02109933],795                                           [0.00091364, 0.12030889, 0.00161394]],796                                     index=self.vector_params["t"],797                                     columns=self.vector_params["S"])798        expected_call.rename_axis("S", axis='columns', inplace=True)799        expected_call.rename_axis("t", axis='rows', inplace=True)800        pd_test.assert_frame_equal(test_call, expected_call)801        # put802        test_put = self.put_opt.delta(**self.vector_params)803        expected_put = copy.deepcopy(-expected_call)804        pd_test.assert_frame_equal(test_put, expected_put)805        # assert call and put delta consistency806        pd_test.assert_frame_equal(test_call, -test_put)807    def test_gamma_scalar(self):808        """Test Gamma - scalar case"""809        # call810        test_call = scalarize(self.call_opt.gamma(**self.scalar_params))811        expected_call = -0.0004409117739687288812        self.assertEqual(test_call, expected_call)813        # put814        test_put = scalarize(self.put_opt.gamma(**self.scalar_params))815        expected_put = copy.deepcopy(-expected_call)816        self.assertEqual(test_put, expected_put)817        # assert call and put gamma coincide818        self.assertEqual(test_call, -test_put)819    def test_gamma_vector_np(self):820        """Test Gamma - np.ndarray output case"""821        # call822        test_call = self.call_opt.gamma(**self.vector_params)823        expected_call = np.array([[0.00050164, -0.00039929, -0.00076858],824                                  [0.00087371, -0.00046347, -0.00102583],825                                  [0.00161634, -0.00056552, -0.00150922],826                                  [0.0034499, -0.0007821, -0.00268525],827                                  [0.00095822, -0.00210541, -0.00130173]])828        np_test.assert_allclose(test_call, expected_call, rtol=1e-5)829        # put830        test_put = self.put_opt.gamma(**self.vector_params)831        expected_put = copy.deepcopy(-expected_call)832        np_test.assert_allclose(test_put, expected_put, rtol=1e-5)833        # assert call and put gamma coincide834        np_test.assert_allclose(test_call, -test_put)835    def test_gamma_vector_df(self):836        """Test Gamma - pd.DataFrame output case"""837        # request Pandas DataFrame as output format838        self.vector_params["np_output"] = False839        # call840        test_call = self.call_opt.gamma(**self.vector_params)841        expected_call = pd.DataFrame(data=[[0.00050164, -0.00039929, -0.00076858],842                                           [0.00087371, -0.00046347, -0.00102583],843                                           [0.00161634, -0.00056552, -0.00150922],844                                           [0.0034499, -0.0007821, -0.00268525],845                                           [0.00095822, -0.00210541, -0.00130173]],846                                     index=self.vector_params["t"],847                                     columns=self.vector_params["S"])848        expected_call.rename_axis("S", axis='columns', inplace=True)849        expected_call.rename_axis("t", axis='rows', inplace=True)850        pd_test.assert_frame_equal(test_call, expected_call, check_less_precise=True)851        # put852        test_put = self.put_opt.gamma(**self.vector_params)853        expected_put = copy.deepcopy(-expected_call)854        pd_test.assert_frame_equal(test_put, expected_put, check_less_precise=True)855        # assert call and put gamma coincide856        pd_test.assert_frame_equal(test_call, -test_put)857    def test_vega_scalar(self):858        """Test Vega - scalar case"""859        # call860        test_call = scalarize(self.call_opt.vega(**self.scalar_params))861        expected_call = -0.005145983992073383862        self.assertEqual(test_call, expected_call)863        # put864        test_put = scalarize(self.put_opt.vega(**self.scalar_params))865        expected_put = copy.deepcopy(-expected_call)866        self.assertEqual(test_put, expected_put)867        # assert call and put vega coincide868        self.assertEqual(test_call, -test_put)869    def test_vega_vector_np(self):870        """Test Vega - np.ndarray output case"""871        # call872        test_call = self.call_opt.vega(**self.vector_params)873        expected_call = np.array([[0.00569969, -0.00560099, -0.01304515],874                                  [0.00752302, -0.00492679, -0.01319465],875                                  [0.0095413, -0.0041213, -0.01330838],876                                  [0.01087143, -0.00304268, -0.01264053],877                                  [0.00042529, -0.00115365, -0.00086306]])878        np_test.assert_allclose(test_call, expected_call, rtol=1e-5)879        # put880        test_put = self.put_opt.vega(**self.vector_params)881        expected_put = copy.deepcopy(-expected_call)882        np_test.assert_allclose(test_put, expected_put, rtol=5e-5)883        # assert call and put vega coincide884        np_test.assert_allclose(test_call, -test_put)885    def test_vega_vector_df(self):886        """Test Vega - pd.DataFrame output case"""887        # request Pandas DataFrame as output format888        self.vector_params["np_output"] = False889        # call890        test_call = self.call_opt.vega(**self.vector_params)891        expected_call = pd.DataFrame(data=[[0.00569969, -0.00560099, -0.01304515],892                                           [0.00752302, -0.00492679, -0.01319465],893                                           [0.0095413, -0.0041213, -0.01330838],894                                           [0.01087143, -0.00304268, -0.01264053],895                                           [0.00042529, -0.00115365, -0.00086306]],896                                     index=self.vector_params["t"],897                                     columns=self.vector_params["S"])898        expected_call.rename_axis("S", axis='columns', inplace=True)899        expected_call.rename_axis("t", axis='rows', inplace=True)900        pd_test.assert_frame_equal(test_call, expected_call, check_less_precise=True)901        # put902        test_put = self.put_opt.vega(**self.vector_params)903        expected_put = copy.deepcopy(-expected_call)904        pd_test.assert_frame_equal(test_put, expected_put, check_less_precise=True)905        # assert call and put vega coincide906        pd_test.assert_frame_equal(test_call, -test_put)907    def test_theta_scalar(self):908        """Test Theta - scalar case"""909        # call910        test_call = scalarize(self.call_opt.theta(**self.scalar_params))911        expected_call = -3.094863279105034e-05912        self.assertEqual(test_call, expected_call)913        # put914        test_put = scalarize(self.put_opt.theta(**self.scalar_params))915        expected_put = 0.00016399568592748338916        self.assertEqual(test_put, expected_put)917    def test_theta_vector_np(self):918        """Test Theta - np.ndarray output case"""919        # call920        test_call = self.call_opt.theta(**self.vector_params)921        expected_call = np.array([[-4.59532646e-04, -2.10225482e-05, 3.62119705e-04],922                                  [-6.54200322e-04, -3.63343877e-05, 5.11024346e-04],923                                  [-1.01554953e-03, -6.06935961e-05, 8.07873242e-04],924                                  [-1.83825681e-03, -1.12254822e-04, 1.58102099e-03],925                                  [-4.36449645e-04, -4.24665854e-04, 9.75289889e-04]])926        np_test.assert_allclose(test_call, expected_call)927        # put928        test_put = self.put_opt.theta(**self.vector_params)929        expected_put = np.array([[0.0005918, 0.00015329, -0.00022985],930                                 [0.00078759, 0.00016973, -0.00037763],931                                 [0.00115006, 0.00019521, -0.00067336],932                                 [0.00197392, 0.00024792, -0.00144536],933                                 [0.00057325, 0.00056146, -0.00083849]])934        np_test.assert_allclose(test_put, expected_put, rtol=5e-5)935    def test_theta_vector_df(self):936        """Test Theta - pd.DataFrame output case"""937        # request Pandas DataFrame as output format938        self.vector_params["np_output"] = False939        # call940        test_call = self.call_opt.theta(**self.vector_params)941        expected_call = pd.DataFrame(data=[[-4.59532646e-04, -2.10225482e-05, 3.62119705e-04],942                                           [-6.54200322e-04, -3.63343877e-05, 5.11024346e-04],943                                           [-1.01554953e-03, -6.06935961e-05, 8.07873242e-04],944                                           [-1.83825681e-03, -1.12254822e-04, 1.58102099e-03],945                                           [-4.36449645e-04, -4.24665854e-04, 9.75289889e-04]],946                                     index=self.vector_params["t"],947                                     columns=self.vector_params["S"])948        expected_call.rename_axis("S", axis='columns', inplace=True)949        expected_call.rename_axis("t", axis='rows', inplace=True)950        pd_test.assert_frame_equal(test_call, expected_call, check_less_precise=True)951        # put952        test_put = self.put_opt.theta(**self.vector_params)953        expected_put = pd.DataFrame(data=[[0.0005918, 0.00015329, -0.00022985],954                                          [0.00078759, 0.00016973, -0.00037763],955                                          [0.00115006, 0.00019521, -0.00067336],956                                          [0.00197392, 0.00024792, -0.00144536],957                                          [0.00057325, 0.00056146, -0.00083849]],958                                    index=self.vector_params["t"],959                                    columns=self.vector_params["S"])960        expected_put.rename_axis("S", axis='columns', inplace=True)961        expected_put.rename_axis("t", axis='rows', inplace=True)962        pd_test.assert_frame_equal(test_put, expected_put, check_less_precise=True)963    def test_rho_scalar(self):964        """Test Rho - scalar case"""965        # call966        test_call = scalarize(self.call_opt.rho(**self.scalar_params))967        expected_call = 0.011610379741045512968        self.assertEqual(test_call, expected_call)969        # put970        test_put = scalarize(self.put_opt.rho(**self.scalar_params))971        expected_put = -0.01727818420465756972        self.assertEqual(test_put, expected_put)973    def test_rho_vector_np(self):974        """Test Rho - np.ndarray output case"""975        # call976        test_call = self.call_opt.rho(**self.vector_params)977        expected_call = np.array([[1.21286837e-02, 1.22783358e-02, 7.54978064e-03],978                                  [1.03369366e-02, 1.12633572e-02, 6.56155667e-03],979                                  [7.93101136e-03, 9.85705868e-03, 5.12733711e-03],980                                  [4.36037779e-03, 7.67938163e-03, 2.83056260e-03],981                                  [2.23107982e-05, 3.15662549e-03, -2.24454016e-04]])982        np_test.assert_allclose(test_call, expected_call)983        # put984        test_put = self.put_opt.rho(**self.vector_params)985        expected_put = np.array([[-1.89006853e-02, -1.90503374e-02, -1.43217822e-02],986                                 [-1.55126157e-02, -1.64390362e-02, -1.17372358e-02],987                                 [-1.15090604e-02, -1.34351077e-02, -8.70538615e-03],988                                 [-6.28675585e-03, -9.60575970e-03, -4.75694066e-03],989                                 [-2.95908353e-04, -3.43022305e-03, -4.91435388e-05]])990        np_test.assert_allclose(test_put, expected_put)991    def test_rho_vector_df(self):992        """Test Theta - pd.DataFrame output case"""993        # request Pandas DataFrame as output format994        self.vector_params["np_output"] = False995        # call996        test_call = self.call_opt.rho(**self.vector_params)997        expected_call = pd.DataFrame(data=[[1.21286837e-02, 1.22783358e-02, 7.54978064e-03],998                                           [1.03369366e-02, 1.12633572e-02, 6.56155667e-03],999                                           [7.93101136e-03, 9.85705868e-03, 5.12733711e-03],1000                                           [4.36037779e-03, 7.67938163e-03, 2.83056260e-03],1001                                           [2.23107982e-05, 3.15662549e-03, -2.24454016e-04]],1002                                     index=self.vector_params["t"],1003                                     columns=self.vector_params["S"])1004        expected_call.rename_axis("S", axis='columns', inplace=True)1005        expected_call.rename_axis("t", axis='rows', inplace=True)1006        pd_test.assert_frame_equal(test_call, expected_call)1007        # put1008        test_put = self.put_opt.rho(**self.vector_params)1009        expected_put = pd.DataFrame(data=[[-1.89006853e-02, -1.90503374e-02, -1.43217822e-02],1010                                          [-1.55126157e-02, -1.64390362e-02, -1.17372358e-02],1011                                          [-1.15090604e-02, -1.34351077e-02, -8.70538615e-03],1012                                          [-6.28675585e-03, -9.60575970e-03, -4.75694066e-03],1013                                          [-2.95908353e-04, -3.43022305e-03, -4.91435388e-05]],1014                                    index=self.vector_params["t"],1015                                    columns=self.vector_params["S"])1016        expected_put.rename_axis("S", axis='columns', inplace=True)1017        expected_put.rename_axis("t", axis='rows', inplace=True)1018        pd_test.assert_frame_equal(test_put, expected_put)1019    def test_Implied_Vol_scalar(self):1020        """Test Implied Volatility - scalar case"""1021        # call1022        test_call = scalarize(self.call_opt.implied_volatility(**self.scalar_params))1023        expected_call = 0.21024        self.assertAlmostEqual(test_call, expected_call)1025        # put1026        test_put = scalarize(self.put_opt.implied_volatility(**self.scalar_params))1027        expected_put = 0.21028        self.assertAlmostEqual(test_put, expected_put)1029    def test_Implied_Vol_vector_np(self):1030        """Test Implied Volatility - np.ndarray output case"""1031        # call1032        test_call = self.call_opt.implied_volatility(**self.vector_params)1033        expected_call = 0.2 + np.zeros_like(test_call)1034        np_test.assert_allclose(test_call, expected_call, rtol=5e-7)1035        # put1036        test_put = self.put_opt.implied_volatility(**self.vector_params)1037        expected_put = 0.2 + np.zeros_like(test_put)1038        np_test.assert_allclose(test_put, expected_put, rtol=5e-7)1039    def test_Implied_Vol_vector_df(self):1040        """Test Implied Volatility - pd.DataFrame output case"""1041        # request Pandas DataFrame as output format1042        self.vector_params["np_output"] = False1043        # call1044        test_call = self.call_opt.implied_volatility(**self.vector_params)1045        expected_call = pd.DataFrame(data=0.2 + np.zeros_like(test_call),1046                                     index=self.vector_params["t"],1047                                     columns=self.vector_params["S"])1048        expected_call.rename_axis("S", axis='columns', inplace=True)1049        expected_call.rename_axis("t", axis='rows', inplace=True)1050        pd_test.assert_frame_equal(test_call, expected_call)1051        # put1052        test_put = self.put_opt.implied_volatility(**self.vector_params)1053        expected_put = pd.DataFrame(data=0.2 + np.zeros_like(test_put),1054                                    index=self.vector_params["t"],1055                                    columns=self.vector_params["S"])1056        expected_put.rename_axis("S", axis='columns', inplace=True)1057        expected_put.rename_axis("t", axis='rows', inplace=True)1058        pd_test.assert_frame_equal(test_put, expected_put)1059    def test_complex_parameters_setup(self):1060        """1061        Test complex parameter setup:1062        (S scalar, K and t vector, sigma distributed as Kxt grid, r distributed as Kxt grid)1063        """1064        # call1065        test_call_price = self.call_opt.price(**self.complex_params)1066        test_call_PnL = self.call_opt.PnL(**self.complex_params)1067        test_call_delta = self.call_opt.delta(**self.complex_params)1068        test_call_gamma = self.call_opt.gamma(**self.complex_params)1069        test_call_vega = self.call_opt.vega(**self.complex_params)1070        test_call_theta = self.call_opt.theta(**self.complex_params)1071        test_call_rho = self.call_opt.rho(**self.complex_params)1072        test_call_iv = self.call_opt.implied_volatility(**self.complex_params)1073        expected_call_price = pd.DataFrame(data=[[0.9798568, 0.62471855, 0.47323669, 0.39201772],1074                                                 [0.68363866, 0.50365944, 0.42894149, 0.37368724],1075                                                 [0.87602123, 0.60825314, 0.46889718, 0.36012104]],1076                                           index=self.complex_params["t"],1077                                           columns=self.complex_params["K"])1078        expected_call_price.rename_axis("K", axis='columns', inplace=True)1079        expected_call_price.rename_axis("t", axis='rows', inplace=True)1080        expected_call_PnL = pd.DataFrame(data=[[0.68311074, 0.3279725, 0.17649063, 0.09527166],1081                                               [0.3868926, 0.20691339, 0.13219544, 0.07694118],1082                                               [0.57927518, 0.31150708, 0.17215112, 0.06337498]],1083                                         index=self.complex_params["t"],1084                                         columns=self.complex_params["K"])1085        expected_call_PnL.rename_axis("K", axis='columns', inplace=True)1086        expected_call_PnL.rename_axis("t", axis='rows', inplace=True)1087        expected_call_delta = pd.DataFrame(data=[[0.00448245, 0.02461979, 0.01726052, 0.01248533],1088                                                 [0.01263986, 0.01196584, 0.01011038, 0.00854062],1089                                                 [0.01504177, 0.02568663, 0.02420515, 0.02088546]],1090                                           index=self.complex_params["t"],1091                                           columns=self.complex_params["K"])1092        expected_call_delta.rename_axis("K", axis='columns', inplace=True)1093        expected_call_delta.rename_axis("t", axis='rows', inplace=True)1094        expected_call_gamma = pd.DataFrame(data=[[-1.36939276e-03, -8.30886510e-04, -1.59819664e-04, -3.72062630e-05],1095                                                 [-3.79395726e-04, -1.46568014e-04, -7.22169767e-05, -3.73088881e-05],1096                                                 [-1.47523572e-03, -7.66683834e-04, -1.58922692e-04, 1.82659675e-04]],1097                                           index=self.complex_params["t"],1098                                           columns=self.complex_params["K"])1099        expected_call_gamma.rename_axis("K", axis='columns', inplace=True)1100        expected_call_gamma.rename_axis("t", axis='rows', inplace=True)1101        expected_call_vega = pd.DataFrame(data=[[-0.00777965, -0.00944069, -0.00272385, -0.00084549],1102                                                [-0.00559895, -0.00259558, -0.00149204, -0.00088094],1103                                                [-0.00294643, -0.00170141, -0.00038795, 0.00048643]],1104                                          index=self.complex_params["t"],1105                                          columns=self.complex_params["K"])1106        expected_call_vega.rename_axis("K", axis='columns', inplace=True)1107        expected_call_vega.rename_axis("t", axis='rows', inplace=True)1108        expected_call_theta = pd.DataFrame(data=[[1.67739087e-04, 2.81595503e-04, 7.08163129e-05, -1.41282958e-05],1109                                                 [9.90248652e-04, 4.91233384e-04, 3.00397593e-04, 1.78375694e-04],1110                                                 [1.31411352e-02, 8.04031544e-03, 1.61848869e-03, -3.41813594e-03]],1111                                           index=self.complex_params["t"],1112                                           columns=self.complex_params["K"])1113        expected_call_theta.rename_axis("K", axis='columns', inplace=True)1114        expected_call_theta.rename_axis("t", axis='rows', inplace=True)1115        expected_call_rho = pd.DataFrame(data=[[-0.00404295, 0.01115923, 0.00757627, 0.00513166],1116                                               [0.00165411, 0.00208889, 0.00175266, 0.0014392],1117                                               [0.00013089, 0.00046672, 0.00046837, 0.00041632]],1118                                         index=self.complex_params["t"],1119                                         columns=self.complex_params["K"])1120        expected_call_rho.rename_axis("K", axis='columns', inplace=True)1121        expected_call_rho.rename_axis("t", axis='rows', inplace=True)1122        expected_call_iv = pd.DataFrame(data=self.complex_params["sigma"],1123                                        index=self.complex_params["t"],1124                                        columns=self.complex_params["K"])1125        expected_call_iv.rename_axis("K", axis='columns', inplace=True)1126        expected_call_iv.rename_axis("t", axis='rows', inplace=True)1127        pd_test.assert_frame_equal(test_call_price, expected_call_price)1128        pd_test.assert_frame_equal(test_call_PnL, expected_call_PnL)1129        pd_test.assert_frame_equal(test_call_delta, expected_call_delta)1130        pd_test.assert_frame_equal(test_call_gamma, expected_call_gamma)1131        pd_test.assert_frame_equal(test_call_vega, expected_call_vega, check_less_precise=True)1132        pd_test.assert_frame_equal(test_call_theta, expected_call_theta)1133        pd_test.assert_frame_equal(test_call_rho, expected_call_rho, check_less_precise=True)1134        pd_test.assert_frame_equal(test_call_iv.iloc[:, :-1], expected_call_iv.iloc[:, :-1])1135        self.assertAlmostEqual(test_call_iv.iloc[-1, -1], expected_call_iv.iloc[-1, -1], places=5)1136        # put1137        test_put_price = self.put_opt.price(**self.complex_params)1138        test_put_PnL = self.put_opt.PnL(**self.complex_params)1139        test_put_delta = self.put_opt.delta(**self.complex_params)1140        test_put_gamma = self.put_opt.gamma(**self.complex_params)1141        test_put_vega = self.put_opt.vega(**self.complex_params)1142        test_put_theta = self.put_opt.theta(**self.complex_params)1143        test_put_rho = self.put_opt.rho(**self.complex_params)1144        test_put_iv = self.put_opt.implied_volatility(**self.complex_params)1145        expected_put_price = pd.DataFrame(data=[[0.01315404, 0.36135198, 0.50594203, 0.58031737],1146                                                [0.29830713, 0.47471481, 0.54587421, 0.59758286],1147                                                [0.12151605, 0.38901089, 0.52809366, 0.63659669]],1148                                          index=self.complex_params["t"],1149                                          columns=self.complex_params["K"])1150        expected_put_price.rename_axis("K", axis='columns', inplace=True)1151        expected_put_price.rename_axis("t", axis='rows', inplace=True)1152        expected_put_PnL = pd.DataFrame(data=[[-0.65563919, -0.30744125, -0.16285119, -0.08847586],1153                                              [-0.37048609, -0.19407842, -0.12291901, -0.07121037],1154                                              [-0.54727717, -0.27978234, -0.14069957, -0.03219654]],1155                                        index=self.complex_params["t"],1156                                        columns=self.complex_params["K"])1157        expected_put_PnL.rename_axis("K", axis='columns', inplace=True)1158        expected_put_PnL.rename_axis("t", axis='rows', inplace=True)1159        expected_put_delta = copy.deepcopy(-expected_call_delta)1160        expected_put_gamma = copy.deepcopy(-expected_call_gamma)1161        expected_put_vega = copy.deepcopy(-expected_call_vega)1162        expected_put_theta = pd.DataFrame(data=[[-1.40533310e-04, -2.27564242e-04, 9.66413009e-06, 1.20685566e-04],1163                                                [-8.55735531e-04, -3.30404740e-04, -1.13446636e-04, 3.45054237e-05],1164                                                [-1.28951671e-02, -7.76709242e-03, -1.31802569e-03, 3.74582396e-03]],1165                                          index=self.complex_params["t"],1166                                          columns=self.complex_params["K"])1167        expected_put_theta.rename_axis("K", axis='columns', inplace=True)1168        expected_put_theta.rename_axis("t", axis='rows', inplace=True)1169        expected_put_rho = pd.DataFrame(data=[[-0.00292173, -0.01807524, -0.01444393, -0.01195132],1170                                              [-0.00523216, -0.00565392, -0.00530473, -0.00497835],1171                                              [-0.00040418, -0.00073995, -0.00074152, -0.00068939]],1172                                        index=self.complex_params["t"],1173                                        columns=self.complex_params["K"])1174        expected_put_rho.rename_axis("K", axis='columns', inplace=True)1175        expected_put_rho.rename_axis("t", axis='rows', inplace=True)1176        expected_put_iv = pd.DataFrame(data=self.complex_params["sigma"],1177                                       index=self.complex_params["t"],1178                                       columns=self.complex_params["K"])1179        expected_put_iv.rename_axis("K", axis='columns', inplace=True)1180        expected_put_iv.rename_axis("t", axis='rows', inplace=True)1181        pd_test.assert_frame_equal(test_put_price, expected_put_price)1182        pd_test.assert_frame_equal(test_put_PnL, expected_put_PnL)1183        pd_test.assert_frame_equal(test_put_delta, expected_put_delta)1184        pd_test.assert_frame_equal(test_put_gamma, expected_put_gamma)1185        pd_test.assert_frame_equal(test_put_vega, expected_put_vega, check_less_precise=True)1186        pd_test.assert_frame_equal(test_put_theta, expected_put_theta)1187        pd_test.assert_frame_equal(test_put_rho, expected_put_rho, check_less_precise=True)1188        pd_test.assert_frame_equal(test_put_iv.iloc[:, :-1], expected_put_iv.iloc[:, :-1])1189        self.assertAlmostEqual(test_put_iv.iloc[-1, -1], expected_put_iv.iloc[-1, -1], places=5)1190        # test gamma and vega consistency1191        pd_test.assert_frame_equal(test_call_delta, -test_put_delta)1192        pd_test.assert_frame_equal(test_call_gamma, -test_put_gamma)1193        pd_test.assert_frame_equal(test_call_vega, -test_put_vega)1194if __name__ == '__main__':...tests.py
Source:tests.py  
...299#300## # general.py tests301#302#class TestLook(CommandTest):303#    def test_call(self):304#        self.execute_cmd("look here")305#class TestHome(CommandTest):306#    def test_call(self):307#        self.char1.location = self.room1308#        self.char1.home = self.room2309#        self.execute_cmd("home")310#        self.assertEqual(self.char1.location, self.room2)311#class TestPassword(CommandTest):312#    def test_call(self):313#        self.execute_cmd("@password testpassword = newpassword")314#class TestInventory(CommandTest):315#    def test_call(self):316#        self.execute_cmd("inv")317#class TestQuit(CommandTest):318#    def test_call(self):319#        self.execute_cmd("@quit")320#class TestPose(CommandTest):321#    def test_call(self):322#        self.execute_cmd("pose is testing","TestChar is testing")323#class TestNick(CommandTest):324#    def test_call(self):325#        self.char1.player.user.is_superuser = False326#        self.execute_cmd("nickname testalias = testaliasedstring1")327#        self.execute_cmd("nickname/player testalias = testaliasedstring2")328#        self.execute_cmd("nickname/object testalias = testaliasedstring3")329#        self.assertEqual(u"testaliasedstring1", self.char1.nicks.get("testalias"))330#        self.assertEqual(u"testaliasedstring2", self.char1.nicks.get("testalias",nick_type="player"))331#        self.assertEqual(u"testaliasedstring3", self.char1.nicks.get("testalias",nick_type="object"))332#class TestGet(CommandTest):333#    def test_call(self):334#        self.obj1.location = self.room1335#        self.execute_cmd("get obj1", "You pick up obj1.")336#class TestDrop(CommandTest):337#    def test_call(self):338#        self.obj1.location = self.char1339#        self.execute_cmd("drop obj1", "You drop obj1.")340#class TestWho(CommandTest):341#    def test_call(self):342#        self.execute_cmd("who")343#class TestSay(CommandTest):344#    def test_call(self):345#        self.execute_cmd("say Hello", 'You say, "Hello')346#class TestAccess(CommandTest):347#    def test_call(self):348#        self.execute_cmd("access")349#class TestEncoding(CommandTest):350#    def test_call(self):351#        global NOMANGLE352#        NOMANGLE = True353#        self.char1.db.encoding="utf-8"354#        self.execute_cmd("@encoding", "Default encoding:")355#        NOMANGLE = False356#357## help.py command tests358#359#class TestHelpSystem(CommandTest):360#    def test_call(self):361#        self.NOMANGLE = True362#        sep = "-"*78 + "\n"363#        self.execute_cmd("@help/add TestTopic,TestCategory = Test1", )364#        self.execute_cmd("help TestTopic",sep + "Help topic for Testtopic\nTest1" + "\n" + sep)365#        self.execute_cmd("@help/merge TestTopic = Test2", "Added the new text right after")366#        self.execute_cmd("help TestTopic", sep + "Help topic for Testtopic\nTest1 Test2")367#        self.execute_cmd("@help/append TestTopic = Test3", "Added the new text as a")368#        self.execute_cmd("help TestTopic",sep + "Help topic for Testtopic\nTest1 Test2\n\nTest3")369#        self.execute_cmd("@help/delete TestTopic","Deleted the help entry")370#        self.execute_cmd("help TestTopic","No help entry found for 'TestTopic'")371#372## system.py command tests373#class TestPy(CommandTest):374#    def test_call(self):375#        self.execute_cmd("@py 1+2", [">>> 1+2", "<<< 3"])376#class TestScripts(CommandTest):377#    def test_call(self):378#        script = create.create_script(None, "test")379#        self.execute_cmd("@scripts", "id")380#class TestObjects(CommandTest):381#    def test_call(self):382#        self.execute_cmd("@objects", "Database totals")383## Cannot be tested since we don't have an active server running at this point.384## class TestListService(CommandTest):385##     def test_call(self):386##         self.execute_cmd("@service/list", "---")387#class TestVersion(CommandTest):388#    def test_call(self):389#        self.execute_cmd("@version", '---')390#class TestTime(CommandTest):391#    def test_call(self):392#        self.execute_cmd("@time", "Current server uptime")393#class TestServerLoad(CommandTest):394#    def test_call(self):395#        self.execute_cmd("@serverload", "Server load")396#class TestPs(CommandTest):397#    def test_call(self):398#        self.execute_cmd("@ps","Non-timed scripts")399#400## admin.py command tests401#402#class TestBoot(CommandTest):403#   def test_call(self):404#       self.execute_cmd("@boot TestChar2","You booted TestChar2.")405#class TestDelPlayer(CommandTest):406#   def test_call(self):407#       self.execute_cmd("@delplayer TestChar2","Booting and informing player ...")408#class TestEmit(CommandTest):409#    def test_call(self):410#        self.execute_cmd("@emit Test message", "Emitted to room1.")411#class TestUserPassword(CommandTest):412#    def test_call(self):413#        self.execute_cmd("@userpassword TestChar2 = newpass", "TestChar2 - new password set to 'newpass'.")414#class TestPerm(CommandTest):415#    def test_call(self):416#        self.execute_cmd("@perm TestChar2 = Builders", "Permission 'Builders' given to")417## cannot test this here; screws up the test suite418##class TestPuppet(CommandTest):419##   def test_call(self):420##       self.execute_cmd("@puppet TestChar3", "You now control TestChar3.")421##       self.execute_cmd("@puppet TestChar", "You now control TestChar.")422#class TestWall(CommandTest):423#    def test_call(self):424#        self.execute_cmd("@wall = This is a test message", "TestChar shouts")425#426#427## building.py command tests428#429#class TestObjAlias(BuildTest):430#    def test_call(self):431#        self.execute_cmd("@alias obj1 = obj1alias, obj1alias2", "Aliases for")432#        self.execute_cmd("look obj1alias2", "obj1")433#class TestCopy(BuildTest):434#    def test_call(self):435#        self.execute_cmd("@copy obj1 = obj1_copy;alias1;alias2", "Copied obj1 to 'obj1_copy'")436#        self.execute_cmd("look alias2","obj1_copy")437#class TestSet(BuildTest):438#    def test_call(self):439#        self.execute_cmd("@set obj1/test = value", "Created attribute obj1/test = value")440#        self.execute_cmd("@set obj1/test", "Attribute obj1/test = value")441#        self.assertEqual(self.obj1.db.test, u"value")442#class TestCpAttr(BuildTest):443#    def test_call(self):444#        self.execute_cmd("@set obj1/test = value")445#        self.execute_cmd("@set obj2/test2 = value2")446#        #self.execute_cmd("@cpattr obj1/test = obj2/test") # can't be tested since instances changes447#        #self.assertEqual(self.obj2.db.test, u"value")448#class TestMvAttr(BuildTest):449#    def test_call(self):450#        self.execute_cmd("@set obj1/test = value")451#        self.execute_cmd("@mvattr obj1/test = obj2")452#        #self.assertEqual(self.obj2.db.test, u"value")453#        #self.assertEqual(self.obj1.db.test, None)454#class TestCreate(BuildTest):455#    def test_call(self):456#        self.execute_cmd("@create testobj;alias1;alias2")457#        self.execute_cmd("look alias1", "testobj")458#class TestDebug(BuildTest):459#    def test_call(self):460#        self.execute_cmd("@debug/obj obj1")461#class TestDesc(BuildTest):462#    def test_call(self):463#        self.execute_cmd("@desc obj1 = Test object", "The description was set on")464#        #self.assertEqual(self.obj1.db.desc, u"Test object")465#class TestDestroy(BuildTest):466#    def test_call(self):467#        self.execute_cmd("@destroy obj1, obj2", "obj1 was destroyed.\nobj2 was destroyed.")468#class TestFind(BuildTest):469#    def test_call(self):470#        self.execute_cmd("@find obj1", "One Match")471#class TestDig(BuildTest):472#    def test_call(self):473#        self.execute_cmd("@dig room3;roomalias1;roomalias2 = north;n,south;s")474#        self.execute_cmd("@find room3", "One Match")475#        self.execute_cmd("@find roomalias1", "One Match")476#        self.execute_cmd("@find roomalias2", "One Match")477#        self.execute_cmd("@find/room roomalias2", "One Match")478#        self.execute_cmd("@find/exit south", "One Match")479#        self.execute_cmd("@find/exit n", "One Match")480#class TestUnLink(BuildTest):481#    def test_call(self):482#        self.execute_cmd("@dig room3;roomalias1, north, south")483#        self.execute_cmd("@unlink north")484#class TestLink(BuildTest):485#    def test_call(self):486#        self.execute_cmd("@dig room3;roomalias1, north, south")487#        self.execute_cmd("@unlink north")488#        self.execute_cmd("@link north = room3")489#class TestHome(BuildTest):490#    def test_call(self):491#        self.obj1.db_home = self.obj2.dbobj492#        self.obj1.save()493#        self.execute_cmd("@home obj1")494#        self.assertEqual(self.obj1.db_home, self.obj2.dbobj)495#class TestCmdSets(BuildTest):496#    def test_call(self):497#        self.execute_cmd("@cmdsets")498#        self.execute_cmd("@cmdsets obj1")499#class TestName(BuildTest):500#    def test_call(self):501#        self.execute_cmd("@name obj1 = Test object", "Object's name changed to 'Test object'.")502#        #self.assertEqual(self.obj1.key, u"Test object")503#class TestOpen(BuildTest):504#    def test_call(self):505#        self.execute_cmd("@dig room4;roomalias4")506#        self.execute_cmd("@open testexit4;aliasexit4 = roomalias4", "Created new Exit")507#class TestTypeclass(BuildTest):508#    def test_call(self):509#        self.execute_cmd("@typeclass obj1 = src.objects.objects.Character", "obj's type is now")510#        #self.assertEqual(self.obj1.db_typeclass_path, u"src.objects.objects.Character")511#class TestSet(BuildTest):512#    def test_call(self):513#        self.execute_cmd("@set box1/test = value")514#        self.execute_cmd("@wipe box1", "Wiped")515#        self.assertEqual(self.obj1.db.all, [])516#class TestLock(BuildTest):517#    # lock functionality itseld is tested separately518#    def test_call(self):519#        self.char1.permissions = ["TestPerm"]520#        self.execute_cmd("@lock obj1 = test:perm(TestPerm)")521#        #self.assertEqual(True, self.obj1.access(self.char1, u"test"))522#class TestExamine(BuildTest):523#    def test_call(self):524#        self.execute_cmd("examine obj1", "------------")525#class TestTeleport(BuildTest):526#    def test_call(self):527#        self.execute_cmd("@tel obj1 = room1")528#        self.assertEqual(self.obj1.location.key, self.room1.key)529#class TestScript(BuildTest):530#    def test_call(self):531#        self.execute_cmd("@script TestChar = examples.bodyfunctions.BodyFunctions", "Script successfully added")532#533## Comms commands534#535#class TestChannelCreate(CommandTest):536#    def test_call(self):537#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")538#        self.execute_cmd("testchan1 Hello", "[testchannel1] TestChar: Hello")539#class TestAddCom(CommandTest):540#    def test_call(self):541#        self.execute_cmd("@cdestroy testchannel1", "Channel 'testchannel1'")542#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")543#        self.execute_cmd("addcom chan1 = testchannel1")544#        self.execute_cmd("addcom chan2 = testchan1")545#        self.execute_cmd("delcom testchannel1")546#        self.execute_cmd("addcom testchannel1" "You now listen to the channel channel.")547#class TestDelCom(CommandTest):548#    def test_call(self):549#        self.execute_cmd("@cdestroy testchannel1", "Channel 'testchannel1'")550#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")551#        self.execute_cmd("addcom chan1 = testchan1")552#        self.execute_cmd("addcom chan2 = testchan1b")553#        self.execute_cmd("addcom chan3 = testchannel1")554#        self.execute_cmd("delcom chan1", "Your alias 'chan1' for ")555#        self.execute_cmd("delcom chan2", "Your alias 'chan2' for ")556#        self.execute_cmd("delcom testchannel1" "You stop listening to")557#class TestAllCom(CommandTest):558#    def test_call(self):559#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")560#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")561#        self.execute_cmd("allcom off")562#        self.execute_cmd("allcom on")563#        self.execute_cmd("allcom destroy")564#class TestChannels(CommandTest):565#    def test_call(self):566#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")567#        self.execute_cmd("@cdestroy testchannel1", "Channel 'testchannel1'")568#class TestCBoot(CommandTest):569#    def test_call(self):570#        self.execute_cmd("@cdestroy testchannel1", "Channel 'testchannel1'")571#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")572#        self.execute_cmd("addcom testchan = testchannel1")573#        self.execute_cmd("@cboot testchannel1 = TestChar", "TestChar boots TestChar from channel.")574#class TestCemit(CommandTest):575#    def test_call(self):576#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")577#        self.execute_cmd("@cemit testchan1 = Testing!", "[testchannel1] Testing!")578#class TestCwho(CommandTest):579#    def test_call(self):580#        self.execute_cmd("@ccreate testchannel1;testchan1;testchan1b = This is a test channel")581#        self.execute_cmd("@cwho testchan1b", "Channel subscriptions")582#583# OOC commands584#class TestOOC_and_IC(CommandTest): # can't be tested it seems, causes errors in other commands (?)585#    def test_call(self):586#        self.execute_cmd("@ooc", "\nYou go OOC.")587#        self.execute_cmd("@ic", "\nYou become TestChar")588# Unloggedin commands...tasks.py
Source:tasks.py  
1import json2import os3import random4if os.name == "nt":5    import multiprocessing6else:7    import billiard as multiprocessing8from .LoadTester import load_tests, abstract9from .LoadTester.proc_func import process_function10from .celery import app11from .models import TestCall, Result12import typing13import inspect14import requests15from datetime import datetime16import time17from .serializers import TestCallSerializer18def filter_classes(o):19    return inspect.isclass(o) and 'LoadTesterBase' in map(lambda x: x.__name__, inspect.getmro(o))20@app.task21def run_test(test_call_str: str):22    test_call_dict = TestCallSerializer(test_call_str).instance23    test_call = TestCall.objects.get(pk = test_call_dict['id'])24    classes = inspect.getmembers(load_tests, filter_classes)25    print(classes)26    print(test_call)27    needed_class = list(filter(lambda x: x[0] == test_call.test.class_name, classes))28    if len(needed_class) != 1:29        raise TypeError('Cannot find described class: %s' % test_call.test.class_name)30    needed_class = needed_class[0]31    counter = multiprocessing.Value('i', 0)32    lock = multiprocessing.Lock()33    processes = []34    for i in range(test_call.num_users):35        from django import db36        db.connections.close_all()37        proc = multiprocessing.Process(target=process_function, args=(needed_class, test_call.max_calls, counter, lock, test_call_dict))38        proc.start()39        processes.append(proc)40    timestamp = time.time()41    est = test_call.max_calls / test_call.num_users42    rand = random.randint(5, 30)43    m_t = min(random.randint(720, 900), (rand if rand > est else est) + random.randint(0, test_call.num_users))44    for proc in processes:45        print("WAITING FOR: ", proc)46        proc.join(timeout=(m_t - max((time.time() - timestamp), 0)))47    for proc in processes:48        if proc.is_alive():49            proc.terminate()50    try:51        print("WAITING FISHED")52        result = requests.post("%s/rest-auth/login/" % os.getenv("BACKEND_URL"),53                                json={"username": os.getenv("BACKEND_USER"), "password": os.getenv("BACKEND_PASSWORD")})54        print("STARTING FILE WRITTING")55        with open('prices%s.txt' % test_call.start_date.strftime("%m-%d-%Y %H-%M-%S"), 'w') as f:56            f.write(json.dumps(requests.get("%s/price_history/" % os.getenv("BACKEND_URL"), headers={"OBCIAZNIK": "DUPA", "Authorization": "Bearer %s" % result.json()['token']}).json()))57        with open('transactions%s.txt' % test_call.start_date.strftime("%m-%d-%Y %H-%M-%S"), 'w') as f:58            f.write(json.dumps(requests.get("%s/transaction/" % os.getenv("BACKEND_URL"), headers={"OBCIAZNIK": "DUPA", "Authorization": "Bearer %s" % result.json()['token']}).json()))59        print("FILE FINISHED")60    except Exception:61        pass62    test_call.is_finished = True63    test_call.end_date = datetime.now()64    test_call.save()...pipeline.py
Source:pipeline.py  
...3import joinDataFrames as joindf4import toCSVDataFrame as tocsv5import selectDataFrame as selectdf6import json7msg_oh  = fromcsv.api.test_call(fromcsv.test.ORDER_HEADERS)8info_str = json.dumps(msg_oh.attributes, indent=4)9print(info_str)10msg_oh = sampledf.api.test_call(msg_oh,sampledf.test.BIGDATA)11info_str = json.dumps(msg_oh.attributes, indent=4)12print(info_str)13msg_od  = fromcsv.api.test_call(fromcsv.test.ORDER_DETAILS)14info_str = json.dumps(msg_od.attributes, indent=4)15print(info_str)16msg = joindf.api.test_call(msg_oh,msg_od,joindf.test.ORDER_HEADER_DETAIL)17info_str = json.dumps(msg.attributes, indent=4)18print(info_str)19#msg = selectdf.api.test_call(msg)20#info_str = json.dumps(msg.attributes, indent=4)21#print(info_str)22msg_pmd  = fromcsv.api.test_call(fromcsv.test.PRODUCTS_MD)23info_str = json.dumps(msg_pmd.attributes, indent=4)24print(info_str)25msg = joindf.api.test_call(msg,msg_pmd,joindf.test.ORDER_PRODUCT_MD)26info_str = json.dumps(msg.attributes, indent=4)27print(info_str)28csv = tocsv.api.test_call(msg)29with open(r"/Users/d051079/OneDrive - SAP SE/Datahub-Dev/data/sample_pos.csv", 'w') as fd:30    if isinstance(csv.body,list) :31        for s in csv.body :32            fd.write(s)33    else :34        fd.write(csv.body)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
