Beispiel #1
0
def expr_div_ave_y(a, b):
    ''' name = a/ ((b1 + b2)/2)
    '''
    return Div(
        Get(a, period='y'),
        Div(Sum(Get(b, period='y'), Before(Get(b, period='y'), past_year=1)),
            Value(2)))
Beispiel #2
0
 def test_cash_flow_free_y(self):
     m = inv.cashflow_free_y().expr
     v = m.eval(self.stock, 2019, 1)
     s1 = Get('n_cashflow_act', period='y').eval(self.stock, 2019, 1)
     s2 = Get('c_pay_acq_const_fiolta',
              period='y').eval(self.stock, 2019, 1)
     self.assertEqual(s1-s2, v)
Beispiel #3
0
 def test_interest_bearing_liab_y(self):
     v = balance_sheet.interest_bearing_liab_y().expr.eval(
         self.stock, 2019, 1)
     s1 = Get('lt_borr', period='y').eval(self.stock, 2019, 1)
     s2 = Get('st_borr', period='y').eval(self.stock, 2019, 1)
     s3 = Get('bond_payable', period='y').eval(self.stock, 2019, 1)
     s4 = Get('lt_payable', period='y').eval(self.stock, 2019, 1)
     s5 = Get('non_cur_liab_due_1y', period='y').eval(self.stock, 2019, 1)
     self.assertEqual(s1 + s2 + s3 + s4 + s5, v)
Beispiel #4
0
 def test_net_operating_cycle(self):
     m = op.net_operating_cycle().expr
     v = m.eval(self.stock, 2019, 1)
     s1 = Get('f_days_inventory_y').eval(self.stock, 2019, 1)
     s2 = Get('f_days_accounts_receiv_y',
              period='y').eval(self.stock, 2019, 1)
     s3 = Get('f_days_prepayment_y', period='y').eval(self.stock, 2019, 1)
     s4 = Get('f_days_acct_payable_y', period='y').eval(self.stock, 2019, 1)
     s5 = Get('f_days_adv_receipts_y', period='y').eval(self.stock, 2019, 1)
     self.assertEqual(s1 + s2 + s3 - s4 - s5, v)
Beispiel #5
0
def metrics_ratio(name: str, a: str, b: str, display: str, period: str = None):
    '''name = a / b
    Arg:
        period: y
    '''
    if period == 'y':
        return MetricsMeta(f'{name}_y.r',
                           Div(Get(f'{a}_y'), Get(f'{b}_y')),
                           display=display)
    return MetricsMeta(f'{name}.r', Div(Get(a), Get(b)), display=display)
Beispiel #6
0
    def test_cumulative(self):
        class StockStub(ExprCtx):
            def get_metrics(self, name: str, year: int, quarter: int):
                return 1

        stock = StockStub()

        get = Get('cumulative')
        v = get.eval(stock, 2019, 1)
        self.assertEqual(1, v)
        print(get, '\r\n')
Beispiel #7
0
    def test_f_revenue_q_r_y2y(self):
        m = income.revenue_q_r_y2y()

        # (2019.1 - 2018.1)/2018.1
        v = m.expr.eval(self.stock, 2019, 1)
        s1 = Get('revenue').eval(self.stock, 2019, 1)
        s2 = Get('revenue').eval(self.stock, 2018, 1)
        self.assertEqual((s1 - s2) / s2, v)

        # (2019.4 - 2018.4)/2018.4
        v = m.expr.eval(self.stock, 2019, 4)
        self.assertEqual((8 - 4) / 4, v)
Beispiel #8
0
    def test_f_income_attr_p_q_r_y2y(self):
        m = income.income_attr_p_q_r_y2y()

        # (2019.1 - 2018.1)/2018.1
        v = m.expr.eval(self.stock, 2019, 1)
        s1 = Get('n_income_attr_p').eval(self.stock, 2019, 1)
        s2 = Get('n_income_attr_p').eval(self.stock, 2018, 1)
        self.assertEqual((s1 - s2) / s2, v)

        # (2019.4 - 2018.4)/2018.4
        v = m.expr.eval(self.stock, 2019, 4)
        s1 = Get('n_income_attr_p').eval(self.stock, 2019, 4)
        s2 = Get('n_income_attr_p').eval(self.stock, 2018, 4)
        self.assertEqual((s1 - s2) / s2, v)
