Example #1
0
    def test_from_fixed_rate(self):
        dah = MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0)
        self.assertTrue(len(dah) == 5)
        self.assertTrue(dah.max_date() == datetime.today().date())

        dah = MoneyFrame.from_fixed_rate(days=("2020-01-01", "2020-01-05"), start_bal=100.0, ayr_prcnt=5.0)
        self.assertTrue(len(dah) == 5)
Example #2
0
    def test_get_daily_balances_with_trans(self):
        bal_trans = BalanceTransfers.from_dict({
            "from_account_key": ["1", "2", "1", "2", "1", "2"],
            "to_account_key": ["2", "1", "3", "1", "2", "2"],
            "amount": [10.0, 5.0, 4.0, 15.0, 5.0, 100],
            "date": ["2019-01-03", "2019-01-03", "2019-01-03", "2019-01-04", "2019-01-05", "2019-01-01"],
        })

        balance_updates = BalanceUpdates.from_dict({
            "account_key": ["1", "1"],
            "balance": [100.0, 200.0],
            "date": ["2019-01-01", "2019-01-05"],
        })

        hist = MoneyFrame.from_updates_and_transfers(balance_transfers=bal_trans,
                                                     balance_updates=balance_updates, account_key="1")
        daily_bals = hist.get_daily_balance()
        print(daily_bals)
        mult = 0.18904171541952763 + 1.0
        exp = pd.DataFrame({
            "date": pd.to_datetime(["2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-05"]),
            "balance": [
                100.0,
                100.0 * mult,
                100.0 * mult * mult - 9.0,
                (100.0 * mult * mult - 9.0) * mult + 15.0,
                ((100.0 * mult * mult - 9.0) * mult + 15.0) * mult - 5.0
            ],
        }).set_index("date")

        np.testing.assert_equal(exp.index.values, daily_bals.index.values)
        np.testing.assert_array_almost_equal(exp["balance"].values, daily_bals.values)
Example #3
0
 def test_slice(self):
     dah = MoneyFrame.from_fixed_rate(days=("2020-01-01", "2020-01-05"), start_bal=100.0, ayr_prcnt=5.0)
     self.assertTrue(len(dah[2]) == 1)
     self.assertTrue(len(dah[2:3]) == 1)
     self.assertTrue(len(dah[2:4]) == 2)
     self.assertTrue(len(dah["2020-01-01"]) == 1)
     self.assertTrue(len(dah["2020-01-01":"2020-01-03"]) == 3)
Example #4
0
    def test_daily_interest_amounts(self):
        bal_trans = BalanceTransfers.from_dict({
            "from_account_key": ["0", "0"],
            "to_account_key": ["1", "1"],
            "amount": [90.0, 90.0],
            "date": ["2019-01-03", "2018-12-30"],
        })

        balance_updates = BalanceUpdates.from_dict({
            "account_key": ["1", "1"],
            "balance": [100.0, 200.0],
            "date": ["2019-01-01", "2019-01-05"],
        })

        exp = pd.DataFrame({
            "date": pd.to_datetime(["2018-12-29", "2018-12-30", "2018-12-31", "2019-01-01", "2019-01-02",
                                    "2019-01-03", "2019-01-04", "2019-01-05"]),
            "interest": [0.0, 0.0, 4.868330, 10.0 - 4.868330, 1.689833, 193.408221 - 90.0 - 101.689833,
                         196.676496 - 193.408221,
                         200.0 - 196.676496],
        }).set_index("date")["interest"]

        hist = MoneyFrame.from_updates_and_transfers(balance_transfers=bal_trans,
                                                     balance_updates=balance_updates, account_key="1")
        print(hist.get_daily_balance())
        print(hist.get_daily_transfers())

        daily_interest = hist.get_daily_interest()
        print(daily_interest)

        np.testing.assert_equal(exp.index.values, daily_interest.index.values)
        np.testing.assert_array_almost_equal(exp.values, daily_interest.values, 4)
Example #5
0
    def test_get_daily_balances(self):
        bal_trans = BalanceTransfers.from_dict({
            "from_account_key": [],
            "to_account_key": [],
            "amount": [],
            "date": [],
        })

        balance_updates = BalanceUpdates.from_dict({
            "account_key": ["1", "1", "1", "1", "1"],
            "balance": [100.0, 200.0, 220.0, 220.0, 200.0],
            "date": ["2019-01-01", "2019-01-03", "2019-01-04", "2019-01-06", "2019-01-08"],
        })

        hist = MoneyFrame.from_updates_and_transfers(balance_transfers=bal_trans,
                                                     balance_updates=balance_updates, account_key="1")
        daily_bals = hist.get_daily_balance()
        exp = pd.DataFrame({
            "date": pd.to_datetime(["2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-05", "2019-01-06",
                                    "2019-01-07", "2019-01-08"]),
            "balance": [100.0, 141.421356, 200.0, 220.0, 220.0, 220.0, 209.761770, 200.0],
        }).set_index("date")

        np.testing.assert_equal(exp.index.values, daily_bals.index.values)
        np.testing.assert_array_almost_equal(exp["balance"].values, daily_bals.values)
Example #6
0
    def test_interest(self):
        d = {
            "a": MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0),
            "b": MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0),
            "c": MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0),
        }

        mf_gb = MoneyFrameCollection(d, "account_key")

        expected = {"a": 5.0, "b": 5.0, "c": 5.0}

        d = mf_gb.avg_interest_rates()
        for k, v in d.items():
            self.assertAlmostEqual(v, expected[k])

        d = mf_gb.groupby(lambda x: 1).avg_interest_rates()
        self.assertAlmostEqual(d[1], 5.0)

        df = mf_gb.groupby(lambda x: 1).avg_interest_rates(as_df=True)
        print(df)
