Example #1
0
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)
Example #2
0
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)
Example #3
0
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)