taxcalc 5.3.0__py3-none-any.whl → 6.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,8 +13,6 @@ Read Tax-Calculator/TESTING.md for details.
13
13
  # pylint --disable=locally-disabled test_cpscsv.py
14
14
 
15
15
  import os
16
- import json
17
- import pytest
18
16
  import numpy as np
19
17
  import pandas as pd
20
18
  from taxcalc.growfactors import GrowFactors
@@ -28,7 +26,6 @@ START_YEAR = 2017
28
26
  NUM_YEARS = 19
29
27
 
30
28
 
31
- @pytest.mark.cpscsv_agg
32
29
  def test_agg(tests_path, cps_fullsample):
33
30
  """
34
31
  Test current-law aggregate taxes using cps.csv file.
@@ -103,25 +100,6 @@ def test_agg(tests_path, cps_fullsample):
103
100
  raise ValueError(msg)
104
101
 
105
102
 
106
- def test_cps_availability(tests_path, cps_path):
107
- """
108
- Cross-check records_variables.json data with variables in cps.csv file.
109
- """
110
- cpsdf = pd.read_csv(cps_path)
111
- cpsvars = set(list(cpsdf))
112
- # make set of variable names that are marked as cps.csv available
113
- rvpath = os.path.join(tests_path, '..', 'records_variables.json')
114
- with open(rvpath, 'r', encoding='utf-8') as rvfile:
115
- rvdict = json.load(rvfile)
116
- recvars = set()
117
- for vname, vdict in rvdict['read'].items():
118
- if 'taxdata_cps' in vdict.get('availability', ''):
119
- recvars.add(vname)
120
- # check that cpsvars and recvars sets are the same
121
- assert (cpsvars - recvars) == set()
122
- assert (recvars - cpsvars) == set()
123
-
124
-
125
103
  def nonsmall_diffs(linelist1, linelist2, small=0.0):
126
104
  """
127
105
  Return True if line lists differ significantly; otherwise return False.
@@ -67,6 +67,7 @@ def test_recs_class(recs_varinfo_file, cps_subsample):
67
67
  """
68
68
  Specify Data-derived Recs class and test it.
69
69
  """
70
+ # pylint: disable=too-many-statements
70
71
 
71
72
  class Recs(Data):
