Skip to content

Commit c8f5a79

Browse files
committed
add UT on senstivity
1 parent fc11679 commit c8f5a79

File tree

2 files changed

+96
-3
lines changed

2 files changed

+96
-3
lines changed

absbox/client.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -654,14 +654,16 @@ def runByCombo(self,
654654

655655
assert isinstance(result, dict), f"Result should be a dict but got {type(result)}, {result}"
656656

657-
rawWarnMsgByScen = {"^".join(k): self._getWarningMsg(v[RunResp.LogResp.value],showWarning) for k, v in result.items()}
657+
rawWarnMsgByScen = { tuple(k.split("^")): self._getWarningMsg(v[RunResp.LogResp.value], showWarning)
658+
for k, v in result.items()}
658659
for scen, msgs in rawWarnMsgByScen.items():
659660
if len(msgs)>0:
660661
console.print(f"Warning Message from server for {scen}:"+"\n".join(msgs))
661662

662663
if read:
663664
return {
664-
tuple(k.split("^")): dealMap[k.split("^")[0]].read(v) for k,v in result.items()
665+
tuple(k.split("^")): dealMap[k.split("^")[0]].read(v)
666+
for k,v in result.items()
665667
}
666668
else:
667669
return result

absbox/tests/regression/test_main.py

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from itertools import dropwhile
99
import numpy_financial as npf
1010
from datetime import datetime
11+
import numpy as np
1112

1213

1314
from .deals import *
@@ -890,4 +891,94 @@ def test_account(setup_api):
890891
assert r['accounts']['acc03'].change.to_list() == [-10,-10,-10]
891892
assert r['accounts']['acc02'].change.to_list() == [-10] * 5
892893
assert r['accounts']['acc01'].loc['2021-08-20'].change.to_list()[:2] == [10.0]*2
893-
894+
895+
@pytest.mark.sensitivity
896+
def test_sensitivity_01(setup_api):
897+
# senstivity on structs
898+
test02 = test01 & lens.bonds.Each()[1]['balance'].modify(lambda x: 0.9*x)
899+
dealMap = {
900+
"Normal":test01,"Shrink":test02
901+
}
902+
903+
rs = setup_api.runStructs(dealMap, read=True)
904+
905+
assert rs.keys() == {"Normal","Shrink"}, "sensitivity run should have two results"
906+
907+
assert rs['Shrink']['bonds']['A1'].principal.sum().item() == 900
908+
assert closeTo(rs['Normal']['bonds']['A1'].principal.sum().item() ,1000)
909+
910+
911+
@pytest.mark.sensitivity
912+
def test_sensitivity_02(setup_api):
913+
# senstivity on pool assump
914+
myAssumption = ("Pool",("Mortgage",{"CDR":0.01},None,None,None)
915+
,None
916+
,None)
917+
918+
myAssumption2 = ("Pool",("Mortgage",None,{"CPR":0.01},None,None)
919+
,None
920+
,None)
921+
922+
rs = setup_api.runByScenarios(test01
923+
,poolAssump={"withCdr":myAssumption
924+
,"withCpr":myAssumption2}
925+
,read=True)
926+
927+
assert rs.keys() == {"withCdr","withCpr"}
928+
929+
assert rs['withCdr']['pool']['flow']['PoolConsol'].Default.sum().item() > 0
930+
assert rs['withCdr']['pool']['flow']['PoolConsol'].Prepayment.sum().item() == 0
931+
932+
assert rs['withCpr']['pool']['flow']['PoolConsol'].Prepayment.sum().item() > 0
933+
assert rs['withCpr']['pool']['flow']['PoolConsol'].Default.sum().item() == 0
934+
935+
936+
@pytest.mark.sensitivity
937+
def test_sensitivity_03(setup_api):
938+
# senstivity on run assumption
939+
runAssumption01 = []
940+
runAssumption02 = [("call", ("if", ["date", ">", "2022-10-01"]))]
941+
942+
rAssump = {
943+
"r0":runAssumption01
944+
,"r1":runAssumption02
945+
}
946+
947+
rs = setup_api.runByDealScenarios(test01
948+
,runAssump=rAssump
949+
,read=True)
950+
951+
assert rs.keys() == {"r0","r1"}
952+
953+
assert rs['r1']['result']['status'].loc[2].to_list() == ['2022-10-20', '', 'DealEnd', 'Clean Up']
954+
955+
@pytest.mark.sensitivity
956+
def test_sensitivity_04(setup_api):
957+
# senstivity on combo
958+
test02 = test01 & lens.bonds.Each()[1]['balance'].modify(lambda x: 0.9*x)
959+
dealMap = {
960+
"Normal":test01,"Shrink":test02
961+
}
962+
963+
myAssumption = ("Pool",("Mortgage",{"CDR":0.01},None,None,None)
964+
,None
965+
,None)
966+
967+
myAssumption2 = ("Pool",("Mortgage",None,{"CPR":0.01},None,None)
968+
,None
969+
,None)
970+
971+
runAssumption01 = []
972+
runAssumption02 = [("call", ("if", ["date", ">", "2022-10-01"]))]
973+
974+
rAssump = {
975+
"r0":runAssumption01
976+
,"r1":runAssumption02
977+
}
978+
rs = setup_api.runByCombo(dealMap
979+
,poolAssump={"withCdr":myAssumption
980+
,"withCpr":myAssumption2}
981+
,runAssump = rAssump
982+
,read=True)
983+
984+
assert len(rs.keys())==8

0 commit comments

Comments
 (0)