taxcalc 4.5.0__py3-none-any.whl → 4.6.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.
@@ -68,6 +68,7 @@ def test_for_consistency(tests_path):
68
68
  'coverage',
69
69
  "pip",
70
70
  "jupyter-book",
71
+ "marshmallow>=3.22, <4.0", # TODO: drop this after ParamTools is fixed
71
72
  "setuptools"
72
73
  ])
73
74
  # read conda.recipe/meta.yaml requirements
@@ -808,10 +808,10 @@ def test_itemded_component_amounts(year, cvname, hcname, puf_fullsample):
808
808
  policy2.implement_reform(reform2)
809
809
  assert not policy2.parameter_errors
810
810
  # compute tax liability in specified year
811
- calc1 = Calculator(policy=policy1, records=recs, verbose=False)
811
+ calc1 = Calculator(policy=policy1, records=recs, verbose=True)
812
812
  calc1.advance_to_year(year)
813
813
  calc1.calc_all()
814
- calc2 = Calculator(policy=policy2, records=recs, verbose=False)
814
+ calc2 = Calculator(policy=policy2, records=recs, verbose=True)
815
815
  calc2.advance_to_year(year)
816
816
  calc2.calc_all()
817
817
  # confirm that nobody is taking the standard deduction
@@ -386,4 +386,4 @@ def test_ext_reform(tests_path):
386
386
  iitax_ext = calc_ext.array('iitax')
387
387
  rdiff = iitax_ext - iitax_end
388
388
  weighted_sum_rdiff = (rdiff * calc_end.array('s006')).sum() * 1.0e-9
389
- assert np.allclose([weighted_sum_rdiff], [-214.11], rtol=0.0, atol=0.01)
389
+ assert np.allclose([weighted_sum_rdiff], [-205.769], rtol=0.0, atol=0.01)
@@ -243,20 +243,19 @@ def fixture_assumpfile2():
243
243
  pass # sometimes we can't remove a generated temporary file
244
244
 
245
245
 
246
- @pytest.mark.parametrize('input_data, baseline, reform, assump, outdir', [
246
+ @pytest.mark.parametrize('input_data, baseline, reform, assump', [
247
247
  ('no-dot-csv-filename', 'no-dot-json-filename',
248
248
  'no-dot-json-filename',
249
- 'no-dot-json-filename', 'no-output-directory'),
250
- ([], [], [], [], []),
251
- ('no-exist.csv', 'no-exist.json', 'no-exist.json', 'no-exist.json', '.'),
249
+ 'no-dot-json-filename'),
250
+ ([], [], [], [],),
251
+ ('no-exist.csv', 'no-exist.json', 'no-exist.json', 'no-exist.json'),
252
252
  ])
253
- def test_ctor_errors(input_data, baseline, reform, assump, outdir):
253
+ def test_ctor_errors(input_data, baseline, reform, assump):
254
254
  """
255
255
  Ensure error messages are generated by TaxCalcIO.__init__.
256
256
  """
257
257
  tcio = TaxCalcIO(input_data=input_data, tax_year=2013,
258
- baseline=baseline, reform=reform, assump=assump,
259
- outdir=outdir)
258
+ baseline=baseline, reform=reform, assump=assump)
260
259
  assert tcio.errmsg
261
260
 
262
261
 
@@ -316,7 +315,8 @@ def test_creation_with_aging(reformfile0):
316
315
  tax_year=taxyear,
317
316
  baseline=None,
318
317
  reform=reformfile0.name,
319
- assump=None)
318
+ assump=None,
319
+ silent=False)
320
320
  assert not tcio.errmsg
321
321
  tcio.init(input_data=pd.read_csv(StringIO(RAWINPUT)),
322
322
  tax_year=taxyear,
@@ -371,18 +371,18 @@ def test_ctor_init_with_cps_files():
371
371
  MARS;iitax payrolltax|combined,
372
372
  c00100
373
373
  surtax
374
- """, True, 8), # these 6 parameters plus added RECID and FLPDYR
374
+ """, True, 6), # these 6 parameters minus MARS plus RECID
375
375
 
376
376
  ("""
377
377
  MARS;iitax payrolltax|kombined,c00100
378
378
  surtax
379
379
  RECID
380
380
  FLPDYR
381
- """, False, 8)
381
+ """, False, 0)
382
382
  ])
383
- def test_custom_dump_variables(dumpvar_str, str_valid, num_vars):
383
+ def test_dump_variables(dumpvar_str, str_valid, num_vars):
384
384
  """
