def test_cache_addition_removal(): # Don't use a mocker here as it will hold refs to things and break the cache removal test set_session() p1 = IRSwap('Pay', '10y', 'DKK') with PricingContext(use_cache=True): market_data_location = PricingContext.current.market_data_location pricing_date = PricingContext.current.pricing_date p1.price() assert PricingCache.get(p1, market_data_location, risk.Price, pricing_date) assert not PricingCache.get(p1, market_data_location, risk.IRDelta, pricing_date) # Assert that deleting the cached instrument removes it from the PricingCache # N.B, this may not work when debugging tests del p1 p2 = IRSwap('Pay', '10y', 'DKK') assert not PricingCache.get(p2, market_data_location, risk.Price, pricing_date) with PricingContext(use_cache=True): p2.price() assert PricingCache.get(p2, market_data_location, risk.Price, pricing_date) # Change a property and assert that p2 is no longer cached p2.notional_currency = 'EUR' assert not PricingCache.get(p2, market_data_location, risk.Price, pricing_date)
def test_cache_addition_removal(): set_session() p1 = IRSwap('Pay', '10y', 'DKK') with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[[{'$type': 'Risk', 'val': 0.07}]]]] with PricingContext(use_cache=True) as pc: p1.price() price_key = pc._PricingContext__risk_key(risk.Price, p1.provider) delta_key = pc._PricingContext__risk_key(risk.IRDelta, p1.provider) assert PricingCache.get(price_key, p1) assert not PricingCache.get(delta_key, p1) # Assert that deleting the cached instrument removes it from the PricingCache # N.B, this may not work when debugging tests del p1 del mocker import gc gc.collect() p2 = IRSwap('Pay', '10y', 'DKK') p2_price_key = PricingContext.current._PricingContext__risk_key( risk.Price, p2.provider) # assert not PricingCache.get(p2_price_key) with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[[{'$type': 'Risk', 'val': 0.07}]]]] with PricingContext(use_cache=True): p2_price = p2.price() assert PricingCache.get(p2_price_key, p2) == p2_price.result() # Assert that running under a scenario does not retrieve the base result with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[[{'$type': 'Risk', 'val': 0.08}]]]] with risk.RollFwd(date='1m'), PricingContext(use_cache=True) as spc: # Don't want the price without the scenario scenario_risk_key = spc._PricingContext__risk_key( risk.Price, p2.provider) assert not PricingCache.get(scenario_risk_key, p2) scenario_price = p2.price() assert PricingCache.get(scenario_risk_key, p2) == scenario_price.result() with PricingContext(use_cache=True) as pc, risk.RollFwd(date='1m'): cached_scenario_price = PricingCache.get( pc._PricingContext__risk_key(risk.Price, p2.provider), p2) # Check that we get the cached scenario price assert cached_scenario_price == scenario_price.result() # Check the base result is still correct assert PricingCache.get(p2_price_key, p2) == p2_price.result() # Assert that caching respects parameters, such as csa with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[[{'$type': 'Risk', 'val': 0.08}]]]] with PricingContext(use_cache=True, csa_term='INVALID') as pc: # Don't want the price with default csa assert not PricingCache.get( pc._PricingContext__risk_key(risk.Price, p2.provider), p2) csa_price = p2.price() with PricingContext(use_cache=True, csa_term='INVALID') as pc: cached_csa_price = PricingCache.get( pc._PricingContext__risk_key(risk.Price, p2.provider), p2) # Check that we get the cached csa price assert cached_csa_price == csa_price.result() # Check the base result is still correct assert PricingCache.get(p2_price_key, p2) == p2_price.result() # Change a property and assert that p2 is no longer cached p2.notional_currency = 'EUR' assert not PricingCache.get(p2_price_key, p2)
def test_cache_addition_removal(): set_session() p1 = IRSwap('Pay', '10y', 'DKK') with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[{'date': '2019-10-07', 'value': 0.07}]]] with PricingContext(use_cache=True): p1.price() assert PricingCache.get(p1, risk.Price) assert not PricingCache.get(p1, risk.IRDelta) # Assert that deleting the cached instrument removes it from the PricingCache # N.B, this may not work when debugging tests del p1 del mocker import gc gc.collect() p2 = IRSwap('Pay', '10y', 'DKK') assert not PricingCache.get(p2, risk.Price) with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[{'date': '2019-10-07', 'value': 0.07}]]] with PricingContext(use_cache=True): p2_price = p2.price() assert PricingCache.get(p2, risk.Price) == p2_price.result() # Assert that running under a scenario does not retrieve the base result with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[{'date': '2019-10-07', 'value': 0.08}]]] with risk.CarryScenario(time_shift=30), PricingContext(use_cache=True) as spc: # Don't want the price without the scenario assert not PricingCache.get(p2, risk.Price) scenario_price = p2.price() scenario_pricing_key = spc.pricing_key assert PricingCache.get(p2, risk.Price, scenario_pricing_key) == scenario_price.result() with PricingContext(use_cache=True), risk.CarryScenario(time_shift=30): cached_scenario_price = PricingCache.get(p2, risk.Price) # Check that we get the cached scenario price assert cached_scenario_price == scenario_price.result() # Check the base result is still correct assert PricingCache.get(p2, risk.Price) == p2_price.result() # Assert that caching respects parameters, such as csa with mock.patch('gs_quant.api.gs.risk.GsRiskApi._exec') as mocker: mocker.return_value = [[[{'date': '2019-10-07', 'value': 0.08}]]] with PricingContext(use_cache=True, csa_term='INVALID'): # Don't want the price with default csa assert not PricingCache.get(p2, risk.Price) csa_price = p2.price() with PricingContext(use_cache=True, csa_term='INVALID'): cached_csa_price = PricingCache.get(p2, risk.Price) # Check that we get the cached csa price assert cached_csa_price == csa_price.result() # Check the base result is still correct assert PricingCache.get(p2, risk.Price) == p2_price.result() # Change a property and assert that p2 is no longer cached p2.notional_currency = 'EUR' assert not PricingCache.get(p2, risk.Price)