kumi 0.0.23 → 0.0.25

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +2 -2
  4. data/golden/array_element/expected/schema_ruby.rb +1 -1
  5. data/golden/array_index/expected/schema_ruby.rb +1 -1
  6. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  7. data/golden/cascade_logic/expected/lir_02_inlined.txt +8 -8
  8. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  9. data/golden/chained_fusion/expected/lir_02_inlined.txt +36 -36
  10. data/golden/chained_fusion/expected/lir_03_cse.txt +23 -23
  11. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +25 -25
  12. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +23 -23
  13. data/golden/chained_fusion/expected/lir_06_const_prop.txt +23 -23
  14. data/golden/chained_fusion/expected/schema_javascript.mjs +23 -23
  15. data/golden/chained_fusion/expected/schema_ruby.rb +28 -28
  16. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  17. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +18 -18
  18. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +17 -17
  19. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +17 -17
  20. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +17 -17
  21. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +17 -17
  22. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +13 -13
  23. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +18 -18
  24. data/golden/game_of_life/expected/lir_00_unoptimized.txt +33 -33
  25. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +33 -33
  26. data/golden/game_of_life/expected/lir_02_inlined.txt +1370 -1370
  27. data/golden/game_of_life/expected/lir_03_cse.txt +448 -448
  28. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +448 -448
  29. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +448 -448
  30. data/golden/game_of_life/expected/lir_06_const_prop.txt +448 -448
  31. data/golden/game_of_life/expected/schema_javascript.mjs +85 -85
  32. data/golden/game_of_life/expected/schema_ruby.rb +86 -86
  33. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  34. data/golden/hash_keys/schema.kumi +4 -5
  35. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  36. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +15 -15
  37. data/golden/hierarchical_complex/expected/lir_03_cse.txt +1 -1
  38. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +1 -1
  39. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +1 -1
  40. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +1 -1
  41. data/golden/hierarchical_complex/expected/schema_javascript.mjs +1 -1
  42. data/golden/hierarchical_complex/expected/schema_ruby.rb +2 -2
  43. data/golden/inline_rename_scope_leak/expected/ast.txt +48 -0
  44. data/golden/inline_rename_scope_leak/expected/input_plan.txt +10 -0
  45. data/golden/inline_rename_scope_leak/expected/lir_00_unoptimized.txt +35 -0
  46. data/golden/inline_rename_scope_leak/expected/lir_01_hoist_scalar_references.txt +35 -0
  47. data/golden/inline_rename_scope_leak/expected/lir_02_inlined.txt +49 -0
  48. data/golden/inline_rename_scope_leak/expected/lir_03_cse.txt +49 -0
  49. data/golden/inline_rename_scope_leak/expected/lir_04_1_loop_fusion.txt +49 -0
  50. data/golden/inline_rename_scope_leak/expected/lir_04_loop_invcm.txt +49 -0
  51. data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +49 -0
  52. data/golden/inline_rename_scope_leak/expected/nast.txt +31 -0
  53. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +51 -0
  54. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +82 -0
  55. data/golden/inline_rename_scope_leak/expected/snast.txt +31 -0
  56. data/golden/inline_rename_scope_leak/expected.json +7 -0
  57. data/golden/inline_rename_scope_leak/input.json +4 -0
  58. data/golden/inline_rename_scope_leak/schema.kumi +24 -0
  59. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  60. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +35 -35
  61. data/golden/interleaved_fusion/expected/lir_03_cse.txt +26 -26
  62. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +27 -26
  63. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +26 -26
  64. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +26 -26
  65. data/golden/interleaved_fusion/expected/schema_javascript.mjs +23 -23
  66. data/golden/interleaved_fusion/expected/schema_ruby.rb +29 -29
  67. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  68. data/golden/loop_fusion/expected/lir_02_inlined.txt +17 -17
  69. data/golden/loop_fusion/expected/lir_03_cse.txt +14 -14
  70. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +14 -14
  71. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +14 -14
  72. data/golden/loop_fusion/expected/lir_06_const_prop.txt +14 -14
  73. data/golden/loop_fusion/expected/schema_javascript.mjs +12 -12
  74. data/golden/loop_fusion/expected/schema_ruby.rb +16 -16
  75. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  76. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +5 -5
  77. data/golden/mixed_dimensions/expected/lir_03_cse.txt +5 -5
  78. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +5 -5
  79. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +5 -5
  80. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +5 -5
  81. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -3
  82. data/golden/mixed_dimensions/expected/schema_ruby.rb +6 -6
  83. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +48 -48
  84. data/golden/multirank_hoisting/expected/lir_03_cse.txt +35 -35
  85. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +35 -35
  86. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +35 -35
  87. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +35 -35
  88. data/golden/multirank_hoisting/expected/schema_javascript.mjs +34 -34
  89. data/golden/multirank_hoisting/expected/schema_ruby.rb +36 -36
  90. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  91. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +30 -30
  92. data/golden/reduction_broadcast/expected/lir_03_cse.txt +22 -22
  93. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +22 -22
  94. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +22 -22
  95. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +22 -22
  96. data/golden/reduction_broadcast/expected/schema_javascript.mjs +18 -18
  97. data/golden/reduction_broadcast/expected/schema_ruby.rb +23 -23
  98. data/golden/roll/expected/lir_00_unoptimized.txt +8 -8
  99. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +8 -8
  100. data/golden/roll/expected/lir_02_inlined.txt +8 -8
  101. data/golden/roll/expected/lir_03_cse.txt +8 -8
  102. data/golden/roll/expected/lir_04_1_loop_fusion.txt +8 -8
  103. data/golden/roll/expected/lir_04_loop_invcm.txt +8 -8
  104. data/golden/roll/expected/lir_06_const_prop.txt +8 -8
  105. data/golden/roll/expected/schema_ruby.rb +1 -1
  106. data/golden/shift/expected/lir_00_unoptimized.txt +12 -12
  107. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +12 -12
  108. data/golden/shift/expected/lir_02_inlined.txt +12 -12
  109. data/golden/shift/expected/lir_03_cse.txt +12 -12
  110. data/golden/shift/expected/lir_04_1_loop_fusion.txt +12 -12
  111. data/golden/shift/expected/lir_04_loop_invcm.txt +12 -12
  112. data/golden/shift/expected/lir_06_const_prop.txt +12 -12
  113. data/golden/shift/expected/schema_ruby.rb +1 -1
  114. data/golden/shift_2d/expected/lir_00_unoptimized.txt +48 -48
  115. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +48 -48
  116. data/golden/shift_2d/expected/lir_02_inlined.txt +48 -48
  117. data/golden/shift_2d/expected/lir_03_cse.txt +48 -48
  118. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +48 -48
  119. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +48 -48
  120. data/golden/shift_2d/expected/lir_06_const_prop.txt +48 -48
  121. data/golden/shift_2d/expected/schema_ruby.rb +1 -1
  122. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  123. data/golden/streaming_basics/expected/lir_02_inlined.txt +25 -25
  124. data/golden/streaming_basics/expected/lir_03_cse.txt +13 -13
  125. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +13 -13
  126. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +13 -13
  127. data/golden/streaming_basics/expected/lir_06_const_prop.txt +13 -13
  128. data/golden/streaming_basics/expected/schema_javascript.mjs +13 -13
  129. data/golden/streaming_basics/expected/schema_ruby.rb +14 -14
  130. data/golden/tuples/expected/lir_00_unoptimized.txt +4 -4
  131. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +4 -4
  132. data/golden/tuples/expected/lir_02_inlined.txt +4 -4
  133. data/golden/tuples/expected/lir_03_cse.txt +4 -4
  134. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +4 -4
  135. data/golden/tuples/expected/lir_04_loop_invcm.txt +4 -4
  136. data/golden/tuples/expected/lir_06_const_prop.txt +4 -4
  137. data/golden/tuples/expected/schema_ruby.rb +1 -1
  138. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +1 -1
  139. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +1 -1
  140. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +17 -17
  141. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +14 -14
  142. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +14 -14
  143. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +14 -14
  144. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +14 -14
  145. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +13 -13
  146. data/golden/tuples_and_arrays/expected/schema_ruby.rb +14 -14
  147. data/golden/us_tax_2024/expected/ast.txt +865 -0
  148. data/golden/us_tax_2024/expected/input_plan.txt +61 -0
  149. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +901 -0
  150. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +901 -0
  151. data/golden/us_tax_2024/expected/lir_02_inlined.txt +5178 -0
  152. data/golden/us_tax_2024/expected/lir_03_cse.txt +2499 -0
  153. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +2519 -0
  154. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +2499 -0
  155. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +2499 -0
  156. data/golden/us_tax_2024/expected/nast.txt +976 -0
  157. data/golden/us_tax_2024/expected/schema_javascript.mjs +584 -0
  158. data/golden/us_tax_2024/expected/schema_ruby.rb +639 -0
  159. data/golden/us_tax_2024/expected/snast.txt +976 -0
  160. data/golden/us_tax_2024/expected.json +1 -0
  161. data/golden/us_tax_2024/input.json +168 -0
  162. data/golden/us_tax_2024/schema.kumi +203 -0
  163. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  164. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +227 -107
  165. data/lib/kumi/version.rb +1 -1
  166. metadata +33 -1