385
- Test TaxCalcIO custom_dump_variables method.
385
+ Test TaxCalcIO dump_variables method.
386
386
  """
387
387
  recdict = {'RECID': 1, 'MARS': 1, 'e00300': 100000, 's006': 1e8}
388
388
  recdf = pd.DataFrame(data=recdict, index=[0])
@@ -395,17 +395,17 @@ def test_custom_dump_variables(dumpvar_str, str_valid, num_vars):
395
395
  aging_input_data=False,
396
396
  exact_calculations=False)
397
397
  assert not tcio.errmsg
398
- varset = tcio.custom_dump_variables(dumpvar_str)
399
- assert isinstance(varset, set)
398
+ varlist = tcio.dump_variables(dumpvar_str)
399
+ assert isinstance(varlist, list)
400
400
  valid = len(tcio.errmsg) == 0
401
401
  assert valid == str_valid
402
402
  if valid:
403
- assert len(varset) == num_vars
403
+ assert len(varlist) == num_vars
404
404
 
405
405
 
406
- def test_output_options(reformfile1, assumpfile1):
406
+ def test_output_options_min(reformfile1, assumpfile1):
407
407
  """
408
- Test TaxCalcIO output_dump options when writing_output_file.
408
+ Test TaxCalcIO output_dump options with minimal dump variables.
409
409
  """
410
410
  taxyear = 2021
411
411
  tcio = TaxCalcIO(input_data=pd.read_csv(StringIO(RAWINPUT)),
@@ -422,114 +422,93 @@ def test_output_options(reformfile1, assumpfile1):
422
422
  aging_input_data=False,
423
423
  exact_calculations=False)
424
424
  assert not tcio.errmsg
425
- outfilepath = tcio.output_filepath()
426
- # minimal output with no --dump option
427
- try:
428
- tcio.analyze(writing_output_file=True, output_dump=False)
429
- except Exception: # pylint: disable=broad-except
430
- if os.path.isfile(outfilepath):
431
- try:
432
- os.remove(outfilepath)
433
- except OSError:
434
- pass # sometimes we can't remove a generated temporary file
435
- assert False, 'TaxCalcIO.analyze(minimal_output) failed'
436
- # --dump output with full dump
437
- try:
438
- tcio.analyze(writing_output_file=True, output_dump=True)
439
- except Exception: # pylint: disable=broad-except
440
- if os.path.isfile(outfilepath):
441
- try:
442
- os.remove(outfilepath)
443
- except OSError:
444
- pass # sometimes we can't remove a generated temporary file
445
- assert False, 'TaxCalcIO.analyze(full_dump_output) failed'
446
- # --dump output with partial dump
425
+ dumppath = tcio.output_filepath().replace('.xxx', '.db')
426
+ # minimal dump output
427
+ dumpvars = TaxCalcIO.MINIMAL_DUMPVARS
447
428
  try:
448
- tcio.analyze(writing_output_file=True,
449
- dump_varset=set(['RECID', 'combined']),
450
- output_dump=True)
429
+ tcio.analyze(output_dump=True, dump_varlist=dumpvars)
451
430
  except Exception: # pylint: disable=broad-except
452
- if os.path.isfile(outfilepath):
431
+ if os.path.isfile(dumppath):
453
432
  try:
454
- os.remove(outfilepath)
433
+ os.remove(dumppath)
455
434
  except OSError:
456
435
  pass # sometimes we can't remove a generated temporary file
457
- assert False, 'TaxCalcIO.analyze(partial_dump_output) failed'
458
- # if tries were successful, remove doc file and output file
459
- docfilepath = outfilepath.replace('.csv', '-doc.text')
460
- if os.path.isfile(docfilepath):
461
- os.remove(docfilepath)
462
- if os.path.isfile(outfilepath):
463
- os.remove(outfilepath)
436
+ assert False, 'TaxCalcIO.analyze(minimal_dump_output) failed'
437
+ if os.path.isfile(dumppath):
438
+ os.remove(dumppath)
464
439
 
465
440
 
466
- def test_write_doc_file(reformfile1, assumpfile1):
441
+ def test_output_options_mtr(reformfile1, assumpfile1):
467
442
  """
