13
13
14
14
15
15
class TestFinancial (object ):
16
+ def test_when (self ):
17
+ # begin
18
+ assert_equal (npf .rate (10 , 20 , - 3500 , 10000 , 1 ),
19
+ npf .rate (10 , 20 , - 3500 , 10000 , 'begin' ))
20
+ # end
21
+ assert_equal (npf .rate (10 , 20 , - 3500 , 10000 ),
22
+ npf .rate (10 , 20 , - 3500 , 10000 , 'end' ))
23
+ assert_equal (npf .rate (10 , 20 , - 3500 , 10000 , 0 ),
24
+ npf .rate (10 , 20 , - 3500 , 10000 , 'end' ))
25
+
26
+ # begin
27
+ assert_equal (npf .pv (0.07 , 20 , 12000 , 0 , 1 ),
28
+ npf .pv (0.07 , 20 , 12000 , 0 , 'begin' ))
29
+ # end
30
+ assert_equal (npf .pv (0.07 , 20 , 12000 , 0 ),
31
+ npf .pv (0.07 , 20 , 12000 , 0 , 'end' ))
32
+ assert_equal (npf .pv (0.07 , 20 , 12000 , 0 , 0 ),
33
+ npf .pv (0.07 , 20 , 12000 , 0 , 'end' ))
34
+
35
+ # begin
36
+ assert_equal (npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 1 ),
37
+ npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 'begin' ))
38
+ # end
39
+ assert_equal (npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 ),
40
+ npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 'end' ))
41
+ assert_equal (npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 0 ),
42
+ npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 'end' ))
43
+
44
+ # begin
45
+ assert_equal (npf .nper (0.075 , - 2000 , 0 , 100000. , 1 ),
46
+ npf .nper (0.075 , - 2000 , 0 , 100000. , 'begin' ))
47
+ # end
48
+ assert_equal (npf .nper (0.075 , - 2000 , 0 , 100000. ),
49
+ npf .nper (0.075 , - 2000 , 0 , 100000. , 'end' ))
50
+ assert_equal (npf .nper (0.075 , - 2000 , 0 , 100000. , 0 ),
51
+ npf .nper (0.075 , - 2000 , 0 , 100000. , 'end' ))
52
+
53
+ def test_decimal_with_when (self ):
54
+ """
55
+ Test that decimals are still supported if the when argument is passed
56
+ """
57
+ # begin
58
+ assert_equal (npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
59
+ Decimal ('10000' ), Decimal ('1' )),
60
+ npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
61
+ Decimal ('10000' ), 'begin' ))
62
+ # end
63
+ assert_equal (npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
64
+ Decimal ('10000' )),
65
+ npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
66
+ Decimal ('10000' ), 'end' ))
67
+ assert_equal (npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
68
+ Decimal ('10000' ), Decimal ('0' )),
69
+ npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
70
+ Decimal ('10000' ), 'end' ))
71
+
72
+ # begin
73
+ assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
74
+ Decimal ('0' ), Decimal ('1' )),
75
+ npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
76
+ Decimal ('0' ), 'begin' ))
77
+ # end
78
+ assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
79
+ Decimal ('0' )),
80
+ npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
81
+ Decimal ('0' ), 'end' ))
82
+ assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
83
+ Decimal ('0' ), Decimal ('0' )),
84
+ npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
85
+ Decimal ('0' ), 'end' ))
86
+
87
+
88
+ class TestPV :
89
+ def test_pv (self ):
90
+ assert_almost_equal (npf .pv (0.07 , 20 , 12000 , 0 ), - 127128.17 , 2 )
91
+
92
+ def test_pv_decimal (self ):
93
+ assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
94
+ Decimal ('0' )),
95
+ Decimal ('-127128.1709461939327295222005' ))
96
+
97
+
98
+ class TestRate :
16
99
def test_rate (self ):
17
100
assert_almost_equal (npf .rate (10 , 0 , - 3500 , 10000 ), 0.1107 , 4 )
18
101
@@ -40,37 +123,50 @@ def test_rate_decimal(self):
40
123
Decimal ('10000' ))
41
124
assert_equal (Decimal ('0.1106908537142689284704528100' ), rate )
42
125
43
- def test_pv (self ):
44
- assert_almost_equal (npf .pv (0.07 , 20 , 12000 , 0 ), - 127128.17 , 2 )
45
126
46
- def test_pv_decimal (self ):
47
- assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
48
- Decimal ('0' )),
49
- Decimal ('-127128.1709461939327295222005' ))
127
+ class TestNpv :
128
+ def test_npv (self ):
129
+ assert_almost_equal (
130
+ npf .npv (0.05 , [- 15000 , 1500 , 2500 , 3500 , 4500 , 6000 ]),
131
+ 122.89 , 2 )
132
+
133
+ def test_npv_decimal (self ):
134
+ assert_equal (
135
+ npf .npv (Decimal ('0.05' ), [- 15000 , 1500 , 2500 , 3500 , 4500 , 6000 ]),
136
+ Decimal ('122.894854950942692161628715' ))
137
+
50
138
51
- def test_pmt (self ):
139
+ class TestPmt :
140
+ def test_pmt_simple (self ):
52
141
res = npf .pmt (0.08 / 12 , 5 * 12 , 15000 )
53
142
tgt = - 304.145914
54
143
assert_allclose (res , tgt )
144
+
145
+ def test_pmt_zero_rate (self ):
55
146
# Test the edge case where rate == 0.0
56
147
res = npf .pmt (0.0 , 5 * 12 , 15000 )
57
148
tgt = - 250.0
58
149
assert_allclose (res , tgt )
150
+
151
+ def test_pmt_broadcast (self ):
59
152
# Test the case where we use broadcast and
60
153
# the arguments passed in are arrays.
61
154
res = npf .pmt ([[0.0 , 0.8 ], [0.3 , 0.8 ]], [12 , 3 ], [2000 , 20000 ])
62
155
tgt = numpy .array ([[- 166.66667 , - 19311.258 ], [- 626.90814 , - 19311.258 ]])
63
156
assert_allclose (res , tgt )
64
157
65
- def test_pmt_decimal (self ):
158
+ def test_pmt_decimal_simple (self ):
66
159
res = npf .pmt (Decimal ('0.08' ) / Decimal ('12' ), 5 * 12 , 15000 )
67
160
tgt = Decimal ('-304.1459143262052370338701494' )
68
161
assert_equal (res , tgt )
162
+
163
+ def test_pmt_decimal_zero_rate (self ):
69
164
# Test the edge case where rate == 0.0
70
165
res = npf .pmt (Decimal ('0' ), Decimal ('60' ), Decimal ('15000' ))
71
166
tgt = - 250
72
167
assert_equal (res , tgt )
73
168
169
+ def test_pmt_decimal_broadcast (self ):
74
170
# Test the case where we use broadcast and
75
171
# the arguments passed in are arrays.
76
172
res = npf .pmt ([[Decimal ('0' ), Decimal ('0.8' )],
@@ -90,16 +186,8 @@ def test_pmt_decimal(self):
90
186
assert_equal (res [1 ][0 ], tgt [1 ][0 ])
91
187
assert_equal (res [1 ][1 ], tgt [1 ][1 ])
92
188
93
- def test_npv (self ):
94
- assert_almost_equal (
95
- npf .npv (0.05 , [- 15000 , 1500 , 2500 , 3500 , 4500 , 6000 ]),
96
- 122.89 , 2 )
97
-
98
- def test_npv_decimal (self ):
99
- assert_equal (
100
- npf .npv (Decimal ('0.05' ), [- 15000 , 1500 , 2500 , 3500 , 4500 , 6000 ]),
101
- Decimal ('122.894854950942692161628715' ))
102
189
190
+ class TestMirr :
103
191
def test_mirr (self ):
104
192
val = [- 4500 , - 800 , 800 , 800 , 600 , 600 , 800 , 800 , 700 , 3000 ]
105
193
assert_almost_equal (npf .mirr (val , 0.08 , 0.055 ), 0.0666 , 4 )
@@ -134,81 +222,6 @@ def test_mirr_decimal(self):
134
222
Decimal ('37000' ), Decimal ('46000' )]
135
223
assert_ (numpy .isnan (npf .mirr (val , Decimal ('0.10' ), Decimal ('0.12' ))))
136
224
137
- def test_when (self ):
138
- # begin
139
- assert_equal (npf .rate (10 , 20 , - 3500 , 10000 , 1 ),
140
- npf .rate (10 , 20 , - 3500 , 10000 , 'begin' ))
141
- # end
142
- assert_equal (npf .rate (10 , 20 , - 3500 , 10000 ),
143
- npf .rate (10 , 20 , - 3500 , 10000 , 'end' ))
144
- assert_equal (npf .rate (10 , 20 , - 3500 , 10000 , 0 ),
145
- npf .rate (10 , 20 , - 3500 , 10000 , 'end' ))
146
-
147
- # begin
148
- assert_equal (npf .pv (0.07 , 20 , 12000 , 0 , 1 ),
149
- npf .pv (0.07 , 20 , 12000 , 0 , 'begin' ))
150
- # end
151
- assert_equal (npf .pv (0.07 , 20 , 12000 , 0 ),
152
- npf .pv (0.07 , 20 , 12000 , 0 , 'end' ))
153
- assert_equal (npf .pv (0.07 , 20 , 12000 , 0 , 0 ),
154
- npf .pv (0.07 , 20 , 12000 , 0 , 'end' ))
155
-
156
- # begin
157
- assert_equal (npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 1 ),
158
- npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 'begin' ))
159
- # end
160
- assert_equal (npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 ),
161
- npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 'end' ))
162
- assert_equal (npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 0 ),
163
- npf .pmt (0.08 / 12 , 5 * 12 , 15000. , 0 , 'end' ))
164
-
165
- # begin
166
- assert_equal (npf .nper (0.075 , - 2000 , 0 , 100000. , 1 ),
167
- npf .nper (0.075 , - 2000 , 0 , 100000. , 'begin' ))
168
- # end
169
- assert_equal (npf .nper (0.075 , - 2000 , 0 , 100000. ),
170
- npf .nper (0.075 , - 2000 , 0 , 100000. , 'end' ))
171
- assert_equal (npf .nper (0.075 , - 2000 , 0 , 100000. , 0 ),
172
- npf .nper (0.075 , - 2000 , 0 , 100000. , 'end' ))
173
-
174
- def test_decimal_with_when (self ):
175
- """
176
- Test that decimals are still supported if the when argument is passed
177
- """
178
- # begin
179
- assert_equal (npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
180
- Decimal ('10000' ), Decimal ('1' )),
181
- npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
182
- Decimal ('10000' ), 'begin' ))
183
- # end
184
- assert_equal (npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
185
- Decimal ('10000' )),
186
- npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
187
- Decimal ('10000' ), 'end' ))
188
- assert_equal (npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
189
- Decimal ('10000' ), Decimal ('0' )),
190
- npf .rate (Decimal ('10' ), Decimal ('20' ), Decimal ('-3500' ),
191
- Decimal ('10000' ), 'end' ))
192
-
193
- # begin
194
- assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
195
- Decimal ('0' ), Decimal ('1' )),
196
- npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
197
- Decimal ('0' ), 'begin' ))
198
- # end
199
- assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
200
- Decimal ('0' )),
201
- npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
202
- Decimal ('0' ), 'end' ))
203
- assert_equal (npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
204
- Decimal ('0' ), Decimal ('0' )),
205
- npf .pv (Decimal ('0.07' ), Decimal ('20' ), Decimal ('12000' ),
206
- Decimal ('0' ), 'end' ))
207
-
208
- def test_broadcast (self ):
209
- assert_almost_equal (npf .nper (0.075 , - 2000 , 0 , 100000. , [0 , 1 ]),
210
- [21.5449442 , 20.76156441 ], 4 )
211
-
212
225
213
226
class TestNper :
214
227
def test_basic_values (self ):
@@ -233,6 +246,10 @@ def test_infinite_payments(self):
233
246
def test_no_interest (self ):
234
247
assert_ (npf .nper (0 , - 100 , 1000 ) == 10 )
235
248
249
+ def test_broadcast (self ):
250
+ assert_almost_equal (npf .nper (0.075 , - 2000 , 0 , 100000. , [0 , 1 ]),
251
+ [21.5449442 , 20.76156441 ], 4 )
252
+
236
253
237
254
class TestPpmt :
238
255
def test_float (self ):
0 commit comments