72
73
  """
@@ -84,6 +85,9 @@ def test_recs_class(recs_varinfo_file, cps_subsample):
84
85
  self, 'e00300', val * self.gfactors.factor_value('AINTS', year)
85
86
  )
86
87
 
88
+ # create CPS weights DataFrame
89
+ wghts_path = os.path.join(GrowFactors.FILE_PATH, 'cps_weights.csv.gz')
90
+ wghts_df = pd.read_csv(wghts_path)
87
91
  # test Recs class for incorrect instantiation:
88
92
  with pytest.raises(ValueError):
89
93
  Recs(data=[], start_year=2000,
@@ -100,7 +104,10 @@ def test_recs_class(recs_varinfo_file, cps_subsample):
100
104
  with pytest.raises(ValueError):
101
105
  Recs(data=cps_subsample, start_year=2000,
102
106
  gfactors='', weights='')
103
- # test Recs class for correct instantiation with no aging of data:
107
+ with pytest.raises(ValueError):
108
+ Recs(data=cps_subsample, start_year=2000,
109
+ gfactors=GrowFactors(), weights=wghts_df[:10])
110
+ # test Recs class for correct instantiation without aging of data:
104
111
  syr = 2014
105
112
  rec = Recs(data=cps_subsample, start_year=syr,
106
113
  gfactors=None, weights=None)
@@ -115,8 +122,6 @@ def test_recs_class(recs_varinfo_file, cps_subsample):
115
122
  assert np.allclose([sum_e00300_in_syr], [sum_e00300_in_syr_plus_one])
116
123
  del rec
117
124
  # test Recs class for correct instantiation with aging of data
118
- wghts_path = os.path.join(GrowFactors.FILE_PATH, 'cps_weights.csv.gz')
119
- wghts_df = pd.read_csv(wghts_path)
120
125
  rec = Recs(data=cps_subsample, start_year=syr,
121
126
  gfactors=GrowFactors(), weights=wghts_df)
122
127
  assert isinstance(rec, Recs)
@@ -138,3 +143,6 @@ def test_recs_class(recs_varinfo_file, cps_subsample):
138
143
  rec._read_weights(weights=None)
139
144
  with pytest.raises(ValueError):
140
145
  rec._read_weights(weights=[])
146
+ incomplete_data = pd.DataFrame({'MARS': np.array([1, 2, 3])})
147
+ with pytest.raises(ValueError):
148
+ rec._read_data(data=incomplete_data)
@@ -626,3 +626,45 @@ def test_read_json_revision_foramts(params, is_paramtools):
626
626
  assert is_paramtools_format(result) is is_paramtools
627
627
  if is_paramtools:
628
628
  assert result == json.loads(params)["consumption"]
629
+
630
+
631
+ def test_compatible_data_presence():
632
+ """
633
+ Test that every parameter in the policy_current_law.json file
634
+ has a compatible_data field that is a dictionary.
635
+ """
636
+ compatible_data_keys_set = set(["puf", "cps"])
637
+
638
+ # nested function used only in test_compatible_data_presence test
639
+ def valid_compatible_data(compatible_data):
640
+ """
641
+ Return True if compatible_data is a valid dictionary;
642
+ otherwise return False
643
+ """
644
+ if not isinstance(compatible_data, dict):
645
+ return False
646
+ if set(compatible_data.keys()) != compatible_data_keys_set:
647
+ return False
648
+ for key in compatible_data:
649
+ boolean = (compatible_data[key] is True or
650
+ compatible_data[key] is False)
651
+ if not boolean:
652
+ return False
653
+ return True
654
+
655
+ # main logic of test_compatible_data_presence test
656
+ clp = Policy()
657
+ allparams = clp.metadata()
658
+ problem_pnames = []
659
+ for pname in allparams:
660
+ if "compatible_data" in allparams[pname]:
661
+ compatible_data = allparams[pname]["compatible_data"]
662
+ else:
663
+ compatible_data = None
664
+ if not valid_compatible_data(compatible_data):
665
+ problem_pnames.append(pname)
666
+ if problem_pnames:
667
+ msg = "{} has no or invalid compatible_data field"
668
+ for pname in problem_pnames:
669
+ print(msg.format(pname))
670
+ assert False, "ERROR: list of problem_pnames is above"
@@ -29,10 +29,80 @@ def test_incorrect_records_instantiation(cps_subsample, cps_fullsample):
29
29
  _ = Records(data=cps_subsample, gfactors=None, weights=None,
30
30
  adjust_ratios=[])
31
31
  # test error raise when num of records is greater than num of weights
32
- wghts_path = os.path.join(Records.CODE_PATH, Records.PUF_WEIGHTS_FILENAME)
33
- puf_wghts = pd.read_csv(wghts_path)
32
+ cps_weights_path = os.path.join(Records.CODE_PATH, 'cps_weights.csv.gz')
33
+ weights = pd.read_csv(cps_weights_path)
34
+ some_wghts = weights[:100]
34
35
  with pytest.raises(ValueError):
35
- _ = Records(data=cps_fullsample, weights=puf_wghts, start_year=2020)
36
+ _ = Records(data=cps_fullsample, weights=some_wghts, start_year=2020)
37
+
38
+
39
+ def test_invalid_variable_values_1(cps_subsample):
40
+ """Test docstring"""
41
+ dta = cps_subsample.copy()
42
+ dta['PT_SSTB_income'] = 2
43
+ with pytest.raises(ValueError):
44
+ _ = Records(data=dta, start_year=2000)
45
+ dta['e01700'] = 1000
46
+ with pytest.raises(ValueError):
47
+ _ = Records(data=dta, start_year=2000)
48
+ dta['e00650'] = 1000
49
+ with pytest.raises(ValueError):
50
+ _ = Records(data=dta, start_year=2000)
51
+ dta['k1bx14s'] = 1000
52
+ with pytest.raises(ValueError):
53
+ _ = Records(data=dta, start_year=2000)
54
+ dta['e02100'] = dta['e02100p'] + dta['e02100s'] + 1000
55
+ with pytest.raises(ValueError):
56
+ _ = Records(data=dta, start_year=2000)
57
+ dta['e00900'] = dta['e00900p'] + dta['e00900s'] + 1000
58
+ with pytest.raises(ValueError):
59
+ _ = Records(data=dta, start_year=2000)
60
+ dta['e00200'] = dta['e00200p'] + dta['e00200s'] + 1000
61
+ with pytest.raises(ValueError):
62
+ _ = Records(data=dta, start_year=2000)
63
+ dta['EIC'] = 4
64
+ with pytest.raises(ValueError):
65
+ _ = Records(data=dta, start_year=2000)
66
+ dta['MARS'] = 0
67
+ with pytest.raises(ValueError):
68
+ _ = Records(data=dta, start_year=2000)
69
+
70
+
71
+ def test_invalid_variable_values_2():
72
+ """Test docstring"""
73
+ dta = pd.DataFrame(
74
+ {
75
+ 'RECID': [1],
76
+ 'MARS': [1],
77
+ 'e00200p': [8e4],
78
+ 'e00200s': [1e4],
79
+ 'e00200': [9e4],
80
+ }
81
+ )
82
+ with pytest.raises(ValueError):
83
+ _ = Records(data=dta, start_year=2000)
84
+ dta = pd.DataFrame(
85
+ {
86
+ 'RECID': [1],
87
+ 'MARS': [1],
88
+ 'e00900p': [8e4],
89
+ 'e00900s': [1e4],
90
+ 'e00900': [9e4],
91
+ }
92
+ )
93
+ with pytest.raises(ValueError):
94
+ _ = Records(data=dta, start_year=2000)
95
+ dta = pd.DataFrame(
96
+ {
97
+ 'RECID': [1],
98
+ 'MARS': [1],
99
+ 'e02100p': [8e4],
100
+ 'e02100s': [1e4],
101
+ 'e02100': [9e4],
102
+ }
103
+ )
104
+ with pytest.raises(ValueError):
105
+ _ = Records(data=dta, start_year=2000)
36
106
 
37
107
 
38
108
  def test_correct_records_instantiation(cps_subsample):
@@ -45,16 +115,15 @@ def test_correct_records_instantiation(cps_subsample):
45
115
  rec1.increment_year()
46
116
  sum_e00200_in_cps_year_plus_one = getattr(rec1, 'e00200').sum()
47
117
  assert sum_e00200_in_cps_year_plus_one == sum_e00200_in_cps_year
48
- wghts_path = os.path.join(Records.CODE_PATH, Records.CPS_WEIGHTS_FILENAME)
118
+ wghts_path = os.path.join(Records.CODE_PATH, 'cps_weights.csv.gz')
49
119
  wghts_df = pd.read_csv(wghts_path)
50
- ratios_path = os.path.join(Records.CODE_PATH, Records.PUF_RATIOS_FILENAME)
51
- ratios_df = pd.read_csv(ratios_path, index_col=0).transpose()
52
120
  rec2 = Records(data=cps_subsample,
53
121
  start_year=Records.CPSCSV_YEAR,
54
122
  gfactors=GrowFactors(),
55
123
  weights=wghts_df,
56
- adjust_ratios=ratios_df,
57
- exact_calculations=False)
124
+ adjust_ratios=None,
125
+ exact_calculations=False,
126
+ weights_scale=0.01)
58
127
  assert rec2
59
128
  assert np.all(getattr(rec2, 'MARS') != 0)
60
129
  assert getattr(rec2, 'current_year') == getattr(rec2, 'data_year')
@@ -249,3 +318,65 @@ def test_csv_input_vars_md_contents(tests_path):
249
318
  for var in valid_less_civ:
250
319
  msg += f'VARIABLE= {var}\n' # pylint: disable=consider-using-join
251
320
  raise ValueError(msg)
321
+
322
+
323
+ def test_cps_availability(tests_path, cps_data_path):
324
+ """
325
+ Cross-check records_variables.json data with variables in cps.csv file.
326
+ """
327
+ # make set of variable names that are in the cps.csv file
328
+ cpsdf = pd.read_csv(cps_data_path)
329
+ cpsvars = set(sorted(list(cpsdf)))
330
+ # make set of variable names that are marked as cps available in r_v.json
331
+ rvpath = os.path.join(tests_path, '..', 'records_variables.json')
332
+ with open(rvpath, 'r', encoding='utf-8') as rvfile:
333
+ rvdict = json.load(rvfile)
334
+ recvars = set()
335
+ for vname, vdict in rvdict['read'].items():
336
+ if 'taxdata_cps' in vdict.get('availability', ''):
337
+ recvars.add(vname)
338
+ # check that cpsvars and recvars sets are the same
339
+ assert (cpsvars - recvars) == set()
340
+ assert (recvars - cpsvars) == set()
341
+
342
+
343
+ @pytest.mark.requires_puf
344
+ def test_puf_availability(tests_path, puf_data_path):
345
+ """
346
+ Cross-check records_variables.json data with variables in puf.csv file
347
+ """
348
+ # make set of variable names that are in the puf.csv file
349
+ pufdf = pd.read_csv(puf_data_path)
350
+ pufvars = set(sorted(list(pufdf)))
351
+ # make set of variable names that are marked as puf available in r_v.json
352
+ rvpath = os.path.join(tests_path, '..', 'records_variables.json')
353
+ with open(rvpath, 'r', encoding='utf-8') as rvfile:
354
+ rvdict = json.load(rvfile)
355
+ recvars = set()
356
+ for vname, vdict in rvdict['read'].items():
357
+ if 'taxdata_puf' in vdict.get('availability', ''):
358
+ recvars.add(vname)
359
+ # check that pufvars and recvars sets are the same
360
+ assert (pufvars - recvars) == set()
361
+ assert (recvars - pufvars) == set()
362
+
363
+
364
+ @pytest.mark.requires_tmd
365
+ def test_tmd_availability(tests_path, tmd_data_path):
366
+ """
367
+ Cross-check records_variables.json data with variables in tmd.csv file
368
+ """
369
+ # make set of variable names that are in the tmd.csv file
370
+ tmddf = pd.read_csv(tmd_data_path)
371
+ tmdvars = set(sorted(list(tmddf)))
372
+ # make set of variable names that are marked as tmd available in r_v.json
373
+ rvpath = os.path.join(tests_path, '..', 'records_variables.json')
374
+ with open(rvpath, 'r', encoding='utf-8') as rvfile:
375
+ rvdict = json.load(rvfile)
376
+ recvars = set()
377
+ for vname, vdict in rvdict['read'].items():
378
+ if 'taxmicrodata_tmd' in vdict.get('availability', ''):
379
+ recvars.add(vname)
380
+ # check that tmdvars and recvars sets are the same
381
+ assert (tmdvars - recvars) == set()
382
+ assert (recvars - tmdvars) == set()
@@ -266,12 +266,12 @@ def test_reform_json_and_output(reform_file, tax_year, tests_path):
266
266
  raise ValueError(msg)
267
267
 
268
268
 
269
- def reform_results(rid, reform_dict, puf_data, reform_2017_law):
269
+ def reform_results(rid, reform_dict, cps_data, reform_2017_law):
270
270
  """