468
- Test write_doc_file with compound reform.
443
+ Test TaxCalcIO output_dump options with mtr_* dump variables.
469
444
  """
470
445
  taxyear = 2021
471
- compound_reform = f'{reformfile1.name}+{reformfile1.name}'
472
446
  tcio = TaxCalcIO(input_data=pd.read_csv(StringIO(RAWINPUT)),
473
447
  tax_year=taxyear,
474
448
  baseline=None,
475
- reform=compound_reform,
449
+ reform=reformfile1.name,
476
450
  assump=assumpfile1.name)
477
451
  assert not tcio.errmsg
478
452
  tcio.init(input_data=pd.read_csv(StringIO(RAWINPUT)),
479
453
  tax_year=taxyear,
480
454
  baseline=None,
481
- reform=compound_reform,
455
+ reform=reformfile1.name,
482
456
  assump=assumpfile1.name,
483
457
  aging_input_data=False,
484
458
  exact_calculations=False)
485
459
  assert not tcio.errmsg
486
- tcio.write_doc_file()
487
- outfilepath = tcio.output_filepath()
488
- docfilepath = outfilepath.replace('.csv', '-doc.text')
489
- if os.path.isfile(docfilepath):
490
- os.remove(docfilepath)
460
+ dumppath = tcio.output_filepath().replace('.xxx', '.db')
461
+ # minimal+mtr_* dump output
462
+ dumpvars = TaxCalcIO.MINIMAL_DUMPVARS
463
+ for var in TaxCalcIO.MTR_DUMPVARS:
464
+ dumpvars.append(var)
465
+ try:
466
+ tcio.analyze(output_dump=True, dump_varlist=dumpvars)
467
+ except Exception: # pylint: disable=broad-except
468
+ if os.path.isfile(dumppath):
469
+ try:
470
+ os.remove(dumppath)
471
+ except OSError:
472
+ pass # sometimes we can't remove a generated temporary file
473
+ assert False, 'TaxCalcIO.analyze(minimal_dump_output) failed'
474
+ if os.path.isfile(dumppath):
475
+ os.remove(dumppath)
491
476
 
492
477
 
493
- def test_sqldb_option(reformfile1, assumpfile1):
478
+ def test_write_policy_param_files(reformfile1):
494
479
  """
495
- Test TaxCalcIO output_sqldb option when not writing_output_file.
480
+ Test write_policy_params_files with compound reform.
496
481
  """
497
482
  taxyear = 2021
498
- tcio = TaxCalcIO(input_data=pd.read_csv(StringIO(RAWINPUT)),
499
- tax_year=taxyear,
500
- baseline=None,
501
- reform=reformfile1.name,
502
- assump=assumpfile1.name)
483
+ compound_reform = f'{reformfile1.name}+{reformfile1.name}'
484
+ tcio = TaxCalcIO(
485
+ input_data=pd.read_csv(StringIO(RAWINPUT)),
486
+ tax_year=taxyear,
487
+ baseline=None,
488
+ reform=compound_reform,
489
+ assump=None,
490
+ )
503
491
  assert not tcio.errmsg
504
492
  tcio.init(input_data=pd.read_csv(StringIO(RAWINPUT)),
505
493
  tax_year=taxyear,
506
494
  baseline=None,
507
- reform=reformfile1.name,
508
- assump=assumpfile1.name,
495
+ reform=compound_reform,
496
+ assump=None,
509
497
  aging_input_data=False,
510
498
  exact_calculations=False)
511
499
  assert not tcio.errmsg
500
+ tcio.write_policy_params_files()
512
501
  outfilepath = tcio.output_filepath()
513
- dbfilepath = outfilepath.replace('.csv', '.db')
514
- # --sqldb output
515
- try:
516
- tcio.analyze(writing_output_file=False, output_sqldb=True)
517
- except Exception: # pylint: disable=broad-except
518
- if os.path.isfile(dbfilepath):
519
- try:
520
- os.remove(dbfilepath)
521
- except OSError:
522
- pass # sometimes we can't remove a generated temporary file
523
- assert False, 'ERROR: TaxCalcIO.analyze(sqldb) failed'
524
- # if try was successful, remove the db file
525
- if os.path.isfile(dbfilepath):
526
- os.remove(dbfilepath)
502
+ for ext in ['-params.bas', '-params.ref']:
503
+ filepath = outfilepath.replace('.xxx', ext)
504
+ if os.path.isfile(filepath):
505
+ os.remove(filepath)
527
506
 
528
507
 
529
508
  def test_no_tables_or_graphs(reformfile1):
530
509
  """
