def test_calc_annual_return(self): date = pd.Timestamp("2012-01-02") dated_metric = DatedMetric(date) # verify that the method is just partial application of the superclass' method with patch("fa.analysis.finance.Metric.calc_annual_return", MagicMock(return_value=0)) as mock_calc_annual_return: ret = dated_metric.calc_annual_return(1, b=2) mock_calc_annual_return.assert_called_once_with(date, 1, b=2) self.assertEqual(ret, 0)
def test_calc_debt_to_asset_ratio(self): balance_sheet_data = { "Total Liabilities / Total Assets": [0.69, 0.68, 0.67] } balance_sheet_index = pd.to_datetime(["2012-01-01", "2012-01-02", "2012-01-03"]) dated_metric = DatedMetric( pd.Timestamp("2012-01-03"), balance_sheet=pd.DataFrame(balance_sheet_data, index=balance_sheet_index), financial_report_preparation_lag=np.timedelta64(1, 'D') ) debt_ratio = dated_metric.calc_debt_to_asset_ratio() # because of 1 day financial_report_preparation_lag self.assertEqual(debt_ratio, 0.68)
def test_calc_profit_margin(self): income_statement_data = { "Gross Income": [62, 50, 36], "Sales/Revenue": [3.1, 2.0, 1.2] } income_statement_index = pd.to_datetime(["2012-01-01", "2012-01-02", "2012-01-03"]) dated_metric = DatedMetric( pd.Timestamp("2012-01-03"), income_statement=pd.DataFrame(income_statement_data, index=income_statement_index), financial_report_preparation_lag=np.timedelta64(1, 'D') ) gross_profit_margin = dated_metric.calc_profit_margin("gross") # because of 1 day financial_report_preparation_lag self.assertEqual(gross_profit_margin, 25)
def test_calc_pe_ratio(self): historical_data = {"Adj Close": [3.0, 3.5, 4.2], "Close": [3.0, 5.0, 4.2]} historical_index = pd.to_datetime(["2012-01-01", "2012-01-03", "2012-01-05"]) income_statement_data = {"EPS (Basic)": [1.2, 2.5, 3.5], "EPS (Diluted)": [6.0, 4.0, 8.0]} income_statement_index = pd.to_datetime(["2012-01-01", "2012-01-02", "2012-01-03"]) dated_metric = DatedMetric( pd.Timestamp("2012-01-03"), historical=pd.DataFrame(historical_data, index=historical_index), income_statement=pd.DataFrame(income_statement_data, index=income_statement_index), financial_report_preparation_lag=np.timedelta64(1, 'D') ) pe_ratios1 = dated_metric.calc_pe_ratio() pe_ratios2 = dated_metric.calc_pe_ratio("Close", "EPS (Diluted)") # because of 1 day financial_report_preparation_lag self.assertEqual(pe_ratios1, 1.4) self.assertEqual(pe_ratios2, 1.25)