From ff4a356d792568e37e48dfcceae22f8aa5d24877 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Fri, 2 Jun 2017 11:01:23 -0400 Subject: [PATCH 1/5] Create back_end_call folder and make codes transfer --- bpfin/back_end_call/__init__.py | 0 bpfin/back_end_call/back_end_budget.py | 0 bpfin/back_end_call/back_end_full.py | 0 bpfin/back_end_call/back_end_inputs.py | 201 +++++++++++++++ bpfin/back_end_call/back_end_prelim.py | 0 bpfin/lib/back_end_call.py | 233 ++---------------- bpfin/tests/test_back_end_call/__init__.py | 0 .../test_back_end_inputs.py | 35 +++ bpfin/tests/test_lib/test_back_end_call.py | 36 --- 9 files changed, 257 insertions(+), 248 deletions(-) create mode 100644 bpfin/back_end_call/__init__.py create mode 100644 bpfin/back_end_call/back_end_budget.py create mode 100644 bpfin/back_end_call/back_end_full.py create mode 100644 bpfin/back_end_call/back_end_inputs.py create mode 100644 bpfin/back_end_call/back_end_prelim.py create mode 100644 bpfin/tests/test_back_end_call/__init__.py create mode 100644 bpfin/tests/test_back_end_call/test_back_end_inputs.py diff --git a/bpfin/back_end_call/__init__.py b/bpfin/back_end_call/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/back_end_call/back_end_budget.py b/bpfin/back_end_call/back_end_budget.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/back_end_call/back_end_full.py b/bpfin/back_end_call/back_end_full.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/back_end_call/back_end_inputs.py b/bpfin/back_end_call/back_end_inputs.py new file mode 100644 index 0000000..0b9f1fd --- /dev/null +++ b/bpfin/back_end_call/back_end_inputs.py @@ -0,0 +1,201 @@ +from bpfin.lib.other import UTILITY_TYPE_LIST +from bpfin.utilbills.bill import Bill +from bpfin.financials.cash_balance import cash_balance +from bpfin.financials.liability import final_liability_dict +from bpfin.financials.financial_income import Income_Statement_Table +from bpfin.financials.financial_balance import Balance_Sheet_Table +# from bpfin.tests.testdata import feature_data as db +# import pprint + + +# Bill Overview Monthly Input +def monthly_bill(raw_bill_table, analysis_date): + """ + Take in raw_bill_table + Generate annual bill for utility type with available bill + Generate manual_input dictionary indicating manual input label for 4 utilities + + Args: + raw_bill_table (dictionary): dict of dict of raw_bill. Keys are utility types + analysis_date (dictionary): proforma's starting date and the years of proforma + + Returns: + bill_overview_dict (dictionary): dictionary of dictionary of annual bills, see description for detail + # manual_input_dict (dictionary): dictionary of boolean values, keys are utilities + + Error Validate: + raw_bill_table, analysis_date == None, Raise empty error + bill_overview_dict == None or missing utility, Raise calculation error + manual_input_dict == None or missing utility, Raise calculation error + Data Validate: + raw_bill == None: no annual bill generated, manual_input == True + raw_bill != None: + raw_bill < 12 months, no annual bill generated, manual_input == True + raw_bill > 12 months, annual bill generated, manual_input == False + + Description: + raw_bill_table contains 4 utilities raw bill data. Each utility is a dictionary with 4 keys. + Each utility can be None. See below for detail + raw_bill_table = { + 'electricity': { + 'date_from': list of date, + 'date_to', list of date, + 'usage', list of float, + 'charge', list of float + }, + 'gas': None, + 'oil': None, + 'water': None + } + + bill_overview_dict = { + 'electricity': {2014: 100, 2015:200, ...}, + 'oil': dict of oil_bill, + 'gas': dict of gas_bill, + 'water': dict of water_bill} + + To Do: from utilbills.bill.py merge form_prior_month_bill(), and delete that one + * this work is done. need all units test and then can delete that + """ + # if not raw_bill_table: + # raise ValueError( + # 'Bill_Overview - monthly_bill has empty raw_bill_table') + if not analysis_date: + raise ValueError('Bill_Overview - monthly_bill has empty analysis_date') + bill_overview_dict = {} + manual_input_dict = {} + prior_month_bill_dict = {} + for utility in UTILITY_TYPE_LIST: + current_bill = Bill(utility, analysis_date) + if utility in raw_bill_table: + current_bill.put_month_bill(raw_bill_table[utility]) + else: + current_bill.put_month_bill(None) + bill_overview_dict[utility] = current_bill.get_annual_bill() + manual_input_dict[utility] = current_bill.get_manual_input() + prior_month_bill_dict[utility] = current_bill.get_prior_proj_rough() + if len(bill_overview_dict.keys()) != len(UTILITY_TYPE_LIST): + raise ValueError( + 'Bill_Overview - monthly_bill has incomplete result in bill_overview_dict' + ) + if len(manual_input_dict.keys()) != len(UTILITY_TYPE_LIST): + raise ValueError('Bill_Overview - monthly_bill has incomplete result in manual_input_dict') + if len(prior_month_bill_dict.keys()) != len(UTILITY_TYPE_LIST): + raise ValueError('Bill_Overview - monthly_bill has incomplete result of monthly_proj') + return bill_overview_dict, manual_input_dict, prior_month_bill_dict + # return bill_overview_dict + + +def annual_bill(raw_bill_table, raw_annual_bill_table, analysis_date): + """ + Take in raw_annual_bill_table + Generate annual bill for utility type with and without available bill + + Args: + raw_bill_table (dictionary): dict of dict of raw_bill. Keys are utility types + analysis_date (dictionary): proforma's starting date and the years of proforma + raw_annual_bill_table (dictionary): dictionary of dictionary of annual bills, at lease 0 year data is required + + Returns: + annual_bill_table (dictionary): dictionary of dictionary of annual bills, see description for detail + + Description: + raw_annual_bill_table = { + 'electricity': {2014: 100, 2015:200, ...}, + 'oil': dict of oil_bill, + 'gas': dict of gas_bill, + 'water': dict of water_bill} + annual_bill_table = { + 'electricity': {2014: 100, 2015:200, ...}, + 'oil': dict of oil_bill, + 'gas': dict of gas_bill, + 'water': dict of water_bill} + """ + # if not raw_bill_table: + # raise ValueError( + # 'Bill_Overview - annual_bill has empty raw_bill_table') + # if not raw_annual_bill_table: + # raise ValueError( + # 'Bill_Overview - annual_bill has empty raw_annual_bill_table') + if not analysis_date: + raise ValueError('Bill_Overview - annual_bill has empty analysis_date') + + annual_bill_table = {} + manual_input_dict = {} + for utility in UTILITY_TYPE_LIST: + current_bill = Bill(utility, analysis_date) + if utility in raw_bill_table: + current_bill.put_month_bill(raw_bill_table[utility]) + else: + current_bill.put_month_bill(None) + if utility in raw_annual_bill_table: + current_bill.put_annual_bill(raw_annual_bill_table[utility]) + annual_bill_table[utility] = current_bill.get_annual_bill() + manual_input_dict[utility] = current_bill.get_manual_input() + if len(annual_bill_table.keys()) != len(UTILITY_TYPE_LIST): + raise ValueError( + 'Bill_Overview - annual_bill has incomplete result in annual_bill_table' + ) + if len(manual_input_dict.keys()) != len(UTILITY_TYPE_LIST): + raise ValueError('Bill_Overview - monthly_bill has incomplete result in manual_input_dict') + return annual_bill_table, manual_input_dict + # return annual_bill_table + + +def form_prior_income_table( + raw_income_input, + raw_bill_table, + raw_annual_bill_table, + analysis_date, + growth_rate_flag): + """ + Take in prior-annual_bill_table, and raw inputs of income statements + Generate historical income statement, calculate its characters including CAGR and other percent ratios + Generate prior_saving income statement. Store characters in database + + Args: + raw_income_input (dictionary): dict of dict of incomplete income statement, for historical years. Key = year + raw_bill_table (dictionary): dict of dict of raw_bill. Keys are utility types + raw_annual_bill_table (dictionary): dictionary of dictionary of annual bills, at lease 0 year data is required + analysis_date (dictionary): proforma's starting date and the years of proforma + growth_rate_flag (float): indicating assumed growth rate, -2.0 == cagr, -1.0 == historical average + + Returns: + prior_income (dictionary): dict of dict of prior_saving income statement. Key is year + next_year_income (dictionary): next year income statement. Keys are income statement items. + average_income (dictionary): single year income statement for historical average. Keys = income statement items + historical_cagr (float): compound annual growth rate + + Description: + raw_income_input = {2014: {'revenue': 90.0, 'utility_expense': 55.0, 'non_utility_expense': 35.0}, 2015:{},} + + raw_bill_table = { + 'electricity': { + 'date_from': list of date, + 'date_to', list of date, + 'usage', list of float, + 'charge', list of float + }, + 'gas': None, + 'oil': None, + 'water': None + } + + raw_annual_bill_table = { + 'electricity': None + 'gas': {2014: 100, 2015:200, ...}, + 'oil': {2014: 100, 2015:200, ...}, + 'water': dict of water_bill} + + prior_income = {2014: {'year': 2014, 'revenue': 100.0, ..., 'not': 5.0}, ... , 2016:{}} + + """ + annual_bill_table = annual_bill(raw_bill_table, raw_annual_bill_table, analysis_date)[0] + income_table = Income_Statement_Table(raw_income_input, annual_bill_table, analysis_date) + income_table.project(growth_rate_flag, annual_bill_table) + + prior_income = income_table.get_full_income_table() + next_year_income = income_table.get_single_year(income_table.hist_end_year + 1) + average_income = income_table.get_average() + historical_cagr = income_table.get_cagr() + return prior_income, next_year_income, average_income, historical_cagr diff --git a/bpfin/back_end_call/back_end_prelim.py b/bpfin/back_end_call/back_end_prelim.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/lib/back_end_call.py b/bpfin/lib/back_end_call.py index 74c02a6..cef099a 100644 --- a/bpfin/lib/back_end_call.py +++ b/bpfin/lib/back_end_call.py @@ -4,201 +4,11 @@ from bpfin.financials.cash_balance import cash_balance from bpfin.financials.liability import final_liability_dict from bpfin.financials.financial_income import Income_Statement_Table from bpfin.financials.financial_balance import Balance_Sheet_Table -# from bpfin.tests.testdata import feature_data as db -# import pprint - - -# Bill Overview Monthly Input -def monthly_bill(raw_bill_table, analysis_date): - """ - Take in raw_bill_table - Generate annual bill for utility type with available bill - Generate manual_input dictionary indicating manual input label for 4 utilities - - Args: - raw_bill_table (dictionary): dict of dict of raw_bill. Keys are utility types - analysis_date (dictionary): proforma's starting date and the years of proforma - - Returns: - bill_overview_dict (dictionary): dictionary of dictionary of annual bills, see description for detail - # manual_input_dict (dictionary): dictionary of boolean values, keys are utilities - - Error Validate: - raw_bill_table, analysis_date == None, Raise empty error - bill_overview_dict == None or missing utility, Raise calculation error - manual_input_dict == None or missing utility, Raise calculation error - Data Validate: - raw_bill == None: no annual bill generated, manual_input == True - raw_bill != None: - raw_bill < 12 months, no annual bill generated, manual_input == True - raw_bill > 12 months, annual bill generated, manual_input == False - - Description: - raw_bill_table contains 4 utilities raw bill data. Each utility is a dictionary with 4 keys. - Each utility can be None. See below for detail - raw_bill_table = { - 'electricity': { - 'date_from': list of date, - 'date_to', list of date, - 'usage', list of float, - 'charge', list of float - }, - 'gas': None, - 'oil': None, - 'water': None - } - - bill_overview_dict = { - 'electricity': {2014: 100, 2015:200, ...}, - 'oil': dict of oil_bill, - 'gas': dict of gas_bill, - 'water': dict of water_bill} - - To Do: from utilbills.bill.py merge form_prior_month_bill(), and delete that one - * this work is done. need all units test and then can delete that - """ - # if not raw_bill_table: - # raise ValueError( - # 'Bill_Overview - monthly_bill has empty raw_bill_table') - if not analysis_date: - raise ValueError('Bill_Overview - monthly_bill has empty analysis_date') - bill_overview_dict = {} - manual_input_dict = {} - prior_month_bill_dict = {} - for utility in UTILITY_TYPE_LIST: - current_bill = Bill(utility, analysis_date) - if utility in raw_bill_table: - current_bill.put_month_bill(raw_bill_table[utility]) - else: - current_bill.put_month_bill(None) - bill_overview_dict[utility] = current_bill.get_annual_bill() - manual_input_dict[utility] = current_bill.get_manual_input() - prior_month_bill_dict[utility] = current_bill.get_prior_proj_rough() - if len(bill_overview_dict.keys()) != len(UTILITY_TYPE_LIST): - raise ValueError( - 'Bill_Overview - monthly_bill has incomplete result in bill_overview_dict' - ) - if len(manual_input_dict.keys()) != len(UTILITY_TYPE_LIST): - raise ValueError('Bill_Overview - monthly_bill has incomplete result in manual_input_dict') - if len(prior_month_bill_dict.keys()) != len(UTILITY_TYPE_LIST): - raise ValueError('Bill_Overview - monthly_bill has incomplete result of monthly_proj') - return bill_overview_dict, manual_input_dict, prior_month_bill_dict - # return bill_overview_dict - - -def annual_bill(raw_bill_table, raw_annual_bill_table, analysis_date): - """ - Take in raw_annual_bill_table - Generate annual bill for utility type with and without available bill - - Args: - raw_bill_table (dictionary): dict of dict of raw_bill. Keys are utility types - analysis_date (dictionary): proforma's starting date and the years of proforma - raw_annual_bill_table (dictionary): dictionary of dictionary of annual bills, at lease 0 year data is required - - Returns: - annual_bill_table (dictionary): dictionary of dictionary of annual bills, see description for detail - - Description: - raw_annual_bill_table = { - 'electricity': {2014: 100, 2015:200, ...}, - 'oil': dict of oil_bill, - 'gas': dict of gas_bill, - 'water': dict of water_bill} - annual_bill_table = { - 'electricity': {2014: 100, 2015:200, ...}, - 'oil': dict of oil_bill, - 'gas': dict of gas_bill, - 'water': dict of water_bill} - """ - # if not raw_bill_table: - # raise ValueError( - # 'Bill_Overview - annual_bill has empty raw_bill_table') - # if not raw_annual_bill_table: - # raise ValueError( - # 'Bill_Overview - annual_bill has empty raw_annual_bill_table') - if not analysis_date: - raise ValueError('Bill_Overview - annual_bill has empty analysis_date') - - annual_bill_table = {} - manual_input_dict = {} - for utility in UTILITY_TYPE_LIST: - current_bill = Bill(utility, analysis_date) - if utility in raw_bill_table: - current_bill.put_month_bill(raw_bill_table[utility]) - else: - current_bill.put_month_bill(None) - if utility in raw_annual_bill_table: - current_bill.put_annual_bill(raw_annual_bill_table[utility]) - annual_bill_table[utility] = current_bill.get_annual_bill() - manual_input_dict[utility] = current_bill.get_manual_input() - if len(annual_bill_table.keys()) != len(UTILITY_TYPE_LIST): - raise ValueError( - 'Bill_Overview - annual_bill has incomplete result in annual_bill_table' - ) - if len(manual_input_dict.keys()) != len(UTILITY_TYPE_LIST): - raise ValueError('Bill_Overview - monthly_bill has incomplete result in manual_input_dict') - return annual_bill_table, manual_input_dict - # return annual_bill_table - - -def form_prior_income_table( - raw_income_input, - raw_bill_table, - raw_annual_bill_table, - analysis_date, - growth_rate_flag): - """ - Take in prior-annual_bill_table, and raw inputs of income statements - Generate historical income statement, calculate its characters including CAGR and other percent ratios - Generate prior_saving income statement. Store characters in database - - Args: - raw_income_input (dictionary): dict of dict of incomplete income statement, for historical years. Key = year - raw_bill_table (dictionary): dict of dict of raw_bill. Keys are utility types - raw_annual_bill_table (dictionary): dictionary of dictionary of annual bills, at lease 0 year data is required - analysis_date (dictionary): proforma's starting date and the years of proforma - growth_rate_flag (float): indicating assumed growth rate, -2.0 == cagr, -1.0 == historical average - - Returns: - prior_income (dictionary): dict of dict of prior_saving income statement. Key is year - next_year_income (dictionary): next year income statement. Keys are income statement items. - average_income (dictionary): single year income statement for historical average. Keys = income statement items - historical_cagr (float): compound annual growth rate - - Description: - raw_income_input = {2014: {'revenue': 90.0, 'utility_expense': 55.0, 'non_utility_expense': 35.0}, 2015:{},} - - raw_bill_table = { - 'electricity': { - 'date_from': list of date, - 'date_to', list of date, - 'usage', list of float, - 'charge', list of float - }, - 'gas': None, - 'oil': None, - 'water': None - } - - raw_annual_bill_table = { - 'electricity': None - 'gas': {2014: 100, 2015:200, ...}, - 'oil': {2014: 100, 2015:200, ...}, - 'water': dict of water_bill} - - prior_income = {2014: {'year': 2014, 'revenue': 100.0, ..., 'not': 5.0}, ... , 2016:{}} - - """ - annual_bill_table = annual_bill(raw_bill_table, raw_annual_bill_table, analysis_date)[0] - income_table = Income_Statement_Table(raw_income_input, annual_bill_table, analysis_date) - income_table.project(growth_rate_flag, annual_bill_table) - - prior_income = income_table.get_full_income_table() - next_year_income = income_table.get_single_year(income_table.hist_end_year + 1) - average_income = income_table.get_average() - historical_cagr = income_table.get_cagr() - return prior_income, next_year_income, average_income, historical_cagr +from bpfin.financials.scenario import Scenario +from bpfin.back_end_call.back_end_inputs import monthly_bill, annual_bill +# delete following imports when online +from bpfin.tests.testdata import feature_data as db +import pprint def prelim_scenario(raw_bill_table, raw_annual_bill_table, @@ -208,7 +18,6 @@ def prelim_scenario(raw_bill_table, raw_annual_bill_table, analysis_date, commission_date, construction_cost, percent_saving_dict, full_saving_dict, req_dscr, customer_preference): - from bpfin.financials.scenario import Scenario prior_annual_bill_table, manual_input_dict = annual_bill( raw_bill_table, raw_annual_bill_table, analysis_date ) @@ -283,19 +92,19 @@ def prelim_scenario(raw_bill_table, raw_annual_bill_table, # f.write(writein) # f.close() -# print(prelim_scenario( -# raw_bill_table=db.raw_bill_table, -# raw_annual_bill_table=db.raw_annual_bill_table, -# raw_income_input=db.raw_income_input, -# growth_rate_flag=-2.0, -# raw_liability_input=db.raw_liability_input, -# raw_cash_balance=db.raw_cash_balance, -# raw_loan_input_list=db.raw_loan_input_list, -# analysis_date=db.analysis_date, -# commission_date=db.commission_date, -# construction_cost=db.cost_estimation, -# percent_saving_dict=db.percent_saving_dict, -# full_saving_dict=db.full_saving_dict, -# req_dscr=db.req_dscr, -# customer_preference=db.customer_preference -# )) +print(prelim_scenario( + raw_bill_table=db.raw_bill_table, + raw_annual_bill_table=db.raw_annual_bill_table, + raw_income_input=db.raw_income_input, + growth_rate_flag=-2.0, + raw_liability_input=db.raw_liability_input, + raw_cash_balance=db.raw_cash_balance, + raw_loan_input_list=db.raw_loan_input_list, + analysis_date=db.analysis_date, + commission_date=db.commission_date, + construction_cost=db.cost_estimation, + percent_saving_dict=db.percent_saving_dict, + full_saving_dict=db.full_saving_dict, + req_dscr=db.req_dscr, + customer_preference=db.customer_preference + )) diff --git a/bpfin/tests/test_back_end_call/__init__.py b/bpfin/tests/test_back_end_call/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/tests/test_back_end_call/test_back_end_inputs.py b/bpfin/tests/test_back_end_call/test_back_end_inputs.py new file mode 100644 index 0000000..419a626 --- /dev/null +++ b/bpfin/tests/test_back_end_call/test_back_end_inputs.py @@ -0,0 +1,35 @@ +from bpfin.back_end_call.back_end_inputs import monthly_bill, annual_bill, form_prior_income_table +from bpfin.tests.testdata import feature_data as db + + +def test_monthly_bill(): + output_dict = { + 'electricity': db.prior_annual_bill['electricity'], + 'gas': db.prior_annual_bill['gas'], + 'oil': db.prior_annual_bill['oil'], + 'water': None} + result_dict = monthly_bill(db.raw_bill_table, db.analysis_date)[0] + assert output_dict == result_dict + + +def test_annual_bill(): + output_dict = db.prior_annual_bill + result_dict = annual_bill(db.raw_bill_table, db.raw_annual_bill_table, db.analysis_date)[0] + assert output_dict == result_dict + + +def test_form_prior_income_table(): + output_income_statement = db.prior_income_statement_cagr + output_next_year_income = db.next_year_income + output_average_income = db.average_income + output_historical_cagr = db.historical_cagr + prior_income, next_year_income, average_income, historical_cagr = form_prior_income_table( + db.raw_income_input, + db.raw_bill_table, + db.raw_annual_bill_table, + db.analysis_date, + -2.0) + assert output_income_statement == prior_income + assert output_next_year_income == next_year_income + assert output_average_income == average_income + assert output_historical_cagr == historical_cagr diff --git a/bpfin/tests/test_lib/test_back_end_call.py b/bpfin/tests/test_lib/test_back_end_call.py index b23b975..e69de29 100644 --- a/bpfin/tests/test_lib/test_back_end_call.py +++ b/bpfin/tests/test_lib/test_back_end_call.py @@ -1,36 +0,0 @@ -from bpfin.lib.back_end_call import monthly_bill, annual_bill, form_prior_income_table -from bpfin.tests.testdata import feature_data as db -from bpfin.tests.testdata import sample_data as sdb - - -def test_monthly_bill(): - output_dict = { - 'electricity': db.prior_annual_bill['electricity'], - 'gas': db.prior_annual_bill['gas'], - 'oil': db.prior_annual_bill['oil'], - 'water': None} - result_dict = monthly_bill(db.raw_bill_table, db.analysis_date)[0] - assert output_dict == result_dict - - -def test_annual_bill(): - output_dict = db.prior_annual_bill - result_dict = annual_bill(db.raw_bill_table, db.raw_annual_bill_table, db.analysis_date)[0] - assert output_dict == result_dict - - -def test_form_prior_income_table(): - output_income_statement = db.prior_income_statement_cagr - output_next_year_income = db.next_year_income - output_average_income = db.average_income - output_historical_cagr = db.historical_cagr - prior_income, next_year_income, average_income, historical_cagr = form_prior_income_table( - db.raw_income_input, - db.raw_bill_table, - db.raw_annual_bill_table, - db.analysis_date, - -2.0) - assert output_income_statement == prior_income - assert output_next_year_income == next_year_income - assert output_average_income == average_income - assert output_historical_cagr == historical_cagr -- GitLab From ab71626330503df6f5820b2542ab06d2851e80fd Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Fri, 2 Jun 2017 11:08:12 -0400 Subject: [PATCH 2/5] Minor clean up --- bpfin/lib/back_end_call.py | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/bpfin/lib/back_end_call.py b/bpfin/lib/back_end_call.py index cef099a..c5ae0fa 100644 --- a/bpfin/lib/back_end_call.py +++ b/bpfin/lib/back_end_call.py @@ -1,5 +1,3 @@ -from bpfin.lib.other import UTILITY_TYPE_LIST -from bpfin.utilbills.bill import Bill from bpfin.financials.cash_balance import cash_balance from bpfin.financials.liability import final_liability_dict from bpfin.financials.financial_income import Income_Statement_Table @@ -7,8 +5,8 @@ from bpfin.financials.financial_balance import Balance_Sheet_Table from bpfin.financials.scenario import Scenario from bpfin.back_end_call.back_end_inputs import monthly_bill, annual_bill # delete following imports when online -from bpfin.tests.testdata import feature_data as db -import pprint +# from bpfin.tests.testdata import feature_data as db +# import pprint def prelim_scenario(raw_bill_table, raw_annual_bill_table, @@ -92,19 +90,19 @@ def prelim_scenario(raw_bill_table, raw_annual_bill_table, # f.write(writein) # f.close() -print(prelim_scenario( - raw_bill_table=db.raw_bill_table, - raw_annual_bill_table=db.raw_annual_bill_table, - raw_income_input=db.raw_income_input, - growth_rate_flag=-2.0, - raw_liability_input=db.raw_liability_input, - raw_cash_balance=db.raw_cash_balance, - raw_loan_input_list=db.raw_loan_input_list, - analysis_date=db.analysis_date, - commission_date=db.commission_date, - construction_cost=db.cost_estimation, - percent_saving_dict=db.percent_saving_dict, - full_saving_dict=db.full_saving_dict, - req_dscr=db.req_dscr, - customer_preference=db.customer_preference - )) +# print(prelim_scenario( +# raw_bill_table=db.raw_bill_table, +# raw_annual_bill_table=db.raw_annual_bill_table, +# raw_income_input=db.raw_income_input, +# growth_rate_flag=-2.0, +# raw_liability_input=db.raw_liability_input, +# raw_cash_balance=db.raw_cash_balance, +# raw_loan_input_list=db.raw_loan_input_list, +# analysis_date=db.analysis_date, +# commission_date=db.commission_date, +# construction_cost=db.cost_estimation, +# percent_saving_dict=db.percent_saving_dict, +# full_saving_dict=db.full_saving_dict, +# req_dscr=db.req_dscr, +# customer_preference=db.customer_preference +# )) -- GitLab From 2258f96b3df3a64edace322804e66ee844c508ef Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Fri, 2 Jun 2017 11:14:23 -0400 Subject: [PATCH 3/5] Add next step descriptions --- bpfin/back_end_call/back_end_prelim.py | 108 +++++++++++++++++ bpfin/lib/back_end_call.py | 112 +----------------- .../test_back_end_budget.py | 0 .../test_back_end_prelim.py | 0 bpfin/tests/test_lib/test_back_end_call.py | 3 + 5 files changed, 115 insertions(+), 108 deletions(-) create mode 100644 bpfin/tests/test_back_end_call/test_back_end_budget.py create mode 100644 bpfin/tests/test_back_end_call/test_back_end_prelim.py diff --git a/bpfin/back_end_call/back_end_prelim.py b/bpfin/back_end_call/back_end_prelim.py index e69de29..c5ae0fa 100644 --- a/bpfin/back_end_call/back_end_prelim.py +++ b/bpfin/back_end_call/back_end_prelim.py @@ -0,0 +1,108 @@ +from bpfin.financials.cash_balance import cash_balance +from bpfin.financials.liability import final_liability_dict +from bpfin.financials.financial_income import Income_Statement_Table +from bpfin.financials.financial_balance import Balance_Sheet_Table +from bpfin.financials.scenario import Scenario +from bpfin.back_end_call.back_end_inputs import monthly_bill, annual_bill +# delete following imports when online +# from bpfin.tests.testdata import feature_data as db +# import pprint + + +def prelim_scenario(raw_bill_table, raw_annual_bill_table, + raw_income_input, growth_rate_flag, + raw_liability_input, raw_cash_balance, + raw_loan_input_list, + analysis_date, commission_date, construction_cost, + percent_saving_dict, full_saving_dict, + req_dscr, customer_preference): + prior_annual_bill_table, manual_input_dict = annual_bill( + raw_bill_table, raw_annual_bill_table, analysis_date + ) + + prior_income_table = Income_Statement_Table(raw_income_input, prior_annual_bill_table, analysis_date) + + cash_balance_dict = cash_balance(analysis_date, raw_cash_balance) + liability_dict = final_liability_dict(analysis_date, raw_liability_input) + + balance_sheet_input = { + 'cash_dictionary': cash_balance_dict, + 'other_debt_service_dictionary': liability_dict, + 'net_income_dictionary': prior_income_table.get_noi_dict() + } + + prior_income_table.project(growth_rate_flag, prior_annual_bill_table) + + prior_bs = Balance_Sheet_Table(cash_balance_dict, liability_dict, prior_income_table.get_noi_dict()) + + prior_bs.project_balance_sheet(analysis_date, liability_dict, prior_income_table.get_noi_dict()) + + scenario_ob = Scenario( + analysis_date=analysis_date, + commission_date=commission_date, + construction_cost=construction_cost, + manual_input_dict=manual_input_dict, + prior_annual_bill_table=prior_annual_bill_table, + prior_income_statement_table=prior_income_table, + other_debt_service=liability_dict, + growth_rate_flag=growth_rate_flag, + prior_balance_sheet_table=prior_bs, + loan_input_list=raw_loan_input_list) + + scenario_ob.prelim_analysis( + prior_month_bill=monthly_bill(raw_bill_table, analysis_date)[2], + percent_saving_dict=percent_saving_dict, + full_saving_dict=full_saving_dict, + growth_rate_flag=growth_rate_flag, + req_dscr=req_dscr, + customer_preference=customer_preference) + + # Define raw_annual_bill_table as a "get" of prior_bill + # Define raw_bill_table as a "get" of prior_bill + # Delete prior_annual_bill_table + + return scenario_ob.get_graph_dict() + + +# **** ugly test **** +# print(db.raw_bill_table) +# print('\nmonthly_bill =', monthly_bill(db.raw_bill_table, db.analysis_date)) +# print('\nannual_bill =', annual_bill(db.raw_bill_table, db.raw_annual_bill_table, db.analysis_date)) +# prior_income_statement_result = prior_income_statement( +# print('\nprior_income_statement =', prior_income_statement_table( +# db.raw_income_input, +# db.raw_bill_table, +# db.raw_annual_bill_table, +# db.analysis_date, +# -2.0) + +# pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) +# pp.pprint(prior_income_statement_result) +# result = prior_income_statement_table( +# db.raw_income_input, +# db.raw_bill_table, +# db.raw_annual_bill_table, +# db.analysis_date, +# -2.0) + +# writein = str(result) +# f = open('data_generation.py', 'w') +# f.write(writein) +# f.close() + +# print(prelim_scenario( +# raw_bill_table=db.raw_bill_table, +# raw_annual_bill_table=db.raw_annual_bill_table, +# raw_income_input=db.raw_income_input, +# growth_rate_flag=-2.0, +# raw_liability_input=db.raw_liability_input, +# raw_cash_balance=db.raw_cash_balance, +# raw_loan_input_list=db.raw_loan_input_list, +# analysis_date=db.analysis_date, +# commission_date=db.commission_date, +# construction_cost=db.cost_estimation, +# percent_saving_dict=db.percent_saving_dict, +# full_saving_dict=db.full_saving_dict, +# req_dscr=db.req_dscr, +# customer_preference=db.customer_preference +# )) diff --git a/bpfin/lib/back_end_call.py b/bpfin/lib/back_end_call.py index c5ae0fa..e7cac02 100644 --- a/bpfin/lib/back_end_call.py +++ b/bpfin/lib/back_end_call.py @@ -1,108 +1,4 @@ -from bpfin.financials.cash_balance import cash_balance -from bpfin.financials.liability import final_liability_dict -from bpfin.financials.financial_income import Income_Statement_Table -from bpfin.financials.financial_balance import Balance_Sheet_Table -from bpfin.financials.scenario import Scenario -from bpfin.back_end_call.back_end_inputs import monthly_bill, annual_bill -# delete following imports when online -# from bpfin.tests.testdata import feature_data as db -# import pprint - - -def prelim_scenario(raw_bill_table, raw_annual_bill_table, - raw_income_input, growth_rate_flag, - raw_liability_input, raw_cash_balance, - raw_loan_input_list, - analysis_date, commission_date, construction_cost, - percent_saving_dict, full_saving_dict, - req_dscr, customer_preference): - prior_annual_bill_table, manual_input_dict = annual_bill( - raw_bill_table, raw_annual_bill_table, analysis_date - ) - - prior_income_table = Income_Statement_Table(raw_income_input, prior_annual_bill_table, analysis_date) - - cash_balance_dict = cash_balance(analysis_date, raw_cash_balance) - liability_dict = final_liability_dict(analysis_date, raw_liability_input) - - balance_sheet_input = { - 'cash_dictionary': cash_balance_dict, - 'other_debt_service_dictionary': liability_dict, - 'net_income_dictionary': prior_income_table.get_noi_dict() - } - - prior_income_table.project(growth_rate_flag, prior_annual_bill_table) - - prior_bs = Balance_Sheet_Table(cash_balance_dict, liability_dict, prior_income_table.get_noi_dict()) - - prior_bs.project_balance_sheet(analysis_date, liability_dict, prior_income_table.get_noi_dict()) - - scenario_ob = Scenario( - analysis_date=analysis_date, - commission_date=commission_date, - construction_cost=construction_cost, - manual_input_dict=manual_input_dict, - prior_annual_bill_table=prior_annual_bill_table, - prior_income_statement_table=prior_income_table, - other_debt_service=liability_dict, - growth_rate_flag=growth_rate_flag, - prior_balance_sheet_table=prior_bs, - loan_input_list=raw_loan_input_list) - - scenario_ob.prelim_analysis( - prior_month_bill=monthly_bill(raw_bill_table, analysis_date)[2], - percent_saving_dict=percent_saving_dict, - full_saving_dict=full_saving_dict, - growth_rate_flag=growth_rate_flag, - req_dscr=req_dscr, - customer_preference=customer_preference) - - # Define raw_annual_bill_table as a "get" of prior_bill - # Define raw_bill_table as a "get" of prior_bill - # Delete prior_annual_bill_table - - return scenario_ob.get_graph_dict() - - -# **** ugly test **** -# print(db.raw_bill_table) -# print('\nmonthly_bill =', monthly_bill(db.raw_bill_table, db.analysis_date)) -# print('\nannual_bill =', annual_bill(db.raw_bill_table, db.raw_annual_bill_table, db.analysis_date)) -# prior_income_statement_result = prior_income_statement( -# print('\nprior_income_statement =', prior_income_statement_table( -# db.raw_income_input, -# db.raw_bill_table, -# db.raw_annual_bill_table, -# db.analysis_date, -# -2.0) - -# pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) -# pp.pprint(prior_income_statement_result) -# result = prior_income_statement_table( -# db.raw_income_input, -# db.raw_bill_table, -# db.raw_annual_bill_table, -# db.analysis_date, -# -2.0) - -# writein = str(result) -# f = open('data_generation.py', 'w') -# f.write(writein) -# f.close() - -# print(prelim_scenario( -# raw_bill_table=db.raw_bill_table, -# raw_annual_bill_table=db.raw_annual_bill_table, -# raw_income_input=db.raw_income_input, -# growth_rate_flag=-2.0, -# raw_liability_input=db.raw_liability_input, -# raw_cash_balance=db.raw_cash_balance, -# raw_loan_input_list=db.raw_loan_input_list, -# analysis_date=db.analysis_date, -# commission_date=db.commission_date, -# construction_cost=db.cost_estimation, -# percent_saving_dict=db.percent_saving_dict, -# full_saving_dict=db.full_saving_dict, -# req_dscr=db.req_dscr, -# customer_preference=db.customer_preference -# )) +""" +This file should be transfered to back_end_call folder, and then removed. +keep it for now because we need to merge from budget +""" diff --git a/bpfin/tests/test_back_end_call/test_back_end_budget.py b/bpfin/tests/test_back_end_call/test_back_end_budget.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/tests/test_back_end_call/test_back_end_prelim.py b/bpfin/tests/test_back_end_call/test_back_end_prelim.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/tests/test_lib/test_back_end_call.py b/bpfin/tests/test_lib/test_back_end_call.py index e69de29..148f5aa 100644 --- a/bpfin/tests/test_lib/test_back_end_call.py +++ b/bpfin/tests/test_lib/test_back_end_call.py @@ -0,0 +1,3 @@ +""" +This file should get removed after budget merged +""" -- GitLab From a77ed3403e5879adca983cefef907c88250e0376 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Fri, 2 Jun 2017 11:15:39 -0400 Subject: [PATCH 4/5] Add to do description --- bpfin/back_end_call/back_end_prelim.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bpfin/back_end_call/back_end_prelim.py b/bpfin/back_end_call/back_end_prelim.py index c5ae0fa..aba5f48 100644 --- a/bpfin/back_end_call/back_end_prelim.py +++ b/bpfin/back_end_call/back_end_prelim.py @@ -16,6 +16,9 @@ def prelim_scenario(raw_bill_table, raw_annual_bill_table, analysis_date, commission_date, construction_cost, percent_saving_dict, full_saving_dict, req_dscr, customer_preference): + """ + To Do: write unit test file for this scenario and for prelim_scenario back_end_call + """ prior_annual_bill_table, manual_input_dict = annual_bill( raw_bill_table, raw_annual_bill_table, analysis_date ) -- GitLab From 93e0d3f2b2699a8ba08498bd19a0f2288ff25672 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Fri, 2 Jun 2017 11:18:19 -0400 Subject: [PATCH 5/5] Move monthly_bull import to top in test_financial_saving --- bpfin/tests/test_financials/test_financial_saving.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bpfin/tests/test_financials/test_financial_saving.py b/bpfin/tests/test_financials/test_financial_saving.py index 8c6f469..fa921e6 100644 --- a/bpfin/tests/test_financials/test_financial_saving.py +++ b/bpfin/tests/test_financials/test_financial_saving.py @@ -2,6 +2,7 @@ import datetime from bpfin.financials.financial_saving import Saving from bpfin.financials.financial_saving import Saving_Overview from bpfin.tests.testdata import feature_data as db +from bpfin.back_end_call.back_end_inputs import monthly_bill def test_Saving_put_monthly_proforma(): @@ -85,7 +86,6 @@ def test_Saving_put_annual_proforma(): def test_Saving_Overview(): - from bpfin.lib.back_end_call import monthly_bill input_manual_input_dict = db.manual_input_dict input_prior_annual_bill_table = db.prior_annual_bill input_analysis_date = db.analysis_date -- GitLab