kumi 0.0.24 → 0.0.26

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.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +70 -71
  4. data/data/functions/agg/boolean.yaml +6 -2
  5. data/data/functions/agg/numeric.yaml +32 -16
  6. data/data/functions/agg/string.yaml +4 -3
  7. data/data/functions/core/arithmetic.yaml +62 -14
  8. data/data/functions/core/boolean.yaml +12 -6
  9. data/data/functions/core/comparison.yaml +25 -13
  10. data/data/functions/core/constructor.yaml +16 -8
  11. data/data/functions/core/select.yaml +3 -1
  12. data/data/functions/core/stencil.yaml +14 -5
  13. data/data/functions/core/string.yaml +9 -4
  14. data/data/kernels/ruby/agg/numeric.yaml +1 -1
  15. data/docs/UNSAT_DETECTION.md +83 -0
  16. data/golden/array_element/expected/nast.txt +1 -1
  17. data/golden/array_element/expected/schema_ruby.rb +1 -1
  18. data/golden/array_index/expected/nast.txt +7 -7
  19. data/golden/array_index/expected/schema_ruby.rb +1 -1
  20. data/golden/array_operations/expected/nast.txt +2 -2
  21. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  22. data/golden/array_operations/expected/snast.txt +3 -3
  23. data/golden/cascade_logic/expected/lir_02_inlined.txt +8 -8
  24. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  25. data/golden/cascade_logic/expected/snast.txt +2 -2
  26. data/golden/chained_fusion/expected/lir_02_inlined.txt +36 -36
  27. data/golden/chained_fusion/expected/lir_03_cse.txt +23 -23
  28. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +25 -25
  29. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +23 -23
  30. data/golden/chained_fusion/expected/lir_06_const_prop.txt +23 -23
  31. data/golden/chained_fusion/expected/nast.txt +2 -2
  32. data/golden/chained_fusion/expected/schema_javascript.mjs +23 -23
  33. data/golden/chained_fusion/expected/schema_ruby.rb +28 -28
  34. data/golden/element_arrays/expected/nast.txt +2 -2
  35. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  36. data/golden/element_arrays/expected/snast.txt +1 -1
  37. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +18 -18
  38. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +17 -17
  39. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +17 -17
  40. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +17 -17
  41. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +17 -17
  42. data/golden/empty_and_null_inputs/expected/nast.txt +3 -3
  43. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +13 -13
  44. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +18 -18
  45. data/golden/function_overload/expected/ast.txt +29 -0
  46. data/golden/function_overload/expected/input_plan.txt +4 -0
  47. data/golden/function_overload/expected/lir_00_unoptimized.txt +18 -0
  48. data/golden/function_overload/expected/lir_01_hoist_scalar_references.txt +18 -0
  49. data/golden/function_overload/expected/lir_02_inlined.txt +20 -0
  50. data/golden/function_overload/expected/lir_03_cse.txt +20 -0
  51. data/golden/function_overload/expected/lir_04_1_loop_fusion.txt +20 -0
  52. data/golden/function_overload/expected/lir_04_loop_invcm.txt +20 -0
  53. data/golden/function_overload/expected/lir_06_const_prop.txt +20 -0
  54. data/golden/function_overload/expected/nast.txt +22 -0
  55. data/golden/function_overload/expected/schema_javascript.mjs +12 -0
  56. data/golden/function_overload/expected/schema_ruby.rb +39 -0
  57. data/golden/function_overload/expected/snast.txt +22 -0
  58. data/golden/function_overload/input.json +8 -0
  59. data/golden/function_overload/schema.kumi +19 -0
  60. data/golden/game_of_life/expected/lir_00_unoptimized.txt +4 -4
  61. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +4 -4
  62. data/golden/game_of_life/expected/lir_02_inlined.txt +1294 -1294
  63. data/golden/game_of_life/expected/lir_03_cse.txt +403 -399
  64. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +403 -399
  65. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +403 -399
  66. data/golden/game_of_life/expected/lir_06_const_prop.txt +403 -399
  67. data/golden/game_of_life/expected/nast.txt +4 -4
  68. data/golden/game_of_life/expected/schema_javascript.mjs +87 -85
  69. data/golden/game_of_life/expected/schema_ruby.rb +88 -86
  70. data/golden/game_of_life/expected/snast.txt +10 -10
  71. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  72. data/golden/hash_value/expected/nast.txt +1 -1
  73. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  74. data/golden/hash_value/expected/snast.txt +1 -1
  75. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +15 -15
  76. data/golden/hierarchical_complex/expected/lir_03_cse.txt +1 -1
  77. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +1 -1
  78. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +1 -1
  79. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +1 -1
  80. data/golden/hierarchical_complex/expected/nast.txt +3 -3
  81. data/golden/hierarchical_complex/expected/schema_javascript.mjs +1 -1
  82. data/golden/hierarchical_complex/expected/schema_ruby.rb +2 -2
  83. data/golden/hierarchical_complex/expected/snast.txt +3 -3
  84. data/golden/inline_rename_scope_leak/expected/nast.txt +3 -3
  85. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +1 -1
  86. data/golden/input_reference/expected/nast.txt +2 -2
  87. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  88. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +35 -35
  89. data/golden/interleaved_fusion/expected/lir_03_cse.txt +26 -26
  90. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +27 -26
  91. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +26 -26
  92. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +26 -26
  93. data/golden/interleaved_fusion/expected/nast.txt +2 -2
  94. data/golden/interleaved_fusion/expected/schema_javascript.mjs +23 -23
  95. data/golden/interleaved_fusion/expected/schema_ruby.rb +29 -29
  96. data/golden/let_inline/expected/nast.txt +4 -4
  97. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  98. data/golden/loop_fusion/expected/lir_02_inlined.txt +17 -17
  99. data/golden/loop_fusion/expected/lir_03_cse.txt +14 -14
  100. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +14 -14
  101. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +14 -14
  102. data/golden/loop_fusion/expected/lir_06_const_prop.txt +14 -14
  103. data/golden/loop_fusion/expected/nast.txt +1 -1
  104. data/golden/loop_fusion/expected/schema_javascript.mjs +12 -12
  105. data/golden/loop_fusion/expected/schema_ruby.rb +16 -16
  106. data/golden/min_reduce_scope/expected/nast.txt +3 -3
  107. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  108. data/golden/min_reduce_scope/expected/snast.txt +1 -1
  109. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +5 -5
  110. data/golden/mixed_dimensions/expected/lir_03_cse.txt +5 -5
  111. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +5 -5
  112. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +5 -5
  113. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +5 -5
  114. data/golden/mixed_dimensions/expected/nast.txt +2 -2
  115. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -3
  116. data/golden/mixed_dimensions/expected/schema_ruby.rb +6 -6
  117. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +48 -48
  118. data/golden/multirank_hoisting/expected/lir_03_cse.txt +35 -35
  119. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +35 -35
  120. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +35 -35
  121. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +35 -35
  122. data/golden/multirank_hoisting/expected/nast.txt +7 -7
  123. data/golden/multirank_hoisting/expected/schema_javascript.mjs +34 -34
  124. data/golden/multirank_hoisting/expected/schema_ruby.rb +36 -36
  125. data/golden/nested_hash/expected/nast.txt +1 -1
  126. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  127. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +30 -30
  128. data/golden/reduction_broadcast/expected/lir_03_cse.txt +22 -22
  129. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +22 -22
  130. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +22 -22
  131. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +22 -22
  132. data/golden/reduction_broadcast/expected/nast.txt +3 -3
  133. data/golden/reduction_broadcast/expected/schema_javascript.mjs +18 -18
  134. data/golden/reduction_broadcast/expected/schema_ruby.rb +23 -23
  135. data/golden/reduction_broadcast/expected/snast.txt +1 -1
  136. data/golden/roll/expected/schema_ruby.rb +1 -1
  137. data/golden/shift/expected/schema_ruby.rb +1 -1
  138. data/golden/shift_2d/expected/schema_ruby.rb +1 -1
  139. data/golden/simple_math/expected/lir_00_unoptimized.txt +1 -1
  140. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +1 -1
  141. data/golden/simple_math/expected/lir_02_inlined.txt +1 -1
  142. data/golden/simple_math/expected/lir_03_cse.txt +1 -1
  143. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +1 -1
  144. data/golden/simple_math/expected/lir_04_loop_invcm.txt +1 -1
  145. data/golden/simple_math/expected/lir_06_const_prop.txt +1 -1
  146. data/golden/simple_math/expected/nast.txt +5 -5
  147. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  148. data/golden/simple_math/expected/snast.txt +2 -2
  149. data/golden/streaming_basics/expected/lir_02_inlined.txt +25 -25
  150. data/golden/streaming_basics/expected/lir_03_cse.txt +13 -13
  151. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +13 -13
  152. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +13 -13
  153. data/golden/streaming_basics/expected/lir_06_const_prop.txt +13 -13
  154. data/golden/streaming_basics/expected/nast.txt +8 -8
  155. data/golden/streaming_basics/expected/schema_javascript.mjs +13 -13
  156. data/golden/streaming_basics/expected/schema_ruby.rb +14 -14
  157. data/golden/streaming_basics/expected/snast.txt +1 -1
  158. data/golden/tuples/expected/lir_00_unoptimized.txt +5 -5
  159. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +5 -5
  160. data/golden/tuples/expected/lir_02_inlined.txt +5 -5
  161. data/golden/tuples/expected/lir_03_cse.txt +5 -5
  162. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +5 -5
  163. data/golden/tuples/expected/lir_04_loop_invcm.txt +5 -5
  164. data/golden/tuples/expected/lir_06_const_prop.txt +5 -5
  165. data/golden/tuples/expected/nast.txt +4 -4
  166. data/golden/tuples/expected/schema_ruby.rb +1 -1
  167. data/golden/tuples/expected/snast.txt +6 -6
  168. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +1 -1
  169. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +1 -1
  170. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +17 -17
  171. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +13 -13
  172. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +13 -13
  173. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +13 -13
  174. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +13 -13
  175. data/golden/tuples_and_arrays/expected/nast.txt +3 -3
  176. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +13 -13
  177. data/golden/tuples_and_arrays/expected/schema_ruby.rb +14 -14
  178. data/golden/tuples_and_arrays/expected/snast.txt +2 -2
  179. data/golden/us_tax_2024/expected/ast.txt +63 -670
  180. data/golden/us_tax_2024/expected/input_plan.txt +8 -45
  181. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +253 -863
  182. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +253 -863
  183. data/golden/us_tax_2024/expected/lir_02_inlined.txt +1215 -5139
  184. data/golden/us_tax_2024/expected/lir_03_cse.txt +587 -2460
  185. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +632 -2480
  186. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +587 -2400
  187. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +587 -2400
  188. data/golden/us_tax_2024/expected/nast.txt +123 -826
  189. data/golden/us_tax_2024/expected/schema_javascript.mjs +127 -581
  190. data/golden/us_tax_2024/expected/schema_ruby.rb +135 -610
  191. data/golden/us_tax_2024/expected/snast.txt +155 -858
  192. data/golden/us_tax_2024/expected.json +120 -1
  193. data/golden/us_tax_2024/input.json +18 -9
  194. data/golden/us_tax_2024/schema.kumi +48 -178
  195. data/golden/with_constants/expected/lir_00_unoptimized.txt +1 -1
  196. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +1 -1
  197. data/golden/with_constants/expected/lir_02_inlined.txt +1 -1
  198. data/golden/with_constants/expected/lir_03_cse.txt +1 -1
  199. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +1 -1
  200. data/golden/with_constants/expected/lir_04_loop_invcm.txt +1 -1
  201. data/golden/with_constants/expected/lir_06_const_prop.txt +1 -1
  202. data/golden/with_constants/expected/nast.txt +2 -2
  203. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  204. data/golden/with_constants/expected/snast.txt +2 -2
  205. data/lib/kumi/analyzer.rb +12 -12
  206. data/lib/kumi/core/analyzer/passes/formal_constraint_propagator.rb +236 -0
  207. data/lib/kumi/core/analyzer/passes/input_collector.rb +22 -4
  208. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +118 -74
  209. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +64 -18
  210. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +9 -4
  211. data/lib/kumi/core/analyzer/passes/snast_pass.rb +3 -1
  212. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +172 -198
  213. data/lib/kumi/core/error_reporter.rb +36 -1
  214. data/lib/kumi/core/errors.rb +33 -1
  215. data/lib/kumi/core/functions/function_spec.rb +5 -4
  216. data/lib/kumi/core/functions/loader.rb +17 -1
  217. data/lib/kumi/core/functions/overload_resolver.rb +164 -0
  218. data/lib/kumi/core/functions/type_error_reporter.rb +118 -0
  219. data/lib/kumi/core/functions/type_rules.rb +155 -35
  220. data/lib/kumi/core/types/inference.rb +29 -22
  221. data/lib/kumi/core/types/normalizer.rb +29 -45
  222. data/lib/kumi/core/types/validator.rb +16 -27
  223. data/lib/kumi/core/types/value_objects.rb +116 -0
  224. data/lib/kumi/core/types.rb +45 -37
  225. data/lib/kumi/registry_v2/loader.rb +90 -0
  226. data/lib/kumi/registry_v2.rb +18 -1
  227. data/lib/kumi/version.rb +1 -1
  228. metadata +21 -7
  229. data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +0 -59
  230. data/lib/kumi/core/atom_unsat_solver.rb +0 -396
  231. data/lib/kumi/core/constraint_relationship_solver.rb +0 -641
  232. data/lib/kumi/core/types/builder.rb +0 -23
  233. data/lib/kumi/core/types/compatibility.rb +0 -96
  234. data/lib/kumi/core/types/formatter.rb +0 -26
