Chris@87
|
1 from __future__ import division, absolute_import, print_function
|
Chris@87
|
2
|
Chris@87
|
3 import numpy as np
|
Chris@87
|
4 from numpy.testing import (
|
Chris@87
|
5 run_module_suite, TestCase, assert_, assert_almost_equal
|
Chris@87
|
6 )
|
Chris@87
|
7
|
Chris@87
|
8
|
Chris@87
|
9 class TestFinancial(TestCase):
|
Chris@87
|
10 def test_rate(self):
|
Chris@87
|
11 assert_almost_equal(np.rate(10, 0, -3500, 10000),
|
Chris@87
|
12 0.1107, 4)
|
Chris@87
|
13
|
Chris@87
|
14 def test_irr(self):
|
Chris@87
|
15 v = [-150000, 15000, 25000, 35000, 45000, 60000]
|
Chris@87
|
16 assert_almost_equal(np.irr(v),
|
Chris@87
|
17 0.0524, 2)
|
Chris@87
|
18 v = [-100, 0, 0, 74]
|
Chris@87
|
19 assert_almost_equal(np.irr(v),
|
Chris@87
|
20 -0.0955, 2)
|
Chris@87
|
21 v = [-100, 39, 59, 55, 20]
|
Chris@87
|
22 assert_almost_equal(np.irr(v),
|
Chris@87
|
23 0.28095, 2)
|
Chris@87
|
24 v = [-100, 100, 0, -7]
|
Chris@87
|
25 assert_almost_equal(np.irr(v),
|
Chris@87
|
26 -0.0833, 2)
|
Chris@87
|
27 v = [-100, 100, 0, 7]
|
Chris@87
|
28 assert_almost_equal(np.irr(v),
|
Chris@87
|
29 0.06206, 2)
|
Chris@87
|
30 v = [-5, 10.5, 1, -8, 1]
|
Chris@87
|
31 assert_almost_equal(np.irr(v),
|
Chris@87
|
32 0.0886, 2)
|
Chris@87
|
33
|
Chris@87
|
34 def test_pv(self):
|
Chris@87
|
35 assert_almost_equal(np.pv(0.07, 20, 12000, 0),
|
Chris@87
|
36 -127128.17, 2)
|
Chris@87
|
37
|
Chris@87
|
38 def test_fv(self):
|
Chris@87
|
39 assert_almost_equal(np.fv(0.075, 20, -2000, 0, 0),
|
Chris@87
|
40 86609.36, 2)
|
Chris@87
|
41
|
Chris@87
|
42 def test_pmt(self):
|
Chris@87
|
43 assert_almost_equal(np.pmt(0.08/12, 5*12, 15000),
|
Chris@87
|
44 -304.146, 3)
|
Chris@87
|
45
|
Chris@87
|
46 def test_ppmt(self):
|
Chris@87
|
47 np.round(np.ppmt(0.1/12, 1, 60, 55000), 2) == 710.25
|
Chris@87
|
48
|
Chris@87
|
49 def test_ipmt(self):
|
Chris@87
|
50 np.round(np.ipmt(0.1/12, 1, 24, 2000), 2) == 16.67
|
Chris@87
|
51
|
Chris@87
|
52 def test_nper(self):
|
Chris@87
|
53 assert_almost_equal(np.nper(0.075, -2000, 0, 100000.),
|
Chris@87
|
54 21.54, 2)
|
Chris@87
|
55
|
Chris@87
|
56 def test_nper2(self):
|
Chris@87
|
57 assert_almost_equal(np.nper(0.0, -2000, 0, 100000.),
|
Chris@87
|
58 50.0, 1)
|
Chris@87
|
59
|
Chris@87
|
60 def test_npv(self):
|
Chris@87
|
61 assert_almost_equal(
|
Chris@87
|
62 np.npv(0.05, [-15000, 1500, 2500, 3500, 4500, 6000]),
|
Chris@87
|
63 122.89, 2)
|
Chris@87
|
64
|
Chris@87
|
65 def test_mirr(self):
|
Chris@87
|
66 val = [-4500, -800, 800, 800, 600, 600, 800, 800, 700, 3000]
|
Chris@87
|
67 assert_almost_equal(np.mirr(val, 0.08, 0.055), 0.0666, 4)
|
Chris@87
|
68
|
Chris@87
|
69 val = [-120000, 39000, 30000, 21000, 37000, 46000]
|
Chris@87
|
70 assert_almost_equal(np.mirr(val, 0.10, 0.12), 0.126094, 6)
|
Chris@87
|
71
|
Chris@87
|
72 val = [100, 200, -50, 300, -200]
|
Chris@87
|
73 assert_almost_equal(np.mirr(val, 0.05, 0.06), 0.3428, 4)
|
Chris@87
|
74
|
Chris@87
|
75 val = [39000, 30000, 21000, 37000, 46000]
|
Chris@87
|
76 assert_(np.isnan(np.mirr(val, 0.10, 0.12)))
|
Chris@87
|
77
|
Chris@87
|
78 def test_when(self):
|
Chris@87
|
79 #begin
|
Chris@87
|
80 assert_almost_equal(np.rate(10, 20, -3500, 10000, 1),
|
Chris@87
|
81 np.rate(10, 20, -3500, 10000, 'begin'), 4)
|
Chris@87
|
82 #end
|
Chris@87
|
83 assert_almost_equal(np.rate(10, 20, -3500, 10000),
|
Chris@87
|
84 np.rate(10, 20, -3500, 10000, 'end'), 4)
|
Chris@87
|
85 assert_almost_equal(np.rate(10, 20, -3500, 10000, 0),
|
Chris@87
|
86 np.rate(10, 20, -3500, 10000, 'end'), 4)
|
Chris@87
|
87
|
Chris@87
|
88 # begin
|
Chris@87
|
89 assert_almost_equal(np.pv(0.07, 20, 12000, 0, 1),
|
Chris@87
|
90 np.pv(0.07, 20, 12000, 0, 'begin'), 2)
|
Chris@87
|
91 # end
|
Chris@87
|
92 assert_almost_equal(np.pv(0.07, 20, 12000, 0),
|
Chris@87
|
93 np.pv(0.07, 20, 12000, 0, 'end'), 2)
|
Chris@87
|
94 assert_almost_equal(np.pv(0.07, 20, 12000, 0, 0),
|
Chris@87
|
95 np.pv(0.07, 20, 12000, 0, 'end'), 2)
|
Chris@87
|
96
|
Chris@87
|
97 # begin
|
Chris@87
|
98 assert_almost_equal(np.fv(0.075, 20, -2000, 0, 1),
|
Chris@87
|
99 np.fv(0.075, 20, -2000, 0, 'begin'), 4)
|
Chris@87
|
100 # end
|
Chris@87
|
101 assert_almost_equal(np.fv(0.075, 20, -2000, 0),
|
Chris@87
|
102 np.fv(0.075, 20, -2000, 0, 'end'), 4)
|
Chris@87
|
103 assert_almost_equal(np.fv(0.075, 20, -2000, 0, 0),
|
Chris@87
|
104 np.fv(0.075, 20, -2000, 0, 'end'), 4)
|
Chris@87
|
105
|
Chris@87
|
106 # begin
|
Chris@87
|
107 assert_almost_equal(np.pmt(0.08/12, 5*12, 15000., 0, 1),
|
Chris@87
|
108 np.pmt(0.08/12, 5*12, 15000., 0, 'begin'), 4)
|
Chris@87
|
109 # end
|
Chris@87
|
110 assert_almost_equal(np.pmt(0.08/12, 5*12, 15000., 0),
|
Chris@87
|
111 np.pmt(0.08/12, 5*12, 15000., 0, 'end'), 4)
|
Chris@87
|
112 assert_almost_equal(np.pmt(0.08/12, 5*12, 15000., 0, 0),
|
Chris@87
|
113 np.pmt(0.08/12, 5*12, 15000., 0, 'end'), 4)
|
Chris@87
|
114
|
Chris@87
|
115 # begin
|
Chris@87
|
116 assert_almost_equal(np.ppmt(0.1/12, 1, 60, 55000, 0, 1),
|
Chris@87
|
117 np.ppmt(0.1/12, 1, 60, 55000, 0, 'begin'), 4)
|
Chris@87
|
118 # end
|
Chris@87
|
119 assert_almost_equal(np.ppmt(0.1/12, 1, 60, 55000, 0),
|
Chris@87
|
120 np.ppmt(0.1/12, 1, 60, 55000, 0, 'end'), 4)
|
Chris@87
|
121 assert_almost_equal(np.ppmt(0.1/12, 1, 60, 55000, 0, 0),
|
Chris@87
|
122 np.ppmt(0.1/12, 1, 60, 55000, 0, 'end'), 4)
|
Chris@87
|
123
|
Chris@87
|
124 # begin
|
Chris@87
|
125 assert_almost_equal(np.ipmt(0.1/12, 1, 24, 2000, 0, 1),
|
Chris@87
|
126 np.ipmt(0.1/12, 1, 24, 2000, 0, 'begin'), 4)
|
Chris@87
|
127 # end
|
Chris@87
|
128 assert_almost_equal(np.ipmt(0.1/12, 1, 24, 2000, 0),
|
Chris@87
|
129 np.ipmt(0.1/12, 1, 24, 2000, 0, 'end'), 4)
|
Chris@87
|
130 assert_almost_equal(np.ipmt(0.1/12, 1, 24, 2000, 0, 0),
|
Chris@87
|
131 np.ipmt(0.1/12, 1, 24, 2000, 0, 'end'), 4)
|
Chris@87
|
132
|
Chris@87
|
133 # begin
|
Chris@87
|
134 assert_almost_equal(np.nper(0.075, -2000, 0, 100000., 1),
|
Chris@87
|
135 np.nper(0.075, -2000, 0, 100000., 'begin'), 4)
|
Chris@87
|
136 # end
|
Chris@87
|
137 assert_almost_equal(np.nper(0.075, -2000, 0, 100000.),
|
Chris@87
|
138 np.nper(0.075, -2000, 0, 100000., 'end'), 4)
|
Chris@87
|
139 assert_almost_equal(np.nper(0.075, -2000, 0, 100000., 0),
|
Chris@87
|
140 np.nper(0.075, -2000, 0, 100000., 'end'), 4)
|
Chris@87
|
141
|
Chris@87
|
142 def test_broadcast(self):
|
Chris@87
|
143 assert_almost_equal(np.nper(0.075, -2000, 0, 100000., [0, 1]),
|
Chris@87
|
144 [21.5449442, 20.76156441], 4)
|
Chris@87
|
145
|
Chris@87
|
146 assert_almost_equal(np.ipmt(0.1/12, list(range(5)), 24, 2000),
|
Chris@87
|
147 [-17.29165168, -16.66666667, -16.03647345,
|
Chris@87
|
148 -15.40102862, -14.76028842], 4)
|
Chris@87
|
149
|
Chris@87
|
150 assert_almost_equal(np.ppmt(0.1/12, list(range(5)), 24, 2000),
|
Chris@87
|
151 [-74.998201, -75.62318601, -76.25337923,
|
Chris@87
|
152 -76.88882405, -77.52956425], 4)
|
Chris@87
|
153
|
Chris@87
|
154 assert_almost_equal(np.ppmt(0.1/12, list(range(5)), 24, 2000, 0,
|
Chris@87
|
155 [0, 0, 1, 'end', 'begin']),
|
Chris@87
|
156 [-74.998201, -75.62318601, -75.62318601,
|
Chris@87
|
157 -76.88882405, -76.88882405], 4)
|
Chris@87
|
158
|
Chris@87
|
159 if __name__ == "__main__":
|
Chris@87
|
160 run_module_suite()
|