531
- Test TaxCalcIO with output_tables=True and output_graphs=True but
532
- INPUT has zero weights.
510
+ Test TaxCalcIO with output_params=True and output_tables=True and
511
+ output_graphs=True but INPUT has zero weights.
533
512
  """
534
513
  # create input sample that cannot output tables or graphs
535
514
  nobs = 10
@@ -555,24 +534,24 @@ def test_no_tables_or_graphs(reformfile1):
555
534
  aging_input_data=False,
556
535
  exact_calculations=False)
557
536
  assert not tcio.errmsg
558
- # create TaxCalcIO tables file
559
- tcio.analyze(writing_output_file=False,
537
+ # create several TaxCalcIO output files
538
+ tcio.analyze(output_params=True,
560
539
  output_tables=True,
561
540
  output_graphs=True)
562
541
  # delete tables and graph files
563
542
  output_filename = tcio.output_filepath()
564
- fname = output_filename.replace('.csv', '-tab.text')
565
- if os.path.isfile(fname):
566
- os.remove(fname)
567
- fname = output_filename.replace('.csv', '-atr.html')
568
- if os.path.isfile(fname):
569
- os.remove(fname)
570
- fname = output_filename.replace('.csv', '-mtr.html')
571
- if os.path.isfile(fname):
572
- os.remove(fname)
573
- fname = output_filename.replace('.csv', '-pch.html')
574
- if os.path.isfile(fname):
575
- os.remove(fname)
543
+ extensions = [
544
+ '-params.bas',
545
+ '-params.ref',
546
+ '-tables.text',
547
+ '-atr.html',
548
+ '-mtr.html',
549
+ '-pch.html',
550
+ ]
551
+ for ext in extensions:
552
+ fname = output_filename.replace('.xxx', ext)
553
+ if os.path.isfile(fname):
554
+ os.remove(fname)
576
555
 
577
556
 
578
557
  def test_tables(reformfile1):
@@ -604,10 +583,10 @@ def test_tables(reformfile1):
604
583
  exact_calculations=False)
605
584
  assert not tcio.errmsg
606
585
  # create TaxCalcIO tables file
607
- tcio.analyze(writing_output_file=False, output_tables=True)
586
+ tcio.analyze(output_tables=True)
608
587
  # delete tables file
609
588
  output_filename = tcio.output_filepath()
610
- fname = output_filename.replace('.csv', '-tab.text')
589
+ fname = output_filename.replace('.xxx', '-tables.text')
611
590
  if os.path.isfile(fname):
612
591
  os.remove(fname)
613
592
 
@@ -641,16 +620,16 @@ def test_graphs(reformfile1):
641
620
  aging_input_data=False,
642
621
  exact_calculations=False)
643
622
  assert not tcio.errmsg
644
- tcio.analyze(writing_output_file=False, output_graphs=True)
623
+ tcio.analyze(output_graphs=True)
645
624
  # delete graph files
646
625
  output_filename = tcio.output_filepath()
647
- fname = output_filename.replace('.csv', '-atr.html')
626
+ fname = output_filename.replace('.xxx', '-atr.html')
648
627
  if os.path.isfile(fname):
649
628
  os.remove(fname)
650
- fname = output_filename.replace('.csv', '-mtr.html')
629
+ fname = output_filename.replace('.xxx', '-mtr.html')
651
630
  if os.path.isfile(fname):
652
631
  os.remove(fname)
653
- fname = output_filename.replace('.csv', '-pch.html')
632
+ fname = output_filename.replace('.xxx', '-pch.html')
654
633
  if os.path.isfile(fname):
655
634
  os.remove(fname)
656
635
 
@@ -694,7 +673,7 @@ def test_analyze_warnings_print(warnreformfile):
694
673
  aging_input_data=False,
695
674
  exact_calculations=False)
696
675
  assert not tcio.errmsg
697
- tcio.analyze(writing_output_file=False)
676
+ tcio.analyze()
698
677
  assert tcio.tax_year() == taxyear
699
678
 
700
679
 
taxcalc/utils.py CHANGED
@@ -1160,7 +1160,7 @@ def xtr_graph_plot(data,
1160
1160
  line_color='blue', line_width=3, legend_label='Baseline')
1161
1161
  fig.line(lines.index, lines.reform,
1162
1162
  line_color='red', line_width=3, legend_label='Reform')
1163
- fig.circle(0, 0, visible=False) # force zero to be included on y axis
1163
+ fig.scatter(0, 0, visible=False) # force zero to be included on y axis
1164
1164
  if xlabel == '':
1165
1165
  xlabel = data['xlabel']
1166
1166
  fig.xaxis.axis_label = xlabel
@@ -1295,8 +1295,8 @@ def pch_graph_plot(data,
1295
1295
  fig.title.text_font_size = '12pt'
1296
1296
  line = data['line']
1297
1297
  fig.line(line.index, line.pch, line_color='blue', line_width=3)
1298
- fig.circle(0, 0, visible=False) # force zero to be included on y axis
1299
- zero_grid_line_range = range(0, 101)
1298
+ fig.scatter(0, 0, visible=False) # force zero to be included on y axis
1299
+ zero_grid_line_range = line.index
1300
1300
  zero_grid_line_height = [0] * len(zero_grid_line_range)
1301
1301
  fig.line(zero_grid_line_range, zero_grid_line_height,
1302
1302
  line_color='black', line_width=1)
@@ -1311,13 +1311,7 @@ def pch_graph_plot(data,
1311
1311
  fig.yaxis.axis_label_text_font_size = '12pt'
1312
1312
  fig.yaxis.axis_label_text_font_style = 'normal'
1313
1313
  fig.yaxis[0].formatter = PrintfTickFormatter(format='%.1f')
1314
- # bokeh cannot save this fig saying:
1315
- # bokeh.core.serialization.SerializationError:
1316
- # can't serialize <class 'range'>
1317
- # so the "return fig" statement is replaced by Python's implicit
1318
- # "return None" until the above logic can be made compatible with
1319
- # modern bokeh packages
1320
- # return fig
1314
+ return fig
1321
1315
 
1322
1316
 
1323
1317
  def write_graph_file(figure, filename, title):
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: taxcalc
3
- Version: 4.5.0
3
+ Version: 4.6.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
@@ -29,6 +29,7 @@ Dynamic: description-content-type
29
29
  Dynamic: download-url
30
30
  Dynamic: home-page
31
31
  Dynamic: license
32
+ Dynamic: license-file
32
33
  Dynamic: requires-dist
33
34
  Dynamic: summary
34
35
 
@@ -1,6 +1,6 @@
1
- taxcalc/__init__.py,sha256=O3W2sl_0F5hGyJgbCgbIhTcLOaaF8KlBCGTsMaGgPmA,536
2
- taxcalc/calcfunctions.py,sha256=kdORtubtTHM8-heE4nbwtGnzdAflCpv0o5hlXmgzUPo,148649
3
- taxcalc/calculator.py,sha256=bZl-TY7JOjiiQymmUCvqrJePq7TQniItZrShfG8AJ2Y,64000
1
+ taxcalc/__init__.py,sha256=jQUxALCvW-PLnHIR91_Qjnd0_TULCiULAKJGbNrAc6c,536
2
+ taxcalc/calcfunctions.py,sha256=G62sQeW-YHJ2gvqOfidRKPBpufSHzXYIdI2PGcApOuU,148423
3
+ taxcalc/calculator.py,sha256=otaljKtkO91uWH6QqChsR17xjLXcHJ2QEvyoMnYeung,63936
4
4
  taxcalc/conftest.py,sha256=nO4J7qu1sTHgjqrzhpRMvfMJUrNm6GP_IsSuuDt_MeQ,141
5
5
  taxcalc/consumption.json,sha256=FBgDd72AZnviQRhGz5rPgpGpOmaOzNYfGB9GdTCeKPI,8102
6
6
  taxcalc/consumption.py,sha256=pkXhFGpFqu7hW62KaTctfRSzR-pXzMB1ai8XCQRAgXk,3480
@@ -13,20 +13,20 @@ taxcalc/growdiff.py,sha256=Q3St-KPIUN2I_l1S0jwN0yr8O4LuzkNIU-_qbXTkrZw,2977
13
13
  taxcalc/growfactors.csv,sha256=URIGSKApCY4McvdILkCaIm8EhCGEME2Du-ef5Q9c0uE,5134
14
14
  taxcalc/growfactors.py,sha256=dW71yYKhFDbFtGpBT-kZBqY4MV7IswKcNI3_c-X_Nfg,6525
15
15
  taxcalc/parameters.py,sha256=pvr3m4G-fA_d-LMqCNYdBtJDjkDcHLgOgw0kmchYhFk,33235
16
- taxcalc/policy.py,sha256=BN6v8B9wbRZR-zEEHraOCbXP-2mgO7Hlc3niiN8tKRo,7074
17
- taxcalc/policy_current_law.json,sha256=wShNXGgb8Qgjbsk3bFpZyfeBifMeSgdzQ4Ln32iVKcQ,690298
16
+ taxcalc/policy.py,sha256=4bY3beSYhLKk_X4CTgG7LGnVnILM0D4Invt7uCp8dlA,6725
17
+ taxcalc/policy_current_law.json,sha256=dqfeSqdYe-XUAdZOS7dccUEA48d80JqwnI34nsHbt_g,689758
18
18
  taxcalc/puf_ratios.csv,sha256=USMM79UEX8PnSKY_LYLxvACER_9NHyj4ipNEk2iyykQ,3580
19
19
  taxcalc/puf_weights.csv.gz,sha256=35iZhzFO0dHUI2zf4_liyk60E-3Sgr_AbxszGxw7LfM,13522484
20
20
  taxcalc/records.py,sha256=K5QgP6Pm9PtEVDVzM7tpHYPu554Wio0KnrU7YTTBKgQ,18264
21
21
  taxcalc/records_variables.json,sha256=_YKJiZQ1czp0VH9bkr5ZXmp9Mm1roHoHrt2XnLXAtfw,42975
22
- taxcalc/taxcalcio.py,sha256=rzZCUYdsFQ9d7xlv9c4cNO8rFffbx9CL465e7q5X-EQ,35629
23
- taxcalc/utils.py,sha256=GZpF1jRJG4pZfi1Ic1pVfcplS4KPqwSECM23FKYSsjg,62705
22
+ taxcalc/taxcalcio.py,sha256=F-MNNkIVYdOCfFBE1nKOajoS8c2MjkSQ0aKssyDXMh4,33188
23
+ taxcalc/utils.py,sha256=noHnQ-tw0AXhEH-OgdTUiPedH8luVOJ5NdfpKI3_obw,62401
24
24
  taxcalc/utilsprvt.py,sha256=iIyWp9-N3_XWjQj2jV2CWnJy7vrNlKB2_vIMwYjgbWY,1323
25
25
  taxcalc/assumptions/ASSUMPTIONS.md,sha256=cFQqWn1nScaladVaQ7xNm1jDY8CsGdLmqZEzUZeRrb8,1917
26
26
  taxcalc/assumptions/README.md,sha256=Ww55r2zH1neoRSl_MawrPmX-ugaztIZ7_ALrquuatdQ,809
27
27
  taxcalc/assumptions/economic_assumptions_template.json,sha256=utMk38GwSQFrkOAtRrDVhMQLpfaZH3JmtTznKX7IouM,2610
28
28
  taxcalc/cli/__init__.py,sha256=cyZ0tdx41j_vV_B6GAkqJmNKKG-B0wUC0ThC75lJlk4,104
29
- taxcalc/cli/tc.py,sha256=W1wORfxidGDctXs-pIZoevpXmM3hLJNREs_ldl08c3w,12130
29
+ taxcalc/cli/tc.py,sha256=rJ5VTxyqUn7CVG3fXmTIHKdvL7lEfCFw1xHlFtRDZv8,14400
30
30
  taxcalc/reforms/2017_law.json,sha256=u-xaPSvt5ubfZw1Nb-jNhTNcOPBUJeAX2kJVoEyMgC4,5860
31
31
  taxcalc/reforms/2017_law.out.csv,sha256=nnNKXqY2kof8HC1nnU8srPsvNNepi6ISXQ9OJpQnT7M,473
32
32
  taxcalc/reforms/ARPA.json,sha256=1H9LuJ_QitXRO9e8R3PWizajJgdioIzbGFdvdlt9FVg,3119
@@ -54,7 +54,7 @@ taxcalc/reforms/Trump2017.json,sha256=DZjCJQZYe98Skyss7z_Jhj8HJld_FPZeQGxwzGgQIn
54
54
  taxcalc/reforms/Trump2017.out.csv,sha256=By1quzZONFLQGK5E76mbNNFuORZ8aCGHpD1BR5iwTS8,474
55
55
  taxcalc/reforms/cases.csv,sha256=JQ0LSnNeyl6xSgW5mimGUJMr7xwCWTOpiOpfwx2ETsg,570
56
56
  taxcalc/reforms/clp.out.csv,sha256=qSUdI0LoQFGG6h24eT-249pLEqmxmt7TvLrv1HX_y3Y,475
57
- taxcalc/reforms/ext.json,sha256=V__3vOQWLs22Ke6c5hvvLcSn1tfsq4d1jW__h5DbhIY,3020
57
+ taxcalc/reforms/ext.json,sha256=578ckWd4bTbH_XnTR-smMKtE7Auu9seGn7de_hsGIos,3130
58
58
  taxcalc/reforms/growfactors_ext.csv,sha256=E0szWXtgV5jcpiyvREOz1yXw_poPIBC77bBQI1rlFxM,17733
59
59
  taxcalc/reforms/ptaxes0.json,sha256=QkvqCVkI23sF7FvTHqaUYNpEJYuHNChbKwH0mH7Otp4,1718
60
60
  taxcalc/reforms/ptaxes0.out.csv,sha256=DKGsyNWqo-ABUnjFjEGMpqqhmT2WDRGuU6sKTgH_obc,476
@@ -83,10 +83,10 @@ taxcalc/tests/pufcsv_agg_expect.csv,sha256=h0r6MtsFEBa1u5zwpRT4fDx2T__ZAkdx4oeLx
83
83
  taxcalc/tests/pufcsv_mtr_expect.txt,sha256=xGsUfafzsZ04fFQw162ys-1Mf1CDC_PQ0QZNigS07VY,4265
84
84
  taxcalc/tests/reforms.json,sha256=vGJrvfKJ7h5iAWF-vV9NmY8Z9HP_iereiYiYNcfhBMo,19212
85
85
  taxcalc/tests/reforms_expect.csv,sha256=6m0bSH8S6ReMYdHoQC9iWYuJAof5sZ0OONVBi7zX8JE,1464
86
- taxcalc/tests/test_4package.py,sha256=1qhmDS3bdfNHNgz4pggaE6LduT3KKUtOsdtqP3QSIYQ,3601
86
+ taxcalc/tests/test_4package.py,sha256=I9i5rWFsg-VCtTLmUWIi9dnusieTZeodrgH8ba_Fbng,3681
87
87
  taxcalc/tests/test_benefits.py,sha256=oaui5mO0TuW8Ht-uxvUCBL5zM3iTENq3Whyf_gEpY1U,3392
88
88
  taxcalc/tests/test_calcfunctions.py,sha256=QtMgQg_WpCU8PZM3Hs8Pml4q6LnlLWV_blCzbpGN2sw,31939
89
- taxcalc/tests/test_calculator.py,sha256=1zXuFWl_APATISHnS-noJSg1Zeyqfs2UKRGXnlRz-C8,36089
89
+ taxcalc/tests/test_calculator.py,sha256=dumYsleaKjW8zD1VUnmyQbuszf96QEqXAMf8dIvtelM,36087
90
90
  taxcalc/tests/test_compare.py,sha256=WglH4ZJOEQnav_mAmnGjpb7dooXcQsB1m04hgQeoBUQ,10873
91
91
  taxcalc/tests/test_compatible_data.py,sha256=XpfnE96HDvlgJM_8KEasgufxeiePTFfNMBBVlfzHP9Y,13477
92
92
  taxcalc/tests/test_consumption.py,sha256=c6zi9GqNK54cgfzxiWmY10UxOMJZ9vd9fOTwUKU1zMk,6318
@@ -100,9 +100,9 @@ taxcalc/tests/test_policy.py,sha256=hJrFqqptMoUWk3abIJ2sdADQtCqvGaUeW5as1aNwhR8,
100
100
  taxcalc/tests/test_puf_var_stats.py,sha256=TG-sQtOkR6cBOw0am7MUsMSwjPxVdkvt0Xov342oii8,7786
101
101
  taxcalc/tests/test_pufcsv.py,sha256=kQPwpMcLNPwQDiO-23xvvZggtHYvRz-UYEDn6JjNfbw,16352
102
102
  taxcalc/tests/test_records.py,sha256=ncswnbCY7vZgJ_h6xwql4oFw-jZG2gWOMWvEJC2_jdc,8827
103
- taxcalc/tests/test_reforms.py,sha256=GqknkI69dot_yo_6M2q3CV5cK-OEYy7SohWqLuQ3gDw,16046
103
+ taxcalc/tests/test_reforms.py,sha256=IGMAzVqAMJqdnDDRsMs3VZZOV9_o4gsBAyYgyPB2m2M,16047
104
104
  taxcalc/tests/test_responses.py,sha256=2CkVVdaDNCSALMoUcGgweRlS2tfsK3kXogHtDkZMqJU,1663
105
- taxcalc/tests/test_taxcalcio.py,sha256=TzPk_q4ryQbF1lUDxd4jLpjoAkpgR4kXRWyuC1Lo3wc,25124
105
+ taxcalc/tests/test_taxcalcio.py,sha256=Ee7qfUI-Gy_lbFPElOfOaFtIZ_0NboxVXK0Wrxl9BBw,23794
106
106
  taxcalc/tests/test_utils.py,sha256=aUHVNxfSMdyyLAz3w98KLQa5D872rZxXqKbPkIqwLLA,29403
107
107
  taxcalc/validation/CSV_INPUT_VARS.md,sha256=MqlZZGt_a1n8JAU-nY5MjnTmjz1pMOuhtpVYIGUgl38,1433
108
108
  taxcalc/validation/CSV_OUTPUT_VARS.md,sha256=wr8oyCJDXcxl4Lu0H_wMofUQYhEIyHDif6vkbas1FGE,3000
@@ -131,9 +131,9 @@ taxcalc/validation/taxsim35/expected_differences/b21-taxdiffs-expect.csv,sha256=
131
131
  taxcalc/validation/taxsim35/expected_differences/c17-taxdiffs-expect.csv,sha256=YhgojbLowH3yujdYu7SGkdvBZmTgpugu4wYc1Be069M,1125
132
132
  taxcalc/validation/taxsim35/expected_differences/c18-taxdiffs-expect.csv,sha256=g9J4BPbTySV-h-RcLvReJq9v1jscgiRSSZzi0taEA-k,1225
133
133
  taxcalc/validation/taxsim35/expected_differences/c19-taxdiffs-expect.csv,sha256=Ceh15N_Xr3L7cpYjzGa-8NLCV3obc8PNHEhE5ZxSPhI,1238
134
- taxcalc-4.5.0.dist-info/LICENSE,sha256=m5epLdB-_NXiY7NsEDgcHP4jDtJ4vOlRf5S3Jb-jraY,1299
135
- taxcalc-4.5.0.dist-info/METADATA,sha256=whq0fyPjdWtWiaVXA4--N9XooNvXa3TNhY1UDj-vh9g,3487
136
- taxcalc-4.5.0.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
137
- taxcalc-4.5.0.dist-info/entry_points.txt,sha256=a3ZE1piRv683p27fOLdWZvVJXESkoslTOp5iXV7uVco,50
138
- taxcalc-4.5.0.dist-info/top_level.txt,sha256=Wh8wTDHkA_cm4dn8IoUCviDyGgVQqwEQKPJnl8z6d4c,8
139
- taxcalc-4.5.0.dist-info/RECORD,,
134
+ taxcalc-4.6.0.dist-info/licenses/LICENSE,sha256=m5epLdB-_NXiY7NsEDgcHP4jDtJ4vOlRf5S3Jb-jraY,1299
135
+ taxcalc-4.6.0.dist-info/METADATA,sha256=3sgO2tiOEtszzhDVjXJgEqx97l3MGXWsKPUNjm1oSuY,3509
136
+ taxcalc-4.6.0.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
137
+ taxcalc-4.6.0.dist-info/entry_points.txt,sha256=a3ZE1piRv683p27fOLdWZvVJXESkoslTOp5iXV7uVco,50
138
+ taxcalc-4.6.0.dist-info/top_level.txt,sha256=Wh8wTDHkA_cm4dn8IoUCviDyGgVQqwEQKPJnl8z6d4c,8
139
+ taxcalc-4.6.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.0.0)
2
+ Generator: setuptools (80.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5