271
271
  Return actual results of the reform specified by rid and reform_dict.
272
272
  """
273
273
  # pylint: disable=too-many-locals
274
- rec = Records(data=puf_data)
274
+ rec = Records.cps_constructor(data=cps_data)
275
275
  # create baseline Calculator object, calc1
276
276
  pol = Policy()
277
277
  if reform_dict['baseline'] == '2017_law.json':
@@ -336,24 +336,22 @@ def fixture_reforms_dict(tests_path):
336
336
  NUM_REFORMS = 60 # when changing this also change num_reforms in conftest.py
337
337
 
338
338
 
339
- @pytest.mark.requires_pufcsv
340
339
  @pytest.mark.parametrize('rid', list(range(1, NUM_REFORMS + 1)))
341
340
  def test_reforms(rid, test_reforms_init, tests_path, baseline_2017_law,
342
- reforms_dict, puf_subsample):
341
+ reforms_dict, cps_subsample):
343
342
  """
344
343
  Write actual reform results to files.
345
344
  """
346
345
  # pylint: disable=too-many-arguments,too-many-positional-arguments
347
346
  assert test_reforms_init == NUM_REFORMS
348
347
  actual = reform_results(rid, reforms_dict[str(rid)],
349
- puf_subsample, baseline_2017_law)
348
+ cps_subsample, baseline_2017_law)
350
349
  afile_path = os.path.join(tests_path, f'reform_actual_{rid}.csv')
351
350
  with open(afile_path, 'w', encoding='utf-8') as afile:
352
351
  afile.write('rid,res1,res2,res3,res4\n')
353
352
  afile.write(f'{actual}\n')
354
353
 
355
354
 
356
- @pytest.mark.cps
357
355
  @pytest.mark.parametrize('reform_filename, expected_diff', [
358
356
  ('ext.json', 45.491),
359
357
  ('OBBBA.json', 0.0),
@@ -320,50 +320,10 @@ def test_init_errors(reformfile0, errorreformfile, errorassumpfile,
320
320
  # test TaxCalcIO.init method
321
321
  tcio.init(input_data=recdf, tax_year=year,
322
322
  baseline=baseline, reform=reform, assump=assump,
323
- aging_input_data=False,
324
323
  exact_calculations=True)
325
324
  assert tcio.errmsg
326
325
 
327
326
 
328
- def test_creation_with_aging(reformfile0):
329
- """
330
- Test TaxCalcIO instantiation with/without no policy reform and with aging.
331
- """
332
- taxyear = 2021
333
- tcio = TaxCalcIO(input_data=pd.read_csv(StringIO(RAWINPUT)),
334
- tax_year=taxyear,
335
- baseline=None,
336
- reform=reformfile0.name,
337
- assump=None,
338
- silent=False)
339
- assert not tcio.errmsg
340
- tcio.init(input_data=pd.read_csv(StringIO(RAWINPUT)),
341
- tax_year=taxyear,
342
- baseline=None,
343
- reform=reformfile0.name,
344
- assump=None,
345
- aging_input_data=True,
346
- exact_calculations=False)
347
- assert not tcio.errmsg
348
- assert tcio.tax_year() == taxyear
349
- taxyear = 2016
350
- tcio = TaxCalcIO(input_data=pd.read_csv(StringIO(RAWINPUT)),
351
- tax_year=taxyear,
352
- baseline=None,
353
- reform=None,
354
- assump=None)
355
- assert not tcio.errmsg
356
- tcio.init(input_data=pd.read_csv(StringIO(RAWINPUT)),
357
- tax_year=taxyear,
358
- baseline=None,
359
- reform=None,
360
- assump=None,
361
- aging_input_data=True,
362
- exact_calculations=False)
363
- assert not tcio.errmsg
364
- assert tcio.tax_year() == taxyear
365
-
366
-
367
327
  def test_ctor_init_with_cps_files():
368
328
  """
