From 8763b5d8d03a8cd985b76c9e41aeb1ff69eebd02 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Mon, 17 Apr 2017 16:48:43 -0400 Subject: [PATCH 01/14] add description for form_inflated_item, started bill_prior_proj_rough --- bpfin/prelim/prelimfuncs.py | 20 +++++++++--------- bpfin/utilbills/bill_lib.py | 26 ++++++++++++++++++++++++ bpfin/utilbills/bill_prior_proj_rough.py | 13 ++++++++++++ 3 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 bpfin/utilbills/bill_prior_proj_rough.py diff --git a/bpfin/prelim/prelimfuncs.py b/bpfin/prelim/prelimfuncs.py index f4e31c0..5d19b7f 100644 --- a/bpfin/prelim/prelimfuncs.py +++ b/bpfin/prelim/prelimfuncs.py @@ -292,16 +292,16 @@ matplotlib.use('TkAgg') # new_dict[term]=cal_inflation_product(inflation_rate_dict,term)/cal_inflation_product(inflation_rate_dict,present_date) # return new_dict #return (2016,2,29 : 99.86%; present_date: 100%) -# # form inflated items, based on a 12 month list, present time is the last month of 12 months list -# def form_inflated_item(base_list,target_terms,inflation_coeff_dict,present_date): -# pre_year_date=datetime.date(present_date.year-1,present_date.month+1,cal_last_day(present_date.year-1,present_date.month+1)) -# base_terms=form_date_calendar(pre_year_date,present_date)[1] -# for term in base_terms: -# base_list[term.month-1]=base_list[term.month-1]/inflation_coeff_dict[term] -# new_dict=dict(zip([],[])) -# for term in target_terms: -# new_dict[term]=base_list[term.month-1]*inflation_coeff_dict[term] -# return [new_dict[term] for term in sorted(new_dict)] +# form inflated items, based on a 12 month list, present time is the last month of 12 months list +def form_inflated_item(base_list,target_terms,inflation_coeff_dict,present_date): + pre_year_date=datetime.date(present_date.year-1,present_date.month+1,cal_last_day(present_date.year-1,present_date.month+1)) + base_terms=form_date_calendar(pre_year_date,present_date)[1] + for term in base_terms: + base_list[term.month-1]=base_list[term.month-1]/inflation_coeff_dict[term] + new_dict=dict(zip([],[])) + for term in target_terms: + new_dict[term]=base_list[term.month-1]*inflation_coeff_dict[term] + return [new_dict[term] for term in sorted(new_dict)] ## define all classes # energy bill, including historical data, normalized bill on monthly basis diff --git a/bpfin/utilbills/bill_lib.py b/bpfin/utilbills/bill_lib.py index d872fbe..5dd5e9e 100644 --- a/bpfin/utilbills/bill_lib.py +++ b/bpfin/utilbills/bill_lib.py @@ -162,6 +162,32 @@ def form_inflation_coeffdict(inflationyears, inflationhist, present_date): return new_dict +def form_inflated_item(base_list, target_terms, inflation_coeff_dict, present_date): + """ Form inflated items for designated date terms, based on a 12 month list (result of rough month_normalization) + present time is the last month of the 12 month list, aka end of last month on raw bill + + Args: + base_list (dictionary of float values): {datetime: dollar values, can be monthly charge or price} for 12 month + target_terms (list of datetime): end of months, for the pro-forma years, usually [current yr -5, current yr+20] + inflation_coeff_dict (dictionary): {month: float value} monthly inflation coefficient (NOT inflation rate) + # monthly inflation coefficient is the multiplier to be timed on a present value, to get inflated value + present_date (datetime): the present date, to determine present value. usually the end of energy bill + Return: + dictionary: {datetime: inflated/deflated values} for the month in target_terms + """ + pre_year_date = datetime.date( + present_date.year-1, + present_date.month+1, + cal_last_day(present_date.year-1, present_date.month+1)) + base_terms = form_date_calendar(pre_year_date, present_date)[1] + for term in base_terms: + base_list[term.month-1] = base_list[term.month-1]/inflation_coeff_dict[term] + new_dict = dict(zip([], [])) + for term in target_terms: + new_dict[term] = base_list[term.month-1]*inflation_coeff_dict[term] + return [new_dict[term] for term in sorted(new_dict)] + + def occupancy_final_list(occupancy_rate_list): """Return list of occupancy values. diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py new file mode 100644 index 0000000..aa915bd --- /dev/null +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -0,0 +1,13 @@ +from bpfin.utilbills.bill_lib import cal_inflated_item + + +def bill_prior_proj_rough(month_norm_bill, raw_bill): + + + [self.prior_billstart, self.prior_billend] = form_bill_calendar(FinancialDict['ProForma_Start'], + FinancialDict['ProForma_Duration']) + self.prior_monthly_usage = duplicate2terms(self.hist_monthly_usage, self.prior_billend) + self.prior_monthly_price = form_inflated_item(self.hist_monthly_price, self.prior_billend, + FinancialDict['inflation_coeff_dict'], + FinancialDict['present_date']) + self.prior_monthly_charge = product2list(self.prior_monthly_usage, self.prior_monthly_price) -- GitLab From 5be6b156bcc0f64e4ac1a9a12887689c68c919dd Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Tue, 18 Apr 2017 09:14:05 -0400 Subject: [PATCH 02/14] delete a line in bill_lib --- bpfin/utilbills/bill_lib.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bpfin/utilbills/bill_lib.py b/bpfin/utilbills/bill_lib.py index 5dd5e9e..e192cf4 100644 --- a/bpfin/utilbills/bill_lib.py +++ b/bpfin/utilbills/bill_lib.py @@ -3,7 +3,6 @@ import datetime import calendar - def add_list(obj_list, number): """Add a number to each value in a list. -- GitLab From 0b797c3de795dac5c3408fa8674977d32146ed12 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Tue, 18 Apr 2017 14:19:21 -0400 Subject: [PATCH 03/14] minor update --- bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py diff --git a/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py b/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py new file mode 100644 index 0000000..e69de29 -- GitLab From 2457c40fb438a85d340a1a5decd98c2ed17e8a3a Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Tue, 18 Apr 2017 18:59:41 -0400 Subject: [PATCH 04/14] created bill_prior_proj_rough. need to work on its description, and create test file --- bpfin/utilbills/bill_prior_proj_rough.py | 43 +++++++++++++++++++----- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index aa915bd..dccd84f 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -1,13 +1,38 @@ -from bpfin.utilbills.bill_lib import cal_inflated_item +import bpfin.utilbills.bill_lib as bl +import bpfin.lib.other as lib -def bill_prior_proj_rough(month_norm_bill, raw_bill): +def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict): + """ project energy bill, on a monthly_normalized base, + with daily rough estimation, for years that in the past and future - [self.prior_billstart, self.prior_billend] = form_bill_calendar(FinancialDict['ProForma_Start'], - FinancialDict['ProForma_Duration']) - self.prior_monthly_usage = duplicate2terms(self.hist_monthly_usage, self.prior_billend) - self.prior_monthly_price = form_inflated_item(self.hist_monthly_price, self.prior_billend, - FinancialDict['inflation_coeff_dict'], - FinancialDict['present_date']) - self.prior_monthly_charge = product2list(self.prior_monthly_usage, self.prior_monthly_price) + Args: + month_norm_bill (dictionary) + raw_bill (dictionary) + analysis_date (dictionary) + Returns: + dictionary + """ + [prior_bill_start, prior_bill_end] = bl.form_bill_calendar( + analysis_date['proforma_start'], + analysis_date['proforma_duration']) + + prior_monthly_usage = lib.duplicate2terms(month_norm_bill['monthly_usage'], prior_bill_end) + prior_monthly_price = bl.form_inflated_item(month_norm_bill['monthly_price'], prior_bill_end, inflation_coeff_dict, + analysis_date['present_date']) + prior_monthly_charge = lib.product2list(prior_monthly_usage, prior_monthly_price) + return { + 'date_from': prior_bill_start, + 'date_to': prior_bill_end, + 'usage': prior_monthly_usage, + 'charge': prior_monthly_charge, + 'price': prior_monthly_price} + + # [self.prior_billstart, self.prior_billend] = form_bill_calendar(FinancialDict['ProForma_Start'], + # FinancialDict['ProForma_Duration']) + # self.prior_monthly_usage = duplicate2terms(self.hist_monthly_usage, self.prior_billend) + # self.prior_monthly_price = form_inflated_item(self.hist_monthly_price, self.prior_billend, + # FinancialDict['inflation_coeff_dict'], + # FinancialDict['present_date']) + # self.prior_monthly_charge = product2list(self.prior_monthly_usage, self.prior_monthly_price) -- GitLab From e6a56feadc83e9329d7aacb142fc3497fe2585ab Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Tue, 18 Apr 2017 19:05:16 -0400 Subject: [PATCH 05/14] minor update on test_bill_lib "output_list", and fixed description for bill_month_norm_rough --- bpfin/tests/test_utilbills/test_bill_lib.py | 8 ++++---- bpfin/utilbills/bill_month_normalize_rough.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bpfin/tests/test_utilbills/test_bill_lib.py b/bpfin/tests/test_utilbills/test_bill_lib.py index 46a379e..fa288f2 100644 --- a/bpfin/tests/test_utilbills/test_bill_lib.py +++ b/bpfin/tests/test_utilbills/test_bill_lib.py @@ -3,10 +3,10 @@ from bpfin.utilbills.bill_lib import add_list def test_add_list(): input_list = [1, 2] - output = [3, 4] - result = add_list(input_list, 2) + output_list = [3, 4] + result_list = add_list(input_list, 2) - for i in range(len(result)): - assert result[i] == output[i] + for i in range(len(result_list)): + assert result_list[i] == output_list[i] diff --git a/bpfin/utilbills/bill_month_normalize_rough.py b/bpfin/utilbills/bill_month_normalize_rough.py index ccf9d9b..521fc27 100644 --- a/bpfin/utilbills/bill_month_normalize_rough.py +++ b/bpfin/utilbills/bill_month_normalize_rough.py @@ -12,7 +12,7 @@ def bill_month_normalize_rough(raw_bill): Args: raw_bill (dictionary): dictionary of lists. Elements are - 'date_from: list of datetime, + 'date_from': list of datetime, 'date_to', list of datetime, 'usage', list of float values, 'charge', list of float, -- GitLab From 35670ef5ec4c1a8bdd4284ea9a5fbe9b8f76a6b5 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Tue, 18 Apr 2017 23:09:13 -0400 Subject: [PATCH 06/14] created test_bill_prior_proj_roug. Need to ask how to copy inflation_coeff_dict, and the result is too long --- .../test_bill_prior_proj_rough.py | 222 ++++++++++++++++++ bpfin/utilbills/bill_prior_proj_rough.py | 123 +++++++++- 2 files changed, 342 insertions(+), 3 deletions(-) diff --git a/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py b/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py index e69de29..ed2ebe4 100644 --- a/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py +++ b/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py @@ -0,0 +1,222 @@ +import datetime +from bpfin.utilbills.bill_prior_proj_rough import bill_prior_proj_rough +from bpfin.utilbills import bill_lib as bl + + +def test_bill_prior_proj_rough(): + month_norm_bill = { + 'monthly_usage': [ + 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, + 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, + 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 + ], + 'monthly_charge': [ + 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, + 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, + 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, + 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 + ], + 'monthly_price': [ + 28182.379083772827, 26782.308906986349, 26787.762657851385, + 27313.595138938686, 26817.901843564676, 27005.501339712977, + 27201.030152373722, 26618.451410257541, 28498.41164180508, + 31875.872144254135, 33930.968787907128, 31671.445647289031 + ] + } + + raw_bill = {} + # raw_bill['utility_type'] = 'electricity' + # raw_bill['date_from'] = [ + # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), + # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), + # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), + # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), + # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), + # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), + # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), + # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] + raw_bill['date_to'] = [ + datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( + 2014, 7, 17), datetime.date(2014, 8, 15), + datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( + 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( + 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( + 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( + 2015, 5, 18), datetime.date(2015, 6, 17), + datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( + 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( + 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( + 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( + 2016, 3, 18), datetime.date(2016, 4, 18) + ] + # raw_bill['charge'] = [ + # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, + # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, + # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] + # raw_bill['usage'] = [ + # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, + # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, + # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] + + analysis_date = { + 'proforma_start': datetime.date(2012, 1, 15), + 'proforma_duration': 25 + } + + inflationyears = [ + 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, + 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, + 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, + 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, + 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, + 2065, 2066, 2067, 2068, 2069, 2070 + ] + inflationhist = [ + 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, + 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, + 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, + 0.042164, 0.030411000000000001, 0.029699, 0.025956, + 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, + 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, + 0.015956999999999999, 0.022977999999999998, 0.026674, + 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, + 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, + 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, + 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, + 0.023304999999999999, 0.023056, 0.019432600000000001, + 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, + 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, + 0.020537658658559999, 0.020050624524416, 0.0197251869768576, + 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, + 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, + 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, + 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, + 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, + 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, + 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, + 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, + 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, + 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, + 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, + 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, + 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, + 0.019732496782414701 + ] + + inflation_coeff_dict = bl.form_inflation_coeffdict(inflationyears, + inflationhist, + datetime.date( + 1984, 3, 31)) + + # print(inflation_coeffdict) + + output_list = [ + 26754.02190958825, 25437.402445542302, 25455.082481602276, + 25967.506799664803, 25682.652341327987, 25904.813599303496, + 26135.254343292472, 25617.53371054237, 27471.87725596816, + 30778.17820020553, 32816.34772218761, 30681.38949024495, + 27300.901075589303, 25944.15534926562, 25948.971912520003, + 26457.863623983936, 26154.30985850953, 26367.122421120857, + 26588.13450383182, 26048.176428904706, 27919.473102654887, + 31263.720730151443, 33317.07526031477, 31133.684577875214, + 27706.71473298358, 26332.98809505743, 26341.064228912815, + 26860.895645052482, 26555.93123531273, 26775.251635321703, + 27002.952176075487, 26457.77139192967, 28361.925216188432, + 31763.014062817325, 33853.25782553258, 31638.557527359313, + 28120.731159728904, 26692.984825881267, 26667.710732869426, + 27159.910190094997, 26817.901843564676, 27005.50133971298, + 27201.03015237372, 26618.45141025754, 28498.41164180508, + 31875.872144254132, 33930.96878790713, 31671.44564728903, + 28182.379083772827, 26782.308906986345, 26787.762657851385, + 27313.595138938683, 27000.708890291204, 27220.89780837819, + 27449.55981009997, 26892.591175889873, 28825.068674554102, + 32278.370555400215, 34398.9841881278, 32145.269927153997, + 28625.119382873097, 27223.13480531277, 27248.77769698295, + 27804.168753323785, 27505.951894336642, 27750.730661505855, + 28004.500198883696, 27456.524092354033, 29451.2492769073, + 33003.91337318344, 35198.156509452434, 32916.36289381111, + 29315.867378756702, 27883.947249018347, 27914.112313141843, + 28487.044137292265, 28185.44064305347, 28440.239483044264, + 28704.324422573933, 28146.586750679562, 30195.663667274195, + 33842.853446539695, 36097.91598369266, 33762.510355479244, + 30064.20202540023, 28590.729018954582, 28616.653337224438, + 29198.89749352122, 28884.70509626633, 29140.72833404548, + 29406.174296001183, 28829.756750121847, 30923.15979431818, + 34652.1593310156, 36954.6848711906, 34557.804854090806, + 30771.743548233786, 29262.987266337208, 29288.914567589014, + 29884.217871005265, 29562.038902734035, 29823.448124557886, + 30094.48978978649, 29503.968903672863, 31645.672843917448, + 35461.06525536879, 37816.556827191074, 35363.04343868804, + 31479.27253369292, 29926.803910058345, 29944.292298750017, + 30543.7085294851, 30205.313905040068, 30463.22793599256, + 30730.81988365605, 30118.733136461007, 32295.327230129726, + 36178.13954910067, 38569.635312611834, 36056.39306041519, + 32093.271052856362, 30507.47655458922, 30522.25759123903, + 31130.136006631354, 30782.171710198247, 31041.912803266994, + 31311.46251686415, 30684.74781298939, 32898.96223743173, + 36850.670195146085, 39282.701345004316, 36719.329619270386, + 32682.653474724724, 31067.082609819834, 31081.480706071827, + 31699.829471540288, 31344.83768004128, 31608.661402754336, + 31882.46149963201, 31243.660477898567, 33497.50118048761, + 37520.31396671061, 39995.69788899631, 37385.01323120586, + 33276.0802651476, 31632.05340096169, 31647.5920744316, + 32278.099558009235, 31917.518221478604, 32187.05581022932, + 32466.767552955906, 31817.142749694234, 34113.300255050315, + 38211.12713768559, 40733.21812875972, 38075.44969299633, + 33891.25695780802, 32217.43111537903, 32233.85188309206, + 32876.6456760923, 32509.97756210911, 32785.12306732849, + 33070.642102474034, 32409.532202856528, 34749.0817899383, + 38923.999243253435, 41493.908050210695, 38787.221391716266, + 34529.83661967908, 32829.2510679787, 32850.76535001071, + 33510.739112086354, 33141.8230967011, 33427.181754474885, + 33723.20101744418, 33053.85715719098, 35445.077983421404, + 39709.395683611314, 42337.32183581328, 39581.37987304508, + 35238.41685882394, 33504.44627025329, 33527.91645055515, + 34203.03810809352, 33828.02761311082, 34120.83482871911, + 34424.55072706422, 33742.80947456002, 36185.50467333175, + 40540.73141323701, 43225.625653537085, 40413.68391300862, + 35978.530434135086, 34207.31585417915, 34230.45249031789, + 34918.877966328815, 34535.18556412997, 34833.273311959994, + 35142.482841420526, 34445.69261027247, 36938.37938018581, + 41383.222366249895, 44122.847727602944, 41251.54399292418, + 36722.95256061526, 34913.675605760676, 34935.874450620504, + 35637.04305615946, 35244.03134395224, 35546.797136530964, + 35860.88747708315, 35148.428863019784, 37690.442476774, + 42224.07133333292, 45017.53799293737, 42086.306825236534, + 37465.060813870776, 35618.25708219298, 35639.93895299573, + 36354.25394408604, 35952.359280815246, 36260.228247349354, + 36579.63203778363, 35851.9232166152, 38443.774251630115, + 43066.85225243954, 45914.83258537647, 42924.01361071201, + 38209.72515243989, 36325.20727263827, 36346.31225589064, + 37073.757376242145, 36662.89263267302, 36975.82139878797, + 37300.49493038777, 36557.43230924951, 39199.20058159262, + 43911.90592020215, 46814.47172934675, 43763.838912320076, + 38957.30041094427, 37035.899363174336, 37057.40477432121, + 37799.06916168266, 37380.15365776035, 37699.191760311005, + 38030.204176110325, 37272.59247017143, 39966.02725905225, + 44770.90888835863, 47730.23849443133, 44619.915333868405, + 39719.73653229103, 37761.09449777748, 37783.384108807615, + 38539.94857330552, 38113.188404530265, 38438.85233344472, + 38776.731885659894, 38004.61359676978, 40751.33816294772, + 45651.07184277119, 48669.04739849538, 45497.984350354855, + 40501.888989390674, 38505.16585864819, 38528.383033145146, + 39300.36329670178, 38865.67553971432, 39198.2660533303, + 39543.32211013742, 38756.430799422735, 41558.01854338669, + 46555.33346618678, 49633.71853999643, 46400.389856003654, + 41305.663333911165, 39269.75301920907, 39293.86997484386, + 40081.635603055096, 39638.74907735906, 39978.40152525879, + 40330.775331642646, 39528.65550135918, 42386.53838192031, + 47484.01229805165, 50624.36981953646, 47327.03481740793, + 42131.00318614886, 40054.830896821084, 40079.848368848034, + 40883.79809844024, 40432.47004123157, 40779.34931771415, + 41139.21219179594, 40321.43463472525, 43237.08599499887, + 48437.35375945405, 51641.29962190507, 48278.232521546975 + ] + + result_list = bill_prior_proj_rough(month_norm_bill, raw_bill, + analysis_date, inflation_coeff_dict) + + assert result_list['price'] == output_list diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index dccd84f..457a7c3 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -1,3 +1,4 @@ +import datetime import bpfin.utilbills.bill_lib as bl import bpfin.lib.other as lib @@ -8,8 +9,10 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co with daily rough estimation, for years that in the past and future Args: - month_norm_bill (dictionary) - raw_bill (dictionary) + month_norm_bill (dictionary): {'monthly_usage':[list of float], + "monthly_price":[list of float], + "monthly_charge":[list of float]} + raw_bill (dictionary): analysis_date (dictionary) Returns: dictionary @@ -18,10 +21,14 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co analysis_date['proforma_start'], analysis_date['proforma_duration']) + present_date = datetime.date(raw_bill['date_to'][-1].year, + raw_bill['date_to'][-1].month, + bl.cal_last_day(raw_bill['date_to'][-1].year, raw_bill['date_to'][-1].month)) prior_monthly_usage = lib.duplicate2terms(month_norm_bill['monthly_usage'], prior_bill_end) prior_monthly_price = bl.form_inflated_item(month_norm_bill['monthly_price'], prior_bill_end, inflation_coeff_dict, - analysis_date['present_date']) + present_date) prior_monthly_charge = lib.product2list(prior_monthly_usage, prior_monthly_price) + print(prior_monthly_price) return { 'date_from': prior_bill_start, 'date_to': prior_bill_end, @@ -36,3 +43,113 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co # FinancialDict['inflation_coeff_dict'], # FinancialDict['present_date']) # self.prior_monthly_charge = product2list(self.prior_monthly_usage, self.prior_monthly_price) + + +month_norm_bill = { + 'monthly_usage': [ + 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, + 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, + 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 + ], + 'monthly_charge': [ + 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, + 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, + 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, + 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 + ], + 'monthly_price': [ + 28182.379083772827, 26782.308906986349, 26787.762657851385, + 27313.595138938686, 26817.901843564676, 27005.501339712977, + 27201.030152373722, 26618.451410257541, 28498.41164180508, + 31875.872144254135, 33930.968787907128, 31671.445647289031 + ] +} + +#### +raw_bill = {} +# raw_bill['utility_type'] = 'electricity' +# raw_bill['date_from'] = [ +# datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), +# datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), +# datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), +# datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), +# datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), +# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), +# datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), +# datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] +raw_bill['date_to'] = [ + datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( + 2014, 7, 17), datetime.date(2014, 8, 15), + datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( + 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( + 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( + 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( + 2015, 5, 18), datetime.date(2015, 6, 17), + datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( + 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( + 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( + 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( + 2016, 3, 18), datetime.date(2016, 4, 18) +] +# raw_bill['charge'] = [ +# 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, +# 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, +# 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] +# raw_bill['usage'] = [ +# 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, +# 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, +# 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] + +analysis_date = { + 'proforma_start': datetime.date(2012, 1, 15), + 'proforma_duration': 25 +} + +inflationyears = [ + 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, + 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, + 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, + 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, + 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, + 2065, 2066, 2067, 2068, 2069, 2070 +] + +inflationhist = [ + 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, + 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, + 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, + 0.042164, 0.030411000000000001, 0.029699, 0.025956, + 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, + 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, + 0.015956999999999999, 0.022977999999999998, 0.026674, + 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, + 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, + 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, + 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, + 0.023304999999999999, 0.023056, 0.019432600000000001, + 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, + 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, + 0.020537658658559999, 0.020050624524416, 0.0197251869768576, + 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, + 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, + 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, + 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, + 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, + 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, + 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, + 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, + 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, + 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, + 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, + 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, + 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, + 0.019732496782414701 +] + +inflation_coeff_dict = bl.form_inflation_coeffdict( + inflationyears, inflationhist, datetime.date(1984, 3, 31)) + +bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) -- GitLab From 4ef1963e6bd7ddd4ef4c2358e645a9a5801370db Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Tue, 18 Apr 2017 23:21:11 -0400 Subject: [PATCH 07/14] cleaned up bill_prior_proj_rough, commented test example and updated description --- bpfin/utilbills/bill_prior_proj_rough.py | 250 +++++++++++------------ 1 file changed, 125 insertions(+), 125 deletions(-) diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index 457a7c3..a095da1 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -4,7 +4,6 @@ import bpfin.lib.other as lib def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict): - """ project energy bill, on a monthly_normalized base, with daily rough estimation, for years that in the past and future @@ -12,144 +11,145 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co month_norm_bill (dictionary): {'monthly_usage':[list of float], "monthly_price":[list of float], "monthly_charge":[list of float]} - raw_bill (dictionary): - analysis_date (dictionary) + raw_bill (dictionary): {'date_to': list of date} + analysis_date (dictionary): proforma's starting date and the years of proforma + {'proforma_start': datetime.date, 'proforma': int} + + inflation_coeff_dict (dictonary): monthly inflation coefficient for past all years. NOT inflation rate + {date: float} Returns: - dictionary + dictionary: dictionary of lists + {'date_from': prior_bill_start, 'date_to': prior_bill_end, + 'usage': prior_monthly_usage, 'charge': prior_monthly_charge, + 'price': prior_monthly_price} """ [prior_bill_start, prior_bill_end] = bl.form_bill_calendar( - analysis_date['proforma_start'], - analysis_date['proforma_duration']) + analysis_date['proforma_start'], analysis_date['proforma_duration']) - present_date = datetime.date(raw_bill['date_to'][-1].year, - raw_bill['date_to'][-1].month, - bl.cal_last_day(raw_bill['date_to'][-1].year, raw_bill['date_to'][-1].month)) - prior_monthly_usage = lib.duplicate2terms(month_norm_bill['monthly_usage'], prior_bill_end) - prior_monthly_price = bl.form_inflated_item(month_norm_bill['monthly_price'], prior_bill_end, inflation_coeff_dict, - present_date) - prior_monthly_charge = lib.product2list(prior_monthly_usage, prior_monthly_price) + present_date = datetime.date( + raw_bill['date_to'][-1].year, raw_bill['date_to'][-1].month, + bl.cal_last_day(raw_bill['date_to'][-1].year, + raw_bill['date_to'][-1].month)) + prior_monthly_usage = lib.duplicate2terms(month_norm_bill['monthly_usage'], + prior_bill_end) + prior_monthly_price = bl.form_inflated_item( + month_norm_bill['monthly_price'], prior_bill_end, inflation_coeff_dict, + present_date) + prior_monthly_charge = lib.product2list(prior_monthly_usage, + prior_monthly_price) print(prior_monthly_price) return { 'date_from': prior_bill_start, 'date_to': prior_bill_end, 'usage': prior_monthly_usage, 'charge': prior_monthly_charge, - 'price': prior_monthly_price} - - # [self.prior_billstart, self.prior_billend] = form_bill_calendar(FinancialDict['ProForma_Start'], - # FinancialDict['ProForma_Duration']) - # self.prior_monthly_usage = duplicate2terms(self.hist_monthly_usage, self.prior_billend) - # self.prior_monthly_price = form_inflated_item(self.hist_monthly_price, self.prior_billend, - # FinancialDict['inflation_coeff_dict'], - # FinancialDict['present_date']) - # self.prior_monthly_charge = product2list(self.prior_monthly_usage, self.prior_monthly_price) - + 'price': prior_monthly_price + } -month_norm_bill = { - 'monthly_usage': [ - 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, - 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, - 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, - 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 - ], - 'monthly_charge': [ - 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, - 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, - 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, - 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 - ], - 'monthly_price': [ - 28182.379083772827, 26782.308906986349, 26787.762657851385, - 27313.595138938686, 26817.901843564676, 27005.501339712977, - 27201.030152373722, 26618.451410257541, 28498.41164180508, - 31875.872144254135, 33930.968787907128, 31671.445647289031 - ] -} +# month_norm_bill = { +# 'monthly_usage': [ +# 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, +# 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, +# 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, +# 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 +# ], +# 'monthly_charge': [ +# 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, +# 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, +# 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, +# 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 +# ], +# 'monthly_price': [ +# 28182.379083772827, 26782.308906986349, 26787.762657851385, +# 27313.595138938686, 26817.901843564676, 27005.501339712977, +# 27201.030152373722, 26618.451410257541, 28498.41164180508, +# 31875.872144254135, 33930.968787907128, 31671.445647289031 +# ] +# } -#### -raw_bill = {} -# raw_bill['utility_type'] = 'electricity' -# raw_bill['date_from'] = [ -# datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), -# datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), -# datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), -# datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), -# datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), -# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), -# datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), -# datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] -raw_bill['date_to'] = [ - datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( - 2014, 7, 17), datetime.date(2014, 8, 15), - datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( - 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( - 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( - 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( - 2015, 5, 18), datetime.date(2015, 6, 17), - datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( - 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( - 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( - 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( - 2016, 3, 18), datetime.date(2016, 4, 18) -] -# raw_bill['charge'] = [ -# 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, -# 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, -# 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] -# raw_bill['usage'] = [ -# 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, -# 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, -# 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] +# raw_bill = {} +# # raw_bill['utility_type'] = 'electricity' +# # raw_bill['date_from'] = [ +# # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), +# # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), +# # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), +# # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), +# # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), +# # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), +# # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), +# # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] +# raw_bill['date_to'] = [ +# datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( +# 2014, 7, 17), datetime.date(2014, 8, 15), +# datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( +# 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( +# 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( +# 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( +# 2015, 5, 18), datetime.date(2015, 6, 17), +# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( +# 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( +# 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( +# 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( +# 2016, 3, 18), datetime.date(2016, 4, 18) +# ] +# # raw_bill['charge'] = [ +# # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, +# # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, +# # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] +# # raw_bill['usage'] = [ +# # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, +# # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, +# # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] -analysis_date = { - 'proforma_start': datetime.date(2012, 1, 15), - 'proforma_duration': 25 -} +# analysis_date = { +# 'proforma_start': datetime.date(2012, 1, 15), +# 'proforma_duration': 25 +# } -inflationyears = [ - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, - 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, - 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, - 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, - 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, - 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, - 2065, 2066, 2067, 2068, 2069, 2070 -] +# inflationyears = [ +# 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, +# 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, +# 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, +# 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, +# 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, +# 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, +# 2065, 2066, 2067, 2068, 2069, 2070 +# ] -inflationhist = [ - 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, - 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, - 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, - 0.042164, 0.030411000000000001, 0.029699, 0.025956, - 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, - 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, - 0.015956999999999999, 0.022977999999999998, 0.026674, - 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, - 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, - 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, - 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, - 0.023304999999999999, 0.023056, 0.019432600000000001, - 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, - 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, - 0.020537658658559999, 0.020050624524416, 0.0197251869768576, - 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, - 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, - 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, - 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, - 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, - 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, - 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, - 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, - 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, - 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, - 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, - 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, - 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, - 0.019732496782414701 -] +# inflationhist = [ +# 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, +# 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, +# 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, +# 0.042164, 0.030411000000000001, 0.029699, 0.025956, +# 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, +# 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, +# 0.015956999999999999, 0.022977999999999998, 0.026674, +# 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, +# 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, +# 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, +# 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, +# 0.023304999999999999, 0.023056, 0.019432600000000001, +# 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, +# 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, +# 0.020537658658559999, 0.020050624524416, 0.0197251869768576, +# 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, +# 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, +# 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, +# 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, +# 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, +# 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, +# 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, +# 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, +# 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, +# 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, +# 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, +# 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, +# 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, +# 0.019732496782414701 +# ] -inflation_coeff_dict = bl.form_inflation_coeffdict( - inflationyears, inflationhist, datetime.date(1984, 3, 31)) +# inflation_coeff_dict = bl.form_inflation_coeffdict( +# inflationyears, inflationhist, datetime.date(1984, 3, 31)) -bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) +# bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) -- GitLab From ffd265fbca37a4f095e1cffc23270d206d9d1d29 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Wed, 19 Apr 2017 11:43:17 -0400 Subject: [PATCH 08/14] created sample_data for test sake. Created inflation_coeff_dict for all future inputs. Created pprint in bill_prior_proj_rough. Should be deleted when done Alleso made some setting and we are halfway there. --- .../test_month_normalize_rough.py | 61 ++--- bpfin/tests/testdata/sample_data.py | 166 ++++++++++++++ bpfin/utilbills/bill_prior_proj_rough.py | 210 +++++++++--------- 3 files changed, 305 insertions(+), 132 deletions(-) create mode 100644 bpfin/tests/testdata/sample_data.py diff --git a/bpfin/tests/test_utilbills/test_month_normalize_rough.py b/bpfin/tests/test_utilbills/test_month_normalize_rough.py index 6cb619c..1db1cca 100644 --- a/bpfin/tests/test_utilbills/test_month_normalize_rough.py +++ b/bpfin/tests/test_utilbills/test_month_normalize_rough.py @@ -1,38 +1,39 @@ -from bpfin.utilbills.bill_month_normalize_rough import bill_month_normalize_rough import datetime +from bpfin.utilbills.bill_month_normalize_rough import bill_month_normalize_rough +from bpfin.tests.testdata import sample_data as db def test_month_normalization_rough(): - test_raw_bill = {} - test_raw_bill['utility_type'] = 'electricity' - test_raw_bill['date_from'] = [ - datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), - datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), - datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), - datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), - datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), - datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), - datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), - datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] - test_raw_bill['date_to'] = [ - datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date(2014, 7, 17), - datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), - datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), datetime.date(2015, 1, 16), - datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), datetime.date(2015, 4, 17), - datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), datetime.date(2015, 7, 17), - datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date(2015, 10, 16), - datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), datetime.date(2016, 1, 19), - datetime.date(2016, 2, 18), datetime.date(2016, 3, 18), datetime.date(2016, 4, 18)] - test_raw_bill['charge'] = [ - 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, - 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, - 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] - test_raw_bill['usage'] = [ - 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, - 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, - 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] + # test_raw_bill = {} + # test_raw_bill['utility_type'] = 'electricity' + # test_raw_bill['date_from'] = [ + # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), + # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), + # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), + # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), + # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), + # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), + # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), + # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] + # test_raw_bill['date_to'] = [ + # datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date(2014, 7, 17), + # datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), + # datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), datetime.date(2015, 1, 16), + # datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), datetime.date(2015, 4, 17), + # datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), datetime.date(2015, 7, 17), + # datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date(2015, 10, 16), + # datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), datetime.date(2016, 1, 19), + # datetime.date(2016, 2, 18), datetime.date(2016, 3, 18), datetime.date(2016, 4, 18)] + # test_raw_bill['charge'] = [ + # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, + # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, + # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] + # test_raw_bill['usage'] = [ + # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, + # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, + # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] - input_dict = test_raw_bill + input_dict = db.raw_bill output_dict = { 'monthly_usage': [ 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, 0.095904698506193486, diff --git a/bpfin/tests/testdata/sample_data.py b/bpfin/tests/testdata/sample_data.py new file mode 100644 index 0000000..464cb8b --- /dev/null +++ b/bpfin/tests/testdata/sample_data.py @@ -0,0 +1,166 @@ +import datetime +import pprint +from bpfin.utilbills import bill_lib as bl + +# raw_bill +raw_bill = {} +raw_bill['utility_type'] = 'electricity' +raw_bill['date_from'] = [ + datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date( + 2014, 6, 17), datetime.date(2014, 7, 17), + datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date( + 2014, 10, 16), datetime.date(2014, 11, 14), datetime.date( + 2014, 12, 17), datetime.date(2015, 1, 16), datetime.date( + 2015, 2, 18), datetime.date(2015, 3, 19), datetime.date( + 2015, 4, 17), datetime.date(2015, 5, 18), datetime.date( + 2015, 6, 17), datetime.date(2015, 7, 17), + datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date( + 2015, 10, 16), datetime.date(2015, 11, 16), datetime.date( + 2015, 12, 17), datetime.date(2016, 1, 19), datetime.date( + 2016, 2, 18), datetime.date(2016, 3, 18) +] +raw_bill['date_to'] = [ + datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( + 2014, 7, 17), + datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date( + 2014, 10, 16), datetime.date(2014, 11, 14), datetime.date( + 2014, 12, 17), datetime.date(2015, 1, 16), datetime.date( + 2015, 2, 18), datetime.date(2015, 3, 19), datetime.date( + 2015, 4, 17), datetime.date(2015, 5, 18), datetime.date( + 2015, 6, 17), datetime.date(2015, 7, 17), + datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date( + 2015, 10, 16), datetime.date(2015, 11, 16), datetime.date( + 2015, 12, 17), datetime.date(2016, 1, 19), datetime.date( + 2016, 2, 18), datetime.date(2016, 3, 18), datetime.date( + 2016, 4, 18) +] +raw_bill['charge'] = [ + 2601.6289696969693, 2642.1740261508003, 3437.551946607342, + 2930.5070588449826, 2514.1242835094554, 2804.4448749999997, + 3237.7359972191325, 3289.4155027808674, 2796.5700000000002, + 2463.5113047830923, 2370.0007392051775, 2479.081440860215 +] +raw_bill['usage'] = [ + 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, + 0.11229655777596657, 0.092170964664193167, 0.094173672324921492, + 0.095187070309577237, 0.097177529967719486, 0.095676831493476874, + 0.091583582602530869, 0.089122740090923164, 0.091516956021057888 +] + +# monthly normalized bill, rough method +month_normalized_bill = { + 'monthly_usage': [ + 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, + 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, + 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 + ], + 'monthly_charge': [ + 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, + 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, + 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, + 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 + ], + 'monthly_price': [ + 28182.379083772827, 26782.308906986349, 26787.762657851385, + 27313.595138938686, 26817.901843564676, 27005.501339712977, + 27201.030152373722, 26618.451410257541, 28498.41164180508, + 31875.872144254135, 33930.968787907128, 31671.445647289031 + ] +} + +# financial overview +analysis_date = { + 'proforma_start': datetime.date(2014, 1, 15), + 'proforma_duration': 15 +} + +# global inputs +# inflation coefficient dictionary, present date = (2017,1,31). coeff at that date ==1 +inflation_coeff_dict = { + datetime.date(2014, 6, 30): 0.9744254627547358, + datetime.date(2014, 7, 31): 0.9757325733108996, + datetime.date(2014, 8, 31): 0.9770414372469484, + datetime.date(2014, 9, 30): 0.9783520569148956, + datetime.date(2014, 10, 31): 0.979664434669909, + datetime.date(2014, 11, 30): 0.9809785728703159, + datetime.date(2014, 12, 31): 0.982294473877607, + datetime.date(2015, 1, 31): 0.9823795242074701, + datetime.date(2015, 2, 28): 0.9824645819012744, + datetime.date(2015, 3, 31): 0.9825496469596572, + datetime.date(2015, 4, 30): 0.9826347193832563, + datetime.date(2015, 5, 31): 0.9827197991727095, + datetime.date(2015, 6, 30): 0.9828048863286544, + datetime.date(2015, 7, 31): 0.9828899808517289, + datetime.date(2015, 8, 31): 0.9829750827425707, + datetime.date(2015, 9, 30): 0.9830601920018182, + datetime.date(2015, 10, 31): 0.9831453086301088, + datetime.date(2015, 11, 30): 0.983230432628081, + datetime.date(2015, 12, 31): 0.9833155639963727, + datetime.date(2016, 1, 31): 0.9845331544934913, + datetime.date(2016, 2, 29): 0.985752252672043, + datetime.date(2016, 3, 31): 0.9869728603989143, + datetime.date(2016, 4, 30): 0.9881949795433034, + datetime.date(2016, 5, 31): 0.9894186119767231, + datetime.date(2016, 6, 30): 0.9906437595730033, + datetime.date(2016, 7, 31): 0.9918704242082947, + datetime.date(2016, 8, 31): 0.9930986077610708, + datetime.date(2016, 9, 30): 0.994328312112131, + datetime.date(2016, 10, 31): 0.9955595391446039, + datetime.date(2016, 11, 30): 0.9967922907439498, + datetime.date(2016, 12, 31): 0.9980265687979636, + datetime.date(2017, 1, 31): 1.0, + datetime.date(2017, 2, 28): 1.0019773333333333, + datetime.date(2017, 3, 31): 1.0039585765137777, + datetime.date(2017, 4, 30): 1.0059437372724043, + datetime.date(2017, 5, 31): 1.0079328233555709, + datetime.date(2017, 6, 30): 1.0099258425249524, + datetime.date(2017, 7, 31): 1.0119228025575717, + datetime.date(2017, 8, 31): 1.0139237112458288, + datetime.date(2017, 9, 30): 1.0159285763975323, + datetime.date(2017, 10, 31): 1.017937405835929, + datetime.date(2017, 11, 30): 1.0199502073997353, + datetime.date(2017, 12, 31): 1.0219669889431668, + datetime.date(2054, 11, 30): 2.1069457467413235, + datetime.date(2054, 12, 31): 2.1104102792374912, + datetime.date(2055, 1, 31): 2.1138805233147497, + datetime.date(2055, 2, 28): 2.1173564736729498, + datetime.date(2055, 3, 31): 2.1208381396951905, + datetime.date(2055, 4, 30): 2.124325530779999, + datetime.date(2055, 5, 31): 2.1278186563413573, + datetime.date(2055, 6, 30): 2.1313175258087274, + datetime.date(2055, 7, 31): 2.1348221486270766, + datetime.date(2055, 8, 31): 2.1383325342569033, + datetime.date(2055, 9, 30): 2.1418486921742605, + datetime.date(2055, 10, 31): 2.1453706318707857, + datetime.date(2055, 11, 30): 2.148898362853722, + datetime.date(2055, 12, 31): 2.1524318946459466, + datetime.date(2056, 1, 31): 2.1559712697360918, + datetime.date(2056, 2, 29): 2.159516464836645, + datetime.date(2056, 3, 31): 2.1630674895178044, + datetime.date(2056, 4, 30): 2.1666243533655045, + datetime.date(2056, 5, 31): 2.1701870659814433, + datetime.date(2056, 6, 30): 2.1737556369831075, + datetime.date(2056, 7, 31): 2.177330076003798, + datetime.date(2056, 8, 31): 2.1809103926926565, + datetime.date(2056, 9, 30): 2.1844965967146917, + datetime.date(2056, 10, 31): 2.1880886977508043, + datetime.date(2056, 11, 30): 2.191686705497815, + datetime.date(2056, 12, 31): 2.195290629668488, + datetime.date(2057, 1, 31): 2.1989005101090213, + datetime.date(2057, 2, 28): 2.202516326545736, + datetime.date(2057, 3, 31): 2.2061380887396345, + datetime.date(2057, 4, 30): 2.2097658064677694, + datetime.date(2057, 5, 31): 2.2133994895232707, + datetime.date(2057, 6, 30): 2.2170391477153726, + datetime.date(2057, 7, 31): 2.220684790869438, + datetime.date(2057, 8, 31): 2.224336428826987, + datetime.date(2057, 9, 30): 2.2279940714457234, + datetime.date(2057, 10, 31): 2.2316577285995605, + datetime.date(2057, 11, 30): 2.2353274101786473, + datetime.date(2057, 12, 31): 2.239003126089397 +} + + +# pp = pprint.PrettyPrinter(width=119, indent=4, compact=True) +# pp.pprint(inflation_coeff_dict) diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index a095da1..a749c42 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -1,6 +1,7 @@ import datetime import bpfin.utilbills.bill_lib as bl import bpfin.lib.other as lib +import pprint def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict): @@ -37,7 +38,12 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co present_date) prior_monthly_charge = lib.product2list(prior_monthly_usage, prior_monthly_price) - print(prior_monthly_price) + + pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) + pp.pprint(prior_monthly_price) + # print(prior_monthly_price) + + # write to a txt file return { 'date_from': prior_bill_start, 'date_to': prior_bill_end, @@ -46,110 +52,110 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co 'price': prior_monthly_price } -# month_norm_bill = { -# 'monthly_usage': [ -# 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, -# 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, -# 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, -# 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 -# ], -# 'monthly_charge': [ -# 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, -# 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, -# 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, -# 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 -# ], -# 'monthly_price': [ -# 28182.379083772827, 26782.308906986349, 26787.762657851385, -# 27313.595138938686, 26817.901843564676, 27005.501339712977, -# 27201.030152373722, 26618.451410257541, 28498.41164180508, -# 31875.872144254135, 33930.968787907128, 31671.445647289031 -# ] -# } +month_norm_bill = { + 'monthly_usage': [ + 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, + 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, + 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 + ], + 'monthly_charge': [ + 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, + 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, + 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, + 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 + ], + 'monthly_price': [ + 28182.379083772827, 26782.308906986349, 26787.762657851385, + 27313.595138938686, 26817.901843564676, 27005.501339712977, + 27201.030152373722, 26618.451410257541, 28498.41164180508, + 31875.872144254135, 33930.968787907128, 31671.445647289031 + ] +} -# raw_bill = {} -# # raw_bill['utility_type'] = 'electricity' -# # raw_bill['date_from'] = [ -# # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), -# # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), -# # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), -# # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), -# # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), -# # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), -# # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), -# # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] -# raw_bill['date_to'] = [ -# datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( -# 2014, 7, 17), datetime.date(2014, 8, 15), -# datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( -# 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( -# 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( -# 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( -# 2015, 5, 18), datetime.date(2015, 6, 17), -# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( -# 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( -# 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( -# 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( -# 2016, 3, 18), datetime.date(2016, 4, 18) -# ] -# # raw_bill['charge'] = [ -# # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, -# # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, -# # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] -# # raw_bill['usage'] = [ -# # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, -# # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, -# # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] +raw_bill = {} +# raw_bill['utility_type'] = 'electricity' +# raw_bill['date_from'] = [ +# datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), +# datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), +# datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), +# datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), +# datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), +# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), +# datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), +# datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] +raw_bill['date_to'] = [ + datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( + 2014, 7, 17), datetime.date(2014, 8, 15), + datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( + 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( + 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( + 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( + 2015, 5, 18), datetime.date(2015, 6, 17), + datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( + 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( + 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( + 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( + 2016, 3, 18), datetime.date(2016, 4, 18) +] +# raw_bill['charge'] = [ +# 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, +# 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, +# 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] +# raw_bill['usage'] = [ +# 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, +# 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, +# 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] -# analysis_date = { -# 'proforma_start': datetime.date(2012, 1, 15), -# 'proforma_duration': 25 -# } +analysis_date = { + 'proforma_start': datetime.date(2012, 1, 15), + 'proforma_duration': 25 +} -# inflationyears = [ -# 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, -# 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, -# 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, -# 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, -# 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, -# 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, -# 2065, 2066, 2067, 2068, 2069, 2070 -# ] +inflationyears = [ + 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, + 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, + 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, + 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, + 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, + 2065, 2066, 2067, 2068, 2069, 2070 +] -# inflationhist = [ -# 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, -# 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, -# 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, -# 0.042164, 0.030411000000000001, 0.029699, 0.025956, -# 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, -# 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, -# 0.015956999999999999, 0.022977999999999998, 0.026674, -# 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, -# 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, -# 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, -# 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, -# 0.023304999999999999, 0.023056, 0.019432600000000001, -# 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, -# 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, -# 0.020537658658559999, 0.020050624524416, 0.0197251869768576, -# 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, -# 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, -# 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, -# 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, -# 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, -# 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, -# 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, -# 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, -# 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, -# 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, -# 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, -# 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, -# 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, -# 0.019732496782414701 -# ] +inflationhist = [ + 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, + 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, + 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, + 0.042164, 0.030411000000000001, 0.029699, 0.025956, + 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, + 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, + 0.015956999999999999, 0.022977999999999998, 0.026674, + 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, + 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, + 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, + 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, + 0.023304999999999999, 0.023056, 0.019432600000000001, + 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, + 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, + 0.020537658658559999, 0.020050624524416, 0.0197251869768576, + 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, + 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, + 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, + 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, + 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, + 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, + 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, + 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, + 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, + 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, + 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, + 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, + 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, + 0.019732496782414701 +] -# inflation_coeff_dict = bl.form_inflation_coeffdict( -# inflationyears, inflationhist, datetime.date(1984, 3, 31)) +inflation_coeff_dict = bl.form_inflation_coeffdict( + inflationyears, inflationhist, datetime.date(1984, 3, 31)) -# bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) +bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) -- GitLab From 18f081c6f580046eae4f394e09e4260717781509 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Wed, 19 Apr 2017 12:11:52 -0400 Subject: [PATCH 09/14] Created pprint in bill_prior_proj_rough. Should be deleted when done --- .../test_month_normalize_rough.py | 61 ++--- bpfin/utilbills/bill_prior_proj_rough.py | 210 +++++++++--------- 2 files changed, 139 insertions(+), 132 deletions(-) diff --git a/bpfin/tests/test_utilbills/test_month_normalize_rough.py b/bpfin/tests/test_utilbills/test_month_normalize_rough.py index 6cb619c..1db1cca 100644 --- a/bpfin/tests/test_utilbills/test_month_normalize_rough.py +++ b/bpfin/tests/test_utilbills/test_month_normalize_rough.py @@ -1,38 +1,39 @@ -from bpfin.utilbills.bill_month_normalize_rough import bill_month_normalize_rough import datetime +from bpfin.utilbills.bill_month_normalize_rough import bill_month_normalize_rough +from bpfin.tests.testdata import sample_data as db def test_month_normalization_rough(): - test_raw_bill = {} - test_raw_bill['utility_type'] = 'electricity' - test_raw_bill['date_from'] = [ - datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), - datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), - datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), - datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), - datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), - datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), - datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), - datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] - test_raw_bill['date_to'] = [ - datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date(2014, 7, 17), - datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), - datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), datetime.date(2015, 1, 16), - datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), datetime.date(2015, 4, 17), - datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), datetime.date(2015, 7, 17), - datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date(2015, 10, 16), - datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), datetime.date(2016, 1, 19), - datetime.date(2016, 2, 18), datetime.date(2016, 3, 18), datetime.date(2016, 4, 18)] - test_raw_bill['charge'] = [ - 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, - 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, - 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] - test_raw_bill['usage'] = [ - 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, - 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, - 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] + # test_raw_bill = {} + # test_raw_bill['utility_type'] = 'electricity' + # test_raw_bill['date_from'] = [ + # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), + # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), + # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), + # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), + # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), + # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), + # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), + # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] + # test_raw_bill['date_to'] = [ + # datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date(2014, 7, 17), + # datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), + # datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), datetime.date(2015, 1, 16), + # datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), datetime.date(2015, 4, 17), + # datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), datetime.date(2015, 7, 17), + # datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date(2015, 10, 16), + # datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), datetime.date(2016, 1, 19), + # datetime.date(2016, 2, 18), datetime.date(2016, 3, 18), datetime.date(2016, 4, 18)] + # test_raw_bill['charge'] = [ + # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, + # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, + # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] + # test_raw_bill['usage'] = [ + # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, + # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, + # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] - input_dict = test_raw_bill + input_dict = db.raw_bill output_dict = { 'monthly_usage': [ 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, 0.095904698506193486, diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index a095da1..a749c42 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -1,6 +1,7 @@ import datetime import bpfin.utilbills.bill_lib as bl import bpfin.lib.other as lib +import pprint def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict): @@ -37,7 +38,12 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co present_date) prior_monthly_charge = lib.product2list(prior_monthly_usage, prior_monthly_price) - print(prior_monthly_price) + + pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) + pp.pprint(prior_monthly_price) + # print(prior_monthly_price) + + # write to a txt file return { 'date_from': prior_bill_start, 'date_to': prior_bill_end, @@ -46,110 +52,110 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co 'price': prior_monthly_price } -# month_norm_bill = { -# 'monthly_usage': [ -# 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, -# 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, -# 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, -# 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 -# ], -# 'monthly_charge': [ -# 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, -# 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, -# 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, -# 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 -# ], -# 'monthly_price': [ -# 28182.379083772827, 26782.308906986349, 26787.762657851385, -# 27313.595138938686, 26817.901843564676, 27005.501339712977, -# 27201.030152373722, 26618.451410257541, 28498.41164180508, -# 31875.872144254135, 33930.968787907128, 31671.445647289031 -# ] -# } +month_norm_bill = { + 'monthly_usage': [ + 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, + 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, + 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 + ], + 'monthly_charge': [ + 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, + 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, + 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, + 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 + ], + 'monthly_price': [ + 28182.379083772827, 26782.308906986349, 26787.762657851385, + 27313.595138938686, 26817.901843564676, 27005.501339712977, + 27201.030152373722, 26618.451410257541, 28498.41164180508, + 31875.872144254135, 33930.968787907128, 31671.445647289031 + ] +} -# raw_bill = {} -# # raw_bill['utility_type'] = 'electricity' -# # raw_bill['date_from'] = [ -# # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), -# # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), -# # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), -# # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), -# # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), -# # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), -# # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), -# # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] -# raw_bill['date_to'] = [ -# datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( -# 2014, 7, 17), datetime.date(2014, 8, 15), -# datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( -# 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( -# 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( -# 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( -# 2015, 5, 18), datetime.date(2015, 6, 17), -# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( -# 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( -# 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( -# 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( -# 2016, 3, 18), datetime.date(2016, 4, 18) -# ] -# # raw_bill['charge'] = [ -# # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, -# # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, -# # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] -# # raw_bill['usage'] = [ -# # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, -# # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, -# # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] +raw_bill = {} +# raw_bill['utility_type'] = 'electricity' +# raw_bill['date_from'] = [ +# datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), +# datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), +# datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), +# datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), +# datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), +# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), +# datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), +# datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] +raw_bill['date_to'] = [ + datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( + 2014, 7, 17), datetime.date(2014, 8, 15), + datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( + 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( + 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( + 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( + 2015, 5, 18), datetime.date(2015, 6, 17), + datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( + 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( + 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( + 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( + 2016, 3, 18), datetime.date(2016, 4, 18) +] +# raw_bill['charge'] = [ +# 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, +# 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, +# 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] +# raw_bill['usage'] = [ +# 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, +# 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, +# 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] -# analysis_date = { -# 'proforma_start': datetime.date(2012, 1, 15), -# 'proforma_duration': 25 -# } +analysis_date = { + 'proforma_start': datetime.date(2012, 1, 15), + 'proforma_duration': 25 +} -# inflationyears = [ -# 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, -# 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, -# 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, -# 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, -# 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, -# 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, -# 2065, 2066, 2067, 2068, 2069, 2070 -# ] +inflationyears = [ + 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, + 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, + 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, + 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, + 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, + 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, + 2065, 2066, 2067, 2068, 2069, 2070 +] -# inflationhist = [ -# 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, -# 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, -# 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, -# 0.042164, 0.030411000000000001, 0.029699, 0.025956, -# 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, -# 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, -# 0.015956999999999999, 0.022977999999999998, 0.026674, -# 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, -# 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, -# 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, -# 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, -# 0.023304999999999999, 0.023056, 0.019432600000000001, -# 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, -# 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, -# 0.020537658658559999, 0.020050624524416, 0.0197251869768576, -# 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, -# 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, -# 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, -# 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, -# 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, -# 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, -# 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, -# 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, -# 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, -# 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, -# 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, -# 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, -# 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, -# 0.019732496782414701 -# ] +inflationhist = [ + 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, + 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, + 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, + 0.042164, 0.030411000000000001, 0.029699, 0.025956, + 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, + 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, + 0.015956999999999999, 0.022977999999999998, 0.026674, + 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, + 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, + 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, + 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, + 0.023304999999999999, 0.023056, 0.019432600000000001, + 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, + 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, + 0.020537658658559999, 0.020050624524416, 0.0197251869768576, + 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, + 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, + 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, + 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, + 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, + 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, + 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, + 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, + 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, + 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, + 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, + 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, + 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, + 0.019732496782414701 +] -# inflation_coeff_dict = bl.form_inflation_coeffdict( -# inflationyears, inflationhist, datetime.date(1984, 3, 31)) +inflation_coeff_dict = bl.form_inflation_coeffdict( + inflationyears, inflationhist, datetime.date(1984, 3, 31)) -# bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) +bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) -- GitLab From 046b7f82979d5bcd24c5daab2ee8c8bde3a16909 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Wed, 19 Apr 2017 17:11:50 -0400 Subject: [PATCH 10/14] created inflation_ceoff_dict data, stored it in sample_data improved test_month_normalize_rough --- bpfin/tests/testdata/__inti__.py | 0 bpfin/tests/testdata/sample_data.py | 1139 ++++++++++++++++++++++ bpfin/utilbills/bill_prior_proj_rough.py | 76 +- 3 files changed, 1207 insertions(+), 8 deletions(-) create mode 100644 bpfin/tests/testdata/__inti__.py create mode 100644 bpfin/tests/testdata/sample_data.py diff --git a/bpfin/tests/testdata/__inti__.py b/bpfin/tests/testdata/__inti__.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/tests/testdata/sample_data.py b/bpfin/tests/testdata/sample_data.py new file mode 100644 index 0000000..50e7822 --- /dev/null +++ b/bpfin/tests/testdata/sample_data.py @@ -0,0 +1,1139 @@ +import datetime +import pprint +from bpfin.utilbills import bill_lib as bl + + +# raw energy bill. will need oil and other types for test +raw_bill = {} +raw_bill['utility_type'] = 'electricity' +raw_bill['date_from'] = [ + datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), + datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), + datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), + datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), + datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), + datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), + datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), + datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] +raw_bill['date_to'] = [ + datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date(2014, 7, 17), + datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), + datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), datetime.date(2015, 1, 16), + datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), datetime.date(2015, 4, 17), + datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), datetime.date(2015, 7, 17), + datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date(2015, 10, 16), + datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), datetime.date(2016, 1, 19), + datetime.date(2016, 2, 18), datetime.date(2016, 3, 18), datetime.date(2016, 4, 18)] +raw_bill['charge'] = [ + 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, + 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, + 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] +raw_bill['usage'] = [ + 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, + 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, + 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] + + +monthly_normalized_bill = { + 'monthly_usage': [ + 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, 0.095904698506193486, + 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, + 0.090033196083726619, 0.099460650112727964, 0.093068756936307756, 0.094710339831841669], + 'monthly_charge': [ + 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, 2619.5021069201466, + 2673.9005752806534, 2893.2607949224612, 3362.6736487267954, 2772.8416549504082, + 2565.8030834213941, 3170.3949663777121, 3157.9130867351737, 2999.6133802204467], + 'monthly_price': [ + 28182.379083772827, 26782.308906986349, 26787.762657851385, 27313.595138938686, + 26817.901843564676, 27005.501339712977, 27201.030152373722, 26618.451410257541, + 28498.41164180508, 31875.872144254135, 33930.968787907128, 31671.445647289031]} + +analysis_date = { + 'proforma_start': datetime.date(2012, 1, 15), + 'proforma_duration': 25} + +inflation_coeff_dict = { + datetime.date(1981, 1, 31): 0.3381208260704529, + datetime.date(1981, 2, 28): 0.3410451203881943, + datetime.date(1981, 3, 31): 0.34399470595272497, + datetime.date(1981, 4, 30): 0.3469698014996081, + datetime.date(1981, 5, 31): 0.3499706276561777, + datetime.date(1981, 6, 30): 0.3529974069579001, + datetime.date(1981, 7, 31): 0.3560503638648767, + datetime.date(1981, 8, 31): 0.3591297247784895, + datetime.date(1981, 9, 30): 0.36223571805819044, + datetime.date(1981, 10, 31): 0.36536857403843637, + datetime.date(1981, 11, 30): 0.3685285250457702, + datetime.date(1981, 12, 31): 0.3717158054160494, + datetime.date(1982, 1, 31): 0.3736234509294446, + datetime.date(1982, 2, 28): 0.3755408864796145, + datetime.date(1982, 3, 31): 0.3774681623090278, + datetime.date(1982, 4, 30): 0.3794053289179977, + datetime.date(1982, 5, 31): 0.3813524370660048, + datetime.date(1982, 6, 30): 0.38330953777302756, + datetime.date(1982, 7, 31): 0.3852766823208787, + datetime.date(1982, 8, 31): 0.38725392225454935, + datetime.date(1982, 9, 30): 0.38924130938355966, + datetime.date(1982, 10, 31): 0.39123889578331605, + datetime.date(1982, 11, 30): 0.393246733796476, + datetime.date(1982, 12, 31): 0.3952648760343195, + datetime.date(1983, 1, 31): 0.39630557551417817, + datetime.date(1983, 2, 28): 0.3973490150690424, + datetime.date(1983, 3, 31): 0.3983952019133013, + datetime.date(1983, 4, 30): 0.39944414328033895, + datetime.date(1983, 5, 31): 0.4004958464225842, + datetime.date(1983, 6, 30): 0.401550318611561, + datetime.date(1983, 7, 31): 0.4026075671379387, + datetime.date(1983, 8, 31): 0.4036675993115824, + datetime.date(1983, 9, 30): 0.40473042246160323, + datetime.date(1983, 10, 31): 0.4057960439364095, + datetime.date(1983, 11, 30): 0.4068644711037571, + datetime.date(1983, 12, 31): 0.4079357113508007, + datetime.date(1984, 1, 31): 0.40942066532940286, + datetime.date(1984, 2, 29): 0.41091102478797936, + datetime.date(1984, 3, 31): 0.41240680940337837, + datetime.date(1984, 4, 30): 0.41390803892407485, + datetime.date(1984, 5, 31): 0.41541473317043154, + datetime.date(1984, 6, 30): 0.41692691203496074, + datetime.date(1984, 7, 31): 0.41844459548258667, + datetime.date(1984, 8, 31): 0.4199678035509092, + datetime.date(1984, 9, 30): 0.4214965563504684, + datetime.date(1984, 10, 31): 0.4230308740650101, + datetime.date(1984, 11, 30): 0.4245707769517523, + datetime.date(1984, 12, 31): 0.4261162853416528, + datetime.date(1985, 1, 31): 0.4273691382399381, + datetime.date(1985, 2, 28): 0.4286256747345532, + datetime.date(1985, 3, 31): 0.4298859056558852, + datetime.date(1985, 4, 30): 0.4311498418661644, + datetime.date(1985, 5, 31): 0.4324174942595579, + datetime.date(1985, 6, 30): 0.43368887376226334, + datetime.date(1985, 7, 31): 0.4349639913326034, + datetime.date(1985, 8, 31): 0.4362428579611198, + datetime.date(1985, 9, 30): 0.4375254846706685, + datetime.date(1985, 10, 31): 0.4388118825165143, + datetime.date(1985, 11, 30): 0.44010206258642665, + datetime.date(1985, 12, 31): 0.4413960360007745, + datetime.date(1986, 1, 31): 0.4421111711451018, + datetime.date(1986, 2, 28): 0.44282746492755204, + datetime.date(1986, 3, 31): 0.4435449192253122, + datetime.date(1986, 4, 30): 0.44426353591861034, + datetime.date(1986, 5, 31): 0.4449833168907211, + datetime.date(1986, 6, 30): 0.4457042640279702, + datetime.date(1986, 7, 31): 0.44642637921973954, + datetime.date(1986, 8, 31): 0.44714966435847203, + datetime.date(1986, 9, 30): 0.44787412133967686, + datetime.date(1986, 10, 31): 0.448599752061934, + datetime.date(1986, 11, 30): 0.44932655842689967, + datetime.date(1986, 12, 31): 0.4500545423393109, + datetime.date(1987, 1, 31): 0.45139652997547636, + datetime.date(1987, 2, 28): 0.4527425191951082, + datetime.date(1987, 3, 31): 0.45409252193026156, + datetime.date(1987, 4, 30): 0.4554465501485706, + datetime.date(1987, 5, 31): 0.45680461585335536, + datetime.date(1987, 6, 30): 0.4581667310837274, + datetime.date(1987, 7, 31): 0.4595329079146972, + datetime.date(1987, 8, 31): 0.46090315845728086, + datetime.date(1987, 9, 30): 0.4622774948586074, + datetime.date(1987, 10, 31): 0.46365592930202665, + datetime.date(1987, 11, 30): 0.4650384740072171, + datetime.date(1987, 12, 31): 0.46642514123029427, + datetime.date(1988, 1, 31): 0.4680186438565458, + datetime.date(1988, 2, 29): 0.469617590551728, + datetime.date(1988, 3, 31): 0.47122199991504876, + datetime.date(1988, 4, 30): 0.4728318906092585, + datetime.date(1988, 5, 31): 0.47444728136086745, + datetime.date(1988, 6, 30): 0.47606819096036335, + datetime.date(1988, 7, 31): 0.4776946382624302, + datetime.date(1988, 8, 31): 0.47932664218616716, + datetime.date(1988, 9, 30): 0.4809642217153094, + datetime.date(1988, 10, 31): 0.48260739589844787, + datetime.date(1988, 11, 30): 0.4842561838492519, + datetime.date(1988, 12, 31): 0.48591060474669084, + datetime.date(1989, 1, 31): 0.48785076480634354, + datetime.date(1989, 2, 28): 0.48979867160175444, + datetime.date(1989, 3, 31): 0.49175435606434825, + datetime.date(1989, 4, 30): 0.49371784924905376, + datetime.date(1989, 5, 31): 0.495689182334797, + datetime.date(1989, 6, 30): 0.497668386624996, + datetime.date(1989, 7, 31): 0.49965549354805844, + datetime.date(1989, 8, 31): 0.5016505346578802, + datetime.date(1989, 9, 30): 0.5036535416343466, + datetime.date(1989, 10, 31): 0.5056645462838355, + datetime.date(1989, 11, 30): 0.5076835805397224, + datetime.date(1989, 12, 31): 0.5097106764628874, + datetime.date(1990, 1, 31): 0.5120123174983452, + datetime.date(1990, 2, 28): 0.5143243517857021, + datetime.date(1990, 3, 31): 0.516646826256553, + datetime.date(1990, 4, 30): 0.5189797880544167, + datetime.date(1990, 5, 31): 0.521323284535692, + datetime.date(1990, 6, 30): 0.52367736327062, + datetime.date(1990, 7, 31): 0.5260420720442486, + datetime.date(1990, 8, 31): 0.5284174588574037, + datetime.date(1990, 9, 30): 0.5308035719276625, + datetime.date(1990, 10, 31): 0.5332004596903328, + datetime.date(1990, 11, 30): 0.535608170799436, + datetime.date(1990, 12, 31): 0.538026754128695, + datetime.date(1991, 1, 31): 0.539917200800452, + datetime.date(1991, 2, 28): 0.5418142898716645, + datetime.date(1991, 3, 31): 0.5437180446815102, + datetime.date(1991, 4, 30): 0.5456284886511727, + datetime.date(1991, 5, 31): 0.5475456452841301, + datetime.date(1991, 6, 30): 0.5494695381664434, + datetime.date(1991, 7, 31): 0.5514001909670476, + datetime.date(1991, 8, 31): 0.553337627438042, + datetime.date(1991, 9, 30): 0.5552818714149835, + datetime.date(1991, 10, 31): 0.5572329468171786, + datetime.date(1991, 11, 30): 0.5591908776479786, + datetime.date(1991, 12, 31): 0.5611556879950743, + datetime.date(1992, 1, 31): 0.5625777967973759, + datetime.date(1992, 2, 29): 0.5640035095789097, + datetime.date(1992, 3, 31): 0.56543283547306, + datetime.date(1992, 4, 30): 0.5668657836363576, + datetime.date(1992, 5, 31): 0.5683023632485381, + datetime.date(1992, 6, 30): 0.5697425835126008, + datetime.date(1992, 7, 31): 0.5711864536548676, + datetime.date(1992, 8, 31): 0.5726339829250425, + datetime.date(1992, 9, 30): 0.5740851805962703, + datetime.date(1992, 10, 31): 0.5755400559651965, + datetime.date(1992, 11, 30): 0.5769986183520263, + datetime.date(1992, 12, 31): 0.5784608771005849, + datetime.date(1993, 1, 31): 0.5798925195663358, + datetime.date(1993, 2, 28): 0.5813277052278858, + datetime.date(1993, 3, 31): 0.5827664428543494, + datetime.date(1993, 4, 30): 0.5842087412365436, + datetime.date(1993, 5, 31): 0.5856546091870424, + datetime.date(1993, 6, 30): 0.5871040555402295, + datetime.date(1993, 7, 31): 0.5885570891523536, + datetime.date(1993, 8, 31): 0.5900137189015816, + datetime.date(1993, 9, 30): 0.5914739536880531, + datetime.date(1993, 10, 31): 0.5929378024339349, + datetime.date(1993, 11, 30): 0.5944052740834753, + datetime.date(1993, 12, 31): 0.5958763776030591, + datetime.date(1994, 1, 31): 0.5971652582078144, + datetime.date(1994, 2, 28): 0.5984569266613179, + datetime.date(1994, 3, 31): 0.5997513889936863, + datetime.date(1994, 4, 30): 0.6010486512480796, + datetime.date(1994, 5, 31): 0.6023487194807291, + datetime.date(1994, 6, 30): 0.6036515997609659, + datetime.date(1994, 7, 31): 0.6049572981712489, + datetime.date(1994, 8, 31): 0.6062658208071933, + datetime.date(1994, 9, 30): 0.6075771737775991, + datetime.date(1994, 10, 31): 0.60889136320448, + datetime.date(1994, 11, 30): 0.6102083952230912, + datetime.date(1994, 12, 31): 0.6115282759819588, + datetime.date(1995, 1, 31): 0.6129578252484459, + datetime.date(1995, 2, 28): 0.6143907163246016, + datetime.date(1995, 3, 31): 0.615826957022463, + datetime.date(1995, 4, 30): 0.6172665551723291, + datetime.date(1995, 5, 31): 0.6187095186228035, + datetime.date(1995, 6, 30): 0.6201558552408374, + datetime.date(1995, 7, 31): 0.621605572911772, + datetime.date(1995, 8, 31): 0.6230586795393821, + datetime.date(1995, 9, 30): 0.6245151830459186, + datetime.date(1995, 10, 31): 0.6259750913721521, + datetime.date(1995, 11, 30): 0.6274384124774164, + datetime.date(1995, 12, 31): 0.628905154339651, + datetime.date(1996, 1, 31): 0.6304442424786086, + datetime.date(1996, 2, 29): 0.6319870971510144, + datetime.date(1996, 3, 31): 0.6335337275745171, + datetime.date(1996, 4, 30): 0.6350841429893238, + datetime.date(1996, 5, 31): 0.6366383526582543, + datetime.date(1996, 6, 30): 0.6381963658667972, + datetime.date(1996, 7, 31): 0.6397581919231646, + datetime.date(1996, 8, 31): 0.6413238401583485, + datetime.date(1996, 9, 30): 0.6428933199261759, + datetime.date(1996, 10, 31): 0.6444666406033652, + datetime.date(1996, 11, 30): 0.6460438115895818, + datetime.date(1996, 12, 31): 0.6476248423074943, + datetime.date(1997, 1, 31): 0.6488865234377831, + datetime.date(1997, 2, 28): 0.6501506625331938, + datetime.date(1997, 3, 31): 0.6514172643822522, + datetime.date(1997, 4, 30): 0.652686333782813, + datetime.date(1997, 5, 31): 0.6539578755420776, + datetime.date(1997, 6, 30): 0.6552318944766129, + datetime.date(1997, 7, 31): 0.6565083954123692, + datetime.date(1997, 8, 31): 0.6577873831846984, + datetime.date(1997, 9, 30): 0.6590688626383728, + datetime.date(1997, 10, 31): 0.6603528386276029, + datetime.date(1997, 11, 30): 0.6616393160160559, + datetime.date(1997, 12, 31): 0.6629282996768745, + datetime.date(1998, 1, 31): 0.6637828142551581, + datetime.date(1998, 2, 28): 0.6646384303027331, + datetime.date(1998, 3, 31): 0.6654951492393933, + datetime.date(1998, 4, 30): 0.666352972486763, + datetime.date(1998, 5, 31): 0.6672119014682985, + datetime.date(1998, 6, 30): 0.6680719376092912, + datetime.date(1998, 7, 31): 0.6689330823368695, + datetime.date(1998, 8, 31): 0.6697953370800018, + datetime.date(1998, 9, 30): 0.6706587032694981, + datetime.date(1998, 10, 31): 0.6715231823380126, + datetime.date(1998, 11, 30): 0.6723887757200463, + datetime.date(1998, 12, 31): 0.6732554848519495, + datetime.date(1999, 1, 31): 0.6744859153551402, + datetime.date(1999, 2, 28): 0.6757185945726114, + datetime.date(1999, 3, 31): 0.6769535266140758, + datetime.date(1999, 4, 30): 0.678190715596757, + datetime.date(1999, 5, 31): 0.679430165645403, + datetime.date(1999, 6, 30): 0.6806718808923006, + datetime.date(1999, 7, 31): 0.6819158654772881, + datetime.date(1999, 8, 31): 0.6831621235477702, + datetime.date(1999, 9, 30): 0.6844106592587308, + datetime.date(1999, 10, 31): 0.6856614767727477, + datetime.date(1999, 11, 30): 0.6869145802600064, + datetime.date(1999, 12, 31): 0.6881699738983132, + datetime.date(2000, 1, 31): 0.6901009214975742, + datetime.date(2000, 2, 29): 0.6920372871748862, + datetime.date(2000, 3, 31): 0.693979086132925, + datetime.date(2000, 4, 30): 0.6959263336170236, + datetime.date(2000, 5, 31): 0.6978790449152918, + datetime.date(2000, 6, 30): 0.6998372353587372, + datetime.date(2000, 7, 31): 0.7018009203213842, + datetime.date(2000, 8, 31): 0.703770115220396, + datetime.date(2000, 9, 30): 0.7057448355161948, + datetime.date(2000, 10, 31): 0.7077250967125838, + datetime.date(2000, 11, 30): 0.709710914356868, + datetime.date(2000, 12, 31): 0.7117023040399773, + datetime.date(2001, 1, 31): 0.7133727879646097, + datetime.date(2001, 2, 28): 0.7150471927934272, + datetime.date(2001, 3, 31): 0.7167255277294455, + datetime.date(2001, 4, 30): 0.718407801997281, + datetime.date(2001, 5, 31): 0.7200940248432023, + datetime.date(2001, 6, 30): 0.72178420553518, + datetime.date(2001, 7, 31): 0.7234783533629385, + datetime.date(2001, 8, 31): 0.7251764776380069, + datetime.date(2001, 9, 30): 0.7268785876937695, + datetime.date(2001, 10, 31): 0.728584692885518, + datetime.date(2001, 11, 30): 0.7302948025905023, + datetime.date(2001, 12, 31): 0.7320089262079826, + datetime.date(2002, 1, 31): 0.7329823150776077, + datetime.date(2002, 2, 28): 0.7339569983110821, + datetime.date(2002, 3, 31): 0.7349329776295863, + datetime.date(2002, 4, 30): 0.7359102547565893, + datetime.date(2002, 5, 31): 0.736888831417852, + datetime.date(2002, 6, 30): 0.7378687093414299, + datetime.date(2002, 7, 31): 0.7388498902576767, + datetime.date(2002, 8, 31): 0.7398323758992469, + datetime.date(2002, 9, 30): 0.740816168001099, + datetime.date(2002, 10, 31): 0.7418012683004983, + datetime.date(2002, 11, 30): 0.7427876785370209, + datetime.date(2002, 12, 31): 0.7437754004525554, + datetime.date(2003, 1, 31): 0.7451996063818555, + datetime.date(2003, 2, 28): 0.7466265394281423, + datetime.date(2003, 3, 31): 0.7480562048133906, + datetime.date(2003, 4, 30): 0.7494886077695742, + datetime.date(2003, 5, 31): 0.7509237535386851, + datetime.date(2003, 6, 30): 0.7523616473727528, + datetime.date(2003, 7, 31): 0.7538022945338638, + datetime.date(2003, 8, 31): 0.7552457002941805, + datetime.date(2003, 9, 30): 0.7566918699359605, + datetime.date(2003, 10, 31): 0.7581408087515762, + datetime.date(2003, 11, 30): 0.759592522043534, + datetime.date(2003, 12, 31): 0.7610470151244938, + datetime.date(2004, 1, 31): 0.7627386957979464, + datetime.date(2004, 2, 29): 0.7644341367955894, + datetime.date(2004, 3, 31): 0.7661333464759965, + datetime.date(2004, 4, 30): 0.7678363332163217, + datetime.date(2004, 5, 31): 0.7695431054123394, + datetime.date(2004, 6, 30): 0.7712536714784868, + datetime.date(2004, 7, 31): 0.7729680398479051, + datetime.date(2004, 8, 31): 0.7746862189724804, + datetime.date(2004, 9, 30): 0.7764082173228865, + datetime.date(2004, 10, 31): 0.7781340433886258, + datetime.date(2004, 11, 30): 0.7798637056780716, + datetime.date(2004, 12, 31): 0.7815972127185097, + datetime.date(2005, 1, 31): 0.7837897231663872, + datetime.date(2005, 2, 28): 0.7859883839714893, + datetime.date(2005, 3, 31): 0.7881932123865933, + datetime.date(2005, 4, 30): 0.7904042257128732, + datetime.date(2005, 5, 31): 0.7926214413000353, + datetime.date(2005, 6, 30): 0.7948448765464555, + datetime.date(2005, 7, 31): 0.7970745488993143, + datetime.date(2005, 8, 31): 0.799310475854735, + datetime.date(2005, 9, 30): 0.8015526749579203, + datetime.date(2005, 10, 31): 0.8038011638032896, + datetime.date(2005, 11, 30): 0.8060559600346184, + datetime.date(2005, 12, 31): 0.8083170813451755, + datetime.date(2006, 1, 31): 0.8104872106293172, + datetime.date(2006, 2, 28): 0.8126631661680542, + datetime.date(2006, 3, 31): 0.814844963603424, + datetime.date(2006, 4, 30): 0.8170326186194583, + datetime.date(2006, 5, 31): 0.8192261469422968, + datetime.date(2006, 6, 30): 0.8214255643403001, + datetime.date(2006, 7, 31): 0.8236308866241628, + datetime.date(2006, 8, 31): 0.8258421296470271, + datetime.date(2006, 9, 30): 0.8280593093045969, + datetime.date(2006, 10, 31): 0.8302824415352524, + datetime.date(2006, 11, 30): 0.8325115423201642, + datetime.date(2006, 12, 31): 0.8347466276834082, + datetime.date(2007, 1, 31): 0.8367434807412649, + datetime.date(2007, 2, 28): 0.8387451106044448, + datetime.date(2007, 3, 31): 0.8407515286998624, + datetime.date(2007, 4, 30): 0.8427627464817672, + datetime.date(2007, 5, 31): 0.8447787754318093, + datetime.date(2007, 6, 30): 0.8467996270591048, + datetime.date(2007, 7, 31): 0.8488253129003013, + datetime.date(2007, 8, 31): 0.8508558445196442, + datetime.date(2007, 9, 30): 0.8528912335090427, + datetime.date(2007, 10, 31): 0.8549314914881352, + datetime.date(2007, 11, 30): 0.8569766301043567, + datetime.date(2007, 12, 31): 0.8590266610330046, + datetime.date(2008, 1, 31): 0.8617575783739837, + datetime.date(2008, 2, 29): 0.8644971775287661, + datetime.date(2008, 3, 31): 0.8672454860975616, + datetime.date(2008, 4, 30): 0.870002531768323, + datetime.date(2008, 5, 31): 0.8727683423170256, + datetime.date(2008, 6, 30): 0.8755429456079467, + datetime.date(2008, 7, 31): 0.8783263695939465, + datetime.date(2008, 8, 31): 0.8811186423167497, + datetime.date(2008, 9, 30): 0.8839197919072282, + datetime.date(2008, 10, 31): 0.886729846585684, + datetime.date(2008, 11, 30): 0.8895488346621339, + datetime.date(2008, 12, 31): 0.8923767845365945, + datetime.date(2009, 1, 31): 0.8921387430293194, + datetime.date(2009, 2, 28): 0.8919007650196163, + datetime.date(2009, 3, 31): 0.8916628504905473, + datetime.date(2009, 4, 30): 0.8914249994251789, + datetime.date(2009, 5, 31): 0.8911872118065823, + datetime.date(2009, 6, 30): 0.8909494876178329, + datetime.date(2009, 7, 31): 0.8907118268420108, + datetime.date(2009, 8, 31): 0.8904742294622007, + datetime.date(2009, 9, 30): 0.8902366954614916, + datetime.date(2009, 10, 31): 0.8899992248229773, + datetime.date(2009, 11, 30): 0.8897618175297558, + datetime.date(2009, 12, 31): 0.8895244735649297, + datetime.date(2010, 1, 31): 0.890737414311675, + datetime.date(2010, 2, 28): 0.8919520090042069, + datetime.date(2010, 3, 31): 0.8931682598978183, + datetime.date(2010, 4, 30): 0.8943861692508774, + datetime.date(2010, 5, 31): 0.8956057393248318, + datetime.date(2010, 6, 30): 0.8968269723842128, + datetime.date(2010, 7, 31): 0.8980498706966398, + datetime.date(2010, 8, 31): 0.8992744365328239, + datetime.date(2010, 9, 30): 0.9005006721665729, + datetime.date(2010, 10, 31): 0.9017285798747947, + datetime.date(2010, 11, 30): 0.9029581619375023, + datetime.date(2010, 12, 31): 0.9041894206378177, + datetime.date(2011, 1, 31): 0.9065575680795865, + datetime.date(2011, 2, 28): 0.9089319178968509, + datetime.date(2011, 3, 31): 0.9113124863341492, + datetime.date(2011, 4, 30): 0.9136992896785655, + datetime.date(2011, 5, 31): 0.9160923442598411, + datetime.date(2011, 6, 30): 0.9184916664504862, + datetime.date(2011, 7, 31): 0.9208972726658923, + datetime.date(2011, 8, 31): 0.9233091793644436, + datetime.date(2011, 9, 30): 0.9257274030476306, + datetime.date(2011, 10, 31): 0.9281519602601626, + datetime.date(2011, 11, 30): 0.9305828675900806, + datetime.date(2011, 12, 31): 0.9330201416688713, + datetime.date(2012, 1, 31): 0.9346344220173154, + datetime.date(2012, 2, 29): 0.9362514953398091, + datetime.date(2012, 3, 31): 0.9378713664686629, + datetime.date(2012, 4, 30): 0.939494040244548, + datetime.date(2012, 5, 31): 0.9411195215165111, + datetime.date(2012, 6, 30): 0.9427478151419884, + datetime.date(2012, 7, 31): 0.9443789259868198, + datetime.date(2012, 8, 31): 0.9460128589252648, + datetime.date(2012, 9, 30): 0.9476496188400153, + datetime.date(2012, 10, 31): 0.9492892106222117, + datetime.date(2012, 11, 30): 0.9509316391714567, + datetime.date(2012, 12, 31): 0.9525769093958298, + datetime.date(2013, 1, 31): 0.9537392913695202, + datetime.date(2013, 2, 28): 0.9549030917398139, + datetime.date(2013, 3, 31): 0.9560683122375094, + datetime.date(2013, 4, 30): 0.9572349545955173, + datetime.date(2013, 5, 31): 0.9584030205488626, + datetime.date(2013, 6, 30): 0.9595725118346874, + datetime.date(2013, 7, 31): 0.9607434301922536, + datetime.date(2013, 8, 31): 0.9619157773629458, + datetime.date(2013, 9, 30): 0.9630895550902728, + datetime.date(2013, 10, 31): 0.9642647651198718, + datetime.date(2013, 11, 30): 0.9654414091995093, + datetime.date(2013, 12, 31): 0.9666194890790851, + datetime.date(2014, 1, 31): 0.9679161285720607, + datetime.date(2014, 2, 28): 0.9692145073988628, + datetime.date(2014, 3, 31): 0.9705146278926629, + datetime.date(2014, 4, 30): 0.971816492389762, + datetime.date(2014, 5, 31): 0.9731201032295953, + datetime.date(2014, 6, 30): 0.9744254627547358, + datetime.date(2014, 7, 31): 0.9757325733108996, + datetime.date(2014, 8, 31): 0.9770414372469484, + datetime.date(2014, 9, 30): 0.9783520569148956, + datetime.date(2014, 10, 31): 0.979664434669909, + datetime.date(2014, 11, 30): 0.9809785728703159, + datetime.date(2014, 12, 31): 0.982294473877607, + datetime.date(2015, 1, 31): 0.9823795242074701, + datetime.date(2015, 2, 28): 0.9824645819012744, + datetime.date(2015, 3, 31): 0.9825496469596572, + datetime.date(2015, 4, 30): 0.9826347193832563, + datetime.date(2015, 5, 31): 0.9827197991727095, + datetime.date(2015, 6, 30): 0.9828048863286544, + datetime.date(2015, 7, 31): 0.9828899808517289, + datetime.date(2015, 8, 31): 0.9829750827425707, + datetime.date(2015, 9, 30): 0.9830601920018182, + datetime.date(2015, 10, 31): 0.9831453086301088, + datetime.date(2015, 11, 30): 0.983230432628081, + datetime.date(2015, 12, 31): 0.9833155639963727, + datetime.date(2016, 1, 31): 0.9845331544934913, + datetime.date(2016, 2, 29): 0.985752252672043, + datetime.date(2016, 3, 31): 0.9869728603989143, + datetime.date(2016, 4, 30): 0.9881949795433034, + datetime.date(2016, 5, 31): 0.9894186119767231, + datetime.date(2016, 6, 30): 0.9906437595730033, + datetime.date(2016, 7, 31): 0.9918704242082947, + datetime.date(2016, 8, 31): 0.9930986077610708, + datetime.date(2016, 9, 30): 0.994328312112131, + datetime.date(2016, 10, 31): 0.9955595391446039, + datetime.date(2016, 11, 30): 0.9967922907439498, + datetime.date(2016, 12, 31): 0.9980265687979636, + datetime.date(2017, 1, 31): 1.0, + datetime.date(2017, 2, 28): 1.0019773333333333, + datetime.date(2017, 3, 31): 1.0039585765137777, + datetime.date(2017, 4, 30): 1.0059437372724043, + datetime.date(2017, 5, 31): 1.0079328233555709, + datetime.date(2017, 6, 30): 1.0099258425249524, + datetime.date(2017, 7, 31): 1.0119228025575717, + datetime.date(2017, 8, 31): 1.0139237112458288, + datetime.date(2017, 9, 30): 1.0159285763975323, + datetime.date(2017, 10, 31): 1.017937405835929, + datetime.date(2017, 11, 30): 1.0199502073997353, + datetime.date(2017, 12, 31): 1.0219669889431668, + datetime.date(2018, 1, 31): 1.0241308337144226, + datetime.date(2018, 2, 28): 1.0262992600663405, + datetime.date(2018, 3, 31): 1.0284722776996542, + datetime.date(2018, 4, 30): 1.030649896335637, + datetime.date(2018, 5, 31): 1.032832125716145, + datetime.date(2018, 6, 30): 1.0350189756036612, + datetime.date(2018, 7, 31): 1.0372104557813393, + datetime.date(2018, 8, 31): 1.039406576053047, + datetime.date(2018, 9, 30): 1.0416073462434101, + datetime.date(2018, 10, 31): 1.043812776197856, + datetime.date(2018, 11, 30): 1.046022875782659, + datetime.date(2018, 12, 31): 1.0482376548849828, + datetime.date(2019, 1, 31): 1.0502734197639072, + datetime.date(2019, 2, 28): 1.0523131382678736, + datetime.date(2019, 3, 31): 1.0543568180751512, + datetime.date(2019, 4, 30): 1.0564044668789212, + datetime.date(2019, 5, 31): 1.0584560923873054, + datetime.date(2019, 6, 30): 1.0605117023233959, + datetime.date(2019, 7, 31): 1.0625713044252831, + datetime.date(2019, 8, 31): 1.0646349064460856, + datetime.date(2019, 9, 30): 1.0667025161539792, + datetime.date(2019, 10, 31): 1.0687741413322265, + datetime.date(2019, 11, 30): 1.0708497897792053, + datetime.date(2019, 12, 31): 1.072929469308439, + datetime.date(2020, 1, 31): 1.0749909244621372, + datetime.date(2020, 2, 29): 1.077056340358337, + datetime.date(2020, 3, 31): 1.0791257246069457, + datetime.date(2020, 4, 30): 1.0811990848324906, + datetime.date(2020, 5, 31): 1.083276428674149, + datetime.date(2020, 6, 30): 1.085357763785775, + datetime.date(2020, 7, 31): 1.0874430978359289, + datetime.date(2020, 8, 31): 1.0895324385079046, + datetime.date(2020, 9, 30): 1.091625793499758, + datetime.date(2020, 10, 31): 1.0937231705243355, + datetime.date(2020, 11, 30): 1.0958245773093032, + datetime.date(2020, 12, 31): 1.0979300215971735, + datetime.date(2021, 1, 31): 1.0997079911753143, + datetime.date(2021, 2, 28): 1.101488839967757, + datetime.date(2021, 3, 31): 1.1032725726370534, + datetime.date(2021, 4, 30): 1.1050591938533056, + datetime.date(2021, 5, 31): 1.1068487082941783, + datetime.date(2021, 6, 30): 1.1086411206449114, + datetime.date(2021, 7, 31): 1.1104364355983318, + datetime.date(2021, 8, 31): 1.1122346578548659, + datetime.date(2021, 9, 30): 1.1140357921225517, + datetime.date(2021, 10, 31): 1.1158398431170518, + datetime.date(2021, 11, 30): 1.1176468155616648, + datetime.date(2021, 12, 31): 1.1194567141873384, + datetime.date(2022, 1, 31): 1.1211576316449643, + datetime.date(2022, 2, 28): 1.122861133499254, + datetime.date(2022, 3, 31): 1.1245672236769746, + datetime.date(2022, 4, 30): 1.1262759061108591, + datetime.date(2022, 5, 31): 1.1279871847396161, + datetime.date(2022, 6, 30): 1.1297010635079388, + datetime.date(2022, 7, 31): 1.1314175463665137, + datetime.date(2022, 8, 31): 1.1331366372720302, + datetime.date(2022, 9, 30): 1.13485834018719, + datetime.date(2022, 10, 31): 1.1365826590807149, + datetime.date(2022, 11, 30): 1.1383095979273576, + datetime.date(2022, 12, 31): 1.14003916070791, + datetime.date(2023, 1, 31): 1.1417473247038867, + datetime.date(2023, 2, 28): 1.1434580481068888, + datetime.date(2023, 3, 31): 1.1451713347517734, + datetime.date(2023, 4, 30): 1.1468871884791425, + datetime.date(2023, 5, 31): 1.148605613135354, + datetime.date(2023, 6, 30): 1.1503266125725278, + datetime.date(2023, 7, 31): 1.1520501906485565, + datetime.date(2023, 8, 31): 1.1537763512271126, + datetime.date(2023, 9, 30): 1.1555050981776576, + datetime.date(2023, 10, 31): 1.157236435375451, + datetime.date(2023, 11, 30): 1.1589703667015585, + datetime.date(2023, 12, 31): 1.1607068960428615, + datetime.date(2024, 1, 31): 1.1624783051579952, + datetime.date(2024, 2, 29): 1.1642524177034816, + datetime.date(2024, 3, 31): 1.1660292378051522, + datetime.date(2024, 4, 30): 1.1678087695951351, + datetime.date(2024, 5, 31): 1.1695910172118646, + datetime.date(2024, 6, 30): 1.1713759848000913, + datetime.date(2024, 7, 31): 1.173163676510891, + datetime.date(2024, 8, 31): 1.1749540965016745, + datetime.date(2024, 9, 30): 1.1767472489361974, + datetime.date(2024, 10, 31): 1.1785431379845703, + datetime.date(2024, 11, 30): 1.1803417678232675, + datetime.date(2024, 12, 31): 1.1821431426351374, + datetime.date(2025, 1, 31): 1.1839691043554477, + datetime.date(2025, 2, 28): 1.1857978864924097, + datetime.date(2025, 3, 31): 1.1876294934024947, + datetime.date(2025, 4, 30): 1.1894639294489031, + datetime.date(2025, 5, 31): 1.1913011990015752, + datetime.date(2025, 6, 30): 1.1931413064372007, + datetime.date(2025, 7, 31): 1.19498425613923, + datetime.date(2025, 8, 31): 1.196830052497884, + datetime.date(2025, 9, 30): 1.198678699910165, + datetime.date(2025, 10, 31): 1.2005302027798668, + datetime.date(2025, 11, 30): 1.2023845655175858, + datetime.date(2025, 12, 31): 1.2042417925407303, + datetime.date(2026, 1, 31): 1.206277471119959, + datetime.date(2026, 2, 28): 1.2083165908580182, + datetime.date(2026, 3, 31): 1.2103591575719228, + datetime.date(2026, 4, 30): 1.212405177088522, + datetime.date(2026, 5, 31): 1.2144546552445143, + datetime.date(2026, 6, 30): 1.2165075978864652, + datetime.date(2026, 7, 31): 1.2185640108708227, + datetime.date(2026, 8, 31): 1.2206239000639352, + datetime.date(2026, 9, 30): 1.2226872713420676, + datetime.date(2026, 10, 31): 1.2247541305914178, + datetime.date(2026, 11, 30): 1.2268244837081344, + datetime.date(2026, 12, 31): 1.2288983365983328, + datetime.date(2027, 1, 31): 1.2310312626995608, + datetime.date(2027, 2, 28): 1.2331678907943693, + datetime.date(2027, 3, 31): 1.2353082273080898, + datetime.date(2027, 4, 30): 1.237452278677205, + datetime.date(2027, 5, 31): 1.2396000513493697, + datetime.date(2027, 6, 30): 1.2417515517834297, + datetime.date(2027, 7, 31): 1.24390678644944, + datetime.date(2027, 8, 31): 1.2460657618286863, + datetime.date(2027, 9, 30): 1.2482284844137033, + datetime.date(2027, 10, 31): 1.250394960708294, + datetime.date(2027, 11, 30): 1.25256519722755, + datetime.date(2027, 12, 31): 1.2547392004978706, + datetime.date(2028, 1, 31): 1.2568866509483156, + datetime.date(2028, 2, 29): 1.259037776699122, + datetime.date(2028, 3, 31): 1.261192584040462, + datetime.date(2028, 4, 30): 1.263351079273273, + datetime.date(2028, 5, 31): 1.2655132687092763, + datetime.date(2028, 6, 30): 1.2676791586709955, + datetime.date(2028, 7, 31): 1.2698487554917752, + datetime.date(2028, 8, 31): 1.2720220655157992, + datetime.date(2028, 9, 30): 1.2741990950981095, + datetime.date(2028, 10, 31): 1.2763798506046236, + datetime.date(2028, 11, 30): 1.2785643384121554, + datetime.date(2028, 12, 31): 1.280752564908432, + datetime.date(2029, 1, 31): 1.2828925556407371, + datetime.date(2029, 2, 28): 1.2850361220522637, + datetime.date(2029, 3, 31): 1.2871832701175623, + datetime.date(2029, 4, 30): 1.2893340058211653, + datetime.date(2029, 5, 31): 1.2914883351576054, + datetime.date(2029, 6, 30): 1.293646264131431, + datetime.date(2029, 7, 31): 1.2958077987572236, + datetime.date(2029, 8, 31): 1.2979729450596147, + datetime.date(2029, 9, 30): 1.3001417090733012, + datetime.date(2029, 10, 31): 1.3023140968430647, + datetime.date(2029, 11, 30): 1.3044901144237857, + datetime.date(2029, 12, 31): 1.3066697678804629, + datetime.date(2030, 1, 31): 1.3088176266711669, + datetime.date(2030, 2, 28): 1.3109690160382248, + datetime.date(2030, 3, 31): 1.3131239417850764, + datetime.date(2030, 4, 30): 1.3152824097247013, + datetime.date(2030, 5, 31): 1.3174444256796338, + datetime.date(2030, 6, 30): 1.3196099954819795, + datetime.date(2030, 7, 31): 1.3217791249734305, + datetime.date(2030, 8, 31): 1.323951820005281, + datetime.date(2030, 9, 30): 1.3261280864384442, + datetime.date(2030, 10, 31): 1.3283079301434657, + datetime.date(2030, 11, 30): 1.3304913570005426, + datetime.date(2030, 12, 31): 1.3326783728995366, + datetime.date(2031, 1, 31): 1.3348319928859904, + datetime.date(2031, 2, 28): 1.3369890931413078, + datetime.date(2031, 3, 31): 1.3391496792896336, + datetime.date(2031, 4, 30): 1.3413137569642015, + datetime.date(2031, 5, 31): 1.3434813318073493, + datetime.date(2031, 6, 30): 1.3456524094705313, + datetime.date(2031, 7, 31): 1.3478269956143363, + datetime.date(2031, 8, 31): 1.3500050959084995, + datetime.date(2031, 9, 30): 1.3521867160319188, + datetime.date(2031, 10, 31): 1.3543718616726692, + datetime.date(2031, 11, 30): 1.356560538528018, + datetime.date(2031, 12, 31): 1.3587527523044391, + datetime.date(2032, 1, 31): 1.3609480502028264, + datetime.date(2032, 2, 29): 1.3631468949811405, + datetime.date(2032, 3, 31): 1.3653492923699735, + datetime.date(2032, 4, 30): 1.367555248109177, + datetime.date(2032, 5, 31): 1.3697647679478755, + datetime.date(2032, 6, 30): 1.371977857644482, + datetime.date(2032, 7, 31): 1.3741945229667143, + datetime.date(2032, 8, 31): 1.3764147696916078, + datetime.date(2032, 9, 30): 1.3786386036055325, + datetime.date(2032, 10, 31): 1.380866030504207, + datetime.date(2032, 11, 30): 1.3830970561927136, + datetime.date(2032, 12, 31): 1.385331686485514, + datetime.date(2033, 1, 31): 1.3875832621350055, + datetime.date(2033, 2, 28): 1.3898384972639959, + datetime.date(2033, 3, 31): 1.3920973978202262, + datetime.date(2033, 4, 30): 1.394359969761105, + datetime.date(2033, 5, 31): 1.3966262190537237, + datetime.date(2033, 6, 30): 1.3988961516748712, + datetime.date(2033, 7, 31): 1.4011697736110513, + datetime.date(2033, 8, 31): 1.403447090858497, + datetime.date(2033, 9, 30): 1.4057281094231873, + datetime.date(2033, 10, 31): 1.4080128353208623, + datetime.date(2033, 11, 30): 1.41030127457704, + datetime.date(2033, 12, 31): 1.4125934332270311, + datetime.date(2034, 1, 31): 1.4149072514828935, + datetime.date(2034, 2, 28): 1.4172248597570265, + datetime.date(2034, 3, 31): 1.4195462642574541, + datetime.date(2034, 4, 30): 1.4218714712023686, + datetime.date(2034, 5, 31): 1.4242004868201474, + datetime.date(2034, 6, 30): 1.4265333173493708, + datetime.date(2034, 7, 31): 1.428869969038837, + datetime.date(2034, 8, 31): 1.43121044814758, + datetime.date(2034, 9, 30): 1.4335547609448862, + datetime.date(2034, 10, 31): 1.4359029137103108, + datetime.date(2034, 11, 30): 1.4382549127336948, + datetime.date(2034, 12, 31): 1.4406107643151824, + datetime.date(2035, 1, 31): 1.4429865874594414, + datetime.date(2035, 2, 28): 1.445366328758245, + datetime.date(2035, 3, 31): 1.4477499946733259, + datetime.date(2035, 4, 30): 1.4501375916770738, + datetime.date(2035, 5, 31): 1.4525291262525526, + datetime.date(2035, 6, 30): 1.4549246048935176, + datetime.date(2035, 7, 31): 1.457324034104434, + datetime.date(2035, 8, 31): 1.4597274204004933, + datetime.date(2035, 9, 30): 1.462134770307632, + datetime.date(2035, 10, 31): 1.4645460903625491, + datetime.date(2035, 11, 30): 1.4669613871127245, + datetime.date(2035, 12, 31): 1.4693806671164344, + datetime.date(2036, 1, 31): 1.4718193004762303, + datetime.date(2036, 2, 29): 1.4742619810736115, + datetime.date(2036, 3, 31): 1.4767087156255096, + datetime.date(2036, 4, 30): 1.479159510860003, + datetime.date(2036, 5, 31): 1.4816143735163363, + datetime.date(2036, 6, 30): 1.4840733103449395, + datetime.date(2036, 7, 31): 1.4865363281074446, + datetime.date(2036, 8, 31): 1.4890034335767068, + datetime.date(2036, 9, 30): 1.4914746335368212, + datetime.date(2036, 10, 31): 1.4939499347831413, + datetime.date(2036, 11, 30): 1.4964293441222993, + datetime.date(2036, 12, 31): 1.4989128683722237, + datetime.date(2037, 1, 31): 1.5013958992132328, + datetime.date(2037, 2, 28): 1.503883043330128, + datetime.date(2037, 3, 31): 1.5063743075367757, + datetime.date(2037, 4, 30): 1.5088696986583285, + datetime.date(2037, 5, 31): 1.5113692235312461, + datetime.date(2037, 6, 30): 1.5138728890033128, + datetime.date(2037, 7, 31): 1.5163807019336568, + datetime.date(2037, 8, 31): 1.5188926691927684, + datetime.date(2037, 9, 30): 1.52140879766252, + datetime.date(2037, 10, 31): 1.5239290942361834, + datetime.date(2037, 11, 30): 1.52645356581845, + datetime.date(2037, 12, 31): 1.528982219325449, + datetime.date(2038, 1, 31): 1.531502969527323, + datetime.date(2038, 2, 28): 1.534027875553575, + datetime.date(2038, 3, 31): 1.5365569442556875, + datetime.date(2038, 4, 30): 1.5390901824964387, + datetime.date(2038, 5, 31): 1.5416275971499214, + datetime.date(2038, 6, 30): 1.5441691951015606, + datetime.date(2038, 7, 31): 1.546714983248134, + datetime.date(2038, 8, 31): 1.549264968497789, + datetime.date(2038, 9, 30): 1.5518191577700624, + datetime.date(2038, 10, 31): 1.5543775579958983, + datetime.date(2038, 11, 30): 1.5569401761176678, + datetime.date(2038, 12, 31): 1.559507019089188, + datetime.date(2039, 1, 31): 1.5620682961641141, + datetime.date(2039, 2, 28): 1.5646337797864776, + datetime.date(2039, 3, 31): 1.5672034768649572, + datetime.date(2039, 4, 30): 1.5697773943195792, + datetime.date(2039, 5, 31): 1.5723555390817336, + datetime.date(2039, 6, 30): 1.5749379180941956, + datetime.date(2039, 7, 31): 1.5775245383111425, + datetime.date(2039, 8, 31): 1.5801154066981726, + datetime.date(2039, 9, 30): 1.5827105302323248, + datetime.date(2039, 10, 31): 1.5853099159020962, + datetime.date(2039, 11, 30): 1.5879135707074619, + datetime.date(2039, 12, 31): 1.5905215016598937, + datetime.date(2040, 1, 31): 1.5931291792827287, + datetime.date(2040, 2, 29): 1.595741132221916, + datetime.date(2040, 3, 31): 1.5983573674868838, + datetime.date(2040, 4, 30): 1.6009778920985531, + datetime.date(2040, 5, 31): 1.6036027130893553, + datetime.date(2040, 6, 30): 1.6062318375032512, + datetime.date(2040, 7, 31): 1.608865272395751, + datetime.date(2040, 8, 31): 1.611503024833932, + datetime.date(2040, 9, 30): 1.6141451018964579, + datetime.date(2040, 10, 31): 1.6167915106735988, + datetime.date(2040, 11, 30): 1.6194422582672487, + datetime.date(2040, 12, 31): 1.622097351790945, + datetime.date(2041, 1, 31): 1.6247561082481263, + datetime.date(2041, 2, 28): 1.627419222634806, + datetime.date(2041, 3, 31): 1.6300867020940037, + datetime.date(2041, 4, 30): 1.6327585537804472, + datetime.date(2041, 5, 31): 1.635434784860591, + datetime.date(2041, 6, 30): 1.6381154025126365, + datetime.date(2041, 7, 31): 1.6408004139265508, + datetime.date(2041, 8, 31): 1.6434898263040858, + datetime.date(2041, 9, 30): 1.6461836468587976, + datetime.date(2041, 10, 31): 1.6488818828160658, + datetime.date(2041, 11, 30): 1.6515845414131136, + datetime.date(2041, 12, 31): 1.6542916298990267, + datetime.date(2042, 1, 31): 1.65700697311415, + datetime.date(2042, 2, 28): 1.6597267732754626, + datetime.date(2042, 3, 31): 1.6624510376985664, + datetime.date(2042, 4, 30): 1.6651797737110705, + datetime.date(2042, 5, 31): 1.6679129886526118, + datetime.date(2042, 6, 30): 1.670650689874875, + datetime.date(2042, 7, 31): 1.6733928847416106, + datetime.date(2042, 8, 31): 1.676139580628657, + datetime.date(2042, 9, 30): 1.6788907849239585, + datetime.date(2042, 10, 31): 1.6816465050275864, + datetime.date(2042, 11, 30): 1.6844067483517586, + datetime.date(2042, 12, 31): 1.6871715223208588, + datetime.date(2043, 1, 31): 1.6899451741068114, + datetime.date(2043, 2, 28): 1.6927233856806267, + datetime.date(2043, 3, 31): 1.6955061645384386, + datetime.date(2043, 4, 30): 1.6982935181887044, + datetime.date(2043, 5, 31): 1.7010854541522251, + datetime.date(2043, 6, 30): 1.703881979962166, + datetime.date(2043, 7, 31): 1.706683103164076, + datetime.date(2043, 8, 31): 1.7094888313159085, + datetime.date(2043, 9, 30): 1.712299171988043, + datetime.date(2043, 10, 31): 1.7151141327633035, + datetime.date(2043, 11, 30): 1.71793372123698, + datetime.date(2043, 12, 31): 1.7207579450168495, + datetime.date(2044, 1, 31): 1.7235900240944928, + datetime.date(2044, 2, 29): 1.7264267642994757, + datetime.date(2044, 3, 31): 1.7292681733032322, + datetime.date(2044, 4, 30): 1.732114258789822, + datetime.date(2044, 5, 31): 1.734965028455952, + datetime.date(2044, 6, 30): 1.7378204900109966, + datetime.date(2044, 7, 31): 1.7406806511770179, + datetime.date(2044, 8, 31): 1.743545519688788, + datetime.date(2044, 9, 30): 1.7464151032938084, + datetime.date(2044, 10, 31): 1.7492894097523326, + datetime.date(2044, 11, 30): 1.7521684468373855, + datetime.date(2044, 12, 31): 1.7550522223347849, + datetime.date(2045, 1, 31): 1.7579421198760468, + datetime.date(2045, 2, 28): 1.7608367759696144, + datetime.date(2045, 3, 31): 1.7637361984509972, + datetime.date(2045, 4, 30): 1.7666403951686067, + datetime.date(2045, 5, 31): 1.7695493739837784, + datetime.date(2045, 6, 30): 1.7724631427707918, + datetime.date(2045, 7, 31): 1.775381709416892, + datetime.date(2045, 8, 31): 1.7783050818223123, + datetime.date(2045, 9, 30): 1.7812332679002942, + datetime.date(2045, 10, 31): 1.7841662755771088, + datetime.date(2045, 11, 30): 1.7871041127920801, + datetime.date(2045, 12, 31): 1.7900467874976032, + datetime.date(2046, 1, 31): 1.7929938491512625, + datetime.date(2046, 2, 28): 1.7959457627297155, + datetime.date(2046, 3, 31): 1.798902536220978, + datetime.date(2046, 4, 30): 1.8018641776262165, + datetime.date(2046, 5, 31): 1.8048306949597708, + datetime.date(2046, 6, 30): 1.8078020962491743, + datetime.date(2046, 7, 31): 1.8107783895351774, + datetime.date(2046, 8, 31): 1.8137595828717683, + datetime.date(2046, 9, 30): 1.8167456843261949, + datetime.date(2046, 10, 31): 1.8197367019789865, + datetime.date(2046, 11, 30): 1.8227326439239762, + datetime.date(2046, 12, 31): 1.8257335182683228, + datetime.date(2047, 1, 31): 1.8287369097704886, + datetime.date(2047, 2, 28): 1.8317452419501548, + datetime.date(2047, 3, 31): 1.834758522934898, + datetime.date(2047, 4, 30): 1.8377767608656645, + datetime.date(2047, 5, 31): 1.8407999638967933, + datetime.date(2047, 6, 30): 1.843828140196037, + datetime.date(2047, 7, 31): 1.8468612979445849, + datetime.date(2047, 8, 31): 1.8498994453370843, + datetime.date(2047, 9, 30): 1.8529425905816634, + datetime.date(2047, 10, 31): 1.8559907418999526, + datetime.date(2047, 11, 30): 1.8590439075271072, + datetime.date(2047, 12, 31): 1.86210209571183, + datetime.date(2048, 1, 31): 1.8651631692582504, + datetime.date(2048, 2, 29): 1.8682292748441485, + datetime.date(2048, 3, 31): 1.871300420741596, + datetime.date(2048, 4, 30): 1.8743766152362635, + datetime.date(2048, 5, 31): 1.8774578666274424, + datetime.date(2048, 6, 30): 1.8805441832280665, + datetime.date(2048, 7, 31): 1.8836355733647354, + datetime.date(2048, 8, 31): 1.8867320453777372, + datetime.date(2048, 9, 30): 1.8898336076210693, + datetime.date(2048, 10, 31): 1.8929402684624632, + datetime.date(2048, 11, 30): 1.8960520362834052, + datetime.date(2048, 12, 31): 1.8991689194791601, + datetime.date(2049, 1, 31): 1.902290021459603, + datetime.date(2049, 2, 28): 1.905416252671823, + datetime.date(2049, 3, 31): 1.908547621545221, + datetime.date(2049, 4, 30): 1.9116841365230504, + datetime.date(2049, 5, 31): 1.9148258060624401, + datetime.date(2049, 6, 30): 1.9179726386344174, + datetime.date(2049, 7, 31): 1.9211246427239317, + datetime.date(2049, 8, 31): 1.924281826829876, + datetime.date(2049, 9, 30): 1.9274441994651104, + datetime.date(2049, 10, 31): 1.9306117691564852, + datetime.date(2049, 11, 30): 1.933784544444864, + datetime.date(2049, 12, 31): 1.936962533885146, + datetime.date(2050, 1, 31): 1.9401459476468907, + datetime.date(2050, 2, 28): 1.9433345933751818, + datetime.date(2050, 3, 31): 1.9465284796687987, + datetime.date(2050, 4, 30): 1.9497276151406535, + datetime.date(2050, 5, 31): 1.9529320084178137, + datetime.date(2050, 6, 30): 1.9561416681415251, + datetime.date(2050, 7, 31): 1.9593566029672358, + datetime.date(2050, 8, 31): 1.962576821564619, + datetime.date(2050, 9, 30): 1.9658023326175968, + datetime.date(2050, 10, 31): 1.969033144824363, + datetime.date(2050, 11, 30): 1.9722692668974073, + datetime.date(2050, 12, 31): 1.9755107075635383, + datetime.date(2051, 1, 31): 1.978758265194836, + datetime.date(2051, 2, 28): 1.9820111615117346, + datetime.date(2051, 3, 31): 1.9852694052905413, + datetime.date(2051, 4, 30): 1.9885330053219907, + datetime.date(2051, 5, 31): 1.991801970411269, + datetime.date(2051, 6, 30): 1.9950763093780373, + datetime.date(2051, 7, 31): 1.9983560310564548, + datetime.date(2051, 8, 31): 2.0016411442952036, + datetime.date(2051, 9, 30): 2.0049316579575125, + datetime.date(2051, 10, 31): 2.0082275809211803, + datetime.date(2051, 11, 30): 2.0115289220786003, + datetime.date(2051, 12, 31): 2.014835690336784, + datetime.date(2052, 1, 31): 2.018148866223083, + datetime.date(2052, 2, 29): 2.021467490263049, + datetime.date(2052, 3, 31): 2.0247915714155713, + datetime.date(2052, 4, 30): 2.0281211186542722, + datetime.date(2052, 5, 31): 2.031456140967529, + datetime.date(2052, 6, 30): 2.034796647358501, + datetime.date(2052, 7, 31): 2.038142646845151, + datetime.date(2052, 8, 31): 2.0414941484602713, + datetime.date(2052, 9, 30): 2.0448511612515077, + datetime.date(2052, 10, 31): 2.0482136942813836, + datetime.date(2052, 11, 30): 2.0515817566273244, + datetime.date(2052, 12, 31): 2.0549553573816834, + datetime.date(2053, 1, 31): 2.058335121481051, + datetime.date(2053, 2, 28): 2.061720444243932, + datetime.date(2053, 3, 31): 2.0651113348126042, + datetime.date(2053, 4, 30): 2.06850780234438, + datetime.date(2053, 5, 31): 2.0719098560116347, + datetime.date(2053, 6, 30): 2.075317505001828, + datetime.date(2053, 7, 31): 2.0787307585175303, + datetime.date(2053, 8, 31): 2.082149625776447, + datetime.date(2053, 9, 30): 2.085574116011445, + datetime.date(2053, 10, 31): 2.089004238470576, + datetime.date(2053, 11, 30): 2.0924400024171, + datetime.date(2053, 12, 31): 2.0958814171295153, + datetime.date(2054, 1, 31): 2.0993286437032728, + datetime.date(2054, 2, 28): 2.102781540145065, + datetime.date(2054, 3, 31): 2.106240115780476, + datetime.date(2054, 4, 30): 2.1097043799504296, + datetime.date(2054, 5, 31): 2.113174342011212, + datetime.date(2054, 6, 30): 2.1166500113344986, + datetime.date(2054, 7, 31): 2.1201313973073797, + datetime.date(2054, 8, 31): 2.1236185093323843, + datetime.date(2054, 9, 30): 2.127111356827507, + datetime.date(2054, 10, 31): 2.1306099492262316, + datetime.date(2054, 11, 30): 2.1341142959775588, + datetime.date(2054, 12, 31): 2.137624406546031, + datetime.date(2055, 1, 31): 2.1411400616601206, + datetime.date(2055, 2, 28): 2.1446614988147052, + datetime.date(2055, 3, 31): 2.1481887275192477, + datetime.date(2055, 4, 30): 2.1517217572988505, + datetime.date(2055, 5, 31): 2.1552605976942827, + datetime.date(2055, 6, 30): 2.158805258262003, + datetime.date(2055, 7, 31): 2.162355748574188, + datetime.date(2055, 8, 31): 2.1659120782187586, + datetime.date(2055, 9, 30): 2.169474256799402, + datetime.date(2055, 10, 31): 2.1730422939356013, + datetime.date(2055, 11, 30): 2.176616199262661, + datetime.date(2055, 12, 31): 2.1801959824317323, + datetime.date(2056, 1, 31): 2.1837812255603417, + datetime.date(2056, 2, 29): 2.1873723644746486, + datetime.date(2056, 3, 31): 2.190969408870031, + datetime.date(2056, 4, 30): 2.1945723684578127, + datetime.date(2056, 5, 31): 2.1981812529652838, + datetime.date(2056, 6, 30): 2.2017960721357333, + datetime.date(2056, 7, 31): 2.2054168357284714, + datetime.date(2056, 8, 31): 2.209043553518858, + datetime.date(2056, 9, 30): 2.2126762352983276, + datetime.date(2056, 10, 31): 2.2163148908744152, + datetime.date(2056, 11, 30): 2.2199595300707866, + datetime.date(2056, 12, 31): 2.2236101627272595, + datetime.date(2057, 1, 31): 2.227266375986442, + datetime.date(2057, 2, 28): 2.2309286010437446, + datetime.date(2057, 3, 31): 2.234596847784181, + datetime.date(2057, 4, 30): 2.2382711261090176, + datetime.date(2057, 5, 31): 2.241951445935802, + datetime.date(2057, 6, 30): 2.2456378171983884, + datetime.date(2057, 7, 31): 2.249330249846966, + datetime.date(2057, 8, 31): 2.253028753848082, + datetime.date(2057, 9, 30): 2.256733339184675, + datetime.date(2057, 10, 31): 2.2604440158560957, + datetime.date(2057, 11, 30): 2.264160793878137, + datetime.date(2057, 12, 31): 2.2678836832830607, + datetime.date(2058, 1, 31): 2.2716125209011375, + datetime.date(2058, 2, 28): 2.2753474894465127, + datetime.date(2058, 3, 31): 2.2790885989996106, + datetime.date(2058, 4, 30): 2.282835859657431, + datetime.date(2058, 5, 31): 2.2865892815335758, + datetime.date(2058, 6, 30): 2.2903488747582736, + datetime.date(2058, 7, 31): 2.294114649478411, + datetime.date(2058, 8, 31): 2.2978866158575566, + datetime.date(2058, 9, 30): 2.301664784075991, + datetime.date(2058, 10, 31): 2.305449164330732, + datetime.date(2058, 11, 30): 2.309239766835564, + datetime.date(2058, 12, 31): 2.313036601821065, + datetime.date(2059, 1, 31): 2.316839751701828, + datetime.date(2059, 2, 28): 2.3206491548122226, + datetime.date(2059, 3, 31): 2.3244648214339563, + datetime.date(2059, 4, 30): 2.3282867618656446, + datetime.date(2059, 5, 31): 2.332114986422835, + datetime.date(2059, 6, 30): 2.335949505438037, + datetime.date(2059, 7, 31): 2.339790329260748, + datetime.date(2059, 8, 31): 2.343637468257482, + datetime.date(2059, 9, 30): 2.347490932811799, + datetime.date(2059, 10, 31): 2.3513507333243315, + datetime.date(2059, 11, 30): 2.3552168802128133, + datetime.date(2059, 12, 31): 2.359089383912107, + datetime.date(2060, 1, 31): 2.3629684482549114, + datetime.date(2060, 2, 29): 2.366853890965691, + datetime.date(2060, 3, 31): 2.3707457225324324, + datetime.date(2060, 4, 30): 2.3746439534603687, + datetime.date(2060, 5, 31): 2.3785485942720066, + datetime.date(2060, 6, 30): 2.382459655507155, + datetime.date(2060, 7, 31): 2.386377147722954, + datetime.date(2060, 8, 31): 2.390301081493901, + datetime.date(2060, 9, 30): 2.394231467411884, + datetime.date(2060, 10, 31): 2.3981683160862044, + datetime.date(2060, 11, 30): 2.402111638143611, + datetime.date(2060, 12, 31): 2.4060614442283246, + datetime.date(2061, 1, 31): 2.4100179369138024, + datetime.date(2061, 2, 28): 2.4139809355987034, + datetime.date(2061, 3, 31): 2.4179504509814, + datetime.date(2061, 4, 30): 2.4219264937778564, + datetime.date(2061, 5, 31): 2.4259090747216563, + datetime.date(2061, 6, 30): 2.4298982045640356, + datetime.date(2061, 7, 31): 2.433893894073908, + datetime.date(2061, 8, 31): 2.437896154037897, + datetime.date(2061, 9, 30): 2.441904995260361, + datetime.date(2061, 10, 31): 2.445920428563427, + datetime.date(2061, 11, 30): 2.4499424647870174, + datetime.date(2061, 12, 31): 2.4539711147888794, + datetime.date(2062, 1, 31): 2.458006506663394, + datetime.date(2062, 2, 28): 2.4620485344707776, + datetime.date(2062, 3, 31): 2.46609720912338, + datetime.date(2062, 4, 30): 2.470152541551494, + datetime.date(2062, 5, 31): 2.4742145427033884, + datetime.date(2062, 6, 30): 2.4782832235453345, + datetime.date(2062, 7, 31): 2.4823585950616374, + datetime.date(2062, 8, 31): 2.4864406682546645, + datetime.date(2062, 9, 30): 2.4905294541448764, + datetime.date(2062, 10, 31): 2.494624963770857, + datetime.date(2062, 11, 30): 2.49872720818934, + datetime.date(2062, 12, 31): 2.5028361984752436, + datetime.date(2063, 1, 31): 2.506951956536693, + datetime.date(2063, 2, 28): 2.511074482705632, + datetime.date(2063, 3, 31): 2.515203788111792, + datetime.date(2063, 4, 30): 2.5193398839032044, + datetime.date(2063, 5, 31): 2.5234827812462357, + datetime.date(2063, 6, 30): 2.527632491325613, + datetime.date(2063, 7, 31): 2.531789025344456, + datetime.date(2063, 8, 31): 2.5359523945243083, + datetime.date(2063, 9, 30): 2.5401226101051657, + datetime.date(2063, 10, 31): 2.544299683345508, + datetime.date(2063, 11, 30): 2.5484836255223278, + datetime.date(2063, 12, 31): 2.552674447931164, + datetime.date(2064, 1, 31): 2.5568720975209347, + datetime.date(2064, 2, 29): 2.5610766497778648, + datetime.date(2064, 3, 31): 2.565288116052785, + datetime.date(2064, 4, 30): 2.569506507715193, + datetime.date(2064, 5, 31): 2.5737318361532813, + datetime.date(2064, 6, 30): 2.5779641127739708, + datetime.date(2064, 7, 31): 2.582203349002939, + datetime.date(2064, 8, 31): 2.5864495562846517, + datetime.date(2064, 9, 30): 2.5907027460823957, + datetime.date(2064, 10, 31): 2.594962929878306, + datetime.date(2064, 11, 30): 2.5992301191734017, + datetime.date(2064, 12, 31): 2.6035043254876116, + datetime.date(2065, 1, 31): 2.6077854692914553, + datetime.date(2065, 2, 28): 2.61207365291163, + datetime.date(2065, 3, 31): 2.6163688879242515, + datetime.date(2065, 4, 30): 2.6206711859244707, + datetime.date(2065, 5, 31): 2.624980558526504, + datetime.date(2065, 6, 30): 2.629297017363668, + datetime.date(2065, 7, 31): 2.633620574088408, + datetime.date(2065, 8, 31): 2.6379512403723298, + datetime.date(2065, 9, 30): 2.6422890279062323, + datetime.date(2065, 10, 31): 2.646633948400139, + datetime.date(2065, 11, 30): 2.6509860135833274, + datetime.date(2065, 12, 31): 2.6553452352043645, + datetime.date(2066, 1, 31): 2.6597115512766614, + datetime.date(2066, 2, 28): 2.6640850470993684, + datetime.date(2066, 3, 31): 2.6684657344785068, + datetime.date(2066, 4, 30): 2.67285362523951, + datetime.date(2066, 5, 31): 2.6772487312272557, + datetime.date(2066, 6, 30): 2.681651064306101, + datetime.date(2066, 7, 31): 2.6860606363599095, + datetime.date(2066, 8, 31): 2.690477459292088, + datetime.date(2066, 9, 30): 2.694901545025616, + datetime.date(2066, 10, 31): 2.6993329055030784, + datetime.date(2066, 11, 30): 2.7037715526866983, + datetime.date(2066, 12, 31): 2.708217498558368, + datetime.date(2067, 1, 31): 2.712670725484101, + datetime.date(2067, 2, 28): 2.717131275023347, + datetime.date(2067, 3, 31): 2.7215991592169635, + datetime.date(2067, 4, 30): 2.7260743901256066, + datetime.date(2067, 5, 31): 2.7305569798297644, + datetime.date(2067, 6, 30): 2.7350469404297892, + datetime.date(2067, 7, 31): 2.739544284045931, + datetime.date(2067, 8, 31): 2.744049022818369, + datetime.date(2067, 9, 30): 2.748561168907245, + datetime.date(2067, 10, 31): 2.753080734492696, + datetime.date(2067, 11, 30): 2.7576077317748884, + datetime.date(2067, 12, 31): 2.762142172974048, + datetime.date(2068, 1, 31): 2.766684089591215, + datetime.date(2068, 2, 29): 2.771233474689461, + datetime.date(2068, 3, 31): 2.7757903405495514, + datetime.date(2068, 4, 30): 2.7803546994724444, + datetime.date(2068, 5, 31): 2.784926563779326, + datetime.date(2068, 6, 30): 2.7895059458116416, + datetime.date(2068, 7, 31): 2.794092857931131, + datetime.date(2068, 8, 31): 2.798687312519861, + datetime.date(2068, 9, 30): 2.803289321980258, + datetime.date(2068, 10, 31): 2.8078988987351434, + datetime.date(2068, 11, 30): 2.8125160552277646, + datetime.date(2068, 12, 31): 2.8171408039218306, + datetime.date(2069, 1, 31): 2.8217732004272142, + datetime.date(2069, 2, 28): 2.826413214264807, + datetime.date(2069, 3, 31): 2.8310608579602525, + datetime.date(2069, 4, 30): 2.835716144059792, + datetime.date(2069, 5, 31): 2.840379085130297, + datetime.date(2069, 6, 30): 2.845049693759303, + datetime.date(2069, 7, 31): 2.8497279825550446, + datetime.date(2069, 8, 31): 2.8544139641464876, + datetime.date(2069, 9, 30): 2.8591076511833657, + datetime.date(2069, 10, 31): 2.863809056336214, + datetime.date(2069, 11, 30): 2.868518192296401, + datetime.date(2069, 12, 31): 2.8732350717761643, + datetime.date(2070, 1, 31): 2.8779597469269094, + datetime.date(2070, 2, 28): 2.8826921912140895, + datetime.date(2070, 3, 31): 2.887432417413075, + datetime.date(2070, 4, 30): 2.8921804383202456, + datetime.date(2070, 5, 31): 2.8969362667530225, + datetime.date(2070, 6, 30): 2.9016999155499033, + datetime.date(2070, 7, 31): 2.9064713975704968, + datetime.date(2070, 8, 31): 2.911250725695559, + datetime.date(2070, 9, 30): 2.9160379128270253, + datetime.date(2070, 10, 31): 2.920832971888047, + datetime.date(2070, 11, 30): 2.9256359158230265, + datetime.date(2070, 12, 31): 2.9304467575976516} + + +# pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) +# pp.pprint(inflation_coeff_dict) diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index a749c42..ebf3f27 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -39,8 +39,8 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co prior_monthly_charge = lib.product2list(prior_monthly_usage, prior_monthly_price) - pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) - pp.pprint(prior_monthly_price) + # pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) + # pp.pprint(prior_monthly_price) # print(prior_monthly_price) # write to a txt file @@ -112,17 +112,66 @@ analysis_date = { 'proforma_duration': 25 } +# inflationyears = [ +# 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, +# 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, +# 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, +# 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, +# 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, +# 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, +# 2065, 2066, 2067, 2068, 2069, 2070 +# ] + +# inflationhist = [ +# 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, +# 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, +# 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, +# 0.042164, 0.030411000000000001, 0.029699, 0.025956, +# 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, +# 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, +# 0.015956999999999999, 0.022977999999999998, 0.026674, +# 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, +# 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, +# 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, +# 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, +# 0.023304999999999999, 0.023056, 0.019432600000000001, +# 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, +# 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, +# 0.020537658658559999, 0.020050624524416, 0.0197251869768576, +# 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, +# 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, +# 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, +# 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, +# 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, +# 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, +# 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, +# 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, +# 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, +# 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, +# 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, +# 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, +# 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, +# 0.019732496782414701 +# ] + +# inflation_coeff_dict = bl.form_inflation_coeffdict( +# inflationyears, inflationhist, datetime.date(1984, 3, 31)) + +# bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) + + inflationyears = [ 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, - 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, + 2017, + 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070 ] - inflationhist = [ 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, @@ -138,7 +187,8 @@ inflationhist = [ 0.023304999999999999, 0.023056, 0.019432600000000001, 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, - 0.020537658658559999, 0.020050624524416, 0.0197251869768576, + 0.020537658658559999, 0.020050624524416, + 0.0197251869768576, 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, @@ -155,7 +205,17 @@ inflationhist = [ 0.019732496782414701 ] -inflation_coeff_dict = bl.form_inflation_coeffdict( - inflationyears, inflationhist, datetime.date(1984, 3, 31)) +inflation_coeff_dict = bl.form_inflation_coeffdict(inflationyears, + inflationhist, + datetime.date( + 2017, 1, 31)) + +# pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) +# pp.pprint(inflation_coeff_dict) + +print(len(inflationyears), len(inflationhist)) -bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) +writein = str(inflation_coeff_dict) +f = open('inflation_sample_data.py', 'w') +f.write(writein) +f.close() -- GitLab From 01143db90c70056cf6a5fd7d603758e119ded885 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Wed, 19 Apr 2017 18:03:36 -0400 Subject: [PATCH 11/14] filled in test data in sample_date, for test_bill_prior_proj_rough cleaned up test_bill_prior_rough and bill_prior_proj_rough --- .../test_bill_prior_proj_rough.py | 227 +---- .../test_month_normalize_rough.py | 42 +- bpfin/tests/testdata/sample_data.py | 793 +++++++++++++++++- bpfin/utilbills/bill_prior_proj_rough.py | 175 +--- 4 files changed, 807 insertions(+), 430 deletions(-) diff --git a/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py b/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py index ed2ebe4..79e045d 100644 --- a/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py +++ b/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py @@ -1,222 +1,23 @@ import datetime from bpfin.utilbills.bill_prior_proj_rough import bill_prior_proj_rough from bpfin.utilbills import bill_lib as bl +from bpfin.tests.testdata import sample_data as db def test_bill_prior_proj_rough(): - month_norm_bill = { - 'monthly_usage': [ - 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, - 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, - 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, - 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 - ], - 'monthly_charge': [ - 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, - 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, - 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, - 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 - ], - 'monthly_price': [ - 28182.379083772827, 26782.308906986349, 26787.762657851385, - 27313.595138938686, 26817.901843564676, 27005.501339712977, - 27201.030152373722, 26618.451410257541, 28498.41164180508, - 31875.872144254135, 33930.968787907128, 31671.445647289031 - ] + month_norm_bill = db.monthly_normalized_bill + raw_bill = db.raw_bill + analysis_date = db.analysis_date + inflation_coeff_dict = db.inflation_coeff_dict + + output_dict = { + 'date_from': db.proforma_date_from, + 'date_to': db.proforma_date_to, + 'usage': db.prior_proj_rough_usage, + 'charge': db.prior_proj_rough_charge, + 'price': db.prior_proj_rough_price } - - raw_bill = {} - # raw_bill['utility_type'] = 'electricity' - # raw_bill['date_from'] = [ - # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), - # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), - # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), - # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), - # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), - # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), - # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), - # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] - raw_bill['date_to'] = [ - datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( - 2014, 7, 17), datetime.date(2014, 8, 15), - datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( - 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( - 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( - 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( - 2015, 5, 18), datetime.date(2015, 6, 17), - datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( - 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( - 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( - 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( - 2016, 3, 18), datetime.date(2016, 4, 18) - ] - # raw_bill['charge'] = [ - # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, - # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, - # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] - # raw_bill['usage'] = [ - # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, - # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, - # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] - - analysis_date = { - 'proforma_start': datetime.date(2012, 1, 15), - 'proforma_duration': 25 - } - - inflationyears = [ - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, - 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, - 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, - 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, - 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, - 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, - 2065, 2066, 2067, 2068, 2069, 2070 - ] - inflationhist = [ - 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, - 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, - 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, - 0.042164, 0.030411000000000001, 0.029699, 0.025956, - 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, - 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, - 0.015956999999999999, 0.022977999999999998, 0.026674, - 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, - 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, - 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, - 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, - 0.023304999999999999, 0.023056, 0.019432600000000001, - 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, - 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, - 0.020537658658559999, 0.020050624524416, 0.0197251869768576, - 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, - 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, - 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, - 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, - 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, - 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, - 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, - 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, - 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, - 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, - 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, - 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, - 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, - 0.019732496782414701 - ] - - inflation_coeff_dict = bl.form_inflation_coeffdict(inflationyears, - inflationhist, - datetime.date( - 1984, 3, 31)) - - # print(inflation_coeffdict) - - output_list = [ - 26754.02190958825, 25437.402445542302, 25455.082481602276, - 25967.506799664803, 25682.652341327987, 25904.813599303496, - 26135.254343292472, 25617.53371054237, 27471.87725596816, - 30778.17820020553, 32816.34772218761, 30681.38949024495, - 27300.901075589303, 25944.15534926562, 25948.971912520003, - 26457.863623983936, 26154.30985850953, 26367.122421120857, - 26588.13450383182, 26048.176428904706, 27919.473102654887, - 31263.720730151443, 33317.07526031477, 31133.684577875214, - 27706.71473298358, 26332.98809505743, 26341.064228912815, - 26860.895645052482, 26555.93123531273, 26775.251635321703, - 27002.952176075487, 26457.77139192967, 28361.925216188432, - 31763.014062817325, 33853.25782553258, 31638.557527359313, - 28120.731159728904, 26692.984825881267, 26667.710732869426, - 27159.910190094997, 26817.901843564676, 27005.50133971298, - 27201.03015237372, 26618.45141025754, 28498.41164180508, - 31875.872144254132, 33930.96878790713, 31671.44564728903, - 28182.379083772827, 26782.308906986345, 26787.762657851385, - 27313.595138938683, 27000.708890291204, 27220.89780837819, - 27449.55981009997, 26892.591175889873, 28825.068674554102, - 32278.370555400215, 34398.9841881278, 32145.269927153997, - 28625.119382873097, 27223.13480531277, 27248.77769698295, - 27804.168753323785, 27505.951894336642, 27750.730661505855, - 28004.500198883696, 27456.524092354033, 29451.2492769073, - 33003.91337318344, 35198.156509452434, 32916.36289381111, - 29315.867378756702, 27883.947249018347, 27914.112313141843, - 28487.044137292265, 28185.44064305347, 28440.239483044264, - 28704.324422573933, 28146.586750679562, 30195.663667274195, - 33842.853446539695, 36097.91598369266, 33762.510355479244, - 30064.20202540023, 28590.729018954582, 28616.653337224438, - 29198.89749352122, 28884.70509626633, 29140.72833404548, - 29406.174296001183, 28829.756750121847, 30923.15979431818, - 34652.1593310156, 36954.6848711906, 34557.804854090806, - 30771.743548233786, 29262.987266337208, 29288.914567589014, - 29884.217871005265, 29562.038902734035, 29823.448124557886, - 30094.48978978649, 29503.968903672863, 31645.672843917448, - 35461.06525536879, 37816.556827191074, 35363.04343868804, - 31479.27253369292, 29926.803910058345, 29944.292298750017, - 30543.7085294851, 30205.313905040068, 30463.22793599256, - 30730.81988365605, 30118.733136461007, 32295.327230129726, - 36178.13954910067, 38569.635312611834, 36056.39306041519, - 32093.271052856362, 30507.47655458922, 30522.25759123903, - 31130.136006631354, 30782.171710198247, 31041.912803266994, - 31311.46251686415, 30684.74781298939, 32898.96223743173, - 36850.670195146085, 39282.701345004316, 36719.329619270386, - 32682.653474724724, 31067.082609819834, 31081.480706071827, - 31699.829471540288, 31344.83768004128, 31608.661402754336, - 31882.46149963201, 31243.660477898567, 33497.50118048761, - 37520.31396671061, 39995.69788899631, 37385.01323120586, - 33276.0802651476, 31632.05340096169, 31647.5920744316, - 32278.099558009235, 31917.518221478604, 32187.05581022932, - 32466.767552955906, 31817.142749694234, 34113.300255050315, - 38211.12713768559, 40733.21812875972, 38075.44969299633, - 33891.25695780802, 32217.43111537903, 32233.85188309206, - 32876.6456760923, 32509.97756210911, 32785.12306732849, - 33070.642102474034, 32409.532202856528, 34749.0817899383, - 38923.999243253435, 41493.908050210695, 38787.221391716266, - 34529.83661967908, 32829.2510679787, 32850.76535001071, - 33510.739112086354, 33141.8230967011, 33427.181754474885, - 33723.20101744418, 33053.85715719098, 35445.077983421404, - 39709.395683611314, 42337.32183581328, 39581.37987304508, - 35238.41685882394, 33504.44627025329, 33527.91645055515, - 34203.03810809352, 33828.02761311082, 34120.83482871911, - 34424.55072706422, 33742.80947456002, 36185.50467333175, - 40540.73141323701, 43225.625653537085, 40413.68391300862, - 35978.530434135086, 34207.31585417915, 34230.45249031789, - 34918.877966328815, 34535.18556412997, 34833.273311959994, - 35142.482841420526, 34445.69261027247, 36938.37938018581, - 41383.222366249895, 44122.847727602944, 41251.54399292418, - 36722.95256061526, 34913.675605760676, 34935.874450620504, - 35637.04305615946, 35244.03134395224, 35546.797136530964, - 35860.88747708315, 35148.428863019784, 37690.442476774, - 42224.07133333292, 45017.53799293737, 42086.306825236534, - 37465.060813870776, 35618.25708219298, 35639.93895299573, - 36354.25394408604, 35952.359280815246, 36260.228247349354, - 36579.63203778363, 35851.9232166152, 38443.774251630115, - 43066.85225243954, 45914.83258537647, 42924.01361071201, - 38209.72515243989, 36325.20727263827, 36346.31225589064, - 37073.757376242145, 36662.89263267302, 36975.82139878797, - 37300.49493038777, 36557.43230924951, 39199.20058159262, - 43911.90592020215, 46814.47172934675, 43763.838912320076, - 38957.30041094427, 37035.899363174336, 37057.40477432121, - 37799.06916168266, 37380.15365776035, 37699.191760311005, - 38030.204176110325, 37272.59247017143, 39966.02725905225, - 44770.90888835863, 47730.23849443133, 44619.915333868405, - 39719.73653229103, 37761.09449777748, 37783.384108807615, - 38539.94857330552, 38113.188404530265, 38438.85233344472, - 38776.731885659894, 38004.61359676978, 40751.33816294772, - 45651.07184277119, 48669.04739849538, 45497.984350354855, - 40501.888989390674, 38505.16585864819, 38528.383033145146, - 39300.36329670178, 38865.67553971432, 39198.2660533303, - 39543.32211013742, 38756.430799422735, 41558.01854338669, - 46555.33346618678, 49633.71853999643, 46400.389856003654, - 41305.663333911165, 39269.75301920907, 39293.86997484386, - 40081.635603055096, 39638.74907735906, 39978.40152525879, - 40330.775331642646, 39528.65550135918, 42386.53838192031, - 47484.01229805165, 50624.36981953646, 47327.03481740793, - 42131.00318614886, 40054.830896821084, 40079.848368848034, - 40883.79809844024, 40432.47004123157, 40779.34931771415, - 41139.21219179594, 40321.43463472525, 43237.08599499887, - 48437.35375945405, 51641.29962190507, 48278.232521546975 - ] - - result_list = bill_prior_proj_rough(month_norm_bill, raw_bill, + result_dict = bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) - assert result_list['price'] == output_list + assert result_dict == output_dict diff --git a/bpfin/tests/test_utilbills/test_month_normalize_rough.py b/bpfin/tests/test_utilbills/test_month_normalize_rough.py index 1db1cca..29f21d5 100644 --- a/bpfin/tests/test_utilbills/test_month_normalize_rough.py +++ b/bpfin/tests/test_utilbills/test_month_normalize_rough.py @@ -4,49 +4,9 @@ from bpfin.tests.testdata import sample_data as db def test_month_normalization_rough(): - # test_raw_bill = {} - # test_raw_bill['utility_type'] = 'electricity' - # test_raw_bill['date_from'] = [ - # datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), - # datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), - # datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), - # datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), - # datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), - # datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), - # datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), - # datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] - # test_raw_bill['date_to'] = [ - # datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date(2014, 7, 17), - # datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), - # datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), datetime.date(2015, 1, 16), - # datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), datetime.date(2015, 4, 17), - # datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), datetime.date(2015, 7, 17), - # datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), datetime.date(2015, 10, 16), - # datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), datetime.date(2016, 1, 19), - # datetime.date(2016, 2, 18), datetime.date(2016, 3, 18), datetime.date(2016, 4, 18)] - # test_raw_bill['charge'] = [ - # 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, - # 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, - # 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] - # test_raw_bill['usage'] = [ - # 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, - # 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, - # 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] input_dict = db.raw_bill - output_dict = { - 'monthly_usage': [ - 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, 0.095904698506193486, - 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, - 0.090033196083726619, 0.099460650112727964, 0.093068756936307756, 0.094710339831841669], - 'monthly_charge': [ - 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, 2619.5021069201466, - 2673.9005752806534, 2893.2607949224612, 3362.6736487267954, 2772.8416549504082, - 2565.8030834213941, 3170.3949663777121, 3157.9130867351737, 2999.6133802204467], - 'monthly_price': [ - 28182.379083772827, 26782.308906986349, 26787.762657851385, 27313.595138938686, - 26817.901843564676, 27005.501339712977, 27201.030152373722, 26618.451410257541, - 28498.41164180508, 31875.872144254135, 33930.968787907128, 31671.445647289031]} + output_dict = db.monthly_normalized_bill result_dict = bill_month_normalize_rough(input_dict) assert result_dict == output_dict diff --git a/bpfin/tests/testdata/sample_data.py b/bpfin/tests/testdata/sample_data.py index 50e7822..1619199 100644 --- a/bpfin/tests/testdata/sample_data.py +++ b/bpfin/tests/testdata/sample_data.py @@ -2,6 +2,13 @@ import datetime import pprint from bpfin.utilbills import bill_lib as bl +# pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) +# pp.pprint(inflation_coeff_dict) + +# writein = str(prior_monthly_charge) +# f = open('data_generation.py', 'w') +# f.write(writein) +# f.close() # raw energy bill. will need oil and other types for test raw_bill = {} @@ -48,10 +55,789 @@ monthly_normalized_bill = { 26817.901843564676, 27005.501339712977, 27201.030152373722, 26618.451410257541, 28498.41164180508, 31875.872144254135, 33930.968787907128, 31671.445647289031]} +# pro-forma projection analysis_date = { 'proforma_start': datetime.date(2012, 1, 15), 'proforma_duration': 25} +proforma_date_from = [ + datetime.date(2012, 1, 1), + datetime.date(2012, 2, 1), + datetime.date(2012, 3, 1), + datetime.date(2012, 4, 1), + datetime.date(2012, 5, 1), + datetime.date(2012, 6, 1), + datetime.date(2012, 7, 1), + datetime.date(2012, 8, 1), + datetime.date(2012, 9, 1), + datetime.date(2012, 10, 1), + datetime.date(2012, 11, 1), + datetime.date(2012, 12, 1), + datetime.date(2013, 1, 1), + datetime.date(2013, 2, 1), + datetime.date(2013, 3, 1), + datetime.date(2013, 4, 1), + datetime.date(2013, 5, 1), + datetime.date(2013, 6, 1), + datetime.date(2013, 7, 1), + datetime.date(2013, 8, 1), + datetime.date(2013, 9, 1), + datetime.date(2013, 10, 1), + datetime.date(2013, 11, 1), + datetime.date(2013, 12, 1), + datetime.date(2014, 1, 1), + datetime.date(2014, 2, 1), + datetime.date(2014, 3, 1), + datetime.date(2014, 4, 1), + datetime.date(2014, 5, 1), + datetime.date(2014, 6, 1), + datetime.date(2014, 7, 1), + datetime.date(2014, 8, 1), + datetime.date(2014, 9, 1), + datetime.date(2014, 10, 1), + datetime.date(2014, 11, 1), + datetime.date(2014, 12, 1), + datetime.date(2015, 1, 1), + datetime.date(2015, 2, 1), + datetime.date(2015, 3, 1), + datetime.date(2015, 4, 1), + datetime.date(2015, 5, 1), + datetime.date(2015, 6, 1), + datetime.date(2015, 7, 1), + datetime.date(2015, 8, 1), + datetime.date(2015, 9, 1), + datetime.date(2015, 10, 1), + datetime.date(2015, 11, 1), + datetime.date(2015, 12, 1), + datetime.date(2016, 1, 1), + datetime.date(2016, 2, 1), + datetime.date(2016, 3, 1), + datetime.date(2016, 4, 1), + datetime.date(2016, 5, 1), + datetime.date(2016, 6, 1), + datetime.date(2016, 7, 1), + datetime.date(2016, 8, 1), + datetime.date(2016, 9, 1), + datetime.date(2016, 10, 1), + datetime.date(2016, 11, 1), + datetime.date(2016, 12, 1), + datetime.date(2017, 1, 1), + datetime.date(2017, 2, 1), + datetime.date(2017, 3, 1), + datetime.date(2017, 4, 1), + datetime.date(2017, 5, 1), + datetime.date(2017, 6, 1), + datetime.date(2017, 7, 1), + datetime.date(2017, 8, 1), + datetime.date(2017, 9, 1), + datetime.date(2017, 10, 1), + datetime.date(2017, 11, 1), + datetime.date(2017, 12, 1), + datetime.date(2018, 1, 1), + datetime.date(2018, 2, 1), + datetime.date(2018, 3, 1), + datetime.date(2018, 4, 1), + datetime.date(2018, 5, 1), + datetime.date(2018, 6, 1), + datetime.date(2018, 7, 1), + datetime.date(2018, 8, 1), + datetime.date(2018, 9, 1), + datetime.date(2018, 10, 1), + datetime.date(2018, 11, 1), + datetime.date(2018, 12, 1), + datetime.date(2019, 1, 1), + datetime.date(2019, 2, 1), + datetime.date(2019, 3, 1), + datetime.date(2019, 4, 1), + datetime.date(2019, 5, 1), + datetime.date(2019, 6, 1), + datetime.date(2019, 7, 1), + datetime.date(2019, 8, 1), + datetime.date(2019, 9, 1), + datetime.date(2019, 10, 1), + datetime.date(2019, 11, 1), + datetime.date(2019, 12, 1), + datetime.date(2020, 1, 1), + datetime.date(2020, 2, 1), + datetime.date(2020, 3, 1), + datetime.date(2020, 4, 1), + datetime.date(2020, 5, 1), + datetime.date(2020, 6, 1), + datetime.date(2020, 7, 1), + datetime.date(2020, 8, 1), + datetime.date(2020, 9, 1), + datetime.date(2020, 10, 1), + datetime.date(2020, 11, 1), + datetime.date(2020, 12, 1), + datetime.date(2021, 1, 1), + datetime.date(2021, 2, 1), + datetime.date(2021, 3, 1), + datetime.date(2021, 4, 1), + datetime.date(2021, 5, 1), + datetime.date(2021, 6, 1), + datetime.date(2021, 7, 1), + datetime.date(2021, 8, 1), + datetime.date(2021, 9, 1), + datetime.date(2021, 10, 1), + datetime.date(2021, 11, 1), + datetime.date(2021, 12, 1), + datetime.date(2022, 1, 1), + datetime.date(2022, 2, 1), + datetime.date(2022, 3, 1), + datetime.date(2022, 4, 1), + datetime.date(2022, 5, 1), + datetime.date(2022, 6, 1), + datetime.date(2022, 7, 1), + datetime.date(2022, 8, 1), + datetime.date(2022, 9, 1), + datetime.date(2022, 10, 1), + datetime.date(2022, 11, 1), + datetime.date(2022, 12, 1), + datetime.date(2023, 1, 1), + datetime.date(2023, 2, 1), + datetime.date(2023, 3, 1), + datetime.date(2023, 4, 1), + datetime.date(2023, 5, 1), + datetime.date(2023, 6, 1), + datetime.date(2023, 7, 1), + datetime.date(2023, 8, 1), + datetime.date(2023, 9, 1), + datetime.date(2023, 10, 1), + datetime.date(2023, 11, 1), + datetime.date(2023, 12, 1), + datetime.date(2024, 1, 1), + datetime.date(2024, 2, 1), + datetime.date(2024, 3, 1), + datetime.date(2024, 4, 1), + datetime.date(2024, 5, 1), + datetime.date(2024, 6, 1), + datetime.date(2024, 7, 1), + datetime.date(2024, 8, 1), + datetime.date(2024, 9, 1), + datetime.date(2024, 10, 1), + datetime.date(2024, 11, 1), + datetime.date(2024, 12, 1), + datetime.date(2025, 1, 1), + datetime.date(2025, 2, 1), + datetime.date(2025, 3, 1), + datetime.date(2025, 4, 1), + datetime.date(2025, 5, 1), + datetime.date(2025, 6, 1), + datetime.date(2025, 7, 1), + datetime.date(2025, 8, 1), + datetime.date(2025, 9, 1), + datetime.date(2025, 10, 1), + datetime.date(2025, 11, 1), + datetime.date(2025, 12, 1), + datetime.date(2026, 1, 1), + datetime.date(2026, 2, 1), + datetime.date(2026, 3, 1), + datetime.date(2026, 4, 1), + datetime.date(2026, 5, 1), + datetime.date(2026, 6, 1), + datetime.date(2026, 7, 1), + datetime.date(2026, 8, 1), + datetime.date(2026, 9, 1), + datetime.date(2026, 10, 1), + datetime.date(2026, 11, 1), + datetime.date(2026, 12, 1), + datetime.date(2027, 1, 1), + datetime.date(2027, 2, 1), + datetime.date(2027, 3, 1), + datetime.date(2027, 4, 1), + datetime.date(2027, 5, 1), + datetime.date(2027, 6, 1), + datetime.date(2027, 7, 1), + datetime.date(2027, 8, 1), + datetime.date(2027, 9, 1), + datetime.date(2027, 10, 1), + datetime.date(2027, 11, 1), + datetime.date(2027, 12, 1), + datetime.date(2028, 1, 1), + datetime.date(2028, 2, 1), + datetime.date(2028, 3, 1), + datetime.date(2028, 4, 1), + datetime.date(2028, 5, 1), + datetime.date(2028, 6, 1), + datetime.date(2028, 7, 1), + datetime.date(2028, 8, 1), + datetime.date(2028, 9, 1), + datetime.date(2028, 10, 1), + datetime.date(2028, 11, 1), + datetime.date(2028, 12, 1), + datetime.date(2029, 1, 1), + datetime.date(2029, 2, 1), + datetime.date(2029, 3, 1), + datetime.date(2029, 4, 1), + datetime.date(2029, 5, 1), + datetime.date(2029, 6, 1), + datetime.date(2029, 7, 1), + datetime.date(2029, 8, 1), + datetime.date(2029, 9, 1), + datetime.date(2029, 10, 1), + datetime.date(2029, 11, 1), + datetime.date(2029, 12, 1), + datetime.date(2030, 1, 1), + datetime.date(2030, 2, 1), + datetime.date(2030, 3, 1), + datetime.date(2030, 4, 1), + datetime.date(2030, 5, 1), + datetime.date(2030, 6, 1), + datetime.date(2030, 7, 1), + datetime.date(2030, 8, 1), + datetime.date(2030, 9, 1), + datetime.date(2030, 10, 1), + datetime.date(2030, 11, 1), + datetime.date(2030, 12, 1), + datetime.date(2031, 1, 1), + datetime.date(2031, 2, 1), + datetime.date(2031, 3, 1), + datetime.date(2031, 4, 1), + datetime.date(2031, 5, 1), + datetime.date(2031, 6, 1), + datetime.date(2031, 7, 1), + datetime.date(2031, 8, 1), + datetime.date(2031, 9, 1), + datetime.date(2031, 10, 1), + datetime.date(2031, 11, 1), + datetime.date(2031, 12, 1), + datetime.date(2032, 1, 1), + datetime.date(2032, 2, 1), + datetime.date(2032, 3, 1), + datetime.date(2032, 4, 1), + datetime.date(2032, 5, 1), + datetime.date(2032, 6, 1), + datetime.date(2032, 7, 1), + datetime.date(2032, 8, 1), + datetime.date(2032, 9, 1), + datetime.date(2032, 10, 1), + datetime.date(2032, 11, 1), + datetime.date(2032, 12, 1), + datetime.date(2033, 1, 1), + datetime.date(2033, 2, 1), + datetime.date(2033, 3, 1), + datetime.date(2033, 4, 1), + datetime.date(2033, 5, 1), + datetime.date(2033, 6, 1), + datetime.date(2033, 7, 1), + datetime.date(2033, 8, 1), + datetime.date(2033, 9, 1), + datetime.date(2033, 10, 1), + datetime.date(2033, 11, 1), + datetime.date(2033, 12, 1), + datetime.date(2034, 1, 1), + datetime.date(2034, 2, 1), + datetime.date(2034, 3, 1), + datetime.date(2034, 4, 1), + datetime.date(2034, 5, 1), + datetime.date(2034, 6, 1), + datetime.date(2034, 7, 1), + datetime.date(2034, 8, 1), + datetime.date(2034, 9, 1), + datetime.date(2034, 10, 1), + datetime.date(2034, 11, 1), + datetime.date(2034, 12, 1), + datetime.date(2035, 1, 1), + datetime.date(2035, 2, 1), + datetime.date(2035, 3, 1), + datetime.date(2035, 4, 1), + datetime.date(2035, 5, 1), + datetime.date(2035, 6, 1), + datetime.date(2035, 7, 1), + datetime.date(2035, 8, 1), + datetime.date(2035, 9, 1), + datetime.date(2035, 10, 1), + datetime.date(2035, 11, 1), + datetime.date(2035, 12, 1), + datetime.date(2036, 1, 1), + datetime.date(2036, 2, 1), + datetime.date(2036, 3, 1), + datetime.date(2036, 4, 1), + datetime.date(2036, 5, 1), + datetime.date(2036, 6, 1), + datetime.date(2036, 7, 1), + datetime.date(2036, 8, 1), + datetime.date(2036, 9, 1), + datetime.date(2036, 10, 1), + datetime.date(2036, 11, 1), + datetime.date(2036, 12, 1)] + +proforma_date_to = [ + datetime.date(2012, 1, 31), + datetime.date(2012, 2, 29), + datetime.date(2012, 3, 31), + datetime.date(2012, 4, 30), + datetime.date(2012, 5, 31), + datetime.date(2012, 6, 30), + datetime.date(2012, 7, 31), + datetime.date(2012, 8, 31), + datetime.date(2012, 9, 30), + datetime.date(2012, 10, 31), + datetime.date(2012, 11, 30), + datetime.date(2012, 12, 31), + datetime.date(2013, 1, 31), + datetime.date(2013, 2, 28), + datetime.date(2013, 3, 31), + datetime.date(2013, 4, 30), + datetime.date(2013, 5, 31), + datetime.date(2013, 6, 30), + datetime.date(2013, 7, 31), + datetime.date(2013, 8, 31), + datetime.date(2013, 9, 30), + datetime.date(2013, 10, 31), + datetime.date(2013, 11, 30), + datetime.date(2013, 12, 31), + datetime.date(2014, 1, 31), + datetime.date(2014, 2, 28), + datetime.date(2014, 3, 31), + datetime.date(2014, 4, 30), + datetime.date(2014, 5, 31), + datetime.date(2014, 6, 30), + datetime.date(2014, 7, 31), + datetime.date(2014, 8, 31), + datetime.date(2014, 9, 30), + datetime.date(2014, 10, 31), + datetime.date(2014, 11, 30), + datetime.date(2014, 12, 31), + datetime.date(2015, 1, 31), + datetime.date(2015, 2, 28), + datetime.date(2015, 3, 31), + datetime.date(2015, 4, 30), + datetime.date(2015, 5, 31), + datetime.date(2015, 6, 30), + datetime.date(2015, 7, 31), + datetime.date(2015, 8, 31), + datetime.date(2015, 9, 30), + datetime.date(2015, 10, 31), + datetime.date(2015, 11, 30), + datetime.date(2015, 12, 31), + datetime.date(2016, 1, 31), + datetime.date(2016, 2, 29), + datetime.date(2016, 3, 31), + datetime.date(2016, 4, 30), + datetime.date(2016, 5, 31), + datetime.date(2016, 6, 30), + datetime.date(2016, 7, 31), + datetime.date(2016, 8, 31), + datetime.date(2016, 9, 30), + datetime.date(2016, 10, 31), + datetime.date(2016, 11, 30), + datetime.date(2016, 12, 31), + datetime.date(2017, 1, 31), + datetime.date(2017, 2, 28), + datetime.date(2017, 3, 31), + datetime.date(2017, 4, 30), + datetime.date(2017, 5, 31), + datetime.date(2017, 6, 30), + datetime.date(2017, 7, 31), + datetime.date(2017, 8, 31), + datetime.date(2017, 9, 30), + datetime.date(2017, 10, 31), + datetime.date(2017, 11, 30), + datetime.date(2017, 12, 31), + datetime.date(2018, 1, 31), + datetime.date(2018, 2, 28), + datetime.date(2018, 3, 31), + datetime.date(2018, 4, 30), + datetime.date(2018, 5, 31), + datetime.date(2018, 6, 30), + datetime.date(2018, 7, 31), + datetime.date(2018, 8, 31), + datetime.date(2018, 9, 30), + datetime.date(2018, 10, 31), + datetime.date(2018, 11, 30), + datetime.date(2018, 12, 31), + datetime.date(2019, 1, 31), + datetime.date(2019, 2, 28), + datetime.date(2019, 3, 31), + datetime.date(2019, 4, 30), + datetime.date(2019, 5, 31), + datetime.date(2019, 6, 30), + datetime.date(2019, 7, 31), + datetime.date(2019, 8, 31), + datetime.date(2019, 9, 30), + datetime.date(2019, 10, 31), + datetime.date(2019, 11, 30), + datetime.date(2019, 12, 31), + datetime.date(2020, 1, 31), + datetime.date(2020, 2, 29), + datetime.date(2020, 3, 31), + datetime.date(2020, 4, 30), + datetime.date(2020, 5, 31), + datetime.date(2020, 6, 30), + datetime.date(2020, 7, 31), + datetime.date(2020, 8, 31), + datetime.date(2020, 9, 30), + datetime.date(2020, 10, 31), + datetime.date(2020, 11, 30), + datetime.date(2020, 12, 31), + datetime.date(2021, 1, 31), + datetime.date(2021, 2, 28), + datetime.date(2021, 3, 31), + datetime.date(2021, 4, 30), + datetime.date(2021, 5, 31), + datetime.date(2021, 6, 30), + datetime.date(2021, 7, 31), + datetime.date(2021, 8, 31), + datetime.date(2021, 9, 30), + datetime.date(2021, 10, 31), + datetime.date(2021, 11, 30), + datetime.date(2021, 12, 31), + datetime.date(2022, 1, 31), + datetime.date(2022, 2, 28), + datetime.date(2022, 3, 31), + datetime.date(2022, 4, 30), + datetime.date(2022, 5, 31), + datetime.date(2022, 6, 30), + datetime.date(2022, 7, 31), + datetime.date(2022, 8, 31), + datetime.date(2022, 9, 30), + datetime.date(2022, 10, 31), + datetime.date(2022, 11, 30), + datetime.date(2022, 12, 31), + datetime.date(2023, 1, 31), + datetime.date(2023, 2, 28), + datetime.date(2023, 3, 31), + datetime.date(2023, 4, 30), + datetime.date(2023, 5, 31), + datetime.date(2023, 6, 30), + datetime.date(2023, 7, 31), + datetime.date(2023, 8, 31), + datetime.date(2023, 9, 30), + datetime.date(2023, 10, 31), + datetime.date(2023, 11, 30), + datetime.date(2023, 12, 31), + datetime.date(2024, 1, 31), + datetime.date(2024, 2, 29), + datetime.date(2024, 3, 31), + datetime.date(2024, 4, 30), + datetime.date(2024, 5, 31), + datetime.date(2024, 6, 30), + datetime.date(2024, 7, 31), + datetime.date(2024, 8, 31), + datetime.date(2024, 9, 30), + datetime.date(2024, 10, 31), + datetime.date(2024, 11, 30), + datetime.date(2024, 12, 31), + datetime.date(2025, 1, 31), + datetime.date(2025, 2, 28), + datetime.date(2025, 3, 31), + datetime.date(2025, 4, 30), + datetime.date(2025, 5, 31), + datetime.date(2025, 6, 30), + datetime.date(2025, 7, 31), + datetime.date(2025, 8, 31), + datetime.date(2025, 9, 30), + datetime.date(2025, 10, 31), + datetime.date(2025, 11, 30), + datetime.date(2025, 12, 31), + datetime.date(2026, 1, 31), + datetime.date(2026, 2, 28), + datetime.date(2026, 3, 31), + datetime.date(2026, 4, 30), + datetime.date(2026, 5, 31), + datetime.date(2026, 6, 30), + datetime.date(2026, 7, 31), + datetime.date(2026, 8, 31), + datetime.date(2026, 9, 30), + datetime.date(2026, 10, 31), + datetime.date(2026, 11, 30), + datetime.date(2026, 12, 31), + datetime.date(2027, 1, 31), + datetime.date(2027, 2, 28), + datetime.date(2027, 3, 31), + datetime.date(2027, 4, 30), + datetime.date(2027, 5, 31), + datetime.date(2027, 6, 30), + datetime.date(2027, 7, 31), + datetime.date(2027, 8, 31), + datetime.date(2027, 9, 30), + datetime.date(2027, 10, 31), + datetime.date(2027, 11, 30), + datetime.date(2027, 12, 31), + datetime.date(2028, 1, 31), + datetime.date(2028, 2, 29), + datetime.date(2028, 3, 31), + datetime.date(2028, 4, 30), + datetime.date(2028, 5, 31), + datetime.date(2028, 6, 30), + datetime.date(2028, 7, 31), + datetime.date(2028, 8, 31), + datetime.date(2028, 9, 30), + datetime.date(2028, 10, 31), + datetime.date(2028, 11, 30), + datetime.date(2028, 12, 31), + datetime.date(2029, 1, 31), + datetime.date(2029, 2, 28), + datetime.date(2029, 3, 31), + datetime.date(2029, 4, 30), + datetime.date(2029, 5, 31), + datetime.date(2029, 6, 30), + datetime.date(2029, 7, 31), + datetime.date(2029, 8, 31), + datetime.date(2029, 9, 30), + datetime.date(2029, 10, 31), + datetime.date(2029, 11, 30), + datetime.date(2029, 12, 31), + datetime.date(2030, 1, 31), + datetime.date(2030, 2, 28), + datetime.date(2030, 3, 31), + datetime.date(2030, 4, 30), + datetime.date(2030, 5, 31), + datetime.date(2030, 6, 30), + datetime.date(2030, 7, 31), + datetime.date(2030, 8, 31), + datetime.date(2030, 9, 30), + datetime.date(2030, 10, 31), + datetime.date(2030, 11, 30), + datetime.date(2030, 12, 31), + datetime.date(2031, 1, 31), + datetime.date(2031, 2, 28), + datetime.date(2031, 3, 31), + datetime.date(2031, 4, 30), + datetime.date(2031, 5, 31), + datetime.date(2031, 6, 30), + datetime.date(2031, 7, 31), + datetime.date(2031, 8, 31), + datetime.date(2031, 9, 30), + datetime.date(2031, 10, 31), + datetime.date(2031, 11, 30), + datetime.date(2031, 12, 31), + datetime.date(2032, 1, 31), + datetime.date(2032, 2, 29), + datetime.date(2032, 3, 31), + datetime.date(2032, 4, 30), + datetime.date(2032, 5, 31), + datetime.date(2032, 6, 30), + datetime.date(2032, 7, 31), + datetime.date(2032, 8, 31), + datetime.date(2032, 9, 30), + datetime.date(2032, 10, 31), + datetime.date(2032, 11, 30), + datetime.date(2032, 12, 31), + datetime.date(2033, 1, 31), + datetime.date(2033, 2, 28), + datetime.date(2033, 3, 31), + datetime.date(2033, 4, 30), + datetime.date(2033, 5, 31), + datetime.date(2033, 6, 30), + datetime.date(2033, 7, 31), + datetime.date(2033, 8, 31), + datetime.date(2033, 9, 30), + datetime.date(2033, 10, 31), + datetime.date(2033, 11, 30), + datetime.date(2033, 12, 31), + datetime.date(2034, 1, 31), + datetime.date(2034, 2, 28), + datetime.date(2034, 3, 31), + datetime.date(2034, 4, 30), + datetime.date(2034, 5, 31), + datetime.date(2034, 6, 30), + datetime.date(2034, 7, 31), + datetime.date(2034, 8, 31), + datetime.date(2034, 9, 30), + datetime.date(2034, 10, 31), + datetime.date(2034, 11, 30), + datetime.date(2034, 12, 31), + datetime.date(2035, 1, 31), + datetime.date(2035, 2, 28), + datetime.date(2035, 3, 31), + datetime.date(2035, 4, 30), + datetime.date(2035, 5, 31), + datetime.date(2035, 6, 30), + datetime.date(2035, 7, 31), + datetime.date(2035, 8, 31), + datetime.date(2035, 9, 30), + datetime.date(2035, 10, 31), + datetime.date(2035, 11, 30), + datetime.date(2035, 12, 31), + datetime.date(2036, 1, 31), + datetime.date(2036, 2, 29), + datetime.date(2036, 3, 31), + datetime.date(2036, 4, 30), + datetime.date(2036, 5, 31), + datetime.date(2036, 6, 30), + datetime.date(2036, 7, 31), + datetime.date(2036, 8, 31), + datetime.date(2036, 9, 30), + datetime.date(2036, 10, 31), + datetime.date(2036, 11, 30), + datetime.date(2036, 12, 31)] + +# bill_prior_projection, rough method +prior_proj_rough_usage = [ + 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, + 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, + 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, + 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, + 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, + 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, + 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, + 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, + 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, + 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, + 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, + 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, + 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, + 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, + 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, + 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, + 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, + 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, + 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, + 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, + 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, + 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, + 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, + 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, + 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, + 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, + 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, + 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, + 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, + 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, + 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, + 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, + 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, + 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, + 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, + 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, + 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, + 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, + 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, + 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, + 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, + 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, + 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, + 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, + 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, + 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, + 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, + 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, + 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, + 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, + 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, + 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, 0.08140707737519977, 0.09625984599931844, + 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, 0.12362302566814179, 0.10416990876794137, + 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, 0.09471033983184167, 0.09265654464615623, + 0.08140707737519977, 0.09625984599931844, 0.09590469850619349, 0.09970580811571926, 0.10713597790787066, + 0.12362302566814179, 0.10416990876794137, 0.09003319608372662, 0.09946065011272796, 0.09306875693630776, + 0.09471033983184167] + +prior_proj_rough_charge = [ + 2478.935225530005, 2070.7845891083575, 2450.302319578984, 2490.405910579382, 2560.709606247176, 2775.3375374824864, + 3230.919218524259, 2668.576149486861, 2473.3809117746505, 3061.2176130778334, 3054.176689693635, 2905.8448251341947, + 2529.6071593906345, 2112.037861951869, 2497.844040139815, 2537.433433976163, 2607.7366001516157, 2824.867445203325, + 3286.9056342352073, 2713.4361621702437, 2513.6793964056583, 3109.509988763633, 3100.7787792309073, 2948.68184658793, + 2567.2084506550073, 2143.6915993745547, 2535.5867861333036, 2576.086098445084, 2647.780584082327, 2868.592767679503, + 3338.1866499785847, 2756.1036321003626, 2553.5147743010834, 3159.170028227532, 3150.68062406665, 2996.498535205473, + 2605.569782183977, 2172.9978810955495, 2567.0297283003824, 2604.7629982363537, 2673.9005752806534, + 2893.260794922461, 3362.6736487267954, 2772.841654950408, 2565.803083421394, 3170.394966377712, 3157.9130867351737, + 2999.6133802204467, 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, 2619.5021069201466, + 2692.12749960377, 2916.3375062308105, 3393.397636983181, 2801.3987693259933, 2595.2130601030153, 3210.4277200196416, + 3201.470698260759, 3044.4894387870354, 2652.3046521007327, 2216.1558414915903, 2622.963144781242, + 2666.5504215028436, 2742.5031616169344, 2973.1016670783597, 3462.0010469100807, 2860.1436097853034, + 2651.5901010585067, 3282.5906803609805, 3275.8486727843465, 3117.5199157010734, 2716.3069746205647, + 2269.9506512268254, 2687.008152470712, 2732.0413793196417, 2810.252136413284, 3046.972868949981, 3548.515434878526, + 2932.0273739472377, 2718.612107833957, 3366.0322054626145, 3359.588168593551, 3197.6588293435134, + 2785.6450772175563, 2327.487689459405, 2754.6346432571067, 2800.3114608294013, 2879.9728638074685, + 3122.020427015556, 3635.2802397964056, 3003.193130462135, 2784.1109092902598, 3446.526294872645, 3439.326583934687, + 3272.9814415734086, 2851.2034299169936, 2382.2142686201987, 2819.3464057633128, 2866.03690501216, + 2947.5069783454283, 3195.1642794091595, 3720.371883752405, 3073.425748987782, 2849.161068357882, 3526.9806039888495, + 3519.539935517915, 3349.2458615663227, 2916.7606209466376, 2436.2536414985507, 2882.432965236254, 2929.285157781319, + 3011.6452322909918, 3263.707715152927, 3799.036935280254, 3137.4656830311155, 2907.651529098385, 3598.3012794225483, + 3589.628014031503, 3414.91323986238, 2973.6516021501784, 2483.5245044015373, 2938.0678152841974, 2985.5263081727785, + 3069.161305922148, 3325.70568430886, 3870.8177344293563, 3196.4273802463927, 2961.9987180738085, 3665.1916146989574, + 3655.992183279776, 3477.7001866385076, 3028.2617408356846, 2529.080397839326, 2991.898546197262, 3040.1625881658183, + 3125.2623711445626, 3386.4248497428516, 3941.4063563325494, 3254.6492615592297, 3015.887092097704, + 3731.794819562704, 3722.349885328994, 3540.7473077454047, 3083.246616736726, 2575.0730187485397, 3046.392339334037, + 3095.6214064637734, 3182.361947320719, 3448.391700204128, 4013.6400385606603, 3314.3888574922153, 3071.329450925986, + 3800.5035466543104, 3790.989977259143, 3606.1387796738736, 3140.2467634254913, 2622.7269076398297, + 3102.8256182312825, 3153.024791460582, 3241.4335846539893, 3512.4662206481257, 4088.292837496078, + 3376.0980127832227, 3128.5708945229685, 3871.406269721318, 3861.786442662563, 3673.550919142326, 3199.4153483757746, + 2672.533381860802, 3162.2096135517777, 3213.837331264348, 3304.432254284792, 3581.2538059697977, 4168.964144991406, + 3443.21728449315, 3191.2336562843607, 3949.522310275536, 3940.28191527154, 3748.7659387893177, 3265.0699449394842, + 2727.4990499357323, 3227.3920742084542, 3280.232057752556, 3372.850830126079, 3655.5690064077544, 4255.667118146109, + 3514.985384538945, 3257.896637642683, 4032.2075024060464, 4022.955247368871, 3827.5937372576786, 3333.646311473527, + 2784.7176085390597, 3295.0180852049857, 3348.8844635353275, 3443.3585850979007, 3731.896800008966, + 4344.420058347161, 3588.204656660635, 3325.680353751353, 4116.002200306799, 4106.458590497996, 3906.9477501580154, + 3402.621893471325, 2842.220291490784, 3362.9218944682534, 3417.7598699532095, 3514.034626404497, 3808.3408727149413, + 4433.231413061794, 3661.408627997248, 3393.3909979938117, 4199.6335852194925, 4189.726301335686, 3986.0084216853097, + 3471.383079971376, 2899.578210259841, 3430.69503504048, 3486.5437639251672, 3584.6590357603636, 3884.7750124423674, + 4522.084790338106, 3734.6915706300438, 3461.215865395534, 4283.457123336439, 4273.236393659665, 4065.347916017132, + 3540.3811045044044, 2957.1289591138325, 3498.6904203951735, 3555.5475236602697, 3655.5033378005137, + 3961.4407845059186, 4611.200042213721, 3808.1843884447135, 3529.2293122878577, 4367.506710512254, 4356.964690480223, + 4144.888055731812, 3609.6488448203777, 3014.984325118045, 3567.1400767105674, 3625.1083317659313, + 3727.0184279367545, 4038.9397755772593, 4701.40890702796, 3882.6825571624163, 3598.2691689018143, 4452.943704173861, + 4442.193964950228, 4225.96734453868, 3680.2935413377854, 3074.0203415528013, 3637.0227356469168, 3696.1621483670674, + 3800.106249740351, 4118.184034399836, 4793.696921227584, 3958.9371311363716, 3668.973219498924, 4540.485283824873, + 4529.567742652207, 4309.129559485922, 3752.76508539914, 3134.5930163998732, 3708.7362173733054, 3769.089493154057, + 3875.1335876505595, 4199.544565916431, 4888.465124225117, 4037.2538605468994, 3741.601232367881, 4630.423732761778, + 4619.3484866440385, 4394.596691592045, 3827.240038837637, 3196.8358225397374, 3782.4218724957127, + 3844.0171781461104, 3952.2135094543064, 4283.125142602108, 4985.812474039719, 4117.696437295969, 3816.1955214498357, + 4722.790733124987, 4711.547169788192, 4482.359550790108, 3903.7131777047516, 3260.7467180680555, 3858.0800316613463, + 3920.9483304189985, 4031.352099575602, 4368.935467599963, 5085.753884753521, 4200.28016729184, 3892.773041476683, + 4817.610694655487, 4806.191562386124, 4572.447808596384] + +prior_proj_rough_price = [ + 26754.021909588242, 25437.4024455423, 25455.08248160228, 25967.506799664803, 25682.652341327983, 25904.813599303492, + 26135.25434329247, 25617.53371054237, 27471.877255968157, 30778.17820020553, 32816.34772218761, 30681.38949024495, + 27300.9010755893, 25944.15534926562, 25948.971912520003, 26457.863623983936, 26154.30985850953, 26367.122421120857, + 26588.134503831818, 26048.176428904702, 27919.473102654883, 31263.720730151446, 33317.07526031476, + 31133.684577875218, 27706.714732983575, 26332.98809505743, 26341.064228912815, 26860.895645052486, + 26555.931235312735, 26775.251635321696, 27002.952176075483, 26457.77139192967, 28361.92521618843, + 31763.014062817325, 33853.25782553258, 31638.557527359317, 28120.731159728897, 26692.984825881267, + 26667.710732869426, 27159.910190095005, 26817.901843564676, 27005.501339712977, 27201.03015237372, + 26618.45141025754, 28498.41164180508, 31875.872144254135, 33930.96878790713, 31671.44564728903, 28182.379083772827, + 26782.30890698635, 26787.762657851385, 27313.595138938686, 27000.708890291207, 27220.897808378188, + 27449.559810099963, 26892.591175889873, 28825.068674554102, 32278.370555400215, 34398.98418812779, + 32145.269927153997, 28625.11938287309, 27223.13480531277, 27248.777696982954, 27804.16875332379, 27505.951894336646, + 27750.73066150585, 28004.500198883692, 27456.52409235403, 29451.2492769073, 33003.91337318343, 35198.15650945243, + 32916.36289381111, 29315.867378756695, 27883.947249018347, 27914.11231314184, 28487.04413729227, 28185.44064305347, + 28440.239483044264, 28704.32442257393, 28146.586750679566, 30195.663667274195, 33842.853446539695, + 36097.91598369266, 33762.51035547925, 30064.202025400224, 28590.729018954582, 28616.653337224438, 29198.89749352122, + 28884.705096266327, 29140.72833404547, 29406.174296001183, 28829.756750121847, 30923.159794318177, + 34652.15933101561, 36954.68487119059, 34557.80485409081, 30771.743548233786, 29262.987266337208, 29288.91456758901, + 29884.21787100527, 29562.03890273404, 29823.44812455788, 30094.489789786483, 29503.968903672867, 31645.672843917448, + 35461.06525536879, 37816.55682719107, 35363.04343868804, 31479.272533692918, 29926.803910058345, 29944.292298750017, + 30543.708529485102, 30205.313905040068, 30463.227935992556, 30730.81988365605, 30118.733136461007, + 32295.327230129722, 36178.13954910068, 38569.635312611834, 36056.39306041519, 32093.271052856355, 30507.47655458922, + 30522.25759123903, 31130.136006631357, 30782.171710198247, 31041.91280326699, 31311.46251686415, 30684.747812989386, + 32898.96223743173, 36850.670195146085, 39282.70134500431, 36719.329619270386, 32682.653474724724, 31067.08260981983, + 31081.48070607183, 31699.82947154029, 31344.83768004128, 31608.661402754326, 31882.461499632, 31243.66047789857, + 33497.501180487605, 37520.31396671061, 39995.6978889963, 37385.01323120586, 33276.08026514759, 31632.053400961693, + 31647.592074431603, 32278.09955800924, 31917.518221478607, 32187.055810229314, 32466.767552955902, + 31817.14274969423, 34113.30025505031, 38211.12713768559, 40733.21812875972, 38075.44969299633, 33891.256957808015, + 32217.431115379033, 32233.851883092062, 32876.6456760923, 32509.977562109107, 32785.12306732849, 33070.642102474034, + 32409.53220285653, 34749.0817899383, 38923.999243253435, 41493.908050210695, 38787.221391716266, 34529.836619679074, + 32829.2510679787, 32850.76535001071, 33510.739112086354, 33141.8230967011, 33427.18175447488, 33723.201017444175, + 33053.85715719098, 35445.077983421404, 39709.39568361132, 42337.32183581327, 39581.37987304508, 35238.41685882393, + 33504.446270253284, 33527.91645055515, 34203.038108093526, 33828.02761311081, 34120.83482871911, 34424.55072706422, + 33742.80947456002, 36185.50467333174, 40540.731413237016, 43225.62565353707, 40413.683913008615, 35978.53043413507, + 34207.31585417915, 34230.45249031788, 34918.877966328815, 34535.18556412997, 34833.27331195999, 35142.48284142052, + 34445.69261027247, 36938.379380185805, 41383.222366249895, 44122.84772760293, 41251.54399292418, 36722.95256061526, + 34913.675605760676, 34935.874450620504, 35637.04305615946, 35244.031343952236, 35546.797136530964, + 35860.887477083146, 35148.428863019784, 37690.44247677399, 42224.07133333292, 45017.53799293735, 42086.306825236534, + 37465.060813870776, 35618.25708219298, 35639.93895299573, 36354.25394408604, 35952.359280815246, 36260.22824734935, + 36579.632037783624, 35851.92321661519, 38443.77425163011, 43066.85225243954, 45914.83258537646, 42924.01361071201, + 38209.72515243988, 36325.20727263826, 36346.31225589064, 37073.757376242145, 36662.89263267302, 36975.821398787964, + 37300.49493038777, 36557.43230924951, 39199.20058159261, 43911.90592020215, 46814.47172934674, 43763.83891232008, + 38957.30041094426, 37035.899363174336, 37057.40477432121, 37799.06916168266, 37380.15365776035, 37699.191760311005, + 38030.204176110325, 37272.59247017143, 39966.02725905225, 44770.90888835864, 47730.23849443132, 44619.915333868405, + 39719.73653229102, 37761.09449777748, 37783.384108807615, 38539.94857330552, 38113.188404530265, 38438.852333444716, + 38776.73188565989, 38004.61359676978, 40751.33816294772, 45651.07184277119, 48669.04739849537, 45497.984350354855, + 40501.88898939067, 38505.165858648186, 38528.383033145146, 39300.363296701784, 38865.67553971432, 39198.26605333029, + 39543.322110137415, 38756.430799422735, 41558.01854338669, 46555.333466186785, 49633.71853999642, 46400.38985600366, + 41305.66333391115, 39269.75301920907, 39293.86997484386, 40081.6356030551, 39638.74907735906, 39978.401525258785, + 40330.775331642646, 39528.65550135918, 42386.53838192031, 47484.01229805165, 50624.369819536456, 47327.03481740793, + 42131.00318614885, 40054.83089682108, 40079.848368848034, 40883.798098440246, 40432.470041231565, 40779.34931771414, + 41139.21219179594, 40321.43463472525, 43237.085994998866, 48437.35375945405, 51641.29962190506, 48278.23252154697] + + inflation_coeff_dict = { datetime.date(1981, 1, 31): 0.3381208260704529, datetime.date(1981, 2, 28): 0.3410451203881943, @@ -1135,5 +1921,8 @@ inflation_coeff_dict = { datetime.date(2070, 12, 31): 2.9304467575976516} -# pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) -# pp.pprint(inflation_coeff_dict) + + + + + diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index ebf3f27..7d1adbc 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -2,7 +2,7 @@ import datetime import bpfin.utilbills.bill_lib as bl import bpfin.lib.other as lib import pprint - +from bpfin.tests.testdata import sample_data as db def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict): """ project energy bill, on a monthly_normalized base, @@ -39,11 +39,6 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co prior_monthly_charge = lib.product2list(prior_monthly_usage, prior_monthly_price) - # pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) - # pp.pprint(prior_monthly_price) - # print(prior_monthly_price) - - # write to a txt file return { 'date_from': prior_bill_start, 'date_to': prior_bill_end, @@ -51,171 +46,3 @@ def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_co 'charge': prior_monthly_charge, 'price': prior_monthly_price } - -month_norm_bill = { - 'monthly_usage': [ - 0.092656544646156233, 0.081407077375199768, 0.096259845999318444, - 0.095904698506193486, 0.09970580811571926, 0.10713597790787066, - 0.12362302566814179, 0.10416990876794137, 0.090033196083726619, - 0.099460650112727964, 0.093068756936307756, 0.094710339831841669 - ], - 'monthly_charge': [ - 2611.2818658104966, 2180.2694934775395, 2578.5859081110675, - 2619.5021069201466, 2673.9005752806534, 2893.2607949224612, - 3362.6736487267954, 2772.8416549504082, 2565.8030834213941, - 3170.3949663777121, 3157.9130867351737, 2999.6133802204467 - ], - 'monthly_price': [ - 28182.379083772827, 26782.308906986349, 26787.762657851385, - 27313.595138938686, 26817.901843564676, 27005.501339712977, - 27201.030152373722, 26618.451410257541, 28498.41164180508, - 31875.872144254135, 33930.968787907128, 31671.445647289031 - ] -} - -raw_bill = {} -# raw_bill['utility_type'] = 'electricity' -# raw_bill['date_from'] = [ -# datetime.date(2014, 4, 17), datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), -# datetime.date(2014, 7, 17), datetime.date(2014, 8, 15), datetime.date(2014, 9, 16), -# datetime.date(2014, 10, 16), datetime.date(2014, 11, 14), datetime.date(2014, 12, 17), -# datetime.date(2015, 1, 16), datetime.date(2015, 2, 18), datetime.date(2015, 3, 19), -# datetime.date(2015, 4, 17), datetime.date(2015, 5, 18), datetime.date(2015, 6, 17), -# datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date(2015, 9, 16), -# datetime.date(2015, 10, 16), datetime.date(2015, 11, 16), datetime.date(2015, 12, 17), -# datetime.date(2016, 1, 19), datetime.date(2016, 2, 18), datetime.date(2016, 3, 18)] -raw_bill['date_to'] = [ - datetime.date(2014, 5, 16), datetime.date(2014, 6, 17), datetime.date( - 2014, 7, 17), datetime.date(2014, 8, 15), - datetime.date(2014, 9, 16), datetime.date(2014, 10, 16), datetime.date( - 2014, 11, 14), datetime.date(2014, 12, 17), datetime.date( - 2015, 1, 16), datetime.date(2015, 2, 18), datetime.date( - 2015, 3, 19), datetime.date(2015, 4, 17), datetime.date( - 2015, 5, 18), datetime.date(2015, 6, 17), - datetime.date(2015, 7, 17), datetime.date(2015, 8, 17), datetime.date( - 2015, 9, 16), datetime.date(2015, 10, 16), datetime.date( - 2015, 11, 16), datetime.date(2015, 12, 17), datetime.date( - 2016, 1, 19), datetime.date(2016, 2, 18), datetime.date( - 2016, 3, 18), datetime.date(2016, 4, 18) -] -# raw_bill['charge'] = [ -# 2601.6289696969693, 2642.1740261508003, 3437.551946607342, 2930.5070588449826, -# 2514.1242835094554, 2804.4448749999997, 3237.7359972191325, 3289.4155027808674, -# 2796.5700000000002, 2463.5113047830923, 2370.0007392051775, 2479.081440860215] -# raw_bill['usage'] = [ -# 0.094265231101663627, 0.10175446346513953, 0.12248981352003527, 0.11229655777596657, -# 0.092170964664193167, 0.094173672324921492, 0.095187070309577237, 0.097177529967719486, -# 0.095676831493476874, 0.091583582602530869, 0.089122740090923164, 0.091516956021057888] - -analysis_date = { - 'proforma_start': datetime.date(2012, 1, 15), - 'proforma_duration': 25 -} - -# inflationyears = [ -# 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, -# 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, -# 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, -# 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, -# 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, -# 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, -# 2065, 2066, 2067, 2068, 2069, 2070 -# ] - -# inflationhist = [ -# 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, -# 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, -# 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, -# 0.042164, 0.030411000000000001, 0.029699, 0.025956, -# 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, -# 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, -# 0.015956999999999999, 0.022977999999999998, 0.026674, -# 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, -# 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, -# 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, -# 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, -# 0.023304999999999999, 0.023056, 0.019432600000000001, -# 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, -# 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, -# 0.020537658658559999, 0.020050624524416, 0.0197251869768576, -# 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, -# 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, -# 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, -# 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, -# 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, -# 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, -# 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, -# 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, -# 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, -# 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, -# 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, -# 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, -# 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, -# 0.019732496782414701 -# ] - -# inflation_coeff_dict = bl.form_inflation_coeffdict( -# inflationyears, inflationhist, datetime.date(1984, 3, 31)) - -# bill_prior_proj_rough (month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict) - - -inflationyears = [ - 1981, 1982, 1983, 1984, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, - 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, - 2017, - 2018, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, - 2029, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, - 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, - 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, - 2065, 2066, 2067, 2068, 2069, 2070 -] -inflationhist = [ - 0.103784, 0.061584, 0.031594999999999998, 0.043681999999999999, - 0.035282000000000001, 0.019442000000000001, 0.035782000000000001, - 0.040996999999999999, 0.047913999999999998, 0.054186999999999999, - 0.042164, 0.030411000000000001, 0.029699, 0.025956, - 0.028052000000000001, 0.029367000000000001, 0.023377999999999999, - 0.015468000000000001, 0.021930999999999999, 0.033671, 0.028166, - 0.015956999999999999, 0.022977999999999998, 0.026674, - 0.033661999999999997, 0.032217000000000003, 0.028705999999999999, - 0.038149000000000002, -0.0032009999999999999, 0.016362999999999999, - 0.031428999999999999, 0.020761999999999999, 0.014643, 0.016097, - 0.001039, 0.014859000000000001, 0.023727999999999999, 0.025408, - 0.023304999999999999, 0.023056, 0.019432600000000001, - 0.018232959999999999, 0.017980056000000001, 0.018313761599999999, - 0.018535437759999999, 0.020285081536000001, 0.020827689689599999, - 0.020537658658559999, 0.020050624524416, - 0.0197251869768576, - 0.0193921056745434, 0.0193880562419977, 0.0195035658661975, - 0.019655916852817201, 0.019790132378098901, 0.0199156018399088, - 0.0198786538702997, 0.019783750288369699, 0.019708359451350601, - 0.0196741329440441, 0.019669027540762801, 0.019696719727384699, - 0.019727586075923401, 0.019749988096896001, 0.019759395221303901, - 0.0197563215056244, 0.019740393472195899, 0.019726567432385499, - 0.019720849146787098, 0.0197220981163308, 0.019726894633559401, - 0.019732681342839099, 0.0197362775043846, 0.0197371466472307, - 0.019735862502264102, 0.019733509230360199, 0.019731228002833799, - 0.019730311455897501, 0.019730685858248699, 0.0197316695293949, - 0.0197326266707013, 0.019733199874415502, 0.019733251727573099, - 0.019732949149892001, 0.0197325294001581, 0.019732196089947501, - 0.019732064775906201, 0.019732148453213499, 0.019732332152945099, - 0.019732496782414701 -] - -inflation_coeff_dict = bl.form_inflation_coeffdict(inflationyears, - inflationhist, - datetime.date( - 2017, 1, 31)) - -# pp = pprint.PrettyPrinter(width=120, indent=4, compact=True) -# pp.pprint(inflation_coeff_dict) - -print(len(inflationyears), len(inflationhist)) - -writein = str(inflation_coeff_dict) -f = open('inflation_sample_data.py', 'w') -f.write(writein) -f.close() -- GitLab From 5ab7805a94488dc9efb467b5fde561835520932e Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Wed, 19 Apr 2017 18:05:12 -0400 Subject: [PATCH 12/14] created data_generation work file to store output from functions. created inflation_sample_data, for future use --- bpfin/utilbills/data_generation.py | 0 bpfin/utilbills/inflation_sample_data.py | 1084 ++++++++++++++++++++++ 2 files changed, 1084 insertions(+) create mode 100644 bpfin/utilbills/data_generation.py create mode 100644 bpfin/utilbills/inflation_sample_data.py diff --git a/bpfin/utilbills/data_generation.py b/bpfin/utilbills/data_generation.py new file mode 100644 index 0000000..e69de29 diff --git a/bpfin/utilbills/inflation_sample_data.py b/bpfin/utilbills/inflation_sample_data.py new file mode 100644 index 0000000..c30b12a --- /dev/null +++ b/bpfin/utilbills/inflation_sample_data.py @@ -0,0 +1,1084 @@ +import datetime + + +inflation_coeff_dict = { + datetime.date(1981, 1, 31): 0.3381208260704529, + datetime.date(1981, 2, 28): 0.3410451203881943, + datetime.date(1981, 3, 31): 0.34399470595272497, + datetime.date(1981, 4, 30): 0.3469698014996081, + datetime.date(1981, 5, 31): 0.3499706276561777, + datetime.date(1981, 6, 30): 0.3529974069579001, + datetime.date(1981, 7, 31): 0.3560503638648767, + datetime.date(1981, 8, 31): 0.3591297247784895, + datetime.date(1981, 9, 30): 0.36223571805819044, + datetime.date(1981, 10, 31): 0.36536857403843637, + datetime.date(1981, 11, 30): 0.3685285250457702, + datetime.date(1981, 12, 31): 0.3717158054160494, + datetime.date(1982, 1, 31): 0.3736234509294446, + datetime.date(1982, 2, 28): 0.3755408864796145, + datetime.date(1982, 3, 31): 0.3774681623090278, + datetime.date(1982, 4, 30): 0.3794053289179977, + datetime.date(1982, 5, 31): 0.3813524370660048, + datetime.date(1982, 6, 30): 0.38330953777302756, + datetime.date(1982, 7, 31): 0.3852766823208787, + datetime.date(1982, 8, 31): 0.38725392225454935, + datetime.date(1982, 9, 30): 0.38924130938355966, + datetime.date(1982, 10, 31): 0.39123889578331605, + datetime.date(1982, 11, 30): 0.393246733796476, + datetime.date(1982, 12, 31): 0.3952648760343195, + datetime.date(1983, 1, 31): 0.39630557551417817, + datetime.date(1983, 2, 28): 0.3973490150690424, + datetime.date(1983, 3, 31): 0.3983952019133013, + datetime.date(1983, 4, 30): 0.39944414328033895, + datetime.date(1983, 5, 31): 0.4004958464225842, + datetime.date(1983, 6, 30): 0.401550318611561, + datetime.date(1983, 7, 31): 0.4026075671379387, + datetime.date(1983, 8, 31): 0.4036675993115824, + datetime.date(1983, 9, 30): 0.40473042246160323, + datetime.date(1983, 10, 31): 0.4057960439364095, + datetime.date(1983, 11, 30): 0.4068644711037571, + datetime.date(1983, 12, 31): 0.4079357113508007, + datetime.date(1984, 1, 31): 0.40942066532940286, + datetime.date(1984, 2, 29): 0.41091102478797936, + datetime.date(1984, 3, 31): 0.41240680940337837, + datetime.date(1984, 4, 30): 0.41390803892407485, + datetime.date(1984, 5, 31): 0.41541473317043154, + datetime.date(1984, 6, 30): 0.41692691203496074, + datetime.date(1984, 7, 31): 0.41844459548258667, + datetime.date(1984, 8, 31): 0.4199678035509092, + datetime.date(1984, 9, 30): 0.4214965563504684, + datetime.date(1984, 10, 31): 0.4230308740650101, + datetime.date(1984, 11, 30): 0.4245707769517523, + datetime.date(1984, 12, 31): 0.4261162853416528, + datetime.date(1985, 1, 31): 0.4273691382399381, + datetime.date(1985, 2, 28): 0.4286256747345532, + datetime.date(1985, 3, 31): 0.4298859056558852, + datetime.date(1985, 4, 30): 0.4311498418661644, + datetime.date(1985, 5, 31): 0.4324174942595579, + datetime.date(1985, 6, 30): 0.43368887376226334, + datetime.date(1985, 7, 31): 0.4349639913326034, + datetime.date(1985, 8, 31): 0.4362428579611198, + datetime.date(1985, 9, 30): 0.4375254846706685, + datetime.date(1985, 10, 31): 0.4388118825165143, + datetime.date(1985, 11, 30): 0.44010206258642665, + datetime.date(1985, 12, 31): 0.4413960360007745, + datetime.date(1986, 1, 31): 0.4421111711451018, + datetime.date(1986, 2, 28): 0.44282746492755204, + datetime.date(1986, 3, 31): 0.4435449192253122, + datetime.date(1986, 4, 30): 0.44426353591861034, + datetime.date(1986, 5, 31): 0.4449833168907211, + datetime.date(1986, 6, 30): 0.4457042640279702, + datetime.date(1986, 7, 31): 0.44642637921973954, + datetime.date(1986, 8, 31): 0.44714966435847203, + datetime.date(1986, 9, 30): 0.44787412133967686, + datetime.date(1986, 10, 31): 0.448599752061934, + datetime.date(1986, 11, 30): 0.44932655842689967, + datetime.date(1986, 12, 31): 0.4500545423393109, + datetime.date(1987, 1, 31): 0.45139652997547636, + datetime.date(1987, 2, 28): 0.4527425191951082, + datetime.date(1987, 3, 31): 0.45409252193026156, + datetime.date(1987, 4, 30): 0.4554465501485706, + datetime.date(1987, 5, 31): 0.45680461585335536, + datetime.date(1987, 6, 30): 0.4581667310837274, + datetime.date(1987, 7, 31): 0.4595329079146972, + datetime.date(1987, 8, 31): 0.46090315845728086, + datetime.date(1987, 9, 30): 0.4622774948586074, + datetime.date(1987, 10, 31): 0.46365592930202665, + datetime.date(1987, 11, 30): 0.4650384740072171, + datetime.date(1987, 12, 31): 0.46642514123029427, + datetime.date(1988, 1, 31): 0.4680186438565458, + datetime.date(1988, 2, 29): 0.469617590551728, + datetime.date(1988, 3, 31): 0.47122199991504876, + datetime.date(1988, 4, 30): 0.4728318906092585, + datetime.date(1988, 5, 31): 0.47444728136086745, + datetime.date(1988, 6, 30): 0.47606819096036335, + datetime.date(1988, 7, 31): 0.4776946382624302, + datetime.date(1988, 8, 31): 0.47932664218616716, + datetime.date(1988, 9, 30): 0.4809642217153094, + datetime.date(1988, 10, 31): 0.48260739589844787, + datetime.date(1988, 11, 30): 0.4842561838492519, + datetime.date(1988, 12, 31): 0.48591060474669084, + datetime.date(1989, 1, 31): 0.48785076480634354, + datetime.date(1989, 2, 28): 0.48979867160175444, + datetime.date(1989, 3, 31): 0.49175435606434825, + datetime.date(1989, 4, 30): 0.49371784924905376, + datetime.date(1989, 5, 31): 0.495689182334797, + datetime.date(1989, 6, 30): 0.497668386624996, + datetime.date(1989, 7, 31): 0.49965549354805844, + datetime.date(1989, 8, 31): 0.5016505346578802, + datetime.date(1989, 9, 30): 0.5036535416343466, + datetime.date(1989, 10, 31): 0.5056645462838355, + datetime.date(1989, 11, 30): 0.5076835805397224, + datetime.date(1989, 12, 31): 0.5097106764628874, + datetime.date(1990, 1, 31): 0.5120123174983452, + datetime.date(1990, 2, 28): 0.5143243517857021, + datetime.date(1990, 3, 31): 0.516646826256553, + datetime.date(1990, 4, 30): 0.5189797880544167, + datetime.date(1990, 5, 31): 0.521323284535692, + datetime.date(1990, 6, 30): 0.52367736327062, + datetime.date(1990, 7, 31): 0.5260420720442486, + datetime.date(1990, 8, 31): 0.5284174588574037, + datetime.date(1990, 9, 30): 0.5308035719276625, + datetime.date(1990, 10, 31): 0.5332004596903328, + datetime.date(1990, 11, 30): 0.535608170799436, + datetime.date(1990, 12, 31): 0.538026754128695, + datetime.date(1991, 1, 31): 0.539917200800452, + datetime.date(1991, 2, 28): 0.5418142898716645, + datetime.date(1991, 3, 31): 0.5437180446815102, + datetime.date(1991, 4, 30): 0.5456284886511727, + datetime.date(1991, 5, 31): 0.5475456452841301, + datetime.date(1991, 6, 30): 0.5494695381664434, + datetime.date(1991, 7, 31): 0.5514001909670476, + datetime.date(1991, 8, 31): 0.553337627438042, + datetime.date(1991, 9, 30): 0.5552818714149835, + datetime.date(1991, 10, 31): 0.5572329468171786, + datetime.date(1991, 11, 30): 0.5591908776479786, + datetime.date(1991, 12, 31): 0.5611556879950743, + datetime.date(1992, 1, 31): 0.5625777967973759, + datetime.date(1992, 2, 29): 0.5640035095789097, + datetime.date(1992, 3, 31): 0.56543283547306, + datetime.date(1992, 4, 30): 0.5668657836363576, + datetime.date(1992, 5, 31): 0.5683023632485381, + datetime.date(1992, 6, 30): 0.5697425835126008, + datetime.date(1992, 7, 31): 0.5711864536548676, + datetime.date(1992, 8, 31): 0.5726339829250425, + datetime.date(1992, 9, 30): 0.5740851805962703, + datetime.date(1992, 10, 31): 0.5755400559651965, + datetime.date(1992, 11, 30): 0.5769986183520263, + datetime.date(1992, 12, 31): 0.5784608771005849, + datetime.date(1993, 1, 31): 0.5798925195663358, + datetime.date(1993, 2, 28): 0.5813277052278858, + datetime.date(1993, 3, 31): 0.5827664428543494, + datetime.date(1993, 4, 30): 0.5842087412365436, + datetime.date(1993, 5, 31): 0.5856546091870424, + datetime.date(1993, 6, 30): 0.5871040555402295, + datetime.date(1993, 7, 31): 0.5885570891523536, + datetime.date(1993, 8, 31): 0.5900137189015816, + datetime.date(1993, 9, 30): 0.5914739536880531, + datetime.date(1993, 10, 31): 0.5929378024339349, + datetime.date(1993, 11, 30): 0.5944052740834753, + datetime.date(1993, 12, 31): 0.5958763776030591, + datetime.date(1994, 1, 31): 0.5971652582078144, + datetime.date(1994, 2, 28): 0.5984569266613179, + datetime.date(1994, 3, 31): 0.5997513889936863, + datetime.date(1994, 4, 30): 0.6010486512480796, + datetime.date(1994, 5, 31): 0.6023487194807291, + datetime.date(1994, 6, 30): 0.6036515997609659, + datetime.date(1994, 7, 31): 0.6049572981712489, + datetime.date(1994, 8, 31): 0.6062658208071933, + datetime.date(1994, 9, 30): 0.6075771737775991, + datetime.date(1994, 10, 31): 0.60889136320448, + datetime.date(1994, 11, 30): 0.6102083952230912, + datetime.date(1994, 12, 31): 0.6115282759819588, + datetime.date(1995, 1, 31): 0.6129578252484459, + datetime.date(1995, 2, 28): 0.6143907163246016, + datetime.date(1995, 3, 31): 0.615826957022463, + datetime.date(1995, 4, 30): 0.6172665551723291, + datetime.date(1995, 5, 31): 0.6187095186228035, + datetime.date(1995, 6, 30): 0.6201558552408374, + datetime.date(1995, 7, 31): 0.621605572911772, + datetime.date(1995, 8, 31): 0.6230586795393821, + datetime.date(1995, 9, 30): 0.6245151830459186, + datetime.date(1995, 10, 31): 0.6259750913721521, + datetime.date(1995, 11, 30): 0.6274384124774164, + datetime.date(1995, 12, 31): 0.628905154339651, + datetime.date(1996, 1, 31): 0.6304442424786086, + datetime.date(1996, 2, 29): 0.6319870971510144, + datetime.date(1996, 3, 31): 0.6335337275745171, + datetime.date(1996, 4, 30): 0.6350841429893238, + datetime.date(1996, 5, 31): 0.6366383526582543, + datetime.date(1996, 6, 30): 0.6381963658667972, + datetime.date(1996, 7, 31): 0.6397581919231646, + datetime.date(1996, 8, 31): 0.6413238401583485, + datetime.date(1996, 9, 30): 0.6428933199261759, + datetime.date(1996, 10, 31): 0.6444666406033652, + datetime.date(1996, 11, 30): 0.6460438115895818, + datetime.date(1996, 12, 31): 0.6476248423074943, + datetime.date(1997, 1, 31): 0.6488865234377831, + datetime.date(1997, 2, 28): 0.6501506625331938, + datetime.date(1997, 3, 31): 0.6514172643822522, + datetime.date(1997, 4, 30): 0.652686333782813, + datetime.date(1997, 5, 31): 0.6539578755420776, + datetime.date(1997, 6, 30): 0.6552318944766129, + datetime.date(1997, 7, 31): 0.6565083954123692, + datetime.date(1997, 8, 31): 0.6577873831846984, + datetime.date(1997, 9, 30): 0.6590688626383728, + datetime.date(1997, 10, 31): 0.6603528386276029, + datetime.date(1997, 11, 30): 0.6616393160160559, + datetime.date(1997, 12, 31): 0.6629282996768745, + datetime.date(1998, 1, 31): 0.6637828142551581, + datetime.date(1998, 2, 28): 0.6646384303027331, + datetime.date(1998, 3, 31): 0.6654951492393933, + datetime.date(1998, 4, 30): 0.666352972486763, + datetime.date(1998, 5, 31): 0.6672119014682985, + datetime.date(1998, 6, 30): 0.6680719376092912, + datetime.date(1998, 7, 31): 0.6689330823368695, + datetime.date(1998, 8, 31): 0.6697953370800018, + datetime.date(1998, 9, 30): 0.6706587032694981, + datetime.date(1998, 10, 31): 0.6715231823380126, + datetime.date(1998, 11, 30): 0.6723887757200463, + datetime.date(1998, 12, 31): 0.6732554848519495, + datetime.date(1999, 1, 31): 0.6744859153551402, + datetime.date(1999, 2, 28): 0.6757185945726114, + datetime.date(1999, 3, 31): 0.6769535266140758, + datetime.date(1999, 4, 30): 0.678190715596757, + datetime.date(1999, 5, 31): 0.679430165645403, + datetime.date(1999, 6, 30): 0.6806718808923006, + datetime.date(1999, 7, 31): 0.6819158654772881, + datetime.date(1999, 8, 31): 0.6831621235477702, + datetime.date(1999, 9, 30): 0.6844106592587308, + datetime.date(1999, 10, 31): 0.6856614767727477, + datetime.date(1999, 11, 30): 0.6869145802600064, + datetime.date(1999, 12, 31): 0.6881699738983132, + datetime.date(2000, 1, 31): 0.6901009214975742, + datetime.date(2000, 2, 29): 0.6920372871748862, + datetime.date(2000, 3, 31): 0.693979086132925, + datetime.date(2000, 4, 30): 0.6959263336170236, + datetime.date(2000, 5, 31): 0.6978790449152918, + datetime.date(2000, 6, 30): 0.6998372353587372, + datetime.date(2000, 7, 31): 0.7018009203213842, + datetime.date(2000, 8, 31): 0.703770115220396, + datetime.date(2000, 9, 30): 0.7057448355161948, + datetime.date(2000, 10, 31): 0.7077250967125838, + datetime.date(2000, 11, 30): 0.709710914356868, + datetime.date(2000, 12, 31): 0.7117023040399773, + datetime.date(2001, 1, 31): 0.7133727879646097, + datetime.date(2001, 2, 28): 0.7150471927934272, + datetime.date(2001, 3, 31): 0.7167255277294455, + datetime.date(2001, 4, 30): 0.718407801997281, + datetime.date(2001, 5, 31): 0.7200940248432023, + datetime.date(2001, 6, 30): 0.72178420553518, + datetime.date(2001, 7, 31): 0.7234783533629385, + datetime.date(2001, 8, 31): 0.7251764776380069, + datetime.date(2001, 9, 30): 0.7268785876937695, + datetime.date(2001, 10, 31): 0.728584692885518, + datetime.date(2001, 11, 30): 0.7302948025905023, + datetime.date(2001, 12, 31): 0.7320089262079826, + datetime.date(2002, 1, 31): 0.7329823150776077, + datetime.date(2002, 2, 28): 0.7339569983110821, + datetime.date(2002, 3, 31): 0.7349329776295863, + datetime.date(2002, 4, 30): 0.7359102547565893, + datetime.date(2002, 5, 31): 0.736888831417852, + datetime.date(2002, 6, 30): 0.7378687093414299, + datetime.date(2002, 7, 31): 0.7388498902576767, + datetime.date(2002, 8, 31): 0.7398323758992469, + datetime.date(2002, 9, 30): 0.740816168001099, + datetime.date(2002, 10, 31): 0.7418012683004983, + datetime.date(2002, 11, 30): 0.7427876785370209, + datetime.date(2002, 12, 31): 0.7437754004525554, + datetime.date(2003, 1, 31): 0.7451996063818555, + datetime.date(2003, 2, 28): 0.7466265394281423, + datetime.date(2003, 3, 31): 0.7480562048133906, + datetime.date(2003, 4, 30): 0.7494886077695742, + datetime.date(2003, 5, 31): 0.7509237535386851, + datetime.date(2003, 6, 30): 0.7523616473727528, + datetime.date(2003, 7, 31): 0.7538022945338638, + datetime.date(2003, 8, 31): 0.7552457002941805, + datetime.date(2003, 9, 30): 0.7566918699359605, + datetime.date(2003, 10, 31): 0.7581408087515762, + datetime.date(2003, 11, 30): 0.759592522043534, + datetime.date(2003, 12, 31): 0.7610470151244938, + datetime.date(2004, 1, 31): 0.7627386957979464, + datetime.date(2004, 2, 29): 0.7644341367955894, + datetime.date(2004, 3, 31): 0.7661333464759965, + datetime.date(2004, 4, 30): 0.7678363332163217, + datetime.date(2004, 5, 31): 0.7695431054123394, + datetime.date(2004, 6, 30): 0.7712536714784868, + datetime.date(2004, 7, 31): 0.7729680398479051, + datetime.date(2004, 8, 31): 0.7746862189724804, + datetime.date(2004, 9, 30): 0.7764082173228865, + datetime.date(2004, 10, 31): 0.7781340433886258, + datetime.date(2004, 11, 30): 0.7798637056780716, + datetime.date(2004, 12, 31): 0.7815972127185097, + datetime.date(2005, 1, 31): 0.7837897231663872, + datetime.date(2005, 2, 28): 0.7859883839714893, + datetime.date(2005, 3, 31): 0.7881932123865933, + datetime.date(2005, 4, 30): 0.7904042257128732, + datetime.date(2005, 5, 31): 0.7926214413000353, + datetime.date(2005, 6, 30): 0.7948448765464555, + datetime.date(2005, 7, 31): 0.7970745488993143, + datetime.date(2005, 8, 31): 0.799310475854735, + datetime.date(2005, 9, 30): 0.8015526749579203, + datetime.date(2005, 10, 31): 0.8038011638032896, + datetime.date(2005, 11, 30): 0.8060559600346184, + datetime.date(2005, 12, 31): 0.8083170813451755, + datetime.date(2006, 1, 31): 0.8104872106293172, + datetime.date(2006, 2, 28): 0.8126631661680542, + datetime.date(2006, 3, 31): 0.814844963603424, + datetime.date(2006, 4, 30): 0.8170326186194583, + datetime.date(2006, 5, 31): 0.8192261469422968, + datetime.date(2006, 6, 30): 0.8214255643403001, + datetime.date(2006, 7, 31): 0.8236308866241628, + datetime.date(2006, 8, 31): 0.8258421296470271, + datetime.date(2006, 9, 30): 0.8280593093045969, + datetime.date(2006, 10, 31): 0.8302824415352524, + datetime.date(2006, 11, 30): 0.8325115423201642, + datetime.date(2006, 12, 31): 0.8347466276834082, + datetime.date(2007, 1, 31): 0.8367434807412649, + datetime.date(2007, 2, 28): 0.8387451106044448, + datetime.date(2007, 3, 31): 0.8407515286998624, + datetime.date(2007, 4, 30): 0.8427627464817672, + datetime.date(2007, 5, 31): 0.8447787754318093, + datetime.date(2007, 6, 30): 0.8467996270591048, + datetime.date(2007, 7, 31): 0.8488253129003013, + datetime.date(2007, 8, 31): 0.8508558445196442, + datetime.date(2007, 9, 30): 0.8528912335090427, + datetime.date(2007, 10, 31): 0.8549314914881352, + datetime.date(2007, 11, 30): 0.8569766301043567, + datetime.date(2007, 12, 31): 0.8590266610330046, + datetime.date(2008, 1, 31): 0.8617575783739837, + datetime.date(2008, 2, 29): 0.8644971775287661, + datetime.date(2008, 3, 31): 0.8672454860975616, + datetime.date(2008, 4, 30): 0.870002531768323, + datetime.date(2008, 5, 31): 0.8727683423170256, + datetime.date(2008, 6, 30): 0.8755429456079467, + datetime.date(2008, 7, 31): 0.8783263695939465, + datetime.date(2008, 8, 31): 0.8811186423167497, + datetime.date(2008, 9, 30): 0.8839197919072282, + datetime.date(2008, 10, 31): 0.886729846585684, + datetime.date(2008, 11, 30): 0.8895488346621339, + datetime.date(2008, 12, 31): 0.8923767845365945, + datetime.date(2009, 1, 31): 0.8921387430293194, + datetime.date(2009, 2, 28): 0.8919007650196163, + datetime.date(2009, 3, 31): 0.8916628504905473, + datetime.date(2009, 4, 30): 0.8914249994251789, + datetime.date(2009, 5, 31): 0.8911872118065823, + datetime.date(2009, 6, 30): 0.8909494876178329, + datetime.date(2009, 7, 31): 0.8907118268420108, + datetime.date(2009, 8, 31): 0.8904742294622007, + datetime.date(2009, 9, 30): 0.8902366954614916, + datetime.date(2009, 10, 31): 0.8899992248229773, + datetime.date(2009, 11, 30): 0.8897618175297558, + datetime.date(2009, 12, 31): 0.8895244735649297, + datetime.date(2010, 1, 31): 0.890737414311675, + datetime.date(2010, 2, 28): 0.8919520090042069, + datetime.date(2010, 3, 31): 0.8931682598978183, + datetime.date(2010, 4, 30): 0.8943861692508774, + datetime.date(2010, 5, 31): 0.8956057393248318, + datetime.date(2010, 6, 30): 0.8968269723842128, + datetime.date(2010, 7, 31): 0.8980498706966398, + datetime.date(2010, 8, 31): 0.8992744365328239, + datetime.date(2010, 9, 30): 0.9005006721665729, + datetime.date(2010, 10, 31): 0.9017285798747947, + datetime.date(2010, 11, 30): 0.9029581619375023, + datetime.date(2010, 12, 31): 0.9041894206378177, + datetime.date(2011, 1, 31): 0.9065575680795865, + datetime.date(2011, 2, 28): 0.9089319178968509, + datetime.date(2011, 3, 31): 0.9113124863341492, + datetime.date(2011, 4, 30): 0.9136992896785655, + datetime.date(2011, 5, 31): 0.9160923442598411, + datetime.date(2011, 6, 30): 0.9184916664504862, + datetime.date(2011, 7, 31): 0.9208972726658923, + datetime.date(2011, 8, 31): 0.9233091793644436, + datetime.date(2011, 9, 30): 0.9257274030476306, + datetime.date(2011, 10, 31): 0.9281519602601626, + datetime.date(2011, 11, 30): 0.9305828675900806, + datetime.date(2011, 12, 31): 0.9330201416688713, + datetime.date(2012, 1, 31): 0.9346344220173154, + datetime.date(2012, 2, 29): 0.9362514953398091, + datetime.date(2012, 3, 31): 0.9378713664686629, + datetime.date(2012, 4, 30): 0.939494040244548, + datetime.date(2012, 5, 31): 0.9411195215165111, + datetime.date(2012, 6, 30): 0.9427478151419884, + datetime.date(2012, 7, 31): 0.9443789259868198, + datetime.date(2012, 8, 31): 0.9460128589252648, + datetime.date(2012, 9, 30): 0.9476496188400153, + datetime.date(2012, 10, 31): 0.9492892106222117, + datetime.date(2012, 11, 30): 0.9509316391714567, + datetime.date(2012, 12, 31): 0.9525769093958298, + datetime.date(2013, 1, 31): 0.9537392913695202, + datetime.date(2013, 2, 28): 0.9549030917398139, + datetime.date(2013, 3, 31): 0.9560683122375094, + datetime.date(2013, 4, 30): 0.9572349545955173, + datetime.date(2013, 5, 31): 0.9584030205488626, + datetime.date(2013, 6, 30): 0.9595725118346874, + datetime.date(2013, 7, 31): 0.9607434301922536, + datetime.date(2013, 8, 31): 0.9619157773629458, + datetime.date(2013, 9, 30): 0.9630895550902728, + datetime.date(2013, 10, 31): 0.9642647651198718, + datetime.date(2013, 11, 30): 0.9654414091995093, + datetime.date(2013, 12, 31): 0.9666194890790851, + datetime.date(2014, 1, 31): 0.9679161285720607, + datetime.date(2014, 2, 28): 0.9692145073988628, + datetime.date(2014, 3, 31): 0.9705146278926629, + datetime.date(2014, 4, 30): 0.971816492389762, + datetime.date(2014, 5, 31): 0.9731201032295953, + datetime.date(2014, 6, 30): 0.9744254627547358, + datetime.date(2014, 7, 31): 0.9757325733108996, + datetime.date(2014, 8, 31): 0.9770414372469484, + datetime.date(2014, 9, 30): 0.9783520569148956, + datetime.date(2014, 10, 31): 0.979664434669909, + datetime.date(2014, 11, 30): 0.9809785728703159, + datetime.date(2014, 12, 31): 0.982294473877607, + datetime.date(2015, 1, 31): 0.9823795242074701, + datetime.date(2015, 2, 28): 0.9824645819012744, + datetime.date(2015, 3, 31): 0.9825496469596572, + datetime.date(2015, 4, 30): 0.9826347193832563, + datetime.date(2015, 5, 31): 0.9827197991727095, + datetime.date(2015, 6, 30): 0.9828048863286544, + datetime.date(2015, 7, 31): 0.9828899808517289, + datetime.date(2015, 8, 31): 0.9829750827425707, + datetime.date(2015, 9, 30): 0.9830601920018182, + datetime.date(2015, 10, 31): 0.9831453086301088, + datetime.date(2015, 11, 30): 0.983230432628081, + datetime.date(2015, 12, 31): 0.9833155639963727, + datetime.date(2016, 1, 31): 0.9845331544934913, + datetime.date(2016, 2, 29): 0.985752252672043, + datetime.date(2016, 3, 31): 0.9869728603989143, + datetime.date(2016, 4, 30): 0.9881949795433034, + datetime.date(2016, 5, 31): 0.9894186119767231, + datetime.date(2016, 6, 30): 0.9906437595730033, + datetime.date(2016, 7, 31): 0.9918704242082947, + datetime.date(2016, 8, 31): 0.9930986077610708, + datetime.date(2016, 9, 30): 0.994328312112131, + datetime.date(2016, 10, 31): 0.9955595391446039, + datetime.date(2016, 11, 30): 0.9967922907439498, + datetime.date(2016, 12, 31): 0.9980265687979636, + datetime.date(2017, 1, 31): 1.0, + datetime.date(2017, 2, 28): 1.0019773333333333, + datetime.date(2017, 3, 31): 1.0039585765137777, + datetime.date(2017, 4, 30): 1.0059437372724043, + datetime.date(2017, 5, 31): 1.0079328233555709, + datetime.date(2017, 6, 30): 1.0099258425249524, + datetime.date(2017, 7, 31): 1.0119228025575717, + datetime.date(2017, 8, 31): 1.0139237112458288, + datetime.date(2017, 9, 30): 1.0159285763975323, + datetime.date(2017, 10, 31): 1.017937405835929, + datetime.date(2017, 11, 30): 1.0199502073997353, + datetime.date(2017, 12, 31): 1.0219669889431668, + datetime.date(2018, 1, 31): 1.0241308337144226, + datetime.date(2018, 2, 28): 1.0262992600663405, + datetime.date(2018, 3, 31): 1.0284722776996542, + datetime.date(2018, 4, 30): 1.030649896335637, + datetime.date(2018, 5, 31): 1.032832125716145, + datetime.date(2018, 6, 30): 1.0350189756036612, + datetime.date(2018, 7, 31): 1.0372104557813393, + datetime.date(2018, 8, 31): 1.039406576053047, + datetime.date(2018, 9, 30): 1.0416073462434101, + datetime.date(2018, 10, 31): 1.043812776197856, + datetime.date(2018, 11, 30): 1.046022875782659, + datetime.date(2018, 12, 31): 1.0482376548849828, + datetime.date(2019, 1, 31): 1.0502734197639072, + datetime.date(2019, 2, 28): 1.0523131382678736, + datetime.date(2019, 3, 31): 1.0543568180751512, + datetime.date(2019, 4, 30): 1.0564044668789212, + datetime.date(2019, 5, 31): 1.0584560923873054, + datetime.date(2019, 6, 30): 1.0605117023233959, + datetime.date(2019, 7, 31): 1.0625713044252831, + datetime.date(2019, 8, 31): 1.0646349064460856, + datetime.date(2019, 9, 30): 1.0667025161539792, + datetime.date(2019, 10, 31): 1.0687741413322265, + datetime.date(2019, 11, 30): 1.0708497897792053, + datetime.date(2019, 12, 31): 1.072929469308439, + datetime.date(2020, 1, 31): 1.0749909244621372, + datetime.date(2020, 2, 29): 1.077056340358337, + datetime.date(2020, 3, 31): 1.0791257246069457, + datetime.date(2020, 4, 30): 1.0811990848324906, + datetime.date(2020, 5, 31): 1.083276428674149, + datetime.date(2020, 6, 30): 1.085357763785775, + datetime.date(2020, 7, 31): 1.0874430978359289, + datetime.date(2020, 8, 31): 1.0895324385079046, + datetime.date(2020, 9, 30): 1.091625793499758, + datetime.date(2020, 10, 31): 1.0937231705243355, + datetime.date(2020, 11, 30): 1.0958245773093032, + datetime.date(2020, 12, 31): 1.0979300215971735, + datetime.date(2021, 1, 31): 1.0997079911753143, + datetime.date(2021, 2, 28): 1.101488839967757, + datetime.date(2021, 3, 31): 1.1032725726370534, + datetime.date(2021, 4, 30): 1.1050591938533056, + datetime.date(2021, 5, 31): 1.1068487082941783, + datetime.date(2021, 6, 30): 1.1086411206449114, + datetime.date(2021, 7, 31): 1.1104364355983318, + datetime.date(2021, 8, 31): 1.1122346578548659, + datetime.date(2021, 9, 30): 1.1140357921225517, + datetime.date(2021, 10, 31): 1.1158398431170518, + datetime.date(2021, 11, 30): 1.1176468155616648, + datetime.date(2021, 12, 31): 1.1194567141873384, + datetime.date(2022, 1, 31): 1.1211576316449643, + datetime.date(2022, 2, 28): 1.122861133499254, + datetime.date(2022, 3, 31): 1.1245672236769746, + datetime.date(2022, 4, 30): 1.1262759061108591, + datetime.date(2022, 5, 31): 1.1279871847396161, + datetime.date(2022, 6, 30): 1.1297010635079388, + datetime.date(2022, 7, 31): 1.1314175463665137, + datetime.date(2022, 8, 31): 1.1331366372720302, + datetime.date(2022, 9, 30): 1.13485834018719, + datetime.date(2022, 10, 31): 1.1365826590807149, + datetime.date(2022, 11, 30): 1.1383095979273576, + datetime.date(2022, 12, 31): 1.14003916070791, + datetime.date(2023, 1, 31): 1.1417473247038867, + datetime.date(2023, 2, 28): 1.1434580481068888, + datetime.date(2023, 3, 31): 1.1451713347517734, + datetime.date(2023, 4, 30): 1.1468871884791425, + datetime.date(2023, 5, 31): 1.148605613135354, + datetime.date(2023, 6, 30): 1.1503266125725278, + datetime.date(2023, 7, 31): 1.1520501906485565, + datetime.date(2023, 8, 31): 1.1537763512271126, + datetime.date(2023, 9, 30): 1.1555050981776576, + datetime.date(2023, 10, 31): 1.157236435375451, + datetime.date(2023, 11, 30): 1.1589703667015585, + datetime.date(2023, 12, 31): 1.1607068960428615, + datetime.date(2024, 1, 31): 1.1624783051579952, + datetime.date(2024, 2, 29): 1.1642524177034816, + datetime.date(2024, 3, 31): 1.1660292378051522, + datetime.date(2024, 4, 30): 1.1678087695951351, + datetime.date(2024, 5, 31): 1.1695910172118646, + datetime.date(2024, 6, 30): 1.1713759848000913, + datetime.date(2024, 7, 31): 1.173163676510891, + datetime.date(2024, 8, 31): 1.1749540965016745, + datetime.date(2024, 9, 30): 1.1767472489361974, + datetime.date(2024, 10, 31): 1.1785431379845703, + datetime.date(2024, 11, 30): 1.1803417678232675, + datetime.date(2024, 12, 31): 1.1821431426351374, + datetime.date(2025, 1, 31): 1.1839691043554477, + datetime.date(2025, 2, 28): 1.1857978864924097, + datetime.date(2025, 3, 31): 1.1876294934024947, + datetime.date(2025, 4, 30): 1.1894639294489031, + datetime.date(2025, 5, 31): 1.1913011990015752, + datetime.date(2025, 6, 30): 1.1931413064372007, + datetime.date(2025, 7, 31): 1.19498425613923, + datetime.date(2025, 8, 31): 1.196830052497884, + datetime.date(2025, 9, 30): 1.198678699910165, + datetime.date(2025, 10, 31): 1.2005302027798668, + datetime.date(2025, 11, 30): 1.2023845655175858, + datetime.date(2025, 12, 31): 1.2042417925407303, + datetime.date(2026, 1, 31): 1.206277471119959, + datetime.date(2026, 2, 28): 1.2083165908580182, + datetime.date(2026, 3, 31): 1.2103591575719228, + datetime.date(2026, 4, 30): 1.212405177088522, + datetime.date(2026, 5, 31): 1.2144546552445143, + datetime.date(2026, 6, 30): 1.2165075978864652, + datetime.date(2026, 7, 31): 1.2185640108708227, + datetime.date(2026, 8, 31): 1.2206239000639352, + datetime.date(2026, 9, 30): 1.2226872713420676, + datetime.date(2026, 10, 31): 1.2247541305914178, + datetime.date(2026, 11, 30): 1.2268244837081344, + datetime.date(2026, 12, 31): 1.2288983365983328, + datetime.date(2027, 1, 31): 1.2310312626995608, + datetime.date(2027, 2, 28): 1.2331678907943693, + datetime.date(2027, 3, 31): 1.2353082273080898, + datetime.date(2027, 4, 30): 1.237452278677205, + datetime.date(2027, 5, 31): 1.2396000513493697, + datetime.date(2027, 6, 30): 1.2417515517834297, + datetime.date(2027, 7, 31): 1.24390678644944, + datetime.date(2027, 8, 31): 1.2460657618286863, + datetime.date(2027, 9, 30): 1.2482284844137033, + datetime.date(2027, 10, 31): 1.250394960708294, + datetime.date(2027, 11, 30): 1.25256519722755, + datetime.date(2027, 12, 31): 1.2547392004978706, + datetime.date(2028, 1, 31): 1.2568866509483156, + datetime.date(2028, 2, 29): 1.259037776699122, + datetime.date(2028, 3, 31): 1.261192584040462, + datetime.date(2028, 4, 30): 1.263351079273273, + datetime.date(2028, 5, 31): 1.2655132687092763, + datetime.date(2028, 6, 30): 1.2676791586709955, + datetime.date(2028, 7, 31): 1.2698487554917752, + datetime.date(2028, 8, 31): 1.2720220655157992, + datetime.date(2028, 9, 30): 1.2741990950981095, + datetime.date(2028, 10, 31): 1.2763798506046236, + datetime.date(2028, 11, 30): 1.2785643384121554, + datetime.date(2028, 12, 31): 1.280752564908432, + datetime.date(2029, 1, 31): 1.2828925556407371, + datetime.date(2029, 2, 28): 1.2850361220522637, + datetime.date(2029, 3, 31): 1.2871832701175623, + datetime.date(2029, 4, 30): 1.2893340058211653, + datetime.date(2029, 5, 31): 1.2914883351576054, + datetime.date(2029, 6, 30): 1.293646264131431, + datetime.date(2029, 7, 31): 1.2958077987572236, + datetime.date(2029, 8, 31): 1.2979729450596147, + datetime.date(2029, 9, 30): 1.3001417090733012, + datetime.date(2029, 10, 31): 1.3023140968430647, + datetime.date(2029, 11, 30): 1.3044901144237857, + datetime.date(2029, 12, 31): 1.3066697678804629, + datetime.date(2030, 1, 31): 1.3088176266711669, + datetime.date(2030, 2, 28): 1.3109690160382248, + datetime.date(2030, 3, 31): 1.3131239417850764, + datetime.date(2030, 4, 30): 1.3152824097247013, + datetime.date(2030, 5, 31): 1.3174444256796338, + datetime.date(2030, 6, 30): 1.3196099954819795, + datetime.date(2030, 7, 31): 1.3217791249734305, + datetime.date(2030, 8, 31): 1.323951820005281, + datetime.date(2030, 9, 30): 1.3261280864384442, + datetime.date(2030, 10, 31): 1.3283079301434657, + datetime.date(2030, 11, 30): 1.3304913570005426, + datetime.date(2030, 12, 31): 1.3326783728995366, + datetime.date(2031, 1, 31): 1.3348319928859904, + datetime.date(2031, 2, 28): 1.3369890931413078, + datetime.date(2031, 3, 31): 1.3391496792896336, + datetime.date(2031, 4, 30): 1.3413137569642015, + datetime.date(2031, 5, 31): 1.3434813318073493, + datetime.date(2031, 6, 30): 1.3456524094705313, + datetime.date(2031, 7, 31): 1.3478269956143363, + datetime.date(2031, 8, 31): 1.3500050959084995, + datetime.date(2031, 9, 30): 1.3521867160319188, + datetime.date(2031, 10, 31): 1.3543718616726692, + datetime.date(2031, 11, 30): 1.356560538528018, + datetime.date(2031, 12, 31): 1.3587527523044391, + datetime.date(2032, 1, 31): 1.3609480502028264, + datetime.date(2032, 2, 29): 1.3631468949811405, + datetime.date(2032, 3, 31): 1.3653492923699735, + datetime.date(2032, 4, 30): 1.367555248109177, + datetime.date(2032, 5, 31): 1.3697647679478755, + datetime.date(2032, 6, 30): 1.371977857644482, + datetime.date(2032, 7, 31): 1.3741945229667143, + datetime.date(2032, 8, 31): 1.3764147696916078, + datetime.date(2032, 9, 30): 1.3786386036055325, + datetime.date(2032, 10, 31): 1.380866030504207, + datetime.date(2032, 11, 30): 1.3830970561927136, + datetime.date(2032, 12, 31): 1.385331686485514, + datetime.date(2033, 1, 31): 1.3875832621350055, + datetime.date(2033, 2, 28): 1.3898384972639959, + datetime.date(2033, 3, 31): 1.3920973978202262, + datetime.date(2033, 4, 30): 1.394359969761105, + datetime.date(2033, 5, 31): 1.3966262190537237, + datetime.date(2033, 6, 30): 1.3988961516748712, + datetime.date(2033, 7, 31): 1.4011697736110513, + datetime.date(2033, 8, 31): 1.403447090858497, + datetime.date(2033, 9, 30): 1.4057281094231873, + datetime.date(2033, 10, 31): 1.4080128353208623, + datetime.date(2033, 11, 30): 1.41030127457704, + datetime.date(2033, 12, 31): 1.4125934332270311, + datetime.date(2034, 1, 31): 1.4149072514828935, + datetime.date(2034, 2, 28): 1.4172248597570265, + datetime.date(2034, 3, 31): 1.4195462642574541, + datetime.date(2034, 4, 30): 1.4218714712023686, + datetime.date(2034, 5, 31): 1.4242004868201474, + datetime.date(2034, 6, 30): 1.4265333173493708, + datetime.date(2034, 7, 31): 1.428869969038837, + datetime.date(2034, 8, 31): 1.43121044814758, + datetime.date(2034, 9, 30): 1.4335547609448862, + datetime.date(2034, 10, 31): 1.4359029137103108, + datetime.date(2034, 11, 30): 1.4382549127336948, + datetime.date(2034, 12, 31): 1.4406107643151824, + datetime.date(2035, 1, 31): 1.4429865874594414, + datetime.date(2035, 2, 28): 1.445366328758245, + datetime.date(2035, 3, 31): 1.4477499946733259, + datetime.date(2035, 4, 30): 1.4501375916770738, + datetime.date(2035, 5, 31): 1.4525291262525526, + datetime.date(2035, 6, 30): 1.4549246048935176, + datetime.date(2035, 7, 31): 1.457324034104434, + datetime.date(2035, 8, 31): 1.4597274204004933, + datetime.date(2035, 9, 30): 1.462134770307632, + datetime.date(2035, 10, 31): 1.4645460903625491, + datetime.date(2035, 11, 30): 1.4669613871127245, + datetime.date(2035, 12, 31): 1.4693806671164344, + datetime.date(2036, 1, 31): 1.4718193004762303, + datetime.date(2036, 2, 29): 1.4742619810736115, + datetime.date(2036, 3, 31): 1.4767087156255096, + datetime.date(2036, 4, 30): 1.479159510860003, + datetime.date(2036, 5, 31): 1.4816143735163363, + datetime.date(2036, 6, 30): 1.4840733103449395, + datetime.date(2036, 7, 31): 1.4865363281074446, + datetime.date(2036, 8, 31): 1.4890034335767068, + datetime.date(2036, 9, 30): 1.4914746335368212, + datetime.date(2036, 10, 31): 1.4939499347831413, + datetime.date(2036, 11, 30): 1.4964293441222993, + datetime.date(2036, 12, 31): 1.4989128683722237, + datetime.date(2037, 1, 31): 1.5013958992132328, + datetime.date(2037, 2, 28): 1.503883043330128, + datetime.date(2037, 3, 31): 1.5063743075367757, + datetime.date(2037, 4, 30): 1.5088696986583285, + datetime.date(2037, 5, 31): 1.5113692235312461, + datetime.date(2037, 6, 30): 1.5138728890033128, + datetime.date(2037, 7, 31): 1.5163807019336568, + datetime.date(2037, 8, 31): 1.5188926691927684, + datetime.date(2037, 9, 30): 1.52140879766252, + datetime.date(2037, 10, 31): 1.5239290942361834, + datetime.date(2037, 11, 30): 1.52645356581845, + datetime.date(2037, 12, 31): 1.528982219325449, + datetime.date(2038, 1, 31): 1.531502969527323, + datetime.date(2038, 2, 28): 1.534027875553575, + datetime.date(2038, 3, 31): 1.5365569442556875, + datetime.date(2038, 4, 30): 1.5390901824964387, + datetime.date(2038, 5, 31): 1.5416275971499214, + datetime.date(2038, 6, 30): 1.5441691951015606, + datetime.date(2038, 7, 31): 1.546714983248134, + datetime.date(2038, 8, 31): 1.549264968497789, + datetime.date(2038, 9, 30): 1.5518191577700624, + datetime.date(2038, 10, 31): 1.5543775579958983, + datetime.date(2038, 11, 30): 1.5569401761176678, + datetime.date(2038, 12, 31): 1.559507019089188, + datetime.date(2039, 1, 31): 1.5620682961641141, + datetime.date(2039, 2, 28): 1.5646337797864776, + datetime.date(2039, 3, 31): 1.5672034768649572, + datetime.date(2039, 4, 30): 1.5697773943195792, + datetime.date(2039, 5, 31): 1.5723555390817336, + datetime.date(2039, 6, 30): 1.5749379180941956, + datetime.date(2039, 7, 31): 1.5775245383111425, + datetime.date(2039, 8, 31): 1.5801154066981726, + datetime.date(2039, 9, 30): 1.5827105302323248, + datetime.date(2039, 10, 31): 1.5853099159020962, + datetime.date(2039, 11, 30): 1.5879135707074619, + datetime.date(2039, 12, 31): 1.5905215016598937, + datetime.date(2040, 1, 31): 1.5931291792827287, + datetime.date(2040, 2, 29): 1.595741132221916, + datetime.date(2040, 3, 31): 1.5983573674868838, + datetime.date(2040, 4, 30): 1.6009778920985531, + datetime.date(2040, 5, 31): 1.6036027130893553, + datetime.date(2040, 6, 30): 1.6062318375032512, + datetime.date(2040, 7, 31): 1.608865272395751, + datetime.date(2040, 8, 31): 1.611503024833932, + datetime.date(2040, 9, 30): 1.6141451018964579, + datetime.date(2040, 10, 31): 1.6167915106735988, + datetime.date(2040, 11, 30): 1.6194422582672487, + datetime.date(2040, 12, 31): 1.622097351790945, + datetime.date(2041, 1, 31): 1.6247561082481263, + datetime.date(2041, 2, 28): 1.627419222634806, + datetime.date(2041, 3, 31): 1.6300867020940037, + datetime.date(2041, 4, 30): 1.6327585537804472, + datetime.date(2041, 5, 31): 1.635434784860591, + datetime.date(2041, 6, 30): 1.6381154025126365, + datetime.date(2041, 7, 31): 1.6408004139265508, + datetime.date(2041, 8, 31): 1.6434898263040858, + datetime.date(2041, 9, 30): 1.6461836468587976, + datetime.date(2041, 10, 31): 1.6488818828160658, + datetime.date(2041, 11, 30): 1.6515845414131136, + datetime.date(2041, 12, 31): 1.6542916298990267, + datetime.date(2042, 1, 31): 1.65700697311415, + datetime.date(2042, 2, 28): 1.6597267732754626, + datetime.date(2042, 3, 31): 1.6624510376985664, + datetime.date(2042, 4, 30): 1.6651797737110705, + datetime.date(2042, 5, 31): 1.6679129886526118, + datetime.date(2042, 6, 30): 1.670650689874875, + datetime.date(2042, 7, 31): 1.6733928847416106, + datetime.date(2042, 8, 31): 1.676139580628657, + datetime.date(2042, 9, 30): 1.6788907849239585, + datetime.date(2042, 10, 31): 1.6816465050275864, + datetime.date(2042, 11, 30): 1.6844067483517586, + datetime.date(2042, 12, 31): 1.6871715223208588, + datetime.date(2043, 1, 31): 1.6899451741068114, + datetime.date(2043, 2, 28): 1.6927233856806267, + datetime.date(2043, 3, 31): 1.6955061645384386, + datetime.date(2043, 4, 30): 1.6982935181887044, + datetime.date(2043, 5, 31): 1.7010854541522251, + datetime.date(2043, 6, 30): 1.703881979962166, + datetime.date(2043, 7, 31): 1.706683103164076, + datetime.date(2043, 8, 31): 1.7094888313159085, + datetime.date(2043, 9, 30): 1.712299171988043, + datetime.date(2043, 10, 31): 1.7151141327633035, + datetime.date(2043, 11, 30): 1.71793372123698, + datetime.date(2043, 12, 31): 1.7207579450168495, + datetime.date(2044, 1, 31): 1.7235900240944928, + datetime.date(2044, 2, 29): 1.7264267642994757, + datetime.date(2044, 3, 31): 1.7292681733032322, + datetime.date(2044, 4, 30): 1.732114258789822, + datetime.date(2044, 5, 31): 1.734965028455952, + datetime.date(2044, 6, 30): 1.7378204900109966, + datetime.date(2044, 7, 31): 1.7406806511770179, + datetime.date(2044, 8, 31): 1.743545519688788, + datetime.date(2044, 9, 30): 1.7464151032938084, + datetime.date(2044, 10, 31): 1.7492894097523326, + datetime.date(2044, 11, 30): 1.7521684468373855, + datetime.date(2044, 12, 31): 1.7550522223347849, + datetime.date(2045, 1, 31): 1.7579421198760468, + datetime.date(2045, 2, 28): 1.7608367759696144, + datetime.date(2045, 3, 31): 1.7637361984509972, + datetime.date(2045, 4, 30): 1.7666403951686067, + datetime.date(2045, 5, 31): 1.7695493739837784, + datetime.date(2045, 6, 30): 1.7724631427707918, + datetime.date(2045, 7, 31): 1.775381709416892, + datetime.date(2045, 8, 31): 1.7783050818223123, + datetime.date(2045, 9, 30): 1.7812332679002942, + datetime.date(2045, 10, 31): 1.7841662755771088, + datetime.date(2045, 11, 30): 1.7871041127920801, + datetime.date(2045, 12, 31): 1.7900467874976032, + datetime.date(2046, 1, 31): 1.7929938491512625, + datetime.date(2046, 2, 28): 1.7959457627297155, + datetime.date(2046, 3, 31): 1.798902536220978, + datetime.date(2046, 4, 30): 1.8018641776262165, + datetime.date(2046, 5, 31): 1.8048306949597708, + datetime.date(2046, 6, 30): 1.8078020962491743, + datetime.date(2046, 7, 31): 1.8107783895351774, + datetime.date(2046, 8, 31): 1.8137595828717683, + datetime.date(2046, 9, 30): 1.8167456843261949, + datetime.date(2046, 10, 31): 1.8197367019789865, + datetime.date(2046, 11, 30): 1.8227326439239762, + datetime.date(2046, 12, 31): 1.8257335182683228, + datetime.date(2047, 1, 31): 1.8287369097704886, + datetime.date(2047, 2, 28): 1.8317452419501548, + datetime.date(2047, 3, 31): 1.834758522934898, + datetime.date(2047, 4, 30): 1.8377767608656645, + datetime.date(2047, 5, 31): 1.8407999638967933, + datetime.date(2047, 6, 30): 1.843828140196037, + datetime.date(2047, 7, 31): 1.8468612979445849, + datetime.date(2047, 8, 31): 1.8498994453370843, + datetime.date(2047, 9, 30): 1.8529425905816634, + datetime.date(2047, 10, 31): 1.8559907418999526, + datetime.date(2047, 11, 30): 1.8590439075271072, + datetime.date(2047, 12, 31): 1.86210209571183, + datetime.date(2048, 1, 31): 1.8651631692582504, + datetime.date(2048, 2, 29): 1.8682292748441485, + datetime.date(2048, 3, 31): 1.871300420741596, + datetime.date(2048, 4, 30): 1.8743766152362635, + datetime.date(2048, 5, 31): 1.8774578666274424, + datetime.date(2048, 6, 30): 1.8805441832280665, + datetime.date(2048, 7, 31): 1.8836355733647354, + datetime.date(2048, 8, 31): 1.8867320453777372, + datetime.date(2048, 9, 30): 1.8898336076210693, + datetime.date(2048, 10, 31): 1.8929402684624632, + datetime.date(2048, 11, 30): 1.8960520362834052, + datetime.date(2048, 12, 31): 1.8991689194791601, + datetime.date(2049, 1, 31): 1.902290021459603, + datetime.date(2049, 2, 28): 1.905416252671823, + datetime.date(2049, 3, 31): 1.908547621545221, + datetime.date(2049, 4, 30): 1.9116841365230504, + datetime.date(2049, 5, 31): 1.9148258060624401, + datetime.date(2049, 6, 30): 1.9179726386344174, + datetime.date(2049, 7, 31): 1.9211246427239317, + datetime.date(2049, 8, 31): 1.924281826829876, + datetime.date(2049, 9, 30): 1.9274441994651104, + datetime.date(2049, 10, 31): 1.9306117691564852, + datetime.date(2049, 11, 30): 1.933784544444864, + datetime.date(2049, 12, 31): 1.936962533885146, + datetime.date(2050, 1, 31): 1.9401459476468907, + datetime.date(2050, 2, 28): 1.9433345933751818, + datetime.date(2050, 3, 31): 1.9465284796687987, + datetime.date(2050, 4, 30): 1.9497276151406535, + datetime.date(2050, 5, 31): 1.9529320084178137, + datetime.date(2050, 6, 30): 1.9561416681415251, + datetime.date(2050, 7, 31): 1.9593566029672358, + datetime.date(2050, 8, 31): 1.962576821564619, + datetime.date(2050, 9, 30): 1.9658023326175968, + datetime.date(2050, 10, 31): 1.969033144824363, + datetime.date(2050, 11, 30): 1.9722692668974073, + datetime.date(2050, 12, 31): 1.9755107075635383, + datetime.date(2051, 1, 31): 1.978758265194836, + datetime.date(2051, 2, 28): 1.9820111615117346, + datetime.date(2051, 3, 31): 1.9852694052905413, + datetime.date(2051, 4, 30): 1.9885330053219907, + datetime.date(2051, 5, 31): 1.991801970411269, + datetime.date(2051, 6, 30): 1.9950763093780373, + datetime.date(2051, 7, 31): 1.9983560310564548, + datetime.date(2051, 8, 31): 2.0016411442952036, + datetime.date(2051, 9, 30): 2.0049316579575125, + datetime.date(2051, 10, 31): 2.0082275809211803, + datetime.date(2051, 11, 30): 2.0115289220786003, + datetime.date(2051, 12, 31): 2.014835690336784, + datetime.date(2052, 1, 31): 2.018148866223083, + datetime.date(2052, 2, 29): 2.021467490263049, + datetime.date(2052, 3, 31): 2.0247915714155713, + datetime.date(2052, 4, 30): 2.0281211186542722, + datetime.date(2052, 5, 31): 2.031456140967529, + datetime.date(2052, 6, 30): 2.034796647358501, + datetime.date(2052, 7, 31): 2.038142646845151, + datetime.date(2052, 8, 31): 2.0414941484602713, + datetime.date(2052, 9, 30): 2.0448511612515077, + datetime.date(2052, 10, 31): 2.0482136942813836, + datetime.date(2052, 11, 30): 2.0515817566273244, + datetime.date(2052, 12, 31): 2.0549553573816834, + datetime.date(2053, 1, 31): 2.058335121481051, + datetime.date(2053, 2, 28): 2.061720444243932, + datetime.date(2053, 3, 31): 2.0651113348126042, + datetime.date(2053, 4, 30): 2.06850780234438, + datetime.date(2053, 5, 31): 2.0719098560116347, + datetime.date(2053, 6, 30): 2.075317505001828, + datetime.date(2053, 7, 31): 2.0787307585175303, + datetime.date(2053, 8, 31): 2.082149625776447, + datetime.date(2053, 9, 30): 2.085574116011445, + datetime.date(2053, 10, 31): 2.089004238470576, + datetime.date(2053, 11, 30): 2.0924400024171, + datetime.date(2053, 12, 31): 2.0958814171295153, + datetime.date(2054, 1, 31): 2.0993286437032728, + datetime.date(2054, 2, 28): 2.102781540145065, + datetime.date(2054, 3, 31): 2.106240115780476, + datetime.date(2054, 4, 30): 2.1097043799504296, + datetime.date(2054, 5, 31): 2.113174342011212, + datetime.date(2054, 6, 30): 2.1166500113344986, + datetime.date(2054, 7, 31): 2.1201313973073797, + datetime.date(2054, 8, 31): 2.1236185093323843, + datetime.date(2054, 9, 30): 2.127111356827507, + datetime.date(2054, 10, 31): 2.1306099492262316, + datetime.date(2054, 11, 30): 2.1341142959775588, + datetime.date(2054, 12, 31): 2.137624406546031, + datetime.date(2055, 1, 31): 2.1411400616601206, + datetime.date(2055, 2, 28): 2.1446614988147052, + datetime.date(2055, 3, 31): 2.1481887275192477, + datetime.date(2055, 4, 30): 2.1517217572988505, + datetime.date(2055, 5, 31): 2.1552605976942827, + datetime.date(2055, 6, 30): 2.158805258262003, + datetime.date(2055, 7, 31): 2.162355748574188, + datetime.date(2055, 8, 31): 2.1659120782187586, + datetime.date(2055, 9, 30): 2.169474256799402, + datetime.date(2055, 10, 31): 2.1730422939356013, + datetime.date(2055, 11, 30): 2.176616199262661, + datetime.date(2055, 12, 31): 2.1801959824317323, + datetime.date(2056, 1, 31): 2.1837812255603417, + datetime.date(2056, 2, 29): 2.1873723644746486, + datetime.date(2056, 3, 31): 2.190969408870031, + datetime.date(2056, 4, 30): 2.1945723684578127, + datetime.date(2056, 5, 31): 2.1981812529652838, + datetime.date(2056, 6, 30): 2.2017960721357333, + datetime.date(2056, 7, 31): 2.2054168357284714, + datetime.date(2056, 8, 31): 2.209043553518858, + datetime.date(2056, 9, 30): 2.2126762352983276, + datetime.date(2056, 10, 31): 2.2163148908744152, + datetime.date(2056, 11, 30): 2.2199595300707866, + datetime.date(2056, 12, 31): 2.2236101627272595, + datetime.date(2057, 1, 31): 2.227266375986442, + datetime.date(2057, 2, 28): 2.2309286010437446, + datetime.date(2057, 3, 31): 2.234596847784181, + datetime.date(2057, 4, 30): 2.2382711261090176, + datetime.date(2057, 5, 31): 2.241951445935802, + datetime.date(2057, 6, 30): 2.2456378171983884, + datetime.date(2057, 7, 31): 2.249330249846966, + datetime.date(2057, 8, 31): 2.253028753848082, + datetime.date(2057, 9, 30): 2.256733339184675, + datetime.date(2057, 10, 31): 2.2604440158560957, + datetime.date(2057, 11, 30): 2.264160793878137, + datetime.date(2057, 12, 31): 2.2678836832830607, + datetime.date(2058, 1, 31): 2.2716125209011375, + datetime.date(2058, 2, 28): 2.2753474894465127, + datetime.date(2058, 3, 31): 2.2790885989996106, + datetime.date(2058, 4, 30): 2.282835859657431, + datetime.date(2058, 5, 31): 2.2865892815335758, + datetime.date(2058, 6, 30): 2.2903488747582736, + datetime.date(2058, 7, 31): 2.294114649478411, + datetime.date(2058, 8, 31): 2.2978866158575566, + datetime.date(2058, 9, 30): 2.301664784075991, + datetime.date(2058, 10, 31): 2.305449164330732, + datetime.date(2058, 11, 30): 2.309239766835564, + datetime.date(2058, 12, 31): 2.313036601821065, + datetime.date(2059, 1, 31): 2.316839751701828, + datetime.date(2059, 2, 28): 2.3206491548122226, + datetime.date(2059, 3, 31): 2.3244648214339563, + datetime.date(2059, 4, 30): 2.3282867618656446, + datetime.date(2059, 5, 31): 2.332114986422835, + datetime.date(2059, 6, 30): 2.335949505438037, + datetime.date(2059, 7, 31): 2.339790329260748, + datetime.date(2059, 8, 31): 2.343637468257482, + datetime.date(2059, 9, 30): 2.347490932811799, + datetime.date(2059, 10, 31): 2.3513507333243315, + datetime.date(2059, 11, 30): 2.3552168802128133, + datetime.date(2059, 12, 31): 2.359089383912107, + datetime.date(2060, 1, 31): 2.3629684482549114, + datetime.date(2060, 2, 29): 2.366853890965691, + datetime.date(2060, 3, 31): 2.3707457225324324, + datetime.date(2060, 4, 30): 2.3746439534603687, + datetime.date(2060, 5, 31): 2.3785485942720066, + datetime.date(2060, 6, 30): 2.382459655507155, + datetime.date(2060, 7, 31): 2.386377147722954, + datetime.date(2060, 8, 31): 2.390301081493901, + datetime.date(2060, 9, 30): 2.394231467411884, + datetime.date(2060, 10, 31): 2.3981683160862044, + datetime.date(2060, 11, 30): 2.402111638143611, + datetime.date(2060, 12, 31): 2.4060614442283246, + datetime.date(2061, 1, 31): 2.4100179369138024, + datetime.date(2061, 2, 28): 2.4139809355987034, + datetime.date(2061, 3, 31): 2.4179504509814, + datetime.date(2061, 4, 30): 2.4219264937778564, + datetime.date(2061, 5, 31): 2.4259090747216563, + datetime.date(2061, 6, 30): 2.4298982045640356, + datetime.date(2061, 7, 31): 2.433893894073908, + datetime.date(2061, 8, 31): 2.437896154037897, + datetime.date(2061, 9, 30): 2.441904995260361, + datetime.date(2061, 10, 31): 2.445920428563427, + datetime.date(2061, 11, 30): 2.4499424647870174, + datetime.date(2061, 12, 31): 2.4539711147888794, + datetime.date(2062, 1, 31): 2.458006506663394, + datetime.date(2062, 2, 28): 2.4620485344707776, + datetime.date(2062, 3, 31): 2.46609720912338, + datetime.date(2062, 4, 30): 2.470152541551494, + datetime.date(2062, 5, 31): 2.4742145427033884, + datetime.date(2062, 6, 30): 2.4782832235453345, + datetime.date(2062, 7, 31): 2.4823585950616374, + datetime.date(2062, 8, 31): 2.4864406682546645, + datetime.date(2062, 9, 30): 2.4905294541448764, + datetime.date(2062, 10, 31): 2.494624963770857, + datetime.date(2062, 11, 30): 2.49872720818934, + datetime.date(2062, 12, 31): 2.5028361984752436, + datetime.date(2063, 1, 31): 2.506951956536693, + datetime.date(2063, 2, 28): 2.511074482705632, + datetime.date(2063, 3, 31): 2.515203788111792, + datetime.date(2063, 4, 30): 2.5193398839032044, + datetime.date(2063, 5, 31): 2.5234827812462357, + datetime.date(2063, 6, 30): 2.527632491325613, + datetime.date(2063, 7, 31): 2.531789025344456, + datetime.date(2063, 8, 31): 2.5359523945243083, + datetime.date(2063, 9, 30): 2.5401226101051657, + datetime.date(2063, 10, 31): 2.544299683345508, + datetime.date(2063, 11, 30): 2.5484836255223278, + datetime.date(2063, 12, 31): 2.552674447931164, + datetime.date(2064, 1, 31): 2.5568720975209347, + datetime.date(2064, 2, 29): 2.5610766497778648, + datetime.date(2064, 3, 31): 2.565288116052785, + datetime.date(2064, 4, 30): 2.569506507715193, + datetime.date(2064, 5, 31): 2.5737318361532813, + datetime.date(2064, 6, 30): 2.5779641127739708, + datetime.date(2064, 7, 31): 2.582203349002939, + datetime.date(2064, 8, 31): 2.5864495562846517, + datetime.date(2064, 9, 30): 2.5907027460823957, + datetime.date(2064, 10, 31): 2.594962929878306, + datetime.date(2064, 11, 30): 2.5992301191734017, + datetime.date(2064, 12, 31): 2.6035043254876116, + datetime.date(2065, 1, 31): 2.6077854692914553, + datetime.date(2065, 2, 28): 2.61207365291163, + datetime.date(2065, 3, 31): 2.6163688879242515, + datetime.date(2065, 4, 30): 2.6206711859244707, + datetime.date(2065, 5, 31): 2.624980558526504, + datetime.date(2065, 6, 30): 2.629297017363668, + datetime.date(2065, 7, 31): 2.633620574088408, + datetime.date(2065, 8, 31): 2.6379512403723298, + datetime.date(2065, 9, 30): 2.6422890279062323, + datetime.date(2065, 10, 31): 2.646633948400139, + datetime.date(2065, 11, 30): 2.6509860135833274, + datetime.date(2065, 12, 31): 2.6553452352043645, + datetime.date(2066, 1, 31): 2.6597115512766614, + datetime.date(2066, 2, 28): 2.6640850470993684, + datetime.date(2066, 3, 31): 2.6684657344785068, + datetime.date(2066, 4, 30): 2.67285362523951, + datetime.date(2066, 5, 31): 2.6772487312272557, + datetime.date(2066, 6, 30): 2.681651064306101, + datetime.date(2066, 7, 31): 2.6860606363599095, + datetime.date(2066, 8, 31): 2.690477459292088, + datetime.date(2066, 9, 30): 2.694901545025616, + datetime.date(2066, 10, 31): 2.6993329055030784, + datetime.date(2066, 11, 30): 2.7037715526866983, + datetime.date(2066, 12, 31): 2.708217498558368, + datetime.date(2067, 1, 31): 2.712670725484101, + datetime.date(2067, 2, 28): 2.717131275023347, + datetime.date(2067, 3, 31): 2.7215991592169635, + datetime.date(2067, 4, 30): 2.7260743901256066, + datetime.date(2067, 5, 31): 2.7305569798297644, + datetime.date(2067, 6, 30): 2.7350469404297892, + datetime.date(2067, 7, 31): 2.739544284045931, + datetime.date(2067, 8, 31): 2.744049022818369, + datetime.date(2067, 9, 30): 2.748561168907245, + datetime.date(2067, 10, 31): 2.753080734492696, + datetime.date(2067, 11, 30): 2.7576077317748884, + datetime.date(2067, 12, 31): 2.762142172974048, + datetime.date(2068, 1, 31): 2.766684089591215, + datetime.date(2068, 2, 29): 2.771233474689461, + datetime.date(2068, 3, 31): 2.7757903405495514, + datetime.date(2068, 4, 30): 2.7803546994724444, + datetime.date(2068, 5, 31): 2.784926563779326, + datetime.date(2068, 6, 30): 2.7895059458116416, + datetime.date(2068, 7, 31): 2.794092857931131, + datetime.date(2068, 8, 31): 2.798687312519861, + datetime.date(2068, 9, 30): 2.803289321980258, + datetime.date(2068, 10, 31): 2.8078988987351434, + datetime.date(2068, 11, 30): 2.8125160552277646, + datetime.date(2068, 12, 31): 2.8171408039218306, + datetime.date(2069, 1, 31): 2.8217732004272142, + datetime.date(2069, 2, 28): 2.826413214264807, + datetime.date(2069, 3, 31): 2.8310608579602525, + datetime.date(2069, 4, 30): 2.835716144059792, + datetime.date(2069, 5, 31): 2.840379085130297, + datetime.date(2069, 6, 30): 2.845049693759303, + datetime.date(2069, 7, 31): 2.8497279825550446, + datetime.date(2069, 8, 31): 2.8544139641464876, + datetime.date(2069, 9, 30): 2.8591076511833657, + datetime.date(2069, 10, 31): 2.863809056336214, + datetime.date(2069, 11, 30): 2.868518192296401, + datetime.date(2069, 12, 31): 2.8732350717761643, + datetime.date(2070, 1, 31): 2.8779597469269094, + datetime.date(2070, 2, 28): 2.8826921912140895, + datetime.date(2070, 3, 31): 2.887432417413075, + datetime.date(2070, 4, 30): 2.8921804383202456, + datetime.date(2070, 5, 31): 2.8969362667530225, + datetime.date(2070, 6, 30): 2.9016999155499033, + datetime.date(2070, 7, 31): 2.9064713975704968, + datetime.date(2070, 8, 31): 2.911250725695559, + datetime.date(2070, 9, 30): 2.9160379128270253, + datetime.date(2070, 10, 31): 2.920832971888047, + datetime.date(2070, 11, 30): 2.9256359158230265, + datetime.date(2070, 12, 31): 2.9304467575976516} -- GitLab From ce2975498c9729b02692bed6bce1a0a80b2feeab Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Wed, 19 Apr 2017 18:59:28 -0400 Subject: [PATCH 13/14] add a reminder in bill_month_norm_rough. cleaned up some unused stuff --- bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py | 2 -- bpfin/utilbills/bill_month_normalize_rough.py | 2 +- bpfin/utilbills/bill_prior_proj_rough.py | 3 +-- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py b/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py index 79e045d..d031665 100644 --- a/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py +++ b/bpfin/tests/test_utilbills/test_bill_prior_proj_rough.py @@ -1,6 +1,4 @@ -import datetime from bpfin.utilbills.bill_prior_proj_rough import bill_prior_proj_rough -from bpfin.utilbills import bill_lib as bl from bpfin.tests.testdata import sample_data as db diff --git a/bpfin/utilbills/bill_month_normalize_rough.py b/bpfin/utilbills/bill_month_normalize_rough.py index 521fc27..2951ded 100644 --- a/bpfin/utilbills/bill_month_normalize_rough.py +++ b/bpfin/utilbills/bill_month_normalize_rough.py @@ -1,5 +1,4 @@ import datetime -# import sys import bpfin.lib.other as lib @@ -29,6 +28,7 @@ def bill_month_normalize_rough(raw_bill): usage = raw_bill['usage'] charge = raw_bill['charge'] # utility_type = raw_bill['utility_type'] + # !!!! we will need to update oil calculation! don't forget!!!!! if bill_start != []: month_matrix = lib.form_month_matrix(bill_start, bill_end) diff --git a/bpfin/utilbills/bill_prior_proj_rough.py b/bpfin/utilbills/bill_prior_proj_rough.py index 7d1adbc..9531720 100644 --- a/bpfin/utilbills/bill_prior_proj_rough.py +++ b/bpfin/utilbills/bill_prior_proj_rough.py @@ -1,8 +1,7 @@ import datetime import bpfin.utilbills.bill_lib as bl import bpfin.lib.other as lib -import pprint -from bpfin.tests.testdata import sample_data as db + def bill_prior_proj_rough(month_norm_bill, raw_bill, analysis_date, inflation_coeff_dict): """ project energy bill, on a monthly_normalized base, -- GitLab From 489bc1995af08da68703252faa5f9db42f996412 Mon Sep 17 00:00:00 2001 From: chenzheng06 Date: Thu, 20 Apr 2017 13:24:12 -0400 Subject: [PATCH 14/14] removed form__inflated_item function from prelimfuncs minor cleaned code for bill_lib --- bpfin/prelim/prelimfuncs.py | 18 +++++++++--------- bpfin/utilbills/bill_lib.py | 10 +++++----- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/bpfin/prelim/prelimfuncs.py b/bpfin/prelim/prelimfuncs.py index 5d19b7f..d6b688b 100644 --- a/bpfin/prelim/prelimfuncs.py +++ b/bpfin/prelim/prelimfuncs.py @@ -293,15 +293,15 @@ matplotlib.use('TkAgg') # return new_dict #return (2016,2,29 : 99.86%; present_date: 100%) # form inflated items, based on a 12 month list, present time is the last month of 12 months list -def form_inflated_item(base_list,target_terms,inflation_coeff_dict,present_date): - pre_year_date=datetime.date(present_date.year-1,present_date.month+1,cal_last_day(present_date.year-1,present_date.month+1)) - base_terms=form_date_calendar(pre_year_date,present_date)[1] - for term in base_terms: - base_list[term.month-1]=base_list[term.month-1]/inflation_coeff_dict[term] - new_dict=dict(zip([],[])) - for term in target_terms: - new_dict[term]=base_list[term.month-1]*inflation_coeff_dict[term] - return [new_dict[term] for term in sorted(new_dict)] +# def form_inflated_item(base_list,target_terms,inflation_coeff_dict,present_date): +# pre_year_date=datetime.date(present_date.year-1,present_date.month+1,cal_last_day(present_date.year-1,present_date.month+1)) +# base_terms=form_date_calendar(pre_year_date,present_date)[1] +# for term in base_terms: +# base_list[term.month-1]=base_list[term.month-1]/inflation_coeff_dict[term] +# new_dict=dict(zip([],[])) +# for term in target_terms: +# new_dict[term]=base_list[term.month-1]*inflation_coeff_dict[term] +# return [new_dict[term] for term in sorted(new_dict)] ## define all classes # energy bill, including historical data, normalized bill on monthly basis diff --git a/bpfin/utilbills/bill_lib.py b/bpfin/utilbills/bill_lib.py index e192cf4..272eb16 100644 --- a/bpfin/utilbills/bill_lib.py +++ b/bpfin/utilbills/bill_lib.py @@ -175,15 +175,15 @@ def form_inflated_item(base_list, target_terms, inflation_coeff_dict, present_da dictionary: {datetime: inflated/deflated values} for the month in target_terms """ pre_year_date = datetime.date( - present_date.year-1, - present_date.month+1, - cal_last_day(present_date.year-1, present_date.month+1)) + present_date.year - 1, + present_date.month + 1, + cal_last_day(present_date.year - 1, present_date.month + 1)) base_terms = form_date_calendar(pre_year_date, present_date)[1] for term in base_terms: - base_list[term.month-1] = base_list[term.month-1]/inflation_coeff_dict[term] + base_list[term.month - 1] = base_list[term.month-1] / inflation_coeff_dict[term] new_dict = dict(zip([], [])) for term in target_terms: - new_dict[term] = base_list[term.month-1]*inflation_coeff_dict[term] + new_dict[term] = base_list[term.month - 1] * inflation_coeff_dict[term] return [new_dict[term] for term in sorted(new_dict)] -- GitLab