@@ -1,584 +1,130 @@
1
1
  export function _summary(input) {
2
- let acc3280 = 0.0;
3
- let t3281 = input["fed"];
4
- let t3282 = t3281["single"];
5
- let t3283 = t3282["rates"];
6
- let acc3349 = 0.0;
7
- let t3301 = input["income"];
8
- let t3302 = input["fed"];
9
- const t3306 = 0;
10
- const t3325 = -1;
11
- const t3327 = 100000000000.0;
12
- let t3303 = t3302["single"];
13
- let t3304 = t3303["std"];
14
- let t3305 = t3301 - t3304;
15
- let t3307 = [t3305, t3306];
16
- let t3308 = Math.max(...t3307);
17
- t3283.forEach((t3284, t3285) => {
18
- let t3320 = t3284["lo"];
19
- let t3333 = t3284["hi"];
20
- let t3341 = t3284["rate"];
21
- let t3326 = t3333 == t3325;
22
- let t3329 = t3326 ? t3327 : t3333;
23
- let t3297 = t3308 >= t3320;
24
- let t3299 = t3308 < t3329;
25
- let t3300 = t3297 && t3299;
26
- let t3289 = t3300 ? t3341 : t3306;
27
- acc3280 += t3289;
28
- let t3364 = t3308 - t3320;
29
- let t3368 = t3329 - t3320;
30
- let t3369 = Math.min(Math.max(t3364, t3306), t3368);
31
- let t3357 = t3369 * t3341;
32
- acc3349 += t3357;
33
- });
34
- const t3344 = 1.0;
35
- let t3345 = [t3301, t3344];
36
- let t3346 = Math.max(...t3345);
37
- let t3347 = acc3349 / t3346;
38
- let acc3408 = 0.0;
39
- t3283.forEach((t3412, t3413) => {
40
- let t3440 = t3412["lo"];
41
- let t3453 = t3412["hi"];
42
- let t3465 = t3412["rate"];
43
- let t3423 = t3308 - t3440;
44
- let t3446 = t3453 == t3325;
45
- let t3449 = t3446 ? t3327 : t3453;
46
- let t3427 = t3449 - t3440;
47
- let t3428 = Math.min(Math.max(t3423, t3306), t3427);
48
- let t3416 = t3428 * t3465;
49
- acc3408 += t3416;
50
- });
51
- let t542 = {
52
- "marginal": acc3280,
53
- "effective": t3347,
54
- "tax": acc3408
55
- };
56
- const t3478 = 168600.0;
57
- let t3479 = [t3301, t3478];
58
- let t3480 = Math.min(...t3479);
59
- const t3481 = 0.062;
60
- let t3482 = t3480 * t3481;
61
- const t3484 = 0.0145;
62
- let t3485 = t3301 * t3484;
63
- let t3474 = t3482 + t3485;
64
- const t3487 = 200000.0;
65
- let t3488 = t3301 - t3487;
66
- let t3490 = [t3488, t3306];
67
- let t3491 = Math.max(...t3490);
68
- const t3492 = 0.009;
69
- let t3493 = t3491 * t3492;
70
- let t3476 = t3474 + t3493;
71
- let t3471 = t3476 / t3346;
72
- let t545 = {
73
- "effective": t3471,
74
- "tax": t3476
75
- };
76
- let t546 = input["state_rate"];
77
- let t3518 = t3301 * t546;
78
- let t549 = {
79
- "marginal": t546,
80
- "effective": t546,
81
- "tax": t3518
82
- };
83
- let t550 = input["local_rate"];
84
- let t3521 = t3301 * t550;
85
- let t553 = {
86
- "marginal": t550,
87
- "effective": t550,
88
- "tax": t3521
89
- };
90
- let acc3536 = 0.0;
91
- t3283.forEach((t3540, t3541) => {
92
- let t3568 = t3540["lo"];
93
- let t3581 = t3540["hi"];
94
- let t3593 = t3540["rate"];
95
- let t3551 = t3308 - t3568;
96
- let t3574 = t3581 == t3325;
97
- let t3577 = t3574 ? t3327 : t3581;
98
- let t3555 = t3577 - t3568;
99
- let t3556 = Math.min(Math.max(t3551, t3306), t3555);
100
- let t3544 = t3556 * t3593;
101
- acc3536 += t3544;
102
- });
103
- let t3530 = acc3536 + t3476;
104
- let t3532 = t3530 + t3518;
105
- let t3534 = t3532 + t3521;
106
- let t3527 = t3534 / t3346;
107
- let acc3630 = 0.0;
108
- t3283.forEach((t3634, t3635) => {
109
- let t3662 = t3634["lo"];
110
- let t3675 = t3634["hi"];
111
- let t3687 = t3634["rate"];
112
- let t3645 = t3308 - t3662;
113
- let t3668 = t3675 == t3325;
114
- let t3671 = t3668 ? t3327 : t3675;
115
- let t3649 = t3671 - t3662;
116
- let t3650 = Math.min(Math.max(t3645, t3306), t3649);
117
- let t3638 = t3650 * t3687;
118
- acc3630 += t3638;
119
- });
120
- let t3624 = acc3630 + t3476;
121
- let t3626 = t3624 + t3518;
122
- let t3628 = t3626 + t3521;
123
- let t556 = {
124
- "effective": t3527,
125
- "tax": t3628
126
- };
127
- let acc3727 = 0.0;
128
- t3283.forEach((t3731, t3732) => {
129
- let t3759 = t3731["lo"];
130
- let t3772 = t3731["hi"];
131
- let t3784 = t3731["rate"];
132
- let t3742 = t3308 - t3759;
133
- let t3765 = t3772 == t3325;
134
- let t3768 = t3765 ? t3327 : t3772;
135
- let t3746 = t3768 - t3759;
136
- let t3747 = Math.min(Math.max(t3742, t3306), t3746);
137
- let t3735 = t3747 * t3784;
138
- acc3727 += t3735;
139
- });
140
- let t3721 = acc3727 + t3476;
141
- let t3723 = t3721 + t3518;
142
- let t3725 = t3723 + t3521;
143
- let t3718 = t3301 - t3725;
144
- let t558 = input["retirement_contrib"];
145
- let acc3827 = 0.0;
146
- t3283.forEach((t3831, t3832) => {
147
- let t3859 = t3831["lo"];
148
- let t3872 = t3831["hi"];
149
- let t3884 = t3831["rate"];
150
- let t3842 = t3308 - t3859;
151
- let t3865 = t3872 == t3325;
152
- let t3868 = t3865 ? t3327 : t3872;
153
- let t3846 = t3868 - t3859;
154
- let t3847 = Math.min(Math.max(t3842, t3306), t3846);
155
- let t3835 = t3847 * t3884;
156
- acc3827 += t3835;
157
- });
158
- let t3821 = acc3827 + t3476;
159
- let t3823 = t3821 + t3518;
160
- let t3825 = t3823 + t3521;
161
- let t3818 = t3301 - t3825;
162
- let t3815 = t3818 - t558;
163
- let t560 = {
164
- "federal": t542,
165
- "fica": t545,
166
- "state": t549,
167
- "local": t553,
168
- "total": t556,
169
- "after_tax": t3718,
170
- "retirement_contrib": t558,
171
- "take_home": t3815
172
- };
173
- let acc3914 = 0.0;
174
- let t3916 = t3281["married_joint"];
175
- let t3917 = t3916["rates"];
176
- let acc3983 = 0.0;
177
- let t3937 = t3302["married_joint"];
178
- let t3938 = t3937["std"];
179
- let t3939 = t3301 - t3938;
180
- let t3941 = [t3939, t3306];
181
- let t3942 = Math.max(...t3941);
182
- t3917.forEach((t3918, t3919) => {
183
- let t3954 = t3918["lo"];
184
- let t3967 = t3918["hi"];
185
- let t3975 = t3918["rate"];
186
- let t3960 = t3967 == t3325;
187
- let t3963 = t3960 ? t3327 : t3967;
188
- let t3931 = t3942 >= t3954;
189
- let t3933 = t3942 < t3963;
190
- let t3934 = t3931 && t3933;
191
- let t3923 = t3934 ? t3975 : t3306;
192
- acc3914 += t3923;
193
- let t3998 = t3942 - t3954;
194
- let t4002 = t3963 - t3954;
195
- let t4003 = Math.min(Math.max(t3998, t3306), t4002);
196
- let t3991 = t4003 * t3975;
197
- acc3983 += t3991;
198
- });
199
- let t3981 = acc3983 / t3346;
200
- let acc4042 = 0.0;
201
- t3917.forEach((t4046, t4047) => {
202
- let t4074 = t4046["lo"];
203
- let t4087 = t4046["hi"];
204
- let t4099 = t4046["rate"];
205
- let t4057 = t3942 - t4074;
206
- let t4080 = t4087 == t3325;
207
- let t4083 = t4080 ? t3327 : t4087;
208
- let t4061 = t4083 - t4074;
209
- let t4062 = Math.min(Math.max(t4057, t3306), t4061);
210
- let t4050 = t4062 * t4099;
211
- acc4042 += t4050;
212
- });
213
- let t564 = {
214
- "marginal": acc3914,
215
- "effective": t3981,
216
- "tax": acc4042
217
- };
218
- const t4123 = 250000.0;
219
- let t4124 = t3301 - t4123;
220
- let t4126 = [t4124, t3306];
221
- let t4127 = Math.max(...t4126);
222
- let t4129 = t4127 * t3492;
223
- let t4110 = t3474 + t4129;
224
- let t4105 = t4110 / t3346;
225
- let t567 = {
226
- "effective": t4105,
227
- "tax": t4110
228
- };
229
- let acc4174 = 0.0;
230
- t3917.forEach((t4178, t4179) => {
231
- let t4206 = t4178["lo"];
232
- let t4219 = t4178["hi"];
233
- let t4231 = t4178["rate"];
234
- let t4189 = t3942 - t4206;
235
- let t4212 = t4219 == t3325;
236
- let t4215 = t4212 ? t3327 : t4219;
237
- let t4193 = t4215 - t4206;
238
- let t4194 = Math.min(Math.max(t4189, t3306), t4193);
239
- let t4182 = t4194 * t4231;
240
- acc4174 += t4182;
241
- });
242
- let t4168 = acc4174 + t4110;
243
- let t4170 = t4168 + t3518;
244
- let t4172 = t4170 + t3521;
245
- let t4165 = t4172 / t3346;
246
- let acc4270 = 0.0;
247
- t3917.forEach((t4274, t4275) => {
248
- let t4302 = t4274["lo"];
249
- let t4315 = t4274["hi"];
250
- let t4327 = t4274["rate"];
251
- let t4285 = t3942 - t4302;
252
- let t4308 = t4315 == t3325;
253
- let t4311 = t4308 ? t3327 : t4315;
254
- let t4289 = t4311 - t4302;
255
- let t4290 = Math.min(Math.max(t4285, t3306), t4289);
256
- let t4278 = t4290 * t4327;
257
- acc4270 += t4278;
258
- });
259
- let t4264 = acc4270 + t4110;
260
- let t4266 = t4264 + t3518;
261
- let t4268 = t4266 + t3521;
262
- let t578 = {
263
- "effective": t4165,
264
- "tax": t4268
265
- };
266
- let acc4369 = 0.0;
267
- t3917.forEach((t4373, t4374) => {
268
- let t4401 = t4373["lo"];
269
- let t4414 = t4373["hi"];
270
- let t4426 = t4373["rate"];
271
- let t4384 = t3942 - t4401;
272
- let t4407 = t4414 == t3325;
273
- let t4410 = t4407 ? t3327 : t4414;
274
- let t4388 = t4410 - t4401;
275
- let t4389 = Math.min(Math.max(t4384, t3306), t4388);
276
- let t4377 = t4389 * t4426;
277
- acc4369 += t4377;
278
- });
279
- let t4363 = acc4369 + t4110;
280
- let t4365 = t4363 + t3518;
281
- let t4367 = t4365 + t3521;
282
- let t4360 = t3301 - t4367;
283
- let acc4471 = 0.0;
284
- t3917.forEach((t4475, t4476) => {
285
- let t4503 = t4475["lo"];
286
- let t4516 = t4475["hi"];
287
- let t4528 = t4475["rate"];
288
- let t4486 = t3942 - t4503;
289
- let t4509 = t4516 == t3325;
290
- let t4512 = t4509 ? t3327 : t4516;
291
- let t4490 = t4512 - t4503;
292
- let t4491 = Math.min(Math.max(t4486, t3306), t4490);
293
- let t4479 = t4491 * t4528;
294
- acc4471 += t4479;
295
- });
296
- let t4465 = acc4471 + t4110;
297
- let t4467 = t4465 + t3518;
298
- let t4469 = t4467 + t3521;
299
- let t4462 = t3301 - t4469;
300
- let t4459 = t4462 - t558;
301
- let t582 = {
302
- "federal": t564,
303
- "fica": t567,
304
- "state": t549,
305
- "local": t553,
306
- "total": t578,
307
- "after_tax": t4360,
308
- "retirement_contrib": t558,
309
- "take_home": t4459
310
- };
311
- let acc4560 = 0.0;
312
- let t4562 = t3281["married_separate"];
313
- let t4563 = t4562["rates"];
314
- let acc4629 = 0.0;
315
- let t4583 = t3302["married_separate"];
316
- let t4584 = t4583["std"];
317
- let t4585 = t3301 - t4584;
318
- let t4587 = [t4585, t3306];
319
- let t4588 = Math.max(...t4587);
320
- t4563.forEach((t4564, t4565) => {
321
- let t4600 = t4564["lo"];
322
- let t4613 = t4564["hi"];
323
- let t4621 = t4564["rate"];
324
- let t4606 = t4613 == t3325;
325
- let t4609 = t4606 ? t3327 : t4613;
326
- let t4577 = t4588 >= t4600;
327
- let t4579 = t4588 < t4609;
328
- let t4580 = t4577 && t4579;
329
- let t4569 = t4580 ? t4621 : t3306;
330
- acc4560 += t4569;
331
- let t4644 = t4588 - t4600;
332
- let t4648 = t4609 - t4600;
333
- let t4649 = Math.min(Math.max(t4644, t3306), t4648);
334
- let t4637 = t4649 * t4621;
335
- acc4629 += t4637;
336
- });
337
- let t4627 = acc4629 / t3346;
338
- let acc4688 = 0.0;
339
- t4563.forEach((t4692, t4693) => {
340
- let t4720 = t4692["lo"];
341
- let t4733 = t4692["hi"];
342
- let t4745 = t4692["rate"];
343
- let t4703 = t4588 - t4720;
344
- let t4726 = t4733 == t3325;
345
- let t4729 = t4726 ? t3327 : t4733;
346
- let t4707 = t4729 - t4720;
347
- let t4708 = Math.min(Math.max(t4703, t3306), t4707);
348
- let t4696 = t4708 * t4745;
349
- acc4688 += t4696;
350
- });
351
- let t586 = {
352
- "marginal": acc4560,
353
- "effective": t4627,
354
- "tax": acc4688
355
- };
356
- const t4769 = 125000.0;
357
- let t4770 = t3301 - t4769;
358
- let t4772 = [t4770, t3306];
359
- let t4773 = Math.max(...t4772);
360
- let t4775 = t4773 * t3492;
361
- let t4756 = t3474 + t4775;
362
- let t4751 = t4756 / t3346;
363
- let t589 = {
364
- "effective": t4751,
365
- "tax": t4756
366
- };
367
- let acc4820 = 0.0;
368
- t4563.forEach((t4824, t4825) => {
369
- let t4852 = t4824["lo"];
370
- let t4865 = t4824["hi"];
371
- let t4877 = t4824["rate"];
372
- let t4835 = t4588 - t4852;
373
- let t4858 = t4865 == t3325;
374
- let t4861 = t4858 ? t3327 : t4865;
375
- let t4839 = t4861 - t4852;
376
- let t4840 = Math.min(Math.max(t4835, t3306), t4839);
377
- let t4828 = t4840 * t4877;
378
- acc4820 += t4828;
379
- });
380
- let t4814 = acc4820 + t4756;
381
- let t4816 = t4814 + t3518;
382
- let t4818 = t4816 + t3521;
383
- let t4811 = t4818 / t3346;
384
- let acc4916 = 0.0;
385
- t4563.forEach((t4920, t4921) => {
386
- let t4948 = t4920["lo"];
387
- let t4961 = t4920["hi"];
388
- let t4973 = t4920["rate"];
389
- let t4931 = t4588 - t4948;
390
- let t4954 = t4961 == t3325;
391
- let t4957 = t4954 ? t3327 : t4961;
392
- let t4935 = t4957 - t4948;
393
- let t4936 = Math.min(Math.max(t4931, t3306), t4935);
394
- let t4924 = t4936 * t4973;
395
- acc4916 += t4924;
396
- });
397
- let t4910 = acc4916 + t4756;
398
- let t4912 = t4910 + t3518;
399
- let t4914 = t4912 + t3521;
400
- let t600 = {
401
- "effective": t4811,
402
- "tax": t4914
403
- };
404
- let acc5015 = 0.0;
405
- t4563.forEach((t5019, t5020) => {
406
- let t5047 = t5019["lo"];
407
- let t5060 = t5019["hi"];
408
- let t5072 = t5019["rate"];
409
- let t5030 = t4588 - t5047;
410
- let t5053 = t5060 == t3325;
411
- let t5056 = t5053 ? t3327 : t5060;
412
- let t5034 = t5056 - t5047;
413
- let t5035 = Math.min(Math.max(t5030, t3306), t5034);
414
- let t5023 = t5035 * t5072;
415
- acc5015 += t5023;
416
- });
417
- let t5009 = acc5015 + t4756;
418
- let t5011 = t5009 + t3518;
419
- let t5013 = t5011 + t3521;
420
- let t5006 = t3301 - t5013;
421
- let acc5117 = 0.0;
422
- t4563.forEach((t5121, t5122) => {
423
- let t5149 = t5121["lo"];
424
- let t5162 = t5121["hi"];
425
- let t5174 = t5121["rate"];
426
- let t5132 = t4588 - t5149;
427
- let t5155 = t5162 == t3325;
428
- let t5158 = t5155 ? t3327 : t5162;
429
- let t5136 = t5158 - t5149;
430
- let t5137 = Math.min(Math.max(t5132, t3306), t5136);
431
- let t5125 = t5137 * t5174;
432
- acc5117 += t5125;
433
- });
434
- let t5111 = acc5117 + t4756;
435
- let t5113 = t5111 + t3518;
436
- let t5115 = t5113 + t3521;
437
- let t5108 = t3301 - t5115;
438
- let t5105 = t5108 - t558;
439
- let t604 = {
440
- "federal": t586,
441
- "fica": t589,
442
- "state": t549,
443
- "local": t553,
444
- "total": t600,
445
- "after_tax": t5006,
446
- "retirement_contrib": t558,
447
- "take_home": t5105
448
- };
449
- let acc5206 = 0.0;
450
- let t5208 = t3281["head_of_household"];
451
- let t5209 = t5208["rates"];
452
- let acc5275 = 0.0;
453
- let t5229 = t3302["head_of_household"];
454
- let t5230 = t5229["std"];
455
- let t5231 = t3301 - t5230;
456
- let t5233 = [t5231, t3306];
457
- let t5234 = Math.max(...t5233);
458
- t5209.forEach((t5210, t5211) => {
459
- let t5246 = t5210["lo"];
460
- let t5259 = t5210["hi"];
461
- let t5267 = t5210["rate"];
462
- let t5252 = t5259 == t3325;
463
- let t5255 = t5252 ? t3327 : t5259;
464
- let t5223 = t5234 >= t5246;
465
- let t5225 = t5234 < t5255;
466
- let t5226 = t5223 && t5225;
467
- let t5215 = t5226 ? t5267 : t3306;
468
- acc5206 += t5215;
469
- let t5290 = t5234 - t5246;
470
- let t5294 = t5255 - t5246;
471
- let t5295 = Math.min(Math.max(t5290, t3306), t5294);
472
- let t5283 = t5295 * t5267;
473
- acc5275 += t5283;
474
- });
475
- let t5273 = acc5275 / t3346;
476
- let acc5334 = 0.0;
477
- t5209.forEach((t5338, t5339) => {
478
- let t5366 = t5338["lo"];
479
- let t5379 = t5338["hi"];
480
- let t5391 = t5338["rate"];
481
- let t5349 = t5234 - t5366;
482
- let t5372 = t5379 == t3325;
483
- let t5375 = t5372 ? t3327 : t5379;
484
- let t5353 = t5375 - t5366;
485
- let t5354 = Math.min(Math.max(t5349, t3306), t5353);
486
- let t5342 = t5354 * t5391;
487
- acc5334 += t5342;
488
- });
489
- let t608 = {
490
- "marginal": acc5206,
491
- "effective": t5273,
492
- "tax": acc5334
493
- };
494
- let acc5466 = 0.0;
495
- t5209.forEach((t5470, t5471) => {
496
- let t5498 = t5470["lo"];
497
- let t5511 = t5470["hi"];
498
- let t5523 = t5470["rate"];
499
- let t5481 = t5234 - t5498;
500
- let t5504 = t5511 == t3325;
501
- let t5507 = t5504 ? t3327 : t5511;
502
- let t5485 = t5507 - t5498;
503
- let t5486 = Math.min(Math.max(t5481, t3306), t5485);
504
- let t5474 = t5486 * t5523;
505
- acc5466 += t5474;
506
- });
507
- let t5460 = acc5466 + t3476;
508
- let t5462 = t5460 + t3518;
509
- let t5464 = t5462 + t3521;
510
- let t5457 = t5464 / t3346;
511
- let acc5562 = 0.0;
512
- t5209.forEach((t5566, t5567) => {
513
- let t5594 = t5566["lo"];
514
- let t5607 = t5566["hi"];
515
- let t5619 = t5566["rate"];
516
- let t5577 = t5234 - t5594;
517
- let t5600 = t5607 == t3325;
518
- let t5603 = t5600 ? t3327 : t5607;
519
- let t5581 = t5603 - t5594;
520
- let t5582 = Math.min(Math.max(t5577, t3306), t5581);
521
- let t5570 = t5582 * t5619;
522
- acc5562 += t5570;
523
- });
524
- let t5556 = acc5562 + t3476;
525
- let t5558 = t5556 + t3518;
526
- let t5560 = t5558 + t3521;
527
- let t622 = {
528
- "effective": t5457,
529
- "tax": t5560
530
- };
531
- let acc5661 = 0.0;
532
- t5209.forEach((t5665, t5666) => {
533
- let t5693 = t5665["lo"];
534
- let t5706 = t5665["hi"];
535
- let t5718 = t5665["rate"];
536
- let t5676 = t5234 - t5693;
537
- let t5699 = t5706 == t3325;
538
- let t5702 = t5699 ? t3327 : t5706;
539
- let t5680 = t5702 - t5693;
540
- let t5681 = Math.min(Math.max(t5676, t3306), t5680);
541
- let t5669 = t5681 * t5718;
542
- acc5661 += t5669;
543
- });
544
- let t5655 = acc5661 + t3476;
545
- let t5657 = t5655 + t3518;
546
- let t5659 = t5657 + t3521;
547
- let t5652 = t3301 - t5659;
548
- let acc5763 = 0.0;
549
- t5209.forEach((t5767, t5768) => {
550
- let t5795 = t5767["lo"];
551
- let t5808 = t5767["hi"];
552
- let t5820 = t5767["rate"];
553
- let t5778 = t5234 - t5795;
554
- let t5801 = t5808 == t3325;
555
- let t5804 = t5801 ? t3327 : t5808;
556
- let t5782 = t5804 - t5795;
557
- let t5783 = Math.min(Math.max(t5778, t3306), t5782);
558
- let t5771 = t5783 * t5820;
559
- acc5763 += t5771;
560
- });
561
- let t5757 = acc5763 + t3476;
562
- let t5759 = t5757 + t3518;
563
- let t5761 = t5759 + t3521;
564
- let t5754 = t3301 - t5761;
565
- let t5751 = t5754 - t558;
566
- let t626 = {
567
- "federal": t608,
568
- "fica": t545,
569
- "state": t549,
570
- "local": t553,
571
- "total": t622,
572
- "after_tax": t5652,
573
- "retirement_contrib": t558,
574
- "take_home": t5751
575
- };
576
- let t627 = {
577
- "single": t560,
578
- "married_joint": t582,
579
- "married_separate": t604,
580
- "head_of_household": t626
581
- };
582
- return t627;
2
+ let out = [];
3
+ let t974 = input["income"];
4
+ const t975 = 168600.0;
5
+ let t976 = [t974, t975];
6
+ let t977 = Math.min(...t976);
7
+ const t978 = 0.062;
8
+ let t979 = t977 * t978;
9
+ const t981 = 0.0145;
10
+ let t982 = t974 * t981;
11
+ let t1032 = input["state_rate"];
12
+ let t1033 = t974 * t1032;
13
+ let t1035 = input["local_rate"];
14
+ let t1036 = t974 * t1035;
15
+ let t181 = input["statuses"];
16
+ const t824 = 0;
17
+ const t857 = 1.0;
18
+ let t971 = t979 + t982;
19
+ const t990 = 0.009;
20
+ let t195 = {
21
+ "marginal": t1032,
22
+ "effective": t1032,
23
+ "tax": t1033
24
+ };
25
+ let t199 = {
26
+ "marginal": t1035,
27
+ "effective": t1035,
28
+ "tax": t1036
29
+ };
30
+ let t204 = input["retirement_contrib"];
31
+ const t840 = -1;
32
+ const t842 = 100000000000.0;
33
+ let t858 = [t974, t857];
34
+ let t859 = Math.max(...t858);
35
+ t181.forEach((statuses_el_182, statuses_i_183) => {
36
+ let t184 = statuses_el_182["name"];
37
+ let t822 = statuses_el_182["std"];
38
+ let acc802 = 0.0;
39
+ let t803 = statuses_el_182["rates"];
40
+ let acc863 = 0.0;
41
+ let acc913 = 0.0;
42
+ let t985 = statuses_el_182["addl_threshold"];
43
+ let acc1039 = 0.0;
44
+ let acc1127 = 0.0;
45
+ let acc1219 = 0.0;
46
+ let acc1315 = 0.0;
47
+ let t823 = t974 - t822;
48
+ let t986 = t974 - t985;
49
+ let t825 = [t823, t824];
50
+ let t988 = [t986, t824];
51
+ let t826 = Math.max(...t825);
52
+ let t989 = Math.max(...t988);
53
+ t803.forEach((t804, t805) => {
54
+ let t829 = t804["lo"];
55
+ let t815 = t826 >= t829;
56
+ let t847 = t804["hi"];
57
+ let t841 = t847 == t840;
58
+ let t844 = t841 ? t842 : t847;
59
+ let t818 = t826 < t844;
60
+ let t819 = t815 && t818;
61
+ let t853 = t804["rate"];
62
+ let t809 = t819 ? t853 : t824;
63
+ acc802 += t809;
64
+ });
65
+ let t991 = t989 * t990;
66
+ t803.forEach((t865, t866) => {
67
+ let t890 = t865["lo"];
68
+ let t875 = t826 - t890;
69
+ let t901 = t865["hi"];
70
+ let t895 = t901 == t840;
71
+ let t898 = t895 ? t842 : t901;
72
+ let t879 = t898 - t890;
73
+ let t880 = Math.min(Math.max(t875, t824), t879);
74
+ let t910 = t865["rate"];
75
+ let t869 = t880 * t910;
76
+ acc863 += t869;
77
+ acc913 += t869;
78
+ acc1039 += t869;
79
+ acc1127 += t869;
80
+ acc1219 += t869;
81
+ acc1315 += t869;
82
+ });
83
+ let t973 = t971 + t991;
84
+ let t967 = t973 / t859;
85
+ let t860 = acc863 / t859;
86
+ let t1028 = acc1039 + t973;
87
+ let t1116 = acc1127 + t973;
88
+ let t1208 = acc1219 + t973;
89
+ let t1304 = acc1315 + t973;
90
+ let t191 = {
91
+ "effective": t967,
92
+ "tax": t973
93
+ };
94
+ let t188 = {
95
+ "marginal": acc802,
96
+ "effective": t860,
97
+ "tax": acc913
98
+ };
99
+ let t1029 = t1028 + t1033;
100
+ let t1117 = t1116 + t1033;
101
+ let t1209 = t1208 + t1033;
102
+ let t1305 = t1304 + t1033;
103
+ let t1030 = t1029 + t1036;
104
+ let t1118 = t1117 + t1036;
105
+ let t1210 = t1209 + t1036;
106
+ let t1306 = t1305 + t1036;
107
+ let t1022 = t1030 / t859;
108
+ let t1202 = t974 - t1210;
109
+ let t1298 = t974 - t1306;
110
+ let t202 = {
111
+ "effective": t1022,
112
+ "tax": t1118
113
+ };
114
+ let t1294 = t1298 - t204;
115
+ let t206 = {
116
+ "filing_status": t184,
117
+ "federal": t188,
118
+ "fica": t191,
119
+ "state": t195,
120
+ "local": t199,
121
+ "total": t202,
122
+ "after_tax": t1202,
123
+ "retirement_contrib": t204,
124
+ "take_home": t1294
125
+ };
126
+ out.push(t206);
127
+ });
128
+ return out;
583
129
  }
584
130