import unittest import datetime from analytics import DualCorrTranche, TrancheBasket import numpy as np import pickle class TestPickle(unittest.TestCase): bozeman = DualCorrTranche.from_tradeid(1037) def test_pickle(self): a = pickle.loads(pickle.dumps(self.bozeman)) self.assertTrue(hash(a) == hash(self.bozeman)) def test_pv(self): self.assertAlmostEqual(self.bozeman.upfront, 0.0) class TestTopDown(unittest.TestCase): eu30 = TrancheBasket("EU", 30, "5yr", value_date=datetime.date(2019, 8, 15)) market_quotes = eu30._accrued + eu30.tranche_quotes.quotes def test_invariant(self): hy35 = TrancheBasket("HY", 35, "5yr", value_date=datetime.date(2020, 10, 5)) hy35.tweak() hy35.build_skew() self.assertAlmostEqual( hy35.index_pv(clean=True).bond_price, (hy35.tranche_pvs().bond_price * np.diff(hy35.K)).sum(), ) def test_bottomup(self): self.eu30.build_skew() upfronts = 1 - self.eu30.tranche_pvs().bond_price self.assertTrue(np.allclose(upfronts[:-1], self.market_quotes[:-1])) def test_topdown(self): self.eu30.build_skew("topdown") upfronts = 1 - self.eu30.tranche_pvs(complement=True).bond_price self.assertTrue(np.allclose(upfronts[1:], self.market_quotes[1:]))