369
329
  Test use of CPS input files.
@@ -372,23 +332,17 @@ def test_ctor_init_with_cps_files():
372
332
  txyr = 2020
373
333
  for rid in [0, 99]:
374
334
  tcio = TaxCalcIO('cps.csv', txyr, None, None, None, runid=rid)
375
- tcio.init(
376
- 'cps.csv', txyr, None, None, None,
377
- aging_input_data=True,
378
- exact_calculations=False,
379
- )
335
+ tcio.init('cps.csv', txyr, None, None, None, exact_calculations=False)
380
336
  assert not tcio.errmsg
381
337
  assert tcio.tax_year() == txyr
382
338
  # test advance_to_year method
383
339
  tcio.silent = False
384
- tcio.advance_to_year(txyr + 1, True)
340
+ tcio.advance_to_year(txyr + 1)
385
341
  assert tcio.tax_year() == txyr + 1
386
342
  # specify invalid tax_year for cps.csv input data
387
343
  txyr = 2013
388
344
  tcio = TaxCalcIO('cps.csv', txyr, None, None, None)
389
- tcio.init('cps.csv', txyr, None, None, None,
390
- aging_input_data=True,
391
- exact_calculations=False)
345
+ tcio.init('cps.csv', txyr, None, None, None, exact_calculations=False)
392
346
  assert tcio.errmsg
393
347
 
394
348
 
@@ -424,7 +378,6 @@ def test_dump_variables(dumpvar_str, str_valid, num_vars):
424
378
  assert not tcio.errmsg
425
379
  tcio.init(input_data=recdf, tax_year=year,
426
380
  baseline=None, reform=None, assump=None,
427
- aging_input_data=False,
428
381
  exact_calculations=False)
429
382
  assert not tcio.errmsg
430
383
  varlist = tcio.dump_variables(dumpvar_str)
@@ -451,7 +404,6 @@ def test_output_options_min(reformfile1, assumpfile1):
451
404
  baseline=None,
452
405
  reform=reformfile1.name,
453
406
  assump=assumpfile1.name,
454
- aging_input_data=False,
455
407
  exact_calculations=False)
456
408
  assert not tcio.errmsg
457
409
  dumppath = tcio.output_filepath().replace('.xxx', '.dumpdb')
@@ -486,7 +438,6 @@ def test_output_options_mtr(reformfile1, assumpfile1):
486
438
  baseline=None,
487
439
  reform=reformfile1.name,
488
440
  assump=assumpfile1.name,
489
- aging_input_data=False,
490
441
  exact_calculations=False)
491
442
  assert not tcio.errmsg
492
443
  dumppath = tcio.output_filepath().replace('.xxx', '.dumpdb')
@@ -526,7 +477,6 @@ def test_write_policy_param_files(reformfile1):
526
477
  baseline=compound_reform,
527
478
  reform=compound_reform,
528
479
  assump=None,
529
- aging_input_data=False,
530
480
  exact_calculations=False)
531
481
  assert not tcio.errmsg
532
482
  tcio.write_policy_params_files()
@@ -563,7 +513,6 @@ def test_no_tables_or_graphs(reformfile1):
563
513
  baseline=None,
564
514
  reform=reformfile1.name,
565
515
  assump=None,
566
- aging_input_data=False,
567
516
  exact_calculations=False)
568
517
  assert not tcio.errmsg
569
518
  # create several TaxCalcIO output files
@@ -599,7 +548,6 @@ def test_tables(reformfile1):
599
548
  baseline=None,
600
549
  reform=reformfile1.name,
601
550
  assump=None,
602
- aging_input_data=False,
603
551
  exact_calculations=False)
604
552
  assert not tcio.errmsg
605
553
  # create TaxCalcIO tables file
@@ -633,7 +581,6 @@ def test_graphs(reformfile1):
633
581
  baseline=None,
634
582
  reform=reformfile1.name,
635
583
  assump=None,
636
- aging_input_data=False,
637
584
  exact_calculations=False)
638
585
  assert not tcio.errmsg
639
586
  tcio.analyze(output_graphs=True)
@@ -677,7 +624,6 @@ def test_analyze_warnings_print(warnreformfile):
677
624
  baseline=None,
678
625
  reform=warnreformfile.name,
679
626
  assump=None,
680
- aging_input_data=False,
681
627
  exact_calculations=False)
682
628
  assert not tcio.errmsg
683
629
  tcio.analyze()
@@ -745,7 +691,6 @@ def test_error_message_parsed_correctly(regression_reform_file):
745
691
  baseline=regression_reform_file.name,
746
692
  reform=regression_reform_file.name,
747
693
  assump=None,
