1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
import unittest
import numpy as np
from pyisda.legs import ContingentLeg, FeeLeg
from pyisda.curve import SpreadCurve
from pickle import dumps, loads
import datetime
from pyisda.utils import build_yc
class TestPickle(unittest.TestCase):
trade_date = datetime.date(2016, 10, 6)
yc = build_yc(trade_date, ql_curve=True)
def assertListAlmostEqual(self, l1, l2):
if len(l1) != len(l2):
raise AssertionError
for a, b in zip(l1, l2):
self.assertAlmostEqual(a, b)
def test_yc(self):
orig_dfs = [self.yc.discount_factor(d) for d in self.yc.dates]
pickled_yc = loads(dumps(self.yc, 2))
self.assertListAlmostEqual(
[pickled_yc.discount_factor(d) for d in pickled_yc.dates], orig_dfs
)
def test_legs(self):
start_date = datetime.date(2016, 3, 20)
end_date = datetime.date(2021, 12, 20)
step_in_date = datetime.date(2016, 10, 7)
value_date = datetime.date(2016, 10, 11)
cl = ContingentLeg(start_date, end_date, 1)
fl = FeeLeg(start_date, end_date, True, 1, 1)
sc = SpreadCurve(
self.trade_date,
self.yc,
start_date,
step_in_date,
value_date,
[end_date],
np.array([75 * 1e-4]),
0.4,
)
sc_pickled = loads(dumps(sc, 2))
self.assertListAlmostEqual(
[sc.survival_probability(d) for d in self.yc.dates],
[sc_pickled.survival_probability(d) for d in self.yc.dates],
)
cl_pickled = loads(dumps(cl, 2))
fl_pickled = loads(dumps(fl, 2))
self.assertEqual(
cl_pickled.pv(self.trade_date, step_in_date, value_date, self.yc, sc, 0.4),
cl.pv(self.trade_date, step_in_date, value_date, self.yc, sc, 0.4),
)
self.assertEqual(
fl.pv(self.trade_date, step_in_date, value_date, self.yc, sc, False),
fl_pickled.pv(
self.trade_date, step_in_date, value_date, self.yc, sc, False
),
)
if __name__ == "__main__":
unittest.main()
|