Beispiel #9
0
    def test_increment_q4(self):
        class StockStub(ExprCtx):
            def get_metrics(self, name: str, year: int, quarter: int):
                if year == 2019 and quarter == 4:
                    return 3
                elif year == 2019 and quarter == 3:
                    return 1

        stock = StockStub()

        get = Get('increment', increment=True)
        v = get.eval(stock, 2019, 4)
        self.assertEqual(2, v)
        print(get, '\r\n')
Beispiel #10
0
    def test_income_attr_p_ttm(self):
        m = income.income_attr_p_ttm()

        # (2019.1 - 2018.1)/2018.1
        v = m.expr.eval(self.stock, 2019, 1)
        s1 = Get('n_income_attr_p', increment=True,
                 var_type='f').eval(self.stock, 2019, 1)
        s2 = Get('n_income_attr_p', increment=True,
                 var_type='f').eval(self.stock, 2018, 4)
        s3 = Get('n_income_attr_p', increment=True,
                 var_type='f').eval(self.stock, 2018, 3)
        s4 = Get('n_income_attr_p', increment=True,
                 var_type='f').eval(self.stock, 2018, 2)
        self.assertEqual(s1 + s2 + s3 + s4, v)
Beispiel #11
0
    def test_q10(self):
        class StockStub(ExprCtx):
            d = {
                2016: {4: -5},
                2017: {1: -1, 2: -2, 3: -3, 4: -4},
                2018: {1: -1, 2: -2, 3: -3, 4: -4},
                2019: {1: 1}
            }

            def get_metrics(self, name: str, year: int, quarter: int):
                return self.d[year][quarter]

        stock = StockStub()

        rg = Range(Get('m'), quarter_count=10)
        v = rg.eval(stock, 2019, 1)
        self.assertEqual(10, len(v))
        self.assertEqual(1, v[0])
        self.assertEqual(-4, v[1])
        self.assertEqual(-3, v[2])
        self.assertEqual(-2, v[3])
        self.assertEqual(-1, v[4])
        self.assertEqual(-4, v[5])
        self.assertEqual(-3, v[6])
        self.assertEqual(-2, v[7])
        self.assertEqual(-1, v[8])
        self.assertEqual(-5, v[9])
Beispiel #12
0
    def test_past_q3_current_year(self):
        class StockStub(ExprCtx):
            def get_metrics(self, name: str, year: int, quarter: int):
                d = {2019: {1: 1}}
                return d[year][quarter]

        stock = StockStub()

        past = Before(Get('m'), past_quarter=3)
        v = past.eval(stock, 2019, 4)
        self.assertEqual(1, v)
        print(past, '\r\n')
Beispiel #13
0
    def test_past_year(self):
        class StockStub(ExprCtx):
            def get_metrics(self, name: str, year: int, quarter: int):
                d = {2017: {4: 4}}
                return d[year][quarter]

        stock = StockStub()

        past = Before(Get('m'), past_year=1)
        v = past.eval(stock, 2019, 1)
        self.assertEqual(4, v)
        print(past, '\r\n')
Beispiel #14
0
    def test_q1(self):
        class StockStub(ExprCtx):

            def get_metrics(self, name: str, year: int, quarter: int):
                if year == 2019 and quarter == 1:
                    return 1

        stock = StockStub()

        rg = Range(Get('m'), quarter_count=1)
        v = rg.eval(stock, 2019, 1)
        self.assertEqual(1, len(v))
        self.assertEqual(1, v[0])
        print(rg, '\r\n')
Beispiel #15
0
    def test_q2(self):
        class StockStub(ExprCtx):
            d = {
                2019: {1: 1, 2: 2}
            }

            def get_metrics(self, name: str, year: int, quarter: int):
                return self.d[year][quarter]

        stock = StockStub()

        rg = Range(Get('m'), quarter_count=2)
        v = rg.eval(stock, 2019, 2)
        self.assertEqual(2, len(v))
        self.assertEqual(2, v[0])
        self.assertEqual(1, v[1])
Beispiel #16
0
    def test_q5(self):
        class StockStub(ExprCtx):
            d = {
                2018: {4: -4},
                2019: {1: 1, 2: 2, 3: 3, 4: 4}
            }

            def get_metrics(self, name: str, year: int, quarter: int):
                return self.d[year][quarter]

        stock = StockStub()

        rg = Range(Get('m'), quarter_count=5)
        v = rg.eval(stock, 2019, 4)
        self.assertEqual(5, len(v))
        self.assertEqual(4, v[0])
        self.assertEqual(3, v[1])
        self.assertEqual(2, v[2])
        self.assertEqual(1, v[3])
        self.assertEqual(-4, v[4])