748
- aging_input_data=False,
749
694
  exact_calculations=False)
750
695
  assert isinstance(tcio.errmsg, str) and tcio.errmsg
751
696
  exp_errmsg = (
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: taxcalc
3
- Version: 5.3.0
3
+ Version: 6.0.0
4
4
  Summary: Tax-Calculator
5
5
  Home-page: https://github.com/PSLmodels/Tax-Calculator
6
6
  Download-URL: https://github.com/PSLmodels/Tax-Calculator
@@ -1,32 +1,30 @@
1
- taxcalc/__init__.py,sha256=5kXLxekmfAIGKSaI0ownFFGPUYrcMHVGjsgkyQE-KgA,536
1
+ taxcalc/__init__.py,sha256=bx1f6yo5NhIJZFyNhOBAu1hfPUE-LyHd1l2Y-fMfpAc,536
2
2
  taxcalc/calcfunctions.py,sha256=8XUhXncnsRkqDL-3uqH1Ew2HIMs3p-gf97KHRKnJZJM,135517
3
- taxcalc/calculator.py,sha256=nO4GM9pCY4vvmXMcExc9cgEfrMJj-A6Z9aKODHdjPLQ,64135
3
+ taxcalc/calculator.py,sha256=u7I5Wru2RTdo1G4tJ4RBGsAzrvx78VGUhZyegiIf8dg,64151
4
4
  taxcalc/conftest.py,sha256=nO4J7qu1sTHgjqrzhpRMvfMJUrNm6GP_IsSuuDt_MeQ,141
5
5
  taxcalc/consumption.json,sha256=FbGpsLP0W02sYc7o8N-BVz8Xw8hfk_gCr5MtHtgEBQQ,7615
6
6
  taxcalc/consumption.py,sha256=pkXhFGpFqu7hW62KaTctfRSzR-pXzMB1ai8XCQRAgXk,3480
7
7
  taxcalc/cps.csv.gz,sha256=SS6tSduU_Eu0EJwzpslnmqMsQQQucVMzzITfH-SeV40,9851074
8
8
  taxcalc/cps_weights.csv.gz,sha256=-k31Swqss0WEGA3Zo8AoReLR_C7BRUk4PDmfh-oVVyo,13657706
9
- taxcalc/data.py,sha256=gCdPszWUgPP5kCSpsAiL_4ytC6j32TVaiaEqjnqZAgc,11698
9
+ taxcalc/data.py,sha256=8whYnj8qRZiYi6iUjLvRQbIZrUjj9zqIxNGcEJ933jw,11676
10
10
  taxcalc/decorators.py,sha256=C8H4IpdCzioI0-aTCNHVjIxWsGh-_EZWryDEox2Dt1Q,11331
11
11
  taxcalc/growdiff.json,sha256=GCMuFsHv5qP2HBzqiev3CbFJy0BXnhM2ShaPT2QuNTs,14601
12
12
  taxcalc/growdiff.py,sha256=Q3St-KPIUN2I_l1S0jwN0yr8O4LuzkNIU-_qbXTkrZw,2977
13
13
  taxcalc/growfactors.csv,sha256=URIGSKApCY4McvdILkCaIm8EhCGEME2Du-ef5Q9c0uE,5134
14
14
  taxcalc/growfactors.py,sha256=OrYmlWMQAmoMe5fhgnPJcIdvFs0aDf9JBy2aU7J0kBQ,6576
15
15
  taxcalc/parameters.py,sha256=ObwQMBlPjq3tyNwiR94Nj0zouIVsNaHIho-OQK1RNKg,35966
16
- taxcalc/policy.py,sha256=e24edxUHND-WujHZl_FUp6h9ECgeC3sRu908vom7qjs,9415
16
+ taxcalc/policy.py,sha256=vLhqvbsOrImpb0BsRhmgdrnRCsOvPWUc_fTUSYq8yOM,8700
17
17
  taxcalc/policy_current_law.json,sha256=_8OHMh4VsK4VJ7LN5aGQX_b_UbimYDqzsEt8P6NZaw4,608288
18
- taxcalc/puf_ratios.csv,sha256=Zt7PPQXpjF4gbegML3S0rxP7Egw871qhnIoxu7u6vko,3580
19
- taxcalc/puf_weights.csv.gz,sha256=FKlNlk-p9CrTLODkmTitTgg7iBTE4iYMnOd1y9ocuao,13613549
20
- taxcalc/records.py,sha256=zz-q7rNFUBqDLaDYjcScfwf22zzSw-XEew00HGWB0Ho,18397
21
- taxcalc/records_variables.json,sha256=JQjaXOS-QyJLDMl_3K4WyCNyRmJpxho3vC_gik5g04Y,42681
22
- taxcalc/taxcalcio.py,sha256=TR29dAdYer85Bo8HFljt9dYqsIL7AvmWx0xRe3-ZNpY,38543
18
+ taxcalc/records.py,sha256=IrUlfM3AiVq2K_rp_jBOc5X2h6PKREQf_MmfgJDjdpY,17490
19
+ taxcalc/records_variables.json,sha256=-yo5d9kVvCgVCdx8E8bOiZlC_Pu-zjznjLeYWTiT4Uw,44583
20
+ taxcalc/taxcalcio.py,sha256=CjByunQKr6Jc-bSPZjso7bjb6KW5nMNVy3CaDdBdLyo,39047
23
21
  taxcalc/utils.py,sha256=R12cGWrhVNNxuWfXVVlWiu5FGoxyX9tzrO_iKsW8mjg,63666
24
22
  taxcalc/utilsprvt.py,sha256=iIyWp9-N3_XWjQj2jV2CWnJy7vrNlKB2_vIMwYjgbWY,1323
25
23
  taxcalc/assumptions/ASSUMPTIONS.md,sha256=cFQqWn1nScaladVaQ7xNm1jDY8CsGdLmqZEzUZeRrb8,1917
26
24
  taxcalc/assumptions/README.md,sha256=Ww55r2zH1neoRSl_MawrPmX-ugaztIZ7_ALrquuatdQ,809
27
25
  taxcalc/assumptions/economic_assumptions_template.json,sha256=utMk38GwSQFrkOAtRrDVhMQLpfaZH3JmtTznKX7IouM,2610
28
26
  taxcalc/cli/__init__.py,sha256=cyZ0tdx41j_vV_B6GAkqJmNKKG-B0wUC0ThC75lJlk4,104
29
- taxcalc/cli/tc.py,sha256=m8KRiR0sUS3w2q0WhSwowYb-GCzRcbvfqOhc_-GR1OM,18982
27
+ taxcalc/cli/tc.py,sha256=YAtcWnGcwTgT3DJIWbwfHAtonXav8k2X_yDV5fCxf8M,18760
30
28
  taxcalc/reforms/2017_law.json,sha256=4QHE3gMKueXD3M97ODqA0LjofXUfSmwVvJA1FLclaqQ,5264
31
29
  taxcalc/reforms/2017_law.out.csv,sha256=nnNKXqY2kof8HC1nnU8srPsvNNepi6ISXQ9OJpQnT7M,473
32
30
  taxcalc/reforms/ARPA.json,sha256=6oGn3pZ4clAhjFHvqpmm7sXcm407Ea_8mjJchSscKpc,3203
@@ -74,34 +72,30 @@ taxcalc/reforms/archive/TCJA_Senate_120117.json,sha256=hruGq8bVtJEMmSsOIuTcWiYON
74
72
  taxcalc/tests/benefits_expect.csv,sha256=CFpMpg8a-5iNVSRnmCnl9dncwXx6eGn-KSnTJ2GqmS4,4833
75
73
  taxcalc/tests/cmpi_cps_expect.txt,sha256=NCyG3XhgnV8qJe9TaF9l-9yUuwNfANNDvFn1HcSfZ1c,6262
76
74
  taxcalc/tests/cmpi_puf_expect.txt,sha256=dtHBPDY23qttxjQsPpxhLYoUId1tnPZ4uNHx49NlZ0s,6264
77
- taxcalc/tests/conftest.py,sha256=HT5faHHoYgyRzOOyhP1EzUfie7l9TmiBAqgC_y9F0M4,5164
75
+ taxcalc/tests/conftest.py,sha256=XCqh5cZglHXyDd_zcpttlJk7nIV95IdxKTXlEC8zbeE,5371
78
76
  taxcalc/tests/cpscsv_agg_expect.csv,sha256=80Sq2GlP2oz4vKJfrarYy4qRGWNxUs7DSBYV2qxesGk,3511
79
77
  taxcalc/tests/puf_var_correl_coeffs_2016.csv,sha256=lQXyUEa9wAyhUEOtYm5j0p-cnzyswmViCNJwa22hztg,57314
80
78
  taxcalc/tests/puf_var_wght_means_by_year.csv,sha256=ReclabBk9MVO8p1y62h9xNDoFw9anjXe8BmKiFEr0hk,12889
81
79
  taxcalc/tests/pufcsv_agg_expect.csv,sha256=H9TCOhi_EksKNVa-Sp56cMGBxpCAD57xs3CHXzQNhp0,3545
82
80
  taxcalc/tests/pufcsv_mtr_expect.txt,sha256=Y5-4ulrq2QWCceGhCQc60N2ulc7YTq7w-qf11mB74Os,4265
83
81
  taxcalc/tests/reforms.json,sha256=dIP28djWy-fkPRI5gn7oXHLx_-bzB8KMlS77-1x8Ccc,17193
84
- taxcalc/tests/reforms_expect.csv,sha256=iIYLn3Ck8UFFcoDikWs1Qq4xEs1_R7ZSKKEQIVgE_18,1363
82
+ taxcalc/tests/reforms_expect.csv,sha256=AhrIJP2fON8d1exXJ6yLwnng0bm1X4dGn0IokP5ItQA,1354
85
83
  taxcalc/tests/test_4package.py,sha256=bB8aHmeOchYPTdSYrzwQD3X5Gr-FmCdyu0Ykv3SSjaA,3573
86
84
  taxcalc/tests/test_benefits.py,sha256=oaui5mO0TuW8Ht-uxvUCBL5zM3iTENq3Whyf_gEpY1U,3392
87
85
  taxcalc/tests/test_calcfunctions.py,sha256=7uD1EW48TgsEE6pNHIxkXNi9gvZR7dbT7il6jAqgy9s,34653
88
- taxcalc/tests/test_calculator.py,sha256=ppWmnlNrjlLUjAwgs-hamATH4telAhKWkB6kbx3uNJQ,33672
89
- taxcalc/tests/test_compare.py,sha256=W7rcMaCt8l0pmL9QAXdXqnfn6ehtpEoBW2_D82WJs9U,10873
90
- taxcalc/tests/test_compatible_data.py,sha256=MP-DZXrBJ_2ftuxHchl3EGOhPnP5pnnrSQOM9POSx0c,13224
86
+ taxcalc/tests/test_calculator.py,sha256=ZOqfg6yM93qivNnKiLZVC_OiCtdauDVN036ERPu6Wy8,35037
91
87
  taxcalc/tests/test_consumption.py,sha256=CJ9xWtixcJXSpkVxyBrYC1jjQYGQHifsJ8IL1rK7BIk,6318
92
- taxcalc/tests/test_cpscsv.py,sha256=NvHMxem7jloK59VsIoH3A3pr1pfXam54n7S2JTUxI0U,8410
93
- taxcalc/tests/test_data.py,sha256=Zwuf23WeaF0N53X0eo3MlnkO2Pn4qqgGNUZPpD8FETc,4461
88
+ taxcalc/tests/test_cpscsv.py,sha256=pc-TGmAXcHL1_3g1Dyityad7Rm16Oem4YYOLMWS0t1g,7628
89
+ taxcalc/tests/test_data.py,sha256=xXbbVrBCgGJTyqxyk17LTxJbf2W1A93HOws-20G0aGk,4831
94
90
  taxcalc/tests/test_decorators.py,sha256=hKM1_X_1U4YOat06UIAfsfbjr0WcDLQhuXhQfjlySr8,10309
95
91
  taxcalc/tests/test_growdiff.py,sha256=-xUv33Bnzl5oB-DaIIkOqZ9375ULNCTrWam9LpvDwI8,3420
96
92
  taxcalc/tests/test_growfactors.py,sha256=L-DQMR2fh_rOQa3Lx1CDVnB2Q73zXUfTYYVunt0heto,2796
97
- taxcalc/tests/test_parameters.py,sha256=b_Gzy_23M95CdQV1fSr06bW3cXWcnAN-AgcB10EOxhQ,20612
93
+ taxcalc/tests/test_parameters.py,sha256=LqN0zNfkvovzdDlFzS7CGF-mXAF_XTZd2Wb6ylqOugA,22102
98
94
  taxcalc/tests/test_policy.py,sha256=rrJlh408be_cP7v6fa-k6hfiRuVH2FAYvGzxjIZAaUE,54902
99
- taxcalc/tests/test_puf_var_stats.py,sha256=uZ-UZalpaRKOnaoqUzGo1c7vBnusGkThqTIaVapntvg,7786
100
- taxcalc/tests/test_pufcsv.py,sha256=iI35JvKnijHFk5hOwa9qQtl0KtSpIyFjjsSUq4vpJ1o,14456
101
- taxcalc/tests/test_records.py,sha256=gYX6kiI4WuJYYv07hDXL1zRISRnySDR3wT_EMUrR6kI,8975
102
- taxcalc/tests/test_reforms.py,sha256=HLne537IlqQL_s5dDwkwYBNfurPIs7BhtSJczW0YpBU,15163
95
+ taxcalc/tests/test_records.py,sha256=mB0BcEDzfrq1UHWGVRNf99xW-D9yjufAKtciAlTgDMw,13467
96
+ taxcalc/tests/test_reforms.py,sha256=IWOCWvq412hV1I7u_Tduj6kQM_IsyHBztgOT6Z2A5-w,15133
103
97
  taxcalc/tests/test_responses.py,sha256=2CkVVdaDNCSALMoUcGgweRlS2tfsK3kXogHtDkZMqJU,1663
104
- taxcalc/tests/test_taxcalcio.py,sha256=_2g5vtPRNSVQeArmsioCoHmOkg_jpQ1gscGNNf0pw7E,24051
98
+ taxcalc/tests/test_taxcalcio.py,sha256=OzSkDvqINcgPWg1ANErZ5L3fl2la8IRj1dw6_9rP798,22207
105
99
  taxcalc/tests/test_utils.py,sha256=hqBVxddwcSP_6dEBccb-FlPMDm68EENzTtFaVVZ8exs,29403
106
100
  taxcalc/validation/CSV_INPUT_VARS.md,sha256=MqlZZGt_a1n8JAU-nY5MjnTmjz1pMOuhtpVYIGUgl38,1433
107
101
  taxcalc/validation/CSV_OUTPUT_VARS.md,sha256=wr8oyCJDXcxl4Lu0H_wMofUQYhEIyHDif6vkbas1FGE,3000
@@ -130,9 +124,9 @@ taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv,sha256=
130
124
  taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv,sha256=YhgojbLowH3yujdYu7SGkdvBZmTgpugu4wYc1Be069M,1125
131
125
  taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv,sha256=g9J4BPbTySV-h-RcLvReJq9v1jscgiRSSZzi0taEA-k,1225
132
126
  taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv,sha256=Ceh15N_Xr3L7cpYjzGa-8NLCV3obc8PNHEhE5ZxSPhI,1238
133
- taxcalc-5.3.0.dist-info/licenses/LICENSE,sha256=m5epLdB-_NXiY7NsEDgcHP4jDtJ4vOlRf5S3Jb-jraY,1299
134
- taxcalc-5.3.0.dist-info/METADATA,sha256=5WpnBzwPo1bF_W-T27Mchq5aDITFIF1dMNOLhd2cJ54,3509
135
- taxcalc-5.3.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
136
- taxcalc-5.3.0.dist-info/entry_points.txt,sha256=a3ZE1piRv683p27fOLdWZvVJXESkoslTOp5iXV7uVco,50
137
- taxcalc-5.3.0.dist-info/top_level.txt,sha256=Wh8wTDHkA_cm4dn8IoUCviDyGgVQqwEQKPJnl8z6d4c,8
138
- taxcalc-5.3.0.dist-info/RECORD,,
127
+ taxcalc-6.0.0.dist-info/licenses/LICENSE,sha256=m5epLdB-_NXiY7NsEDgcHP4jDtJ4vOlRf5S3Jb-jraY,1299
128
+ taxcalc-6.0.0.dist-info/METADATA,sha256=PGKspEXSi4R_SU2zDezHX9q8Q2iPgpk6xUU3E6WCYtk,3509
129
+ taxcalc-6.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
130
+ taxcalc-6.0.0.dist-info/entry_points.txt,sha256=a3ZE1piRv683p27fOLdWZvVJXESkoslTOp5iXV7uVco,50
131
+ taxcalc-6.0.0.dist-info/top_level.txt,sha256=Wh8wTDHkA_cm4dn8IoUCviDyGgVQqwEQKPJnl8z6d4c,8
132
+ taxcalc-6.0.0.dist-info/RECORD,,
taxcalc/puf_ratios.csv DELETED
@@ -1,26 +0,0 @@
1
- agi_bin,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18
2
- INT2011,1.0259,0.5597,0.9448,0.9681,0.9728,0.9464,0.8390,0.8997,0.9713,0.9239,0.9342,0.9413,0.9497,0.9510,0.9693,0.9702,0.9569,1.0123,1.7014
3
- INT2012,0.7778,0.9454,0.8433,0.8152,0.7153,0.8101,0.7961,0.7940,0.8481,0.9063,0.9129,0.9183,1.0343,1.0435,1.0129,1.1436,1.0975,1.2339,1.3445
4
- INT2013,1.1325,0.7670,0.7821,0.7778,0.8935,0.8699,0.9558,0.9045,0.8342,0.8595,0.9746,1.0269,1.0499,1.0505,1.0891,0.9632,1.0449,0.9690,1.1443
5
- INT2014,0.9106,0.8669,0.8492,0.7738,0.8431,0.8802,0.9729,0.8840,0.8368,1.0109,0.8448,1.0532,1.0274,0.9291,1.0609,1.1524,1.0624,1.0728,1.0860
6
- INT2015,0.9813,0.9511,0.9323,0.9470,0.9543,0.9246,0.9368,0.9315,0.9463,0.9698,0.9887,1.0165,0.9966,0.9906,1.0241,0.9827,1.0221,1.1437,1.1671
7
- INT2016,0.9843,1.0086,1.0453,1.0319,1.0447,1.0342,1.0110,1.0028,1.0025,1.0174,0.9482,0.9531,0.9752,1.0131,1.0723,1.0130,1.0804,1.0810,0.9938
8
- INT2017,0.9932,0.9174,0.8978,0.8918,0.8944,0.9131,0.9215,0.9399,0.9611,0.9788,1.0156,1.0693,1.0312,0.9881,0.9354,0.9756,0.9565,1.0484,1.1942
9
- INT2018,0.9991,0.9744,0.9683,0.9673,0.9757,0.9725,0.9748,0.9779,0.9742,0.9969,0.9929,1.0038,1.0148,1.0067,1.0226,0.9898,1.0182,1.0909,0.9981
10
- INT2019,0.9979,0.9771,0.9763,0.9903,0.9793,0.9805,0.9769,0.9852,0.9826,0.9937,0.9934,1.0109,1.0020,1.0074,0.9985,1.0006,1.0253,1.0283,1.0196
11
- INT2020,1.0017,0.9799,0.9739,0.9756,0.9843,0.9849,0.9831,0.9833,0.9932,0.9965,0.9958,1.0114,1.0058,1.0047,1.0076,0.9991,1.0129,1.0113,1.0113
12
- INT2021,0.9959,0.9797,0.9776,0.9781,0.9836,0.9898,0.9883,0.9869,0.9920,0.9978,1.0043,0.9974,1.0066,1.0119,1.0049,1.0040,1.0303,1.0085,1.0022
13
- INT2022,1.0062,0.9815,0.9810,0.9783,0.9724,0.9820,0.9850,0.9893,0.9934,1.0049,1.0022,1.0050,1.0029,1.0042,1.0047,1.0044,1.0133,0.9990,1.0111
14
- INT2023,0.9983,0.9812,0.9761,0.9789,0.9891,0.9893,0.9852,1.0199,0.9942,0.9956,1.0022,1.0012,1.0023,1.0073,1.0006,1.0093,1.0214,1.0020,0.9943
15
- INT2024,1.0016,0.9843,0.9813,0.9791,0.9712,0.9789,0.9893,1.0100,0.9905,0.9984,0.9987,0.9971,1.0048,1.0077,1.0089,1.0075,1.0238,1.0148,1.0081
16
- INT2025,1.0086,0.9934,0.9772,0.9767,0.9834,0.9817,1.0012,0.9941,0.9935,1.0008,0.9990,0.9978,1.0051,1.0074,1.0142,1.0150,1.0238,0.9941,0.9912
17
- INT2026,1.0089,0.9843,0.9792,0.9796,0.9872,0.9904,0.9989,0.9909,0.9953,0.9939,0.9931,0.9932,1.0070,1.0142,1.0373,1.0250,1.0208,0.9992,0.9937
18
- INT2027,1.0115,0.9888,0.9839,0.9805,0.9888,0.9905,0.9824,0.9951,0.9905,0.9944,0.9993,0.9913,1.0073,1.0184,1.0175,1.0275,1.0259,0.9935,0.9946
19
- INT2028,1.0062,0.9977,0.9772,0.9829,0.9863,0.9878,1.0107,0.9957,0.9924,0.9954,0.9931,0.9921,1.0068,1.0177,1.0271,1.0221,1.0222,0.9960,0.9918
20
- INT2029,1.0101,0.9939,0.9780,0.9801,0.9824,0.9852,1.0025,0.9850,0.9945,0.9933,0.9934,0.9928,1.0033,1.0285,1.0278,1.0474,1.0236,1.0013,0.9924
21
- INT2030,1.0295,1.0010,0.9821,0.9840,0.9821,0.9917,0.9822,0.9859,0.9830,0.9890,0.9815,0.9922,1.0058,1.0359,1.0382,1.0449,1.0299,0.9947,0.9921
22
- INT2031,1.0280,1.0214,0.9858,0.9918,0.9829,0.9886,0.9858,0.9788,0.9910,0.9938,0.9791,0.9869,0.9950,1.0446,1.0442,1.0732,1.0287,1.0061,0.9932
23
- INT2032,1.0079,1.1009,0.9920,0.9811,0.9867,0.9849,0.9881,0.9740,0.9732,0.9791,0.9662,0.9835,0.9898,1.0786,1.0900,1.1373,1.0482,1.0099,0.9983
24
- INT2033,0.9352,0.8346,0.9707,0.9745,0.9896,0.9850,0.9878,1.0383,1.0313,1.0351,1.1156,1.0746,1.0377,0.8505,0.8247,0.7425,0.8974,1.0567,1.0930
25
- INT2034,1.0278,0.9998,0.9801,0.9808,0.9905,0.9879,0.9984,0.9804,0.9885,0.9931,0.9775,0.9841,1.0025,1.0381,1.0368,1.0580,1.0409,1.0028,0.9939
26
- INT2035,1.0241,1.0200,0.9891,0.9840,0.9837,0.9859,0.9886,0.9688,0.9850,0.9882,0.9774,0.9926,1.0011,1.0428,1.0542,1.0592,1.0396,0.9982,0.9940
Binary file