summaryrefslogtreecommitdiffstats
path: root/tests/test_pickle.py
blob: 4bb1d46faeea62b32c803224adffa71187ba4c00 (plain)
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
import unittest
import array
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))
        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], array.array('d', [75*1e-4]), 0.4)
        sc_pickled = loads(dumps(sc))
        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))
        fl_pickled = loads(dumps(fl))
        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))