Beispiel #17
0
 def test_days_acct_payable_y(self):
     m = op.days_acct_payable_y().expr
     v = m.eval(self.stock, 2019, 1)
     s1 = Get('f_acct_payable_ave_y').eval(self.stock, 2019, 1)
     s2 = Get('oper_cost', period='y').eval(self.stock, 2019, 1)
     self.assertEqual(360 * s1 / s2, v)
Beispiel #18
0
def expr_div_ave(a, b, past_quarter):
    ''' name = a/ ((b1 + b2)/2)
    '''
    return Div(Get(a), Div(Sum(Get(b), Before(Get(b), past_quarter)),
                           Value(2)))
Beispiel #19
0
def expr_for_past(expr: Expr, *names: str):
    return expr([Get(name) for name in names])
Beispiel #20
0
def metrics_r_y2y(name: str, display: str):
    '''季度累计同比增长率'''
    return MetricsMeta(f'{name}.r_y2y',
                       Div(Get(f'{name}.y2y'), Before(Get(name),
                                                      past_quarter=4)),
                       display=display)
Beispiel #21
0
def metrics_y_r_y2y(name: str, display: str):
    '''年度同比增长率'''
    return MetricsMeta(f'{name}_y.r_y2y',
                       Div(Get(f'{name}_y.y2y'),
                           Before(Get(f'{name}_y'), past_year=1)),
                       display=display)
Beispiel #22
0
def metrics_y_y2y(name: str, display: str):
    '''年度同比增长值'''
    name_y = f'{name}_y'
    return MetricsMeta(f'{name}_y.y2y',
                       Sub(Get(name_y), Before(Get(name_y), past_year=1)),
                       display=display)
Beispiel #23
0
 def test_inventories_y_y2y(self):
     v = balance_sheet.inventories_q_y2y().expr.eval(self.stock, 2019, 1)
     s1 = Get('inventories').eval(self.stock, 2018, 4)
     s2 = Get('inventories').eval(self.stock, 2018, 4)
     self.assertEqual(s1 - s2, v)
Beispiel #24
0
 def test_days_adv_receipts_y(self):
     m = op.days_adv_receipts_y().expr
     v = m.eval(self.stock, 2019, 1)
     s1 = Get('f_adv_receipts_ave_y').eval(self.stock, 2019, 1)
     s2 = Get('c_fr_sale_sg', period='y').eval(self.stock, 2019, 1)
     self.assertEqual(360 * s1 / s2, v)
Beispiel #25
0
 def test_quick_ratio_y(self):
     v = balance_sheet.quick_ratio_y().expr.eval(self.stock, 2019, 1)
     s1 = Get('f_quick_y').eval(self.stock, 2019, 1)
     s2 = Get('total_cur_liab', period='y').eval(self.stock, 2019, 1)
     self.assertEqual(s1 / s2, v)
Beispiel #26
0
 def test_accounts_receiv_y_y2y(self):
     v = balance_sheet.accounts_receiv_y_y2y().expr.eval(
         self.stock, 2019, 1)
     s1 = Get('accounts_receiv').eval(self.stock, 2018, 4)
     s2 = Get('accounts_receiv').eval(self.stock, 2017, 4)
     self.assertEqual(s1 - s2, v)
Beispiel #27
0
 def test_quick_y(self):
     v = balance_sheet.quick_y().expr.eval(self.stock, 2019, 1)
     s1 = Get('total_cur_assets', period='y').eval(self.stock, 2019, 1)
     s2 = Get('inventories', period='y').eval(self.stock, 2019, 1)
     s3 = Get('prepayment', period='y').eval(self.stock, 2019, 1)
     self.assertEqual(s1 - s2 - s3, v)
Beispiel #28
0
def metrics_y(name: str, display: str):
    '''年度值'''
    return MetricsMeta(f'{name}_y', Get(name, period='y'), display=display)
Beispiel #29
0
 def test_assets_liab_ratio_y(self):
     v = balance_sheet.assets_liab_ratio_y().expr.eval(self.stock, 2019, 1)
     s1 = Get('total_liab', period='y').eval(self.stock, 2019, 1)
     s2 = Get('f_total_assets_y', period='y').eval(self.stock, 2019, 1)
     self.assertEqual(s1 / s2, v)