Example #7
0
    def test_filter_groupby(self):
        d = {
            "a": MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0),
            "b": MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0),
            "c": MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0),
        }

        mf_100 = MoneyFrame.from_fixed_rate(days=5, start_bal=100.0, ayr_prcnt=5.0)
        mf_200 = MoneyFrame.from_fixed_rate(days=5, start_bal=200.0, ayr_prcnt=5.0)
        mf_300 = MoneyFrame.from_fixed_rate(days=5, start_bal=300.0, ayr_prcnt=5.0)

        mf_gb = MoneyFrameCollection(d, "account_key")

        self.assertTrue(mf_gb.sum() == mf_300)
        self.assertTrue(mf_gb.filter(lambda x: x in ["a", "b"]).sum() == mf_200)

        mf_gb2 = mf_gb.groupby([('a', 1), ('b', 1), ('c', 2)])
        self.assertTrue(mf_gb2.filter(lambda x: x == 1).sum() == mf_200)
        self.assertTrue(mf_gb2.filter(lambda x: x == 2).sum() == mf_100)

        d = dict([('a', 1), ('b', 1), ('c', 2)])
        mf_gb2 = mf_gb.groupby(d)
        self.assertTrue(mf_gb2.filter(lambda x: x == 1).sum() == mf_200)
        self.assertTrue(mf_gb2.filter(lambda x: x == 2).sum() == mf_100)

        mf_gb2 = mf_gb.groupby((['a', 'b', 'c'], [1, 1, 2]))
        self.assertTrue(mf_gb2.filter(lambda x: x == 1).sum() == mf_200)
        self.assertTrue(mf_gb2.filter(lambda x: x == 2).sum() == mf_100)
Example #8
0
    def test_daily_summary(self):
        bal_trans = BalanceTransfers.from_dict({
            "from_account_key": ["0", "0"],
            "to_account_key": ["1", "1"],
            "amount": [90.0, 90.0],
            "date": ["2019-01-03", "2018-12-30"],
        })

        balance_updates = BalanceUpdates.from_dict({
            "account_key": ["1", "1"],
            "balance": [100.0, 200.0],
            "date": ["2019-01-01", "2019-01-05"],
        })

        hist = MoneyFrame.from_updates_and_transfers(balance_transfers=bal_trans, balance_updates=balance_updates,
                                                     account_key="1")
        print(hist.to_df())
Example #9
0
    def test_get_daily_balances_edge_case_1(self):
        bal_trans = BalanceTransfers.from_dict({
            "from_account_key": ["0", "0"],
            "to_account_key": ["1", "1"],
            "amount": [90.0, 90.0],
            "date": ["2019-01-03", "2018-12-30"],
        })

        balance_updates = BalanceUpdates.from_dict({
            "account_key": [],
            "balance": [],
            "date": [],
        })
        hist = MoneyFrame.from_updates_and_transfers(balance_transfers=bal_trans,
                                                     balance_updates=balance_updates, account_key="1")
        daily_bals = hist.get_daily_balance()
        exp = pd.DataFrame({
            "date": pd.to_datetime(
                ["2018-12-29", "2018-12-30", "2018-12-31", "2019-01-01", "2019-01-02", "2019-01-03"]),
            "balance": [0.0, 90.0, 90.0, 90.0, 90.0, 180.0],
        }).set_index("date")

        np.testing.assert_equal(exp.index.values, daily_bals.index.values)
        np.testing.assert_array_almost_equal(exp["balance"].values, daily_bals.values)
Example #10
0
    def test_get_daily_balances_with_early_trans(self):
        bal_trans = BalanceTransfers.from_dict({
            "from_account_key": ["0", "0"],
            "to_account_key": ["1", "1"],
            "amount": [90.0, 90.0],
            "date": ["2019-01-03", "2018-12-30"],
        })

        balance_updates = BalanceUpdates.from_dict({
            "account_key": ["1", "1"],
            "balance": [100.0, 200.0],
            "date": ["2019-01-01", "2019-01-05"],
        })

        hist = MoneyFrame.from_updates_and_transfers(balance_transfers=bal_trans,
                                                     balance_updates=balance_updates, account_key="1")
        daily_bals = hist.get_daily_balance()
        mult = 1.05409255338945984
        mult2 = 1.01689832725085294
        exp = pd.DataFrame({
            "date": pd.to_datetime(["2018-12-29", "2018-12-30", "2018-12-31", "2019-01-01", "2019-01-02",
                                    "2019-01-03", "2019-01-04", "2019-01-05"]),
            "balance": [
                0.0,  # 29
                90.0,  # 30
                90.0 * mult,  # 31
                90.0 * mult * mult,  # 01
                100.0 * mult2,  # 02
                100.0 * mult2 * mult2 + 90.0,  # 03
                (100.0 * mult2 * mult2 + 90.0) * mult2,  # 04
                (100.0 * mult2 * mult2 + 90.0) * mult2 * mult2,  # 05
            ],
        }).set_index("date")

        np.testing.assert_equal(exp.index.values, daily_bals.index.values)
        np.testing.assert_array_almost_equal(exp["balance"].values, daily_bals.values)