@@ -0,0 +1,901 @@
1
+ (LIR
2
+ (Declaration state_tax
3
+ %t1 = load_input "income" :: float
4
+ %t2 = load_input "state_rate" :: float
5
+ %t3 = call core.mul(%t1, %t2) :: float
6
+ yield %t3
7
+ )
8
+ (Declaration local_tax
9
+ %t4 = load_input "income" :: float
10
+ %t5 = load_input "local_rate" :: float
11
+ %t6 = call core.mul(%t4, %t5) :: float
12
+ yield %t6
13
+ )
14
+ (Declaration taxable_single
15
+ %t7 = load_input "income" :: float
16
+ %t8 = load_input "fed" :: any
17
+ %t9 = load_field t8["single"] :: any
18
+ %t10 = load_field t9["std"] :: float
19
+ %t11 = call core.sub(%t7, %t10) :: float
20
+ %t12 = const 0 :: integer
21
+ %t13 = make_tuple(%t11, %t12) :: tuple<float, integer>
22
+ %t14 = fold %t13 fn="agg.max" :: float
23
+ yield %t14
24
+ )
25
+ (Declaration lo_s
26
+ %t15 = load_input "fed" :: array
27
+ %t16 = load_field t15["single"] :: any
28
+ %t17 = load_field t16["rates"] :: any
29
+ loop rates id=L1 in %t17 as el=%rates_el_18, idx=%rates_i_19
30
+ %t20 = load_field rates_el_18["lo"] :: float
31
+ yield %t20
32
+ end_loop
33
+ )
34
+ (Declaration hi_s
35
+ %t21 = load_input "fed" :: array
36
+ %t22 = load_field t21["single"] :: any
37
+ %t23 = load_field t22["rates"] :: any
38
+ loop rates id=L2 in %t23 as el=%rates_el_24, idx=%rates_i_25
39
+ %t26 = load_field rates_el_24["hi"] :: float
40
+ yield %t26
41
+ end_loop
42
+ )
43
+ (Declaration rate_s
44
+ %t27 = load_input "fed" :: array
45
+ %t28 = load_field t27["single"] :: any
46
+ %t29 = load_field t28["rates"] :: any
47
+ loop rates id=L3 in %t29 as el=%rates_el_30, idx=%rates_i_31
48
+ %t32 = load_field rates_el_30["rate"] :: float
49
+ yield %t32
50
+ end_loop
51
+ )
52
+ (Declaration big_hi
53
+ %t33 = const 100000000000.0 :: float
54
+ yield %t33
55
+ )
56
+ (Declaration hi_s_eff
57
+ %t34 = load_input "fed" :: array
58
+ %t35 = load_field t34["single"] :: any
59
+ %t36 = load_field t35["rates"] :: any
60
+ loop rates id=L4 in %t36 as el=%rates_el_37, idx=%rates_i_38
61
+ %t39 = load_decl hi_s axes=[rates] :: float
62
+ %t40 = const -1 :: integer
63
+ %t41 = call core.eq(%t39, %t40) :: boolean
64
+ %t42 = const 100000000000.0 :: float
65
+ %t43 = load_decl hi_s axes=[rates] :: float
66
+ %t44 = select %t41, %t42, %t43 :: float
67
+ yield %t44
68
+ end_loop
69
+ )
70
+ (Declaration amt_s
71
+ %t45 = load_input "fed" :: array
72
+ %t46 = load_field t45["single"] :: any
73
+ %t47 = load_field t46["rates"] :: any
74
+ %t50 = load_decl taxable_single :: float
75
+ loop rates id=L5 in %t47 as el=%rates_el_48, idx=%rates_i_49
76
+ %t51 = load_decl lo_s axes=[rates] :: float
77
+ %t52 = call core.sub(%t50, %t51) :: float
78
+ %t53 = const 0 :: integer
79
+ %t54 = load_decl hi_s_eff axes=[rates] :: float
80
+ %t55 = load_decl lo_s axes=[rates] :: float
81
+ %t56 = call core.sub(%t54, %t55) :: float
82
+ %t57 = call core.clamp(%t52, %t53, %t56) :: float
83
+ yield %t57
84
+ end_loop
85
+ )
86
+ (Declaration fed_tax_single
87
+ %acc_58 = decl_acc :: float
88
+ %t59 = load_input "fed" :: array
89
+ %t60 = load_field t59["single"] :: any
90
+ %t61 = load_field t60["rates"] :: any
91
+ loop rates id=L6 in %t61 as el=%rates_el_62, idx=%rates_i_63
92
+ %t64 = load_decl amt_s axes=[rates] :: float
93
+ %t65 = load_decl rate_s axes=[rates] :: float
94
+ %t66 = call core.mul(%t64, %t65) :: float
95
+ %acc_58 = acc_add agg.sum(%acc_58, %t66) :: float
96
+ end_loop
97
+ %t67 = acc_load %acc_58 :: float
98
+ yield %t67
99
+ )
100
+ (Declaration in_br_s
101
+ %t68 = load_input "fed" :: array
102
+ %t69 = load_field t68["single"] :: any
103
+ %t70 = load_field t69["rates"] :: any
104
+ %t73 = load_decl taxable_single :: float
105
+ %t76 = load_decl taxable_single :: float
106
+ loop rates id=L7 in %t70 as el=%rates_el_71, idx=%rates_i_72
107
+ %t74 = load_decl lo_s axes=[rates] :: float
108
+ %t75 = call core.gte(%t73, %t74) :: boolean
109
+ %t77 = load_decl hi_s_eff axes=[rates] :: float
110
+ %t78 = call core.lt(%t76, %t77) :: boolean
111
+ %t79 = call core.and(%t75, %t78) :: boolean
112
+ yield %t79
113
+ end_loop
114
+ )
115
+ (Declaration fed_marginal_single
116
+ %acc_80 = decl_acc :: float
117
+ %t81 = load_input "fed" :: array
118
+ %t82 = load_field t81["single"] :: any
119
+ %t83 = load_field t82["rates"] :: any
120
+ loop rates id=L8 in %t83 as el=%rates_el_84, idx=%rates_i_85
121
+ %t86 = load_decl in_br_s axes=[rates] :: boolean
122
+ %t87 = load_decl rate_s axes=[rates] :: float
123
+ %t88 = const 0 :: integer
124
+ %t89 = select %t86, %t87, %t88 :: float
125
+ %acc_80 = acc_add agg.sum(%acc_80, %t89) :: float
126
+ end_loop
127
+ %t90 = acc_load %acc_80 :: float
128
+ yield %t90
129
+ )
130
+ (Declaration fed_eff_single
131
+ %t91 = load_decl fed_tax_single :: float
132
+ %t92 = load_input "income" :: float
133
+ %t93 = const 1.0 :: float
134
+ %t94 = make_tuple(%t92, %t93) :: tuple<float>
135
+ %t95 = fold %t94 fn="agg.max" :: float
136
+ %t96 = call core.div(%t91, %t95) :: float
137
+ yield %t96
138
+ )
139
+ (Declaration ss_wage_base
140
+ %t97 = const 168600.0 :: float
141
+ yield %t97
142
+ )
143
+ (Declaration ss_rate
144
+ %t98 = const 0.062 :: float
145
+ yield %t98
146
+ )
147
+ (Declaration ss_tax_s
148
+ %t99 = load_input "income" :: float
149
+ %t100 = const 168600.0 :: float
150
+ %t101 = make_tuple(%t99, %t100) :: tuple<float>
151
+ %t102 = fold %t101 fn="agg.min" :: float
152
+ %t103 = const 0.062 :: float
153
+ %t104 = call core.mul(%t102, %t103) :: float
154
+ yield %t104
155
+ )
156
+ (Declaration med_base_rate
157
+ %t105 = const 0.0145 :: float
158
+ yield %t105
159
+ )
160
+ (Declaration med_tax_s
161
+ %t106 = load_input "income" :: float
162
+ %t107 = const 0.0145 :: float
163
+ %t108 = call core.mul(%t106, %t107) :: float
164
+ yield %t108
165
+ )
166
+ (Declaration addl_threshold_single
167
+ %t109 = const 200000.0 :: float
168
+ yield %t109
169
+ )
170
+ (Declaration addl_med_rate
171
+ %t110 = const 0.009 :: float
172
+ yield %t110
173
+ )
174
+ (Declaration addl_med_tax_s
175
+ %t111 = load_input "income" :: float
176
+ %t112 = const 200000.0 :: float
177
+ %t113 = call core.sub(%t111, %t112) :: float
178
+ %t114 = const 0 :: integer
179
+ %t115 = make_tuple(%t113, %t114) :: tuple<float, integer>
180
+ %t116 = fold %t115 fn="agg.max" :: float
181
+ %t117 = const 0.009 :: float
182
+ %t118 = call core.mul(%t116, %t117) :: float
183
+ yield %t118
184
+ )
185
+ (Declaration fica_tax_single
186
+ %t119 = load_decl ss_tax_s :: float
187
+ %t120 = load_decl med_tax_s :: float
188
+ %t121 = call core.add(%t119, %t120) :: float
189
+ %t122 = load_decl addl_med_tax_s :: float
190
+ %t123 = call core.add(%t121, %t122) :: float
191
+ yield %t123
192
+ )
193
+ (Declaration fica_eff_single
194
+ %t124 = load_decl fica_tax_single :: float
195
+ %t125 = load_input "income" :: float
196
+ %t126 = const 1.0 :: float
197
+ %t127 = make_tuple(%t125, %t126) :: tuple<float>
198
+ %t128 = fold %t127 fn="agg.max" :: float
199
+ %t129 = call core.div(%t124, %t128) :: float
200
+ yield %t129
201
+ )
202
+ (Declaration total_tax_single
203
+ %t130 = load_decl fed_tax_single :: float
204
+ %t131 = load_decl fica_tax_single :: float
205
+ %t132 = call core.add(%t130, %t131) :: float
206
+ %t133 = load_decl state_tax :: float
207
+ %t134 = call core.add(%t132, %t133) :: float
208
+ %t135 = load_decl local_tax :: float
209
+ %t136 = call core.add(%t134, %t135) :: float
210
+ yield %t136
211
+ )
212
+ (Declaration total_eff_single
213
+ %t137 = load_decl total_tax_single :: float
214
+ %t138 = load_input "income" :: float
215
+ %t139 = const 1.0 :: float
216
+ %t140 = make_tuple(%t138, %t139) :: tuple<float>
217
+ %t141 = fold %t140 fn="agg.max" :: float
218
+ %t142 = call core.div(%t137, %t141) :: float
219
+ yield %t142
220
+ )
221
+ (Declaration after_tax_single
222
+ %t143 = load_input "income" :: float
223
+ %t144 = load_decl total_tax_single :: float
224
+ %t145 = call core.sub(%t143, %t144) :: float
225
+ yield %t145
226
+ )
227
+ (Declaration take_home_single
228
+ %t146 = load_decl after_tax_single :: float
229
+ %t147 = load_input "retirement_contrib" :: float
230
+ %t148 = call core.sub(%t146, %t147) :: float
231
+ yield %t148
232
+ )
233
+ (Declaration taxable_mj
234
+ %t149 = load_input "income" :: float
235
+ %t150 = load_input "fed" :: any
236
+ %t151 = load_field t150["married_joint"] :: any
237
+ %t152 = load_field t151["std"] :: float
238
+ %t153 = call core.sub(%t149, %t152) :: float
239
+ %t154 = const 0 :: integer
240
+ %t155 = make_tuple(%t153, %t154) :: tuple<float, integer>
241
+ %t156 = fold %t155 fn="agg.max" :: float
242
+ yield %t156
243
+ )
244
+ (Declaration lo_mj
245
+ %t157 = load_input "fed" :: array
246
+ %t158 = load_field t157["married_joint"] :: any
247
+ %t159 = load_field t158["rates"] :: any
248
+ loop rates id=L9 in %t159 as el=%rates_el_160, idx=%rates_i_161
249
+ %t162 = load_field rates_el_160["lo"] :: float
250
+ yield %t162
251
+ end_loop
252
+ )
253
+ (Declaration hi_mj
254
+ %t163 = load_input "fed" :: array
255
+ %t164 = load_field t163["married_joint"] :: any
256
+ %t165 = load_field t164["rates"] :: any
257
+ loop rates id=L10 in %t165 as el=%rates_el_166, idx=%rates_i_167
258
+ %t168 = load_field rates_el_166["hi"] :: float
259
+ yield %t168
260
+ end_loop
261
+ )
262
+ (Declaration rate_mj
263
+ %t169 = load_input "fed" :: array
264
+ %t170 = load_field t169["married_joint"] :: any
265
+ %t171 = load_field t170["rates"] :: any
266
+ loop rates id=L11 in %t171 as el=%rates_el_172, idx=%rates_i_173
267
+ %t174 = load_field rates_el_172["rate"] :: float
268
+ yield %t174
269
+ end_loop
270
+ )
271
+ (Declaration hi_mj_eff
272
+ %t175 = load_input "fed" :: array
273
+ %t176 = load_field t175["married_joint"] :: any
274
+ %t177 = load_field t176["rates"] :: any
275
+ loop rates id=L12 in %t177 as el=%rates_el_178, idx=%rates_i_179
276
+ %t180 = load_decl hi_mj axes=[rates] :: float
277
+ %t181 = const -1 :: integer
278
+ %t182 = call core.eq(%t180, %t181) :: boolean
279
+ %t183 = const 100000000000.0 :: float
280
+ %t184 = load_decl hi_mj axes=[rates] :: float
281
+ %t185 = select %t182, %t183, %t184 :: float
282
+ yield %t185
283
+ end_loop
284
+ )
285
+ (Declaration amt_mj
286
+ %t186 = load_input "fed" :: array
287
+ %t187 = load_field t186["married_joint"] :: any
288
+ %t188 = load_field t187["rates"] :: any
289
+ %t191 = load_decl taxable_mj :: float
290
+ loop rates id=L13 in %t188 as el=%rates_el_189, idx=%rates_i_190
291
+ %t192 = load_decl lo_mj axes=[rates] :: float
292
+ %t193 = call core.sub(%t191, %t192) :: float
293
+ %t194 = const 0 :: integer
294
+ %t195 = load_decl hi_mj_eff axes=[rates] :: float
295
+ %t196 = load_decl lo_mj axes=[rates] :: float
296
+ %t197 = call core.sub(%t195, %t196) :: float
297
+ %t198 = call core.clamp(%t193, %t194, %t197) :: float
298
+ yield %t198
299
+ end_loop
300
+ )
301
+ (Declaration fed_tax_mj
302
+ %acc_199 = decl_acc :: float
303
+ %t200 = load_input "fed" :: array
304
+ %t201 = load_field t200["married_joint"] :: any
305
+ %t202 = load_field t201["rates"] :: any
306
+ loop rates id=L14 in %t202 as el=%rates_el_203, idx=%rates_i_204
307
+ %t205 = load_decl amt_mj axes=[rates] :: float
308
+ %t206 = load_decl rate_mj axes=[rates] :: float
309
+ %t207 = call core.mul(%t205, %t206) :: float
310
+ %acc_199 = acc_add agg.sum(%acc_199, %t207) :: float
311
+ end_loop
312
+ %t208 = acc_load %acc_199 :: float
313
+ yield %t208
314
+ )
315
+ (Declaration in_br_mj
316
+ %t209 = load_input "fed" :: array
317
+ %t210 = load_field t209["married_joint"] :: any
318
+ %t211 = load_field t210["rates"] :: any
319
+ %t214 = load_decl taxable_mj :: float
320
+ %t217 = load_decl taxable_mj :: float
321
+ loop rates id=L15 in %t211 as el=%rates_el_212, idx=%rates_i_213
322
+ %t215 = load_decl lo_mj axes=[rates] :: float
323
+ %t216 = call core.gte(%t214, %t215) :: boolean
324
+ %t218 = load_decl hi_mj_eff axes=[rates] :: float
325
+ %t219 = call core.lt(%t217, %t218) :: boolean
326
+ %t220 = call core.and(%t216, %t219) :: boolean
327
+ yield %t220
328
+ end_loop
329
+ )
330
+ (Declaration fed_marginal_mj
331
+ %acc_221 = decl_acc :: float
332
+ %t222 = load_input "fed" :: array
333
+ %t223 = load_field t222["married_joint"] :: any
334
+ %t224 = load_field t223["rates"] :: any
335
+ loop rates id=L16 in %t224 as el=%rates_el_225, idx=%rates_i_226
336
+ %t227 = load_decl in_br_mj axes=[rates] :: boolean
337
+ %t228 = load_decl rate_mj axes=[rates] :: float
338
+ %t229 = const 0 :: integer
339
+ %t230 = select %t227, %t228, %t229 :: float
340
+ %acc_221 = acc_add agg.sum(%acc_221, %t230) :: float
341
+ end_loop
342
+ %t231 = acc_load %acc_221 :: float
343
+ yield %t231
344
+ )
345
+ (Declaration fed_eff_mj
346
+ %t232 = load_decl fed_tax_mj :: float
347
+ %t233 = load_input "income" :: float
348
+ %t234 = const 1.0 :: float
349
+ %t235 = make_tuple(%t233, %t234) :: tuple<float>
350
+ %t236 = fold %t235 fn="agg.max" :: float
351
+ %t237 = call core.div(%t232, %t236) :: float
352
+ yield %t237
353
+ )
354
+ (Declaration ss_tax_mj
355
+ %t238 = load_decl ss_tax_s :: float
356
+ yield %t238
357
+ )
358
+ (Declaration med_tax_mj
359
+ %t239 = load_decl med_tax_s :: float
360
+ yield %t239
361
+ )
362
+ (Declaration addl_threshold_mj
363
+ %t240 = const 250000.0 :: float
364
+ yield %t240
365
+ )
366
+ (Declaration addl_med_tax_mj
367
+ %t241 = load_input "income" :: float
368
+ %t242 = const 250000.0 :: float
369
+ %t243 = call core.sub(%t241, %t242) :: float
370
+ %t244 = const 0 :: integer
371
+ %t245 = make_tuple(%t243, %t244) :: tuple<float, integer>
372
+ %t246 = fold %t245 fn="agg.max" :: float
373
+ %t247 = const 0.009 :: float
374
+ %t248 = call core.mul(%t246, %t247) :: float
375
+ yield %t248
376
+ )
377
+ (Declaration fica_tax_mj
378
+ %t249 = load_decl ss_tax_mj :: float
379
+ %t250 = load_decl med_tax_mj :: float
380
+ %t251 = call core.add(%t249, %t250) :: float
381
+ %t252 = load_decl addl_med_tax_mj :: float
382
+ %t253 = call core.add(%t251, %t252) :: float
383
+ yield %t253
384
+ )
385
+ (Declaration fica_eff_mj
386
+ %t254 = load_decl fica_tax_mj :: float
387
+ %t255 = load_input "income" :: float
388
+ %t256 = const 1.0 :: float
389
+ %t257 = make_tuple(%t255, %t256) :: tuple<float>
390
+ %t258 = fold %t257 fn="agg.max" :: float
391
+ %t259 = call core.div(%t254, %t258) :: float
392
+ yield %t259
393
+ )
394
+ (Declaration total_tax_mj
395
+ %t260 = load_decl fed_tax_mj :: float
396
+ %t261 = load_decl fica_tax_mj :: float
397
+ %t262 = call core.add(%t260, %t261) :: float
398
+ %t263 = load_decl state_tax :: float
399
+ %t264 = call core.add(%t262, %t263) :: float
400
+ %t265 = load_decl local_tax :: float
401
+ %t266 = call core.add(%t264, %t265) :: float
402
+ yield %t266
403
+ )
404
+ (Declaration total_eff_mj
405
+ %t267 = load_decl total_tax_mj :: float
406
+ %t268 = load_input "income" :: float
407
+ %t269 = const 1.0 :: float
408
+ %t270 = make_tuple(%t268, %t269) :: tuple<float>
409
+ %t271 = fold %t270 fn="agg.max" :: float
410
+ %t272 = call core.div(%t267, %t271) :: float
411
+ yield %t272
412
+ )
413
+ (Declaration after_tax_mj
414
+ %t273 = load_input "income" :: float
415
+ %t274 = load_decl total_tax_mj :: float
416
+ %t275 = call core.sub(%t273, %t274) :: float
417
+ yield %t275
418
+ )
419
+ (Declaration take_home_mj
420
+ %t276 = load_decl after_tax_mj :: float
421
+ %t277 = load_input "retirement_contrib" :: float
422
+ %t278 = call core.sub(%t276, %t277) :: float
423
+ yield %t278
424
+ )
425
+ (Declaration taxable_ms
426
+ %t279 = load_input "income" :: float
427
+ %t280 = load_input "fed" :: any
428
+ %t281 = load_field t280["married_separate"] :: any
429
+ %t282 = load_field t281["std"] :: float
430
+ %t283 = call core.sub(%t279, %t282) :: float
431
+ %t284 = const 0 :: integer
432
+ %t285 = make_tuple(%t283, %t284) :: tuple<float, integer>
433
+ %t286 = fold %t285 fn="agg.max" :: float
434
+ yield %t286
435
+ )
436
+ (Declaration lo_ms
437
+ %t287 = load_input "fed" :: array
438
+ %t288 = load_field t287["married_separate"] :: any
439
+ %t289 = load_field t288["rates"] :: any
440
+ loop rates id=L17 in %t289 as el=%rates_el_290, idx=%rates_i_291
441
+ %t292 = load_field rates_el_290["lo"] :: float
442
+ yield %t292
443
+ end_loop
444
+ )
445
+ (Declaration hi_ms
446
+ %t293 = load_input "fed" :: array
447
+ %t294 = load_field t293["married_separate"] :: any
448
+ %t295 = load_field t294["rates"] :: any
449
+ loop rates id=L18 in %t295 as el=%rates_el_296, idx=%rates_i_297
450
+ %t298 = load_field rates_el_296["hi"] :: float
451
+ yield %t298
452
+ end_loop
453
+ )
454
+ (Declaration rate_ms
455
+ %t299 = load_input "fed" :: array
456
+ %t300 = load_field t299["married_separate"] :: any
457
+ %t301 = load_field t300["rates"] :: any
458
+ loop rates id=L19 in %t301 as el=%rates_el_302, idx=%rates_i_303
459
+ %t304 = load_field rates_el_302["rate"] :: float
460
+ yield %t304
461
+ end_loop
462
+ )
463
+ (Declaration hi_ms_eff
464
+ %t305 = load_input "fed" :: array
465
+ %t306 = load_field t305["married_separate"] :: any
466
+ %t307 = load_field t306["rates"] :: any
467
+ loop rates id=L20 in %t307 as el=%rates_el_308, idx=%rates_i_309
468
+ %t310 = load_decl hi_ms axes=[rates] :: float
469
+ %t311 = const -1 :: integer
470
+ %t312 = call core.eq(%t310, %t311) :: boolean
471
+ %t313 = const 100000000000.0 :: float
472
+ %t314 = load_decl hi_ms axes=[rates] :: float
473
+ %t315 = select %t312, %t313, %t314 :: float
474
+ yield %t315
475
+ end_loop
476
+ )
477
+ (Declaration amt_ms
478
+ %t316 = load_input "fed" :: array
479
+ %t317 = load_field t316["married_separate"] :: any
480
+ %t318 = load_field t317["rates"] :: any
481
+ %t321 = load_decl taxable_ms :: float
482
+ loop rates id=L21 in %t318 as el=%rates_el_319, idx=%rates_i_320
483
+ %t322 = load_decl lo_ms axes=[rates] :: float
484
+ %t323 = call core.sub(%t321, %t322) :: float
485
+ %t324 = const 0 :: integer
486
+ %t325 = load_decl hi_ms_eff axes=[rates] :: float
487
+ %t326 = load_decl lo_ms axes=[rates] :: float
488
+ %t327 = call core.sub(%t325, %t326) :: float
489
+ %t328 = call core.clamp(%t323, %t324, %t327) :: float
490
+ yield %t328
491
+ end_loop
492
+ )
493
+ (Declaration fed_tax_ms
494
+ %acc_329 = decl_acc :: float
495
+ %t330 = load_input "fed" :: array
496
+ %t331 = load_field t330["married_separate"] :: any
497
+ %t332 = load_field t331["rates"] :: any
498
+ loop rates id=L22 in %t332 as el=%rates_el_333, idx=%rates_i_334
499
+ %t335 = load_decl amt_ms axes=[rates] :: float
500
+ %t336 = load_decl rate_ms axes=[rates] :: float
501
+ %t337 = call core.mul(%t335, %t336) :: float
502
+ %acc_329 = acc_add agg.sum(%acc_329, %t337) :: float
503
+ end_loop
504
+ %t338 = acc_load %acc_329 :: float
505
+ yield %t338
506
+ )
507
+ (Declaration in_br_ms
508
+ %t339 = load_input "fed" :: array
509
+ %t340 = load_field t339["married_separate"] :: any
510
+ %t341 = load_field t340["rates"] :: any
511
+ %t344 = load_decl taxable_ms :: float
512
+ %t347 = load_decl taxable_ms :: float
513
+ loop rates id=L23 in %t341 as el=%rates_el_342, idx=%rates_i_343
514
+ %t345 = load_decl lo_ms axes=[rates] :: float
515
+ %t346 = call core.gte(%t344, %t345) :: boolean
516
+ %t348 = load_decl hi_ms_eff axes=[rates] :: float
517
+ %t349 = call core.lt(%t347, %t348) :: boolean
518
+ %t350 = call core.and(%t346, %t349) :: boolean
519
+ yield %t350
520
+ end_loop
521
+ )
522
+ (Declaration fed_marginal_ms
523
+ %acc_351 = decl_acc :: float
524
+ %t352 = load_input "fed" :: array
525
+ %t353 = load_field t352["married_separate"] :: any
526
+ %t354 = load_field t353["rates"] :: any
527
+ loop rates id=L24 in %t354 as el=%rates_el_355, idx=%rates_i_356
528
+ %t357 = load_decl in_br_ms axes=[rates] :: boolean
529
+ %t358 = load_decl rate_ms axes=[rates] :: float
530
+ %t359 = const 0 :: integer
531
+ %t360 = select %t357, %t358, %t359 :: float
532
+ %acc_351 = acc_add agg.sum(%acc_351, %t360) :: float
533
+ end_loop
534
+ %t361 = acc_load %acc_351 :: float
535
+ yield %t361
536
+ )
537
+ (Declaration fed_eff_ms
538
+ %t362 = load_decl fed_tax_ms :: float
539
+ %t363 = load_input "income" :: float
540
+ %t364 = const 1.0 :: float
541
+ %t365 = make_tuple(%t363, %t364) :: tuple<float>
542
+ %t366 = fold %t365 fn="agg.max" :: float
543
+ %t367 = call core.div(%t362, %t366) :: float
544
+ yield %t367
545
+ )
546
+ (Declaration ss_tax_ms
547
+ %t368 = load_decl ss_tax_s :: float
548
+ yield %t368
549
+ )
550
+ (Declaration med_tax_ms
551
+ %t369 = load_decl med_tax_s :: float
552
+ yield %t369
553
+ )
554
+ (Declaration addl_threshold_ms
555
+ %t370 = const 125000.0 :: float
556
+ yield %t370
557
+ )
558
+ (Declaration addl_med_tax_ms
559
+ %t371 = load_input "income" :: float
560
+ %t372 = const 125000.0 :: float
561
+ %t373 = call core.sub(%t371, %t372) :: float
562
+ %t374 = const 0 :: integer
563
+ %t375 = make_tuple(%t373, %t374) :: tuple<float, integer>
564
+ %t376 = fold %t375 fn="agg.max" :: float
565
+ %t377 = const 0.009 :: float
566
+ %t378 = call core.mul(%t376, %t377) :: float
567
+ yield %t378
568
+ )
569
+ (Declaration fica_tax_ms
570
+ %t379 = load_decl ss_tax_ms :: float
571
+ %t380 = load_decl med_tax_ms :: float
572
+ %t381 = call core.add(%t379, %t380) :: float
573
+ %t382 = load_decl addl_med_tax_ms :: float
574
+ %t383 = call core.add(%t381, %t382) :: float
575
+ yield %t383
576
+ )
577
+ (Declaration fica_eff_ms
578
+ %t384 = load_decl fica_tax_ms :: float
579
+ %t385 = load_input "income" :: float
580
+ %t386 = const 1.0 :: float
581
+ %t387 = make_tuple(%t385, %t386) :: tuple<float>
582
+ %t388 = fold %t387 fn="agg.max" :: float
583
+ %t389 = call core.div(%t384, %t388) :: float
584
+ yield %t389
585
+ )
586
+ (Declaration total_tax_ms
587
+ %t390 = load_decl fed_tax_ms :: float
588
+ %t391 = load_decl fica_tax_ms :: float
589
+ %t392 = call core.add(%t390, %t391) :: float
590
+ %t393 = load_decl state_tax :: float
591
+ %t394 = call core.add(%t392, %t393) :: float
592
+ %t395 = load_decl local_tax :: float
593
+ %t396 = call core.add(%t394, %t395) :: float
594
+ yield %t396
595
+ )
596
+ (Declaration total_eff_ms
597
+ %t397 = load_decl total_tax_ms :: float
598
+ %t398 = load_input "income" :: float
599
+ %t399 = const 1.0 :: float
600
+ %t400 = make_tuple(%t398, %t399) :: tuple<float>
601
+ %t401 = fold %t400 fn="agg.max" :: float
602
+ %t402 = call core.div(%t397, %t401) :: float
603
+ yield %t402
604
+ )
605
+ (Declaration after_tax_ms
606
+ %t403 = load_input "income" :: float
607
+ %t404 = load_decl total_tax_ms :: float
608
+ %t405 = call core.sub(%t403, %t404) :: float
609
+ yield %t405
610
+ )
611
+ (Declaration take_home_ms
612
+ %t406 = load_decl after_tax_ms :: float
613
+ %t407 = load_input "retirement_contrib" :: float
614
+ %t408 = call core.sub(%t406, %t407) :: float
615
+ yield %t408
616
+ )
617
+ (Declaration taxable_hoh
618
+ %t409 = load_input "income" :: float
619
+ %t410 = load_input "fed" :: any
620
+ %t411 = load_field t410["head_of_household"] :: any
621
+ %t412 = load_field t411["std"] :: float
622
+ %t413 = call core.sub(%t409, %t412) :: float
623
+ %t414 = const 0 :: integer
624
+ %t415 = make_tuple(%t413, %t414) :: tuple<float, integer>
625
+ %t416 = fold %t415 fn="agg.max" :: float
626
+ yield %t416
627
+ )
628
+ (Declaration lo_h
629
+ %t417 = load_input "fed" :: array
630
+ %t418 = load_field t417["head_of_household"] :: any
631
+ %t419 = load_field t418["rates"] :: any
632
+ loop rates id=L25 in %t419 as el=%rates_el_420, idx=%rates_i_421
633
+ %t422 = load_field rates_el_420["lo"] :: float
634
+ yield %t422
635
+ end_loop
636
+ )
637
+ (Declaration hi_h
638
+ %t423 = load_input "fed" :: array
639
+ %t424 = load_field t423["head_of_household"] :: any
640
+ %t425 = load_field t424["rates"] :: any
641
+ loop rates id=L26 in %t425 as el=%rates_el_426, idx=%rates_i_427
642
+ %t428 = load_field rates_el_426["hi"] :: float
643
+ yield %t428
644
+ end_loop
645
+ )
646
+ (Declaration rate_h
647
+ %t429 = load_input "fed" :: array
648
+ %t430 = load_field t429["head_of_household"] :: any
649
+ %t431 = load_field t430["rates"] :: any
650
+ loop rates id=L27 in %t431 as el=%rates_el_432, idx=%rates_i_433
651
+ %t434 = load_field rates_el_432["rate"] :: float
652
+ yield %t434
653
+ end_loop
654
+ )
655
+ (Declaration hi_h_eff
656
+ %t435 = load_input "fed" :: array
657
+ %t436 = load_field t435["head_of_household"] :: any
658
+ %t437 = load_field t436["rates"] :: any
659
+ loop rates id=L28 in %t437 as el=%rates_el_438, idx=%rates_i_439
660
+ %t440 = load_decl hi_h axes=[rates] :: float
661
+ %t441 = const -1 :: integer
662
+ %t442 = call core.eq(%t440, %t441) :: boolean
663
+ %t443 = const 100000000000.0 :: float
664
+ %t444 = load_decl hi_h axes=[rates] :: float
665
+ %t445 = select %t442, %t443, %t444 :: float
666
+ yield %t445
667
+ end_loop
668
+ )
669
+ (Declaration amt_h
670
+ %t446 = load_input "fed" :: array
671
+ %t447 = load_field t446["head_of_household"] :: any
672
+ %t448 = load_field t447["rates"] :: any
673
+ %t451 = load_decl taxable_hoh :: float
674
+ loop rates id=L29 in %t448 as el=%rates_el_449, idx=%rates_i_450
675
+ %t452 = load_decl lo_h axes=[rates] :: float
676
+ %t453 = call core.sub(%t451, %t452) :: float
677
+ %t454 = const 0 :: integer
678
+ %t455 = load_decl hi_h_eff axes=[rates] :: float
679
+ %t456 = load_decl lo_h axes=[rates] :: float
680
+ %t457 = call core.sub(%t455, %t456) :: float
681
+ %t458 = call core.clamp(%t453, %t454, %t457) :: float
682
+ yield %t458
683
+ end_loop
684
+ )
685
+ (Declaration fed_tax_hoh
686
+ %acc_459 = decl_acc :: float
687
+ %t460 = load_input "fed" :: array
688
+ %t461 = load_field t460["head_of_household"] :: any
689
+ %t462 = load_field t461["rates"] :: any
690
+ loop rates id=L30 in %t462 as el=%rates_el_463, idx=%rates_i_464
691
+ %t465 = load_decl amt_h axes=[rates] :: float
692
+ %t466 = load_decl rate_h axes=[rates] :: float
693
+ %t467 = call core.mul(%t465, %t466) :: float
694
+ %acc_459 = acc_add agg.sum(%acc_459, %t467) :: float
695
+ end_loop
696
+ %t468 = acc_load %acc_459 :: float
697
+ yield %t468
698
+ )
699
+ (Declaration in_br_h
700
+ %t469 = load_input "fed" :: array
701
+ %t470 = load_field t469["head_of_household"] :: any
702
+ %t471 = load_field t470["rates"] :: any
703
+ %t474 = load_decl taxable_hoh :: float
704
+ %t477 = load_decl taxable_hoh :: float
705
+ loop rates id=L31 in %t471 as el=%rates_el_472, idx=%rates_i_473
706
+ %t475 = load_decl lo_h axes=[rates] :: float
707
+ %t476 = call core.gte(%t474, %t475) :: boolean
708
+ %t478 = load_decl hi_h_eff axes=[rates] :: float
709
+ %t479 = call core.lt(%t477, %t478) :: boolean
710
+ %t480 = call core.and(%t476, %t479) :: boolean
711
+ yield %t480
712
+ end_loop
713
+ )
714
+ (Declaration fed_marginal_hoh
715
+ %acc_481 = decl_acc :: float
716
+ %t482 = load_input "fed" :: array
717
+ %t483 = load_field t482["head_of_household"] :: any
718
+ %t484 = load_field t483["rates"] :: any
719
+ loop rates id=L32 in %t484 as el=%rates_el_485, idx=%rates_i_486
720
+ %t487 = load_decl in_br_h axes=[rates] :: boolean
721
+ %t488 = load_decl rate_h axes=[rates] :: float
722
+ %t489 = const 0 :: integer
723
+ %t490 = select %t487, %t488, %t489 :: float
724
+ %acc_481 = acc_add agg.sum(%acc_481, %t490) :: float
725
+ end_loop
726
+ %t491 = acc_load %acc_481 :: float
727
+ yield %t491
728
+ )
729
+ (Declaration fed_eff_hoh
730
+ %t492 = load_decl fed_tax_hoh :: float
731
+ %t493 = load_input "income" :: float
732
+ %t494 = const 1.0 :: float
733
+ %t495 = make_tuple(%t493, %t494) :: tuple<float>
734
+ %t496 = fold %t495 fn="agg.max" :: float
735
+ %t497 = call core.div(%t492, %t496) :: float
736
+ yield %t497
737
+ )
738
+ (Declaration ss_tax_h
739
+ %t498 = load_decl ss_tax_s :: float
740
+ yield %t498
741
+ )
742
+ (Declaration med_tax_h
743
+ %t499 = load_decl med_tax_s :: float
744
+ yield %t499
745
+ )
746
+ (Declaration addl_threshold_hoh
747
+ %t500 = const 200000.0 :: float
748
+ yield %t500
749
+ )
750
+ (Declaration addl_med_tax_h
751
+ %t501 = load_input "income" :: float
752
+ %t502 = const 200000.0 :: float
753
+ %t503 = call core.sub(%t501, %t502) :: float
754
+ %t504 = const 0 :: integer
755
+ %t505 = make_tuple(%t503, %t504) :: tuple<float, integer>
756
+ %t506 = fold %t505 fn="agg.max" :: float
757
+ %t507 = const 0.009 :: float
758
+ %t508 = call core.mul(%t506, %t507) :: float
759
+ yield %t508
760
+ )
761
+ (Declaration fica_tax_hoh
762
+ %t509 = load_decl ss_tax_h :: float
763
+ %t510 = load_decl med_tax_h :: float
764
+ %t511 = call core.add(%t509, %t510) :: float
765
+ %t512 = load_decl addl_med_tax_h :: float
766
+ %t513 = call core.add(%t511, %t512) :: float
767
+ yield %t513
768
+ )
769
+ (Declaration fica_eff_hoh
770
+ %t514 = load_decl fica_tax_hoh :: float
771
+ %t515 = load_input "income" :: float
772
+ %t516 = const 1.0 :: float
773
+ %t517 = make_tuple(%t515, %t516) :: tuple<float>
774
+ %t518 = fold %t517 fn="agg.max" :: float
775
+ %t519 = call core.div(%t514, %t518) :: float
776
+ yield %t519
777
+ )
778
+ (Declaration total_tax_hoh
779
+ %t520 = load_decl fed_tax_hoh :: float
780
+ %t521 = load_decl fica_tax_hoh :: float
781
+ %t522 = call core.add(%t520, %t521) :: float
782
+ %t523 = load_decl state_tax :: float
783
+ %t524 = call core.add(%t522, %t523) :: float
784
+ %t525 = load_decl local_tax :: float
785
+ %t526 = call core.add(%t524, %t525) :: float
786
+ yield %t526
787
+ )
788
+ (Declaration total_eff_hoh
789
+ %t527 = load_decl total_tax_hoh :: float
790
+ %t528 = load_input "income" :: float
791
+ %t529 = const 1.0 :: float
792
+ %t530 = make_tuple(%t528, %t529) :: tuple<float>
793
+ %t531 = fold %t530 fn="agg.max" :: float
794
+ %t532 = call core.div(%t527, %t531) :: float
795
+ yield %t532
796
+ )
797
+ (Declaration after_tax_hoh
798
+ %t533 = load_input "income" :: float
799
+ %t534 = load_decl total_tax_hoh :: float
800
+ %t535 = call core.sub(%t533, %t534) :: float
801
+ yield %t535
802
+ )
803
+ (Declaration take_home_hoh
804
+ %t536 = load_decl after_tax_hoh :: float
805
+ %t537 = load_input "retirement_contrib" :: float
806
+ %t538 = call core.sub(%t536, %t537) :: float
807
+ yield %t538
808
+ )
809
+ (Declaration summary
810
+ %t539 = load_decl fed_marginal_single :: float
811
+ %t540 = load_decl fed_eff_single :: float
812
+ %t541 = load_decl fed_tax_single :: float
813
+ %t542 = make_object{marginal: %t539, effective: %t540, tax: %t541} :: object
814
+ %t543 = load_decl fica_eff_single :: float
815
+ %t544 = load_decl fica_tax_single :: float
816
+ %t545 = make_object{effective: %t543, tax: %t544} :: object
817
+ %t546 = load_input "state_rate" :: float
818
+ %t547 = load_input "state_rate" :: float
819
+ %t548 = load_decl state_tax :: float
820
+ %t549 = make_object{marginal: %t546, effective: %t547, tax: %t548} :: object
821
+ %t550 = load_input "local_rate" :: float
822
+ %t551 = load_input "local_rate" :: float
823
+ %t552 = load_decl local_tax :: float
824
+ %t553 = make_object{marginal: %t550, effective: %t551, tax: %t552} :: object
825
+ %t554 = load_decl total_eff_single :: float
826
+ %t555 = load_decl total_tax_single :: float
827
+ %t556 = make_object{effective: %t554, tax: %t555} :: object
828
+ %t557 = load_decl after_tax_single :: float
829
+ %t558 = load_input "retirement_contrib" :: float
830
+ %t559 = load_decl take_home_single :: float
831
+ %t560 = make_object{federal: %t542, fica: %t545, state: %t549, local: %t553, total: %t556, after_tax: %t557, retirement_contrib: %t558, take_home: %t559} :: object
832
+ %t561 = load_decl fed_marginal_mj :: float
833
+ %t562 = load_decl fed_eff_mj :: float
834
+ %t563 = load_decl fed_tax_mj :: float
835
+ %t564 = make_object{marginal: %t561, effective: %t562, tax: %t563} :: object
836
+ %t565 = load_decl fica_eff_mj :: float
837
+ %t566 = load_decl fica_tax_mj :: float
838
+ %t567 = make_object{effective: %t565, tax: %t566} :: object
839
+ %t568 = load_input "state_rate" :: float
840
+ %t569 = load_input "state_rate" :: float
841
+ %t570 = load_decl state_tax :: float
842
+ %t571 = make_object{marginal: %t568, effective: %t569, tax: %t570} :: object
843
+ %t572 = load_input "local_rate" :: float
844
+ %t573 = load_input "local_rate" :: float
845
+ %t574 = load_decl local_tax :: float
846
+ %t575 = make_object{marginal: %t572, effective: %t573, tax: %t574} :: object
847
+ %t576 = load_decl total_eff_mj :: float
848
+ %t577 = load_decl total_tax_mj :: float
849
+ %t578 = make_object{effective: %t576, tax: %t577} :: object
850
+ %t579 = load_decl after_tax_mj :: float
851
+ %t580 = load_input "retirement_contrib" :: float
852
+ %t581 = load_decl take_home_mj :: float
853
+ %t582 = make_object{federal: %t564, fica: %t567, state: %t571, local: %t575, total: %t578, after_tax: %t579, retirement_contrib: %t580, take_home: %t581} :: object
854
+ %t583 = load_decl fed_marginal_ms :: float
855
+ %t584 = load_decl fed_eff_ms :: float
856
+ %t585 = load_decl fed_tax_ms :: float
857
+ %t586 = make_object{marginal: %t583, effective: %t584, tax: %t585} :: object
858
+ %t587 = load_decl fica_eff_ms :: float
859
+ %t588 = load_decl fica_tax_ms :: float
860
+ %t589 = make_object{effective: %t587, tax: %t588} :: object
861
+ %t590 = load_input "state_rate" :: float
862
+ %t591 = load_input "state_rate" :: float
863
+ %t592 = load_decl state_tax :: float
864
+ %t593 = make_object{marginal: %t590, effective: %t591, tax: %t592} :: object
865
+ %t594 = load_input "local_rate" :: float
866
+ %t595 = load_input "local_rate" :: float
867
+ %t596 = load_decl local_tax :: float
868
+ %t597 = make_object{marginal: %t594, effective: %t595, tax: %t596} :: object
869
+ %t598 = load_decl total_eff_ms :: float
870
+ %t599 = load_decl total_tax_ms :: float
871
+ %t600 = make_object{effective: %t598, tax: %t599} :: object
872
+ %t601 = load_decl after_tax_ms :: float
873
+ %t602 = load_input "retirement_contrib" :: float
874
+ %t603 = load_decl take_home_ms :: float
875
+ %t604 = make_object{federal: %t586, fica: %t589, state: %t593, local: %t597, total: %t600, after_tax: %t601, retirement_contrib: %t602, take_home: %t603} :: object
876
+ %t605 = load_decl fed_marginal_hoh :: float
877
+ %t606 = load_decl fed_eff_hoh :: float
878
+ %t607 = load_decl fed_tax_hoh :: float
879
+ %t608 = make_object{marginal: %t605, effective: %t606, tax: %t607} :: object
880
+ %t609 = load_decl fica_eff_hoh :: float
881
+ %t610 = load_decl fica_tax_hoh :: float
882
+ %t611 = make_object{effective: %t609, tax: %t610} :: object
883
+ %t612 = load_input "state_rate" :: float
884
+ %t613 = load_input "state_rate" :: float
885
+ %t614 = load_decl state_tax :: float
886
+ %t615 = make_object{marginal: %t612, effective: %t613, tax: %t614} :: object
887
+ %t616 = load_input "local_rate" :: float
888
+ %t617 = load_input "local_rate" :: float
889
+ %t618 = load_decl local_tax :: float
890
+ %t619 = make_object{marginal: %t616, effective: %t617, tax: %t618} :: object
891
+ %t620 = load_decl total_eff_hoh :: float
892
+ %t621 = load_decl total_tax_hoh :: float
893
+ %t622 = make_object{effective: %t620, tax: %t621} :: object
894
+ %t623 = load_decl after_tax_hoh :: float
895
+ %t624 = load_input "retirement_contrib" :: float
896
+ %t625 = load_decl take_home_hoh :: float
897
+ %t626 = make_object{federal: %t608, fica: %t611, state: %t615, local: %t619, total: %t622, after_tax: %t623, retirement_contrib: %t624, take_home: %t625} :: object
898
+ %t627 = make_object{single: %t560, married_joint: %t582, married_separate: %t604, head_of_household: %t626} :: object
899
+ yield %t627
900
+ )
901
+ )