def test_2(self): cr = tuple(Project(300000, 14000, 0, 20).cash_flows) ed = tuple(Project(220000, 21000, 0, 20).cash_flows) + (CashFlow( 8, 35000), CashFlow(16, 35000)) i = EfInt(0.05) self.assertAlmostEqual(pw(cr, i), 474470.94479555974) self.assertAlmostEqual(pw(ed, i), 521429.6981340426) self.assertAlmostEqual(aw(cr, i), 38072.77615720737) self.assertAlmostEqual(aw(ed, i), 41840.86801633675) self.assertLess(pw(cr, i), pw(ed, i)) self.assertLess(aw(cr, i), aw(ed, i))
def test_2(self): i = NomInt(0.07, 2) self.assertAlmostEqual(pw(Bond(100, 0, 2, 3 / 12).cash_flows, i), 98.2946374365981) self.assertAlmostEqual(pw(Bond(100, 0, 2, 5 / 12).cash_flows, i), 97.17391685967232) self.assertAlmostEqual(pw(Bond(100, 0, 2, 3).cash_flows, i), 81.35006443077528) self.assertAlmostEqual( pw(Bond.from_rate(100, NomInt(0.04, 2), 2, 3).cash_flows, i), 92.00717047033226) self.assertAlmostEqual( pw(Bond.from_rate(100, NomInt(0.06, 2), 2, 3.25).cash_flows, i), 95.94840994600501)
def test_projects(self): self.assertAlmostEqual( pw(Project(-20000, 4000 - 1000, 4000, 10).cash_flows, EfInt(0.05)), 5620.857801717468) self.assertAlmostEqual( aw(Project(-20000, 4000 - 1000, 4000, 10).cash_flows, EfInt(0.05)), 727.9268005526942)
def test_1(self): i, n = 0.05, 6 y = pw(Project(-700, 370, 0, n).cash_flows, EfInt(i)) self.assertAlmostEqual(y, 1178.006064888955) self.assertAlmostEqual(y * fp(i, n), 1578.6407921875) self.assertAlmostEqual(y * fp(i, 4), 1431.8737344104306) self.assertAlmostEqual( np.float_( fsolve(lambda x: y - x * pf(i, 1) - 5 * x * pf(i, 3), np.array(0))), 223.464034554222) i, n = 0.09, 6 y = pw(Project(-700, 370, 0, n).cash_flows, EfInt(i)) self.assertAlmostEqual(y, 959.7898783854448) self.assertAlmostEqual(y * fp(i, n), 1609.6637114243001) self.assertAlmostEqual(y * fp(i, 4), 1354.821741793031) self.assertAlmostEqual( np.float_( fsolve(lambda x: y - x * pf(i, 1) - 5 * x * pf(i, 3), np.array(0))), 200.862256010023)
def test_5(self): y = fsolve( lambda y_: pw( Bond.from_rate(100, NomInt(0.07, 2), 2, 7.5).cash_flows, NomInt(y_, 2)) * fp(y_ / 2, 0.5) - 108, np.array(0.1)) b = lambda cr: pw( Bond.from_rate(1000, NomInt(cr, 2), 2, 9).cash_flows, NomInt(y, 2)) cur_cr = np.ceil( np.float_( fsolve(lambda cr: 9500000 / 2 - (4400 * b(cr)), np.array(0.1))) / 0.0025) * 0.0025 self.assertAlmostEqual(cur_cr, 0.0725) self.assertAlmostEqual(np.float_(4400 * b(cur_cr)), 4802235.185695503) cur_cr = np.ceil( np.float_( fsolve(lambda cr: 9500000 / 2 / (1 - 0.008) - (4400 * b(cr)), np.array(0.1))) / 0.0025) * 0.0025 self.assertAlmostEqual(cur_cr, 0.0725) self.assertAlmostEqual(np.float_(4400 * b(cur_cr) * (1 - 0.008)), 4763817.304209939)
def test_3(self): self.assertAlmostEqual( yield_( Bond.from_rate(100, NomInt(0.07, 2), 2, 3).cash_flows, 100, EfInt(0)).to_nom(2).rate, 0.07) self.assertAlmostEqual( pw( Bond.from_rate(100, NomInt(0.04, 2), 2, 3).cash_flows, NomInt(0.05, 2)) + 100 * 0.04 / 2, 99.24593731921009) self.assertAlmostEqual( yield_( Bond.from_rate(100, NomInt(0.03, 2), 2, 2.25).cash_flows, 100, EfInt(0)).to_nom(2).rate, 0.026754568040623247) self.assertAlmostEqual( pw( Bond.from_rate(100, NomInt(0.07, 2), 2, 2.25).cash_flows, NomInt(0.05, 2)), 102.65033622528411) self.assertAlmostEqual( np.float_( fsolve( lambda c: pw( Bond.from_rate(100, NomInt(c, 2), 2, 2.25).cash_flows, NomInt(0.03, 2)) - 114, np.array(0.1)), ), 0.10627047075771787)