def test_finite_difference_params(mocker): nok_delta = risk.IRDelta(currency="NOK") local_ccy_delta = risk.IRDelta(currency='local') with MockCalc(mocker): res3 = swap_1.calc(risk.IRDelta) res5 = swap_1.calc((risk.Price, nok_delta)) res6 = swap_1.calc((local_ccy_delta, nok_delta)) res7 = swap_1.calc( risk.IRDelta(aggregation_level=AggregationLevel.Asset)) assert isinstance(res5[risk.Price], FloatWithInfo) assert isinstance(res5[nok_delta], DataFrameWithInfo) assert res6[local_ccy_delta]['value'].size != res6[nok_delta]['value'].size assert res6[local_ccy_delta]['value'].size != res3['value'].size assert res6[nok_delta]['value'].size != res3['value'].size assert res7['mkt_asset'].size == 2
def test_risk_measure_setters(): base_delta = risk.IRDelta usd_delta = risk.IRDelta(currency='USD') assert (usd_delta.parameters is not None) assert (usd_delta.parameters.currency == 'USD') local_usd_delta = usd_delta(local_curve=True) assert local_usd_delta.local_curve assert (usd_delta != local_usd_delta) assert (risk.IRDelta.parameters is None) assert (base_delta.parameters is None)
def test_adding_risk_results(mocker): with MockCalc(mocker): result1 = get_attributes(eur_port, risk.Price, no_frame=True) result2 = get_attributes( eur_port, (risk.IRDelta(aggregation_level=AggregationLevel.Asset, currency='local'), risk.Price), no_frame=True) result3 = get_attributes( swaption_port, (risk.IRDelta(aggregation_level=AggregationLevel.Asset, currency='local'), risk.Price), no_frame=True) result4 = get_attributes(port1, risk.Price, no_frame=True) result5 = get_attributes( swaption_port, risk.IRVega(aggregation_level=AggregationLevel.Asset, ), no_frame=True) result6 = get_attributes(jpy_port, (risk.Price, ), 'RollFwd', no_frame=True) result7 = get_attributes(jpy_port, risk.Price, 'CurveScen1', no_frame=True) result8 = get_attributes(jpy_port, (risk.DollarPrice, risk.Price), 'CurveScen2', no_frame=True) # (2020, 1, 14) to (2020, 1, 15) result9 = get_attributes(port1, risk.Price, 'Multiple', no_frame=True) # (2020, 1, 16) to (2020, 1, 17) result10 = get_attributes(port1, risk.Price, 'Multiple2', no_frame=True) # (2020, 1, 14) result11 = get_attributes(port1, risk.Price, no_frame=True) # (2020, 1, 16), market_data_location='NYC' result12 = get_attributes(port1, risk.Price, 'PricingCtx2', no_frame=True) # (2020, 1, 16), market_data_location='LDN' result13 = get_attributes(port1, risk.Price, 'PricingCtx3', no_frame=True) # adding results with same portfolio but different risk measures add_1 = result3 + result5 # adding results with different portfolio but same risk measures add_2 = result2 + result3 # adding results with different portfolios and overlapping risk measures add_3 = result1 + result3 # adding results with different portfolios and different risk measures add_4 = result1 + result5 add_5 = result3 + result4 # adding dates add_6 = result9 + result13 add_7 = result11 + result13 add_8 = result10 + result11 add_9 = result9 + result10 default_pivot_table_test(add_1, 'has_bucketed') default_pivot_table_test(add_2, 'has_bucketed') default_pivot_table_test(add_3, 'has_bucketed') default_pivot_table_test(add_4, 'has_bucketed') default_pivot_table_test(add_5, 'has_bucketed') default_pivot_table_test(add_6, 'dated') default_pivot_table_test(add_7, 'dated') default_pivot_table_test(add_8, 'dated') default_pivot_table_test(add_9, 'dated') # throw value error when adding results where at least one particular value is being calculated twice # adding results with same portfolio but overlapping risk measures with pytest.raises(ValueError): _ = result1 + result2 # adding results with overlapping portfolios and different risk measures with pytest.raises(ValueError): _ = result2 + result4 # adding results with overlapping portfolios and same risk measures with pytest.raises(ValueError): _ = result1 + result4 # adding results with different scenarios with pytest.raises(ValueError): _ = result6 + result7 with pytest.raises(ValueError): _ = result7 + result8 # overlapping dates with pytest.raises(ValueError): _ = result9 + result11 with pytest.raises(ValueError): _ = result10 + result13 # adding results with different market locations with pytest.raises(ValueError): _ = result10 + result12 with pytest.raises(ValueError): _ = result9 + result12 with pytest.raises(ValueError): _ = result12 + result13 with pytest.raises(ValueError): _ = result11 + result12