diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 1068c8e99..420a278c3 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -1,4 +1,4 @@ -name: Build Package and Test Source Code [Python 3.9, 3.10, 3.11] +name: Build Package and Test Source Code [Python 3.9, 3.10, 3.11, 3.12] on: [push, pull_request] @@ -8,7 +8,7 @@ jobs: strategy: matrix: os: [ubuntu-latest, windows-latest] - python-version: [3.9, '3.10', '3.11'] + python-version: [3.9, '3.10', '3.11', '3.12'] steps: - name: Checkout diff --git a/MANIFEST.in b/MANIFEST.in index 881f00830..e74b337ce 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -8,3 +8,4 @@ include taxcalc/puf_weights.csv.gz include taxcalc/puf_ratios.csv include taxcalc/records_variables.json include taxcalc/tmd_weights.csv.gz +include taxcalc/tmd_growfactors.csv diff --git a/conda.recipe/meta.yaml b/conda.recipe/meta.yaml index 2c31dade0..a3c721b33 100755 --- a/conda.recipe/meta.yaml +++ b/conda.recipe/meta.yaml @@ -8,22 +8,22 @@ build: requirements: build: - - "python>=3.9, <3.12" + - "python>=3.9, <3.13" - "numpy>=1.20" - "pandas>=2.2" - "bokeh>=2.4" - - "paramtools>=0.18.0" + - "paramtools>=0.18.2" - numba - curl - openpyxl - behresp run: - - "python>=3.9, <3.12" + - "python>=3.9, <3.13" - "numpy>=1.20" - "pandas>=2.2" - "bokeh>=2.4" - - "paramtools>=0.18.0" + - "paramtools>=0.18.2" - numba - curl - openpyxl diff --git a/docs/contributing/dependencies.md b/docs/contributing/dependencies.md index 3dd092d49..efc71b8d3 100644 --- a/docs/contributing/dependencies.md +++ b/docs/contributing/dependencies.md @@ -2,8 +2,8 @@ ## Python -Tax-Calculator currently runs on Python 3.9, 3.10, and 3.11. -We generally support the three latest major Python releases. +Tax-Calculator currently runs on Python 3.9, 3.10, 3.11, and 3.12. +We generally support at least the three latest major Python releases. Updating the Python version requires modifying the following files: * `.github/workflows/*.yml` diff --git a/docs/usage/starting.md b/docs/usage/starting.md index 06f287eb6..254e535d2 100644 --- a/docs/usage/starting.md +++ b/docs/usage/starting.md @@ -2,9 +2,9 @@ Getting started =============== Tax-Calculator packages are available for Windows, Mac, and Linux computers -that have the free Anaconda Python 3.9, 3.10, or 3.11 distribution installed. -You can use Tax-Calculator without doing any Python programming, but the -Anaconda distribution is required for Tax-Calculator to run. +that have the free Anaconda Python 3.9, 3.10, 3.11, or 3.12 distribution +installed. You can use Tax-Calculator without doing any Python programming, +but the Anaconda distribution is required for Tax-Calculator to run. Take the following four steps to get started. ## Install Anaconda Python diff --git a/environment.yml b/environment.yml index e36fe031b..c32c15dcb 100644 --- a/environment.yml +++ b/environment.yml @@ -2,11 +2,11 @@ name: taxcalc-dev channels: - conda-forge dependencies: -- "python>=3.9, <3.12" +- "python>=3.9, <3.13" - "numpy>=1.20" - "pandas>=2.2" - "bokeh>=2.4" -- "paramtools>=0.18.0" +- "paramtools>=0.18.2" - numba - curl - pytest diff --git a/taxcalc.egg-info/SOURCES.txt b/taxcalc.egg-info/SOURCES.txt index b2bac2eb9..b9685d567 100644 --- a/taxcalc.egg-info/SOURCES.txt +++ b/taxcalc.egg-info/SOURCES.txt @@ -24,6 +24,7 @@ taxcalc/puf_weights.csv.gz taxcalc/records.py taxcalc/records_variables.json taxcalc/taxcalcio.py +taxcalc/tmd_growfactors.csv taxcalc/tmd_weights.csv.gz taxcalc/utils.py taxcalc/utilsprvt.py diff --git a/taxcalc/growfactors.py b/taxcalc/growfactors.py index 435fe5149..336d8ae74 100644 --- a/taxcalc/growfactors.py +++ b/taxcalc/growfactors.py @@ -19,7 +19,7 @@ class GrowFactors(): ---------- growfactors_filename: None or string string is path to the CSV file in which grow factors reside; - default value of None uses file containing baseline grow factors. + default value of None uses file containing puf/cps grow factors. Raises ------ @@ -34,10 +34,11 @@ class instance: GrowFactors Notes ----- Typical usage is "gfactor = GrowFactors()", which produces an object - containing baseline growth factors in the GrowFactors.FILE_NAME file. + containing baseline growth factors in the GrowFactors.FILE_NAME file, + which is for use with puf and cps data from the taxdata repository. """ - FILE_NAME = 'growfactors.csv' + PACKAGE_FILE_NAMES = ['growfactors.csv', 'tmd_growfactors.csv'] FILE_PATH = os.path.abspath(os.path.dirname(__file__)) VALID_NAMES = set(['ABOOK', 'ACGNS', 'ACPIM', 'ACPIU', @@ -53,15 +54,23 @@ def __init__(self, growfactors_filename=None): # read grow factors from specified growfactors_filename gfdf = pd.DataFrame() if growfactors_filename is None: - # read baseline growfactor from package - gfdf = read_egg_csv(GrowFactors.FILE_NAME, + # read puf/cps growfactors from package + gfdf = read_egg_csv(GrowFactors.PACKAGE_FILE_NAMES[0], index_col='YEAR') # pragma: no cover elif isinstance(growfactors_filename, str): - if os.path.isfile(growfactors_filename): - gfdf = pd.read_csv(growfactors_filename, index_col='YEAR') - else: # file does not exist - msg = f'growfactors file {growfactors_filename} does not exist' - raise ValueError(msg) + if growfactors_filename in GrowFactors.PACKAGE_FILE_NAMES: + # read growfactors from package + gfdf = read_egg_csv(growfactors_filename, + index_col='YEAR') # pragma: no cover + else: + if os.path.isfile(growfactors_filename): + gfdf = pd.read_csv(growfactors_filename, index_col='YEAR') + else: # file does not exist + msg = ( + f'growfactors file {growfactors_filename} ' + 'does not exist' + ) + raise ValueError(msg) else: raise ValueError('growfactors_filename is not a string') assert isinstance(gfdf, pd.DataFrame) @@ -156,7 +165,6 @@ def update(self, name, year, diff): msg = 'cannot update growfactors after they have been used' raise ValueError(msg) assert name in GrowFactors.VALID_NAMES - assert year >= self.first_year - assert year <= self.last_year - assert isinstance(diff, float) - self.gfdf.loc[year, name] += diff + if year >= self.first_year and year <= self.last_year: + assert isinstance(diff, float) + self.gfdf.loc[year, name] += diff diff --git a/taxcalc/records.py b/taxcalc/records.py index fedec143f..01c4e87e6 100644 --- a/taxcalc/records.py +++ b/taxcalc/records.py @@ -117,6 +117,7 @@ class instance: Records CPS_WEIGHTS_FILENAME = 'cps_weights.csv.gz' CPS_RATIOS_FILENAME = None TMD_WEIGHTS_FILENAME = 'tmd_weights.csv.gz' + TMD_GROWFACTORS_FILENAME = 'tmd_growfactors.csv' TMD_RATIOS_FILENAME = None CODE_PATH = os.path.abspath(os.path.dirname(__file__)) VARINFO_FILE_NAME = 'records_variables.json' @@ -226,7 +227,7 @@ def cps_constructor(data=None, @staticmethod def tmd_constructor(data, # path to tmd.csv file or dataframe - gfactors=GrowFactors(), + gfactors=TMD_GROWFACTORS_FILENAME, exact_calculations=False): # pragma: no cover """ Static method returns a Records object instantiated with TMD diff --git a/taxcalc/taxcalcio.py b/taxcalc/taxcalcio.py index e72d46b66..ee99e5ec5 100644 --- a/taxcalc/taxcalcio.py +++ b/taxcalc/taxcalcio.py @@ -251,7 +251,12 @@ def init(self, input_data, tax_year, baseline, reform, assump, except paramtools.ValidationError as valerr_msg: self.errmsg += valerr_msg.__str__() # create GrowFactors base object that incorporates gdiff_baseline - gfactors_base = GrowFactors() + if self.tmd_input_data: + gfactors_base = GrowFactors( # pragma: no cover + Records.TMD_GROWFACTORS_FILENAME + ) + else: + gfactors_base = GrowFactors() gdiff_baseline.apply_to(gfactors_base) # specify gdiff_response object gdiff_response = GrowDiff() @@ -260,7 +265,12 @@ def init(self, input_data, tax_year, baseline, reform, assump, except paramtools.ValidationError as valerr_msg: self.errmsg += valerr_msg.__str__() # create GrowFactors ref object that has all gdiff objects applied - gfactors_ref = GrowFactors() + if self.tmd_input_data: + gfactors_ref = GrowFactors( # pragma: no cover + Records.TMD_GROWFACTORS_FILENAME + ) + else: + gfactors_ref = GrowFactors() gdiff_baseline.apply_to(gfactors_ref) gdiff_response.apply_to(gfactors_ref) # create Policy objects: diff --git a/taxcalc/tmd_growfactors.csv b/taxcalc/tmd_growfactors.csv new file mode 100644 index 000000000..9435042a6 --- /dev/null +++ b/taxcalc/tmd_growfactors.csv @@ -0,0 +1,55 @@ +YEAR,ATXPY,ASCHF,ABOOK,ACPIU,ACPIM,AWAGE,ASCHCI,ASCHCL,ASCHEI,ASCHEL,AINTS,ADIVS,ACGNS,ASOCSEC,AUCOMP,AIPD,ABENOTHER,ABENMCARE,ABENMCAID,ABENSSI,ABENSNAP,ABENWIC,ABENHOUSING,ABENTANF,ABENVET +2021,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2022,1.014347,1.742914,1.047552,1.07229,1.040311,1.076282,1.022527,1.022546,1.047553,1.047566,1.049118,1.042358,0.631565,1.04749,0.152665,1.022138,1.030159,1.048769,1.047573,0.999851,1.0,1.002545,1.034942,1.0,1.0 +2023,1.050108,0.653145,1.091056,1.05402,1.004761,1.050035,1.013156,1.013121,1.091037,1.091047,1.026196,1.126711,1.0525,1.085497,0.748857,1.058072,1.030193,1.050822,1.048715,1.000448,1.0,1.003807,1.034968,1.0,1.0 +2024,1.046242,0.895528,1.007166,1.0255,1.01407,1.040377,1.0397,1.03963,1.007187,1.007157,1.156028,1.023049,0.932271,1.052921,1.337549,1.054081,1.030334,1.048426,1.051767,0.99776,1.0,1.002528,1.034951,1.0,1.0 +2025,1.040442,0.963117,1.020457,1.02198,0.958663,1.038977,1.037682,1.037745,1.020415,1.020444,1.091746,1.02538,0.97747,1.031721,1.154874,1.047914,1.030635,1.046248,1.052213,1.002245,1.0,1.003783,1.034897,1.0,1.0 +2026,1.039294,0.987094,1.014705,1.02074,1.014023,1.035978,1.037783,1.037762,1.014711,1.014716,1.098184,1.019802,0.970235,1.030992,1.035291,1.046856,1.030633,1.072236,1.0,0.999552,1.0,1.002513,1.034808,1.0,1.0 +2027,1.037119,0.998822,1.017535,1.01946,1.013312,1.033569,1.03414,1.034138,1.017568,1.017583,1.066606,1.013266,0.993714,1.031791,1.045541,1.044372,1.030788,1.0,1.0,1.0,1.0,1.002506,1.034863,1.0,1.0 +2028,1.036799,1.006582,1.023966,1.01942,1.013356,1.033042,1.031594,1.03158,1.023985,1.02393,1.050716,1.021542,1.009158,1.03344,1.043558,1.043967,1.030942,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2029,1.035913,1.010333,1.028149,1.01966,1.013612,1.033365,1.030869,1.030888,1.028085,1.028143,1.03013,1.032091,1.018962,1.033664,1.045739,1.042825,1.031131,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2030,1.036423,1.01018,1.024121,1.01977,1.013855,1.03321,1.030563,1.030595,1.02417,1.024128,1.036979,1.032934,1.024538,1.034401,1.043738,1.043174,1.03133,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2031,1.036362,1.010259,1.024733,1.01991,1.014016,1.032812,1.031233,1.03124,1.024699,1.024734,1.039197,1.032793,1.027842,1.036645,1.038241,1.042951,1.03151,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2032,1.036409,1.009979,1.028,1.01999,1.014306,1.032126,1.032334,1.032295,1.028004,1.027983,1.04014,1.03261,1.029719,1.036435,1.031319,1.042807,1.031644,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2033,1.035793,1.008195,1.02813,1.02002,1.014309,1.031481,1.033961,1.033991,1.028128,1.02811,1.031669,1.03246,1.030798,1.037554,1.028443,1.042009,1.031857,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2034,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2035,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2036,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2037,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2038,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2039,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2040,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2041,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2042,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2043,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2044,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2045,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2046,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2047,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2048,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2049,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2050,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2051,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2052,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2053,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2054,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2055,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2056,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2057,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2058,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2059,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2060,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2061,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2062,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2063,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2064,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2065,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2066,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2067,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2068,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2069,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2070,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2071,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2072,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2073,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 +2074,1.035385,1.008203,1.02971,1.02,1.014443,1.030912,1.033294,1.033253,1.029705,1.029722,1.027096,1.032231,1.031308,1.03748,1.029528,1.041408,1.032059,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0