kumi 0.0.36 → 0.1.0

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 (544) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +39 -58
  3. data/.rubocop_todo.yml +931 -0
  4. data/CHANGELOG.md +39 -2
  5. data/README.md +75 -1
  6. data/data/functions/core/arithmetic.yaml +48 -0
  7. data/data/functions/core/conversion.yaml +13 -0
  8. data/data/functions/core/select.yaml +1 -1
  9. data/data/functions/core/stencil.yaml +32 -0
  10. data/data/kernels/javascript/agg/numeric.yaml +1 -0
  11. data/data/kernels/javascript/core/arithmetic.yaml +24 -0
  12. data/data/kernels/javascript/core/coercion.yaml +18 -4
  13. data/data/kernels/ruby/agg/numeric.yaml +2 -1
  14. data/data/kernels/ruby/core/arithmetic.yaml +31 -3
  15. data/data/kernels/ruby/core/coercion.yaml +8 -0
  16. data/docs/CROSS_TARGET_SEMANTICS.md +99 -0
  17. data/docs/FORM_SCHEMA.md +13 -8
  18. data/docs/FUNCTIONS.md +120 -13
  19. data/docs/INPUTS.md +164 -0
  20. data/docs/OUTPUT_SCHEMA.md +12 -8
  21. data/docs/PASSES.md +76 -0
  22. data/docs/PASS_AUDIT.md +179 -0
  23. data/docs/PORTAL.md +39 -0
  24. data/docs/SYNTAX.md +101 -120
  25. data/docs/SYNTAX_NOTES.md +612 -0
  26. data/docs/UNSAT_DETECTION.md +2 -2
  27. data/docs/functions-reference.json +276 -84
  28. data/docs/pairwise-design.md +125 -0
  29. data/docs/superpowers/plans/2026-06-12-pass-conventions-and-dedup.md +1559 -0
  30. data/docs/superpowers/specs/2026-06-12-pass-conventions-and-dedup-design.md +136 -0
  31. data/golden/algebraic_identities/expected/ast.txt +66 -0
  32. data/golden/algebraic_identities/expected/dfir.txt +47 -0
  33. data/golden/algebraic_identities/expected/dfir_optimized.txt +59 -0
  34. data/golden/algebraic_identities/expected/input_plan.txt +7 -0
  35. data/golden/algebraic_identities/expected/loopir.txt +61 -0
  36. data/golden/algebraic_identities/expected/nast.txt +51 -0
  37. data/golden/algebraic_identities/expected/runtime.json +24 -0
  38. data/golden/algebraic_identities/expected/schema_javascript.mjs +89 -0
  39. data/golden/algebraic_identities/expected/schema_ruby.rb +84 -0
  40. data/golden/algebraic_identities/expected/snast.txt +51 -0
  41. data/golden/algebraic_identities/expected/vecir.txt +47 -0
  42. data/golden/algebraic_identities/input.json +6 -0
  43. data/golden/algebraic_identities/schema.kumi +25 -0
  44. data/golden/array_element/expected/loopir.txt +1 -2
  45. data/golden/array_element/expected/runtime.json +5 -0
  46. data/golden/array_element/expected/schema_javascript.mjs +1 -2
  47. data/golden/array_element/expected/schema_ruby.rb +2 -3
  48. data/golden/array_index/expected/runtime.json +54 -0
  49. data/golden/array_index/expected/schema_ruby.rb +1 -1
  50. data/golden/array_operations/{expected.json → expected/runtime.json} +5 -15
  51. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  52. data/golden/cascade_logic/expected/runtime.json +3 -0
  53. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  54. data/golden/cascade_reuse_peephole/expected/ast.txt +193 -0
  55. data/golden/cascade_reuse_peephole/expected/dfir.txt +124 -0
  56. data/golden/cascade_reuse_peephole/expected/dfir_optimized.txt +320 -0
  57. data/golden/cascade_reuse_peephole/expected/input_plan.txt +2 -0
  58. data/golden/cascade_reuse_peephole/expected/loopir.txt +302 -0
  59. data/golden/cascade_reuse_peephole/expected/nast.txt +188 -0
  60. data/golden/cascade_reuse_peephole/expected/runtime.json +8 -0
  61. data/golden/cascade_reuse_peephole/expected/schema_javascript.mjs +335 -0
  62. data/golden/cascade_reuse_peephole/expected/schema_ruby.rb +337 -0
  63. data/golden/cascade_reuse_peephole/expected/snast.txt +188 -0
  64. data/golden/cascade_reuse_peephole/expected/vecir.txt +302 -0
  65. data/golden/cascade_reuse_peephole/input.json +4 -0
  66. data/golden/cascade_reuse_peephole/schema.kumi +31 -0
  67. data/golden/chained_fusion/expected/loopir.txt +5 -13
  68. data/golden/chained_fusion/expected/runtime.json +45 -0
  69. data/golden/chained_fusion/expected/schema_javascript.mjs +5 -13
  70. data/golden/chained_fusion/expected/schema_ruby.rb +6 -14
  71. data/golden/cross_import/expected/ast.txt +21 -0
  72. data/golden/cross_import/expected/dfir.txt +3 -0
  73. data/golden/cross_import/expected/dfir_optimized.txt +8 -0
  74. data/golden/cross_import/expected/input_plan.txt +5 -0
  75. data/golden/cross_import/expected/loopir.txt +14 -0
  76. data/golden/cross_import/expected/nast.txt +7 -0
  77. data/golden/cross_import/expected/runtime.json +10 -0
  78. data/golden/cross_import/expected/schema_javascript.mjs +19 -0
  79. data/golden/cross_import/expected/schema_ruby.rb +19 -0
  80. data/golden/cross_import/expected/snast.txt +7 -0
  81. data/golden/cross_import/expected/vecir.txt +8 -0
  82. data/golden/cross_import/input.json +1 -0
  83. data/golden/cross_import/schema.kumi +15 -0
  84. data/golden/cross_let/expected/ast.txt +62 -0
  85. data/golden/cross_let/expected/dfir.txt +35 -0
  86. data/golden/cross_let/expected/dfir_optimized.txt +51 -0
  87. data/golden/cross_let/expected/input_plan.txt +5 -0
  88. data/golden/cross_let/expected/loopir.txt +100 -0
  89. data/golden/cross_let/expected/nast.txt +46 -0
  90. data/golden/cross_let/expected/runtime.json +61 -0
  91. data/golden/cross_let/expected/schema_javascript.mjs +136 -0
  92. data/golden/cross_let/expected/schema_ruby.rb +123 -0
  93. data/golden/cross_let/expected/snast.txt +46 -0
  94. data/golden/cross_let/expected/vecir.txt +51 -0
  95. data/golden/cross_let/input.json +7 -0
  96. data/golden/cross_let/schema.kumi +25 -0
  97. data/golden/decimal_explicit/expected/dfir.txt +6 -6
  98. data/golden/decimal_explicit/expected/dfir_optimized.txt +6 -6
  99. data/golden/decimal_explicit/expected/loopir.txt +6 -6
  100. data/golden/decimal_explicit/expected/runtime.json +10 -0
  101. data/golden/decimal_explicit/expected/schema_ruby.rb +1 -1
  102. data/golden/decimal_explicit/expected/snast.txt +9 -9
  103. data/golden/decimal_explicit/expected/vecir.txt +6 -6
  104. data/golden/element_arrays/expected/loopir.txt +6 -13
  105. data/golden/element_arrays/expected/runtime.json +117 -0
  106. data/golden/element_arrays/expected/schema_javascript.mjs +7 -14
  107. data/golden/element_arrays/expected/schema_ruby.rb +8 -15
  108. data/golden/empty_and_null_inputs/expected/loopir.txt +4 -9
  109. data/golden/empty_and_null_inputs/expected/runtime.json +8 -0
  110. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +5 -10
  111. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +6 -11
  112. data/golden/example_xpto/expected/runtime.json +4 -0
  113. data/golden/example_xpto/expected/schema_ruby.rb +1 -1
  114. data/golden/function_overload/expected/runtime.json +8 -0
  115. data/golden/function_overload/expected/schema_ruby.rb +1 -1
  116. data/golden/game_of_life/expected/loopir.txt +1 -58
  117. data/golden/game_of_life/expected/runtime.json +418 -0
  118. data/golden/game_of_life/expected/schema_javascript.mjs +1 -58
  119. data/golden/game_of_life/expected/schema_ruby.rb +2 -59
  120. data/golden/hash_keys/expected/runtime.json +20 -0
  121. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  122. data/golden/hash_value/expected/runtime.json +19 -0
  123. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  124. data/golden/hierarchical_complex/expected/loopir.txt +0 -4
  125. data/golden/hierarchical_complex/expected/runtime.json +16 -0
  126. data/golden/hierarchical_complex/expected/schema_javascript.mjs +0 -4
  127. data/golden/hierarchical_complex/expected/schema_ruby.rb +1 -5
  128. data/golden/inline_rename_scope_leak/expected/loopir.txt +1 -5
  129. data/golden/inline_rename_scope_leak/expected/runtime.json +10 -0
  130. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +3 -7
  131. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +4 -8
  132. data/golden/input_reference/expected/dfir.txt +2 -2
  133. data/golden/input_reference/expected/dfir_optimized.txt +2 -2
  134. data/golden/input_reference/expected/loopir.txt +2 -5
  135. data/golden/input_reference/expected/runtime.json +15 -0
  136. data/golden/input_reference/expected/schema_javascript.mjs +3 -6
  137. data/golden/input_reference/expected/schema_ruby.rb +4 -7
  138. data/golden/input_reference/expected/snast.txt +1 -1
  139. data/golden/input_reference/expected/vecir.txt +2 -2
  140. data/golden/interleaved_fusion/expected/loopir.txt +5 -10
  141. data/golden/interleaved_fusion/expected/runtime.json +37 -0
  142. data/golden/interleaved_fusion/expected/schema_javascript.mjs +5 -10
  143. data/golden/interleaved_fusion/expected/schema_ruby.rb +6 -11
  144. data/golden/let_inline/expected/runtime.json +6 -0
  145. data/golden/let_inline/expected/schema_ruby.rb +2 -2
  146. data/golden/loop_fusion/expected/loopir.txt +3 -7
  147. data/golden/loop_fusion/expected/runtime.json +29 -0
  148. data/golden/loop_fusion/expected/schema_javascript.mjs +3 -7
  149. data/golden/loop_fusion/expected/schema_ruby.rb +4 -8
  150. data/golden/min_max_empty_arrays/expected/loopir.txt +5 -12
  151. data/golden/min_max_empty_arrays/expected/runtime.json +16 -0
  152. data/golden/min_max_empty_arrays/expected/schema_javascript.mjs +7 -14
  153. data/golden/min_max_empty_arrays/expected/schema_ruby.rb +10 -17
  154. data/golden/min_reduce_scope/expected/loopir.txt +3 -7
  155. data/golden/min_reduce_scope/expected/runtime.json +11 -0
  156. data/golden/min_reduce_scope/expected/schema_javascript.mjs +4 -8
  157. data/golden/min_reduce_scope/expected/schema_ruby.rb +5 -9
  158. data/golden/mixed_dimensions/expected/loopir.txt +2 -5
  159. data/golden/mixed_dimensions/expected/runtime.json +34 -0
  160. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -6
  161. data/golden/mixed_dimensions/expected/schema_ruby.rb +4 -7
  162. data/golden/mlp_backprop/expected/ast.txt +147 -0
  163. data/golden/mlp_backprop/expected/dfir.txt +99 -0
  164. data/golden/mlp_backprop/expected/dfir_optimized.txt +374 -0
  165. data/golden/mlp_backprop/expected/input_plan.txt +17 -0
  166. data/golden/mlp_backprop/expected/loopir.txt +440 -0
  167. data/golden/mlp_backprop/expected/nast.txt +120 -0
  168. data/golden/mlp_backprop/expected/runtime.json +43 -0
  169. data/golden/mlp_backprop/expected/schema_javascript.mjs +516 -0
  170. data/golden/mlp_backprop/expected/schema_ruby.rb +484 -0
  171. data/golden/mlp_backprop/expected/snast.txt +120 -0
  172. data/golden/mlp_backprop/expected/vecir.txt +374 -0
  173. data/golden/mlp_backprop/input.json +8 -0
  174. data/golden/mlp_backprop/schema.kumi +43 -0
  175. data/golden/multi_loop_reduction/expected/loopir.txt +2 -6
  176. data/golden/multi_loop_reduction/expected/runtime.json +5 -0
  177. data/golden/multi_loop_reduction/expected/schema_javascript.mjs +4 -8
  178. data/golden/multi_loop_reduction/expected/schema_ruby.rb +5 -9
  179. data/golden/multirank_hoisting/expected/loopir.txt +24 -42
  180. data/golden/multirank_hoisting/expected/runtime.json +47 -0
  181. data/golden/multirank_hoisting/expected/schema_javascript.mjs +24 -45
  182. data/golden/multirank_hoisting/expected/schema_ruby.rb +25 -43
  183. data/golden/nested_hash/expected/runtime.json +3 -0
  184. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  185. data/golden/outer_let/expected/ast.txt +106 -0
  186. data/golden/outer_let/expected/dfir.txt +66 -0
  187. data/golden/outer_let/expected/dfir_optimized.txt +145 -0
  188. data/golden/outer_let/expected/input_plan.txt +19 -0
  189. data/golden/outer_let/expected/loopir.txt +166 -0
  190. data/golden/outer_let/expected/nast.txt +78 -0
  191. data/golden/outer_let/expected/runtime.json +89 -0
  192. data/golden/outer_let/expected/schema_javascript.mjs +220 -0
  193. data/golden/outer_let/expected/schema_ruby.rb +201 -0
  194. data/golden/outer_let/expected/snast.txt +78 -0
  195. data/golden/outer_let/expected/vecir.txt +145 -0
  196. data/golden/outer_let/input.json +9 -0
  197. data/golden/outer_let/schema.kumi +32 -0
  198. data/golden/pairwise_cross/expected/ast.txt +62 -0
  199. data/golden/pairwise_cross/expected/dfir.txt +36 -0
  200. data/golden/pairwise_cross/expected/dfir_optimized.txt +50 -0
  201. data/golden/pairwise_cross/expected/input_plan.txt +8 -0
  202. data/golden/pairwise_cross/expected/loopir.txt +84 -0
  203. data/golden/pairwise_cross/expected/nast.txt +46 -0
  204. data/golden/pairwise_cross/expected/runtime.json +80 -0
  205. data/golden/pairwise_cross/expected/schema_javascript.mjs +113 -0
  206. data/golden/pairwise_cross/expected/schema_ruby.rb +104 -0
  207. data/golden/pairwise_cross/expected/snast.txt +46 -0
  208. data/golden/pairwise_cross/expected/vecir.txt +50 -0
  209. data/golden/pairwise_cross/input.json +8 -0
  210. data/golden/pairwise_cross/schema.kumi +18 -0
  211. data/golden/reduction_broadcast/expected/loopir.txt +4 -10
  212. data/golden/reduction_broadcast/expected/runtime.json +14 -0
  213. data/golden/reduction_broadcast/expected/schema_javascript.mjs +4 -10
  214. data/golden/reduction_broadcast/expected/schema_ruby.rb +5 -11
  215. data/golden/roll/expected/loopir.txt +4 -8
  216. data/golden/roll/expected/runtime.json +26 -0
  217. data/golden/roll/expected/schema_javascript.mjs +4 -8
  218. data/golden/roll/expected/schema_ruby.rb +5 -9
  219. data/golden/schema_imports_broadcasting_with_imports/expected/dfir.txt +3 -3
  220. data/golden/schema_imports_broadcasting_with_imports/expected/dfir_optimized.txt +3 -3
  221. data/golden/schema_imports_broadcasting_with_imports/expected/loopir.txt +3 -4
  222. data/golden/schema_imports_broadcasting_with_imports/expected/runtime.json +11 -0
  223. data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +2 -3
  224. data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +3 -4
  225. data/golden/schema_imports_broadcasting_with_imports/expected/snast.txt +5 -5
  226. data/golden/schema_imports_broadcasting_with_imports/expected/vecir.txt +3 -3
  227. data/golden/schema_imports_complex_order_calc/expected/dfir.txt +20 -20
  228. data/golden/schema_imports_complex_order_calc/expected/dfir_optimized.txt +60 -60
  229. data/golden/schema_imports_complex_order_calc/expected/loopir.txt +34 -47
  230. data/golden/schema_imports_complex_order_calc/expected/runtime.json +33 -0
  231. data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +16 -29
  232. data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +17 -30
  233. data/golden/schema_imports_complex_order_calc/expected/snast.txt +26 -26
  234. data/golden/schema_imports_complex_order_calc/expected/vecir.txt +60 -60
  235. data/golden/schema_imports_composed_order/expected/dfir.txt +3 -3
  236. data/golden/schema_imports_composed_order/expected/dfir_optimized.txt +6 -6
  237. data/golden/schema_imports_composed_order/expected/loopir.txt +6 -6
  238. data/golden/schema_imports_composed_order/expected/runtime.json +9 -0
  239. data/golden/schema_imports_composed_order/expected/schema_ruby.rb +1 -1
  240. data/golden/schema_imports_composed_order/expected/snast.txt +5 -5
  241. data/golden/schema_imports_composed_order/expected/vecir.txt +6 -6
  242. data/golden/schema_imports_discount_with_tax/expected/dfir.txt +7 -7
  243. data/golden/schema_imports_discount_with_tax/expected/dfir_optimized.txt +10 -10
  244. data/golden/schema_imports_discount_with_tax/expected/loopir.txt +10 -10
  245. data/golden/schema_imports_discount_with_tax/expected/runtime.json +10 -0
  246. data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +1 -1
  247. data/golden/schema_imports_discount_with_tax/expected/snast.txt +11 -11
  248. data/golden/schema_imports_discount_with_tax/expected/vecir.txt +10 -10
  249. data/golden/schema_imports_line_items/expected/dfir.txt +1 -1
  250. data/golden/schema_imports_line_items/expected/dfir_optimized.txt +3 -3
  251. data/golden/schema_imports_line_items/expected/loopir.txt +3 -6
  252. data/golden/schema_imports_line_items/expected/runtime.json +8 -0
  253. data/golden/schema_imports_line_items/expected/schema_javascript.mjs +4 -7
  254. data/golden/schema_imports_line_items/expected/schema_ruby.rb +5 -8
  255. data/golden/schema_imports_line_items/expected/snast.txt +1 -1
  256. data/golden/schema_imports_line_items/expected/vecir.txt +3 -3
  257. data/golden/schema_imports_multiple/expected/dfir.txt +7 -7
  258. data/golden/schema_imports_multiple/expected/dfir_optimized.txt +13 -13
  259. data/golden/schema_imports_multiple/expected/loopir.txt +13 -13
  260. data/golden/schema_imports_multiple/expected/runtime.json +10 -0
  261. data/golden/schema_imports_multiple/expected/schema_ruby.rb +1 -1
  262. data/golden/schema_imports_multiple/expected/snast.txt +11 -11
  263. data/golden/schema_imports_multiple/expected/vecir.txt +13 -13
  264. data/golden/schema_imports_nested_expressions/expected/dfir.txt +4 -4
  265. data/golden/schema_imports_nested_expressions/expected/dfir_optimized.txt +6 -6
  266. data/golden/schema_imports_nested_expressions/expected/loopir.txt +6 -6
  267. data/golden/schema_imports_nested_expressions/expected/runtime.json +8 -0
  268. data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +1 -1
  269. data/golden/schema_imports_nested_expressions/expected/snast.txt +6 -6
  270. data/golden/schema_imports_nested_expressions/expected/vecir.txt +6 -6
  271. data/golden/schema_imports_nested_with_reductions/expected/dfir.txt +6 -6
  272. data/golden/schema_imports_nested_with_reductions/expected/dfir_optimized.txt +15 -15
  273. data/golden/schema_imports_nested_with_reductions/expected/loopir.txt +7 -14
  274. data/golden/schema_imports_nested_with_reductions/expected/runtime.json +12 -0
  275. data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +8 -15
  276. data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +9 -16
  277. data/golden/schema_imports_nested_with_reductions/expected/snast.txt +6 -6
  278. data/golden/schema_imports_nested_with_reductions/expected/vecir.txt +15 -15
  279. data/golden/schema_imports_with_imports/expected/dfir.txt +3 -3
  280. data/golden/schema_imports_with_imports/expected/dfir_optimized.txt +3 -3
  281. data/golden/schema_imports_with_imports/expected/loopir.txt +3 -3
  282. data/golden/schema_imports_with_imports/expected/runtime.json +7 -0
  283. data/golden/schema_imports_with_imports/expected/schema_ruby.rb +1 -1
  284. data/golden/schema_imports_with_imports/expected/snast.txt +5 -5
  285. data/golden/schema_imports_with_imports/expected/vecir.txt +3 -3
  286. data/golden/shift/expected/loopir.txt +4 -8
  287. data/golden/shift/expected/runtime.json +38 -0
  288. data/golden/shift/expected/schema_javascript.mjs +4 -8
  289. data/golden/shift/expected/schema_ruby.rb +5 -9
  290. data/golden/shift_2d/expected/loopir.txt +8 -16
  291. data/golden/shift_2d/expected/runtime.json +146 -0
  292. data/golden/shift_2d/expected/schema_javascript.mjs +8 -16
  293. data/golden/shift_2d/expected/schema_ruby.rb +9 -17
  294. data/golden/simple_math/expected/runtime.json +10 -0
  295. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  296. data/golden/streaming_basics/expected/loopir.txt +0 -3
  297. data/golden/streaming_basics/expected/runtime.json +25 -0
  298. data/golden/streaming_basics/expected/schema_javascript.mjs +3 -6
  299. data/golden/streaming_basics/expected/schema_ruby.rb +4 -7
  300. data/golden/transcendentals/expected/ast.txt +48 -0
  301. data/golden/transcendentals/expected/dfir.txt +31 -0
  302. data/golden/transcendentals/expected/dfir_optimized.txt +34 -0
  303. data/golden/transcendentals/expected/input_plan.txt +5 -0
  304. data/golden/transcendentals/expected/loopir.txt +46 -0
  305. data/golden/transcendentals/expected/nast.txt +34 -0
  306. data/golden/transcendentals/expected/runtime.json +27 -0
  307. data/golden/transcendentals/expected/schema_javascript.mjs +66 -0
  308. data/golden/transcendentals/expected/schema_ruby.rb +63 -0
  309. data/golden/transcendentals/expected/snast.txt +34 -0
  310. data/golden/transcendentals/expected/vecir.txt +34 -0
  311. data/golden/transcendentals/input.json +1 -0
  312. data/golden/transcendentals/schema.kumi +16 -0
  313. data/golden/tuples/expected/dfir.txt +4 -4
  314. data/golden/tuples/expected/runtime.json +12 -0
  315. data/golden/tuples/expected/schema_ruby.rb +1 -1
  316. data/golden/tuples_and_arrays/expected/dfir.txt +1 -1
  317. data/golden/tuples_and_arrays/expected/loopir.txt +0 -1
  318. data/golden/tuples_and_arrays/expected/runtime.json +13 -0
  319. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +1 -2
  320. data/golden/tuples_and_arrays/expected/schema_ruby.rb +2 -3
  321. data/golden/type_promotion/expected/ast.txt +75 -0
  322. data/golden/type_promotion/expected/dfir.txt +38 -0
  323. data/golden/type_promotion/expected/dfir_optimized.txt +51 -0
  324. data/golden/type_promotion/expected/input_plan.txt +9 -0
  325. data/golden/type_promotion/expected/loopir.txt +57 -0
  326. data/golden/type_promotion/expected/nast.txt +57 -0
  327. data/golden/type_promotion/expected/runtime.json +23 -0
  328. data/golden/type_promotion/expected/schema_javascript.mjs +90 -0
  329. data/golden/type_promotion/expected/schema_ruby.rb +89 -0
  330. data/golden/type_promotion/expected/snast.txt +57 -0
  331. data/golden/type_promotion/expected/vecir.txt +51 -0
  332. data/golden/type_promotion/input.json +11 -0
  333. data/golden/type_promotion/schema.kumi +30 -0
  334. data/golden/us_tax_2024/expected/dfir.txt +6 -6
  335. data/golden/us_tax_2024/expected/loopir.txt +108 -217
  336. data/golden/us_tax_2024/expected/runtime.json +423 -0
  337. data/golden/us_tax_2024/expected/schema_javascript.mjs +108 -235
  338. data/golden/us_tax_2024/expected/schema_ruby.rb +109 -218
  339. data/golden/vector_make_object/expected/schema_ruby.rb +1 -1
  340. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  341. data/lib/kumi/analyzer.rb +29 -34
  342. data/lib/kumi/configuration.rb +31 -0
  343. data/lib/kumi/core/analyzer/binder.rb +2 -2
  344. data/lib/kumi/core/analyzer/macro_expander.rb +3 -3
  345. data/lib/kumi/core/analyzer/pass_failure.rb +1 -1
  346. data/lib/kumi/core/analyzer/pass_manager.rb +211 -100
  347. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +44 -15
  348. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +6 -20
  349. data/lib/kumi/core/analyzer/passes/codegen/loop/js/emitter.rb +252 -14
  350. data/lib/kumi/core/analyzer/passes/codegen/loop/ruby/emitter.rb +6 -3
  351. data/lib/kumi/core/analyzer/passes/codegen/loop_js_pass.rb +5 -1
  352. data/lib/kumi/core/analyzer/passes/codegen/loop_ruby_pass.rb +3 -0
  353. data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +3 -0
  354. data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +1 -1
  355. data/lib/kumi/core/analyzer/passes/declaration_validator_pass.rb +83 -0
  356. data/lib/kumi/core/analyzer/passes/{dependency_resolver.rb → dependency_resolver_pass.rb} +8 -6
  357. data/lib/kumi/core/analyzer/passes/df_validate_pass.rb +3 -13
  358. data/lib/kumi/core/analyzer/passes/import_analysis_pass.rb +7 -2
  359. data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +4 -28
  360. data/lib/kumi/core/analyzer/passes/{input_collector.rb → input_collector_pass.rb} +30 -3
  361. data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +4 -1
  362. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +4 -2
  363. data/lib/kumi/core/analyzer/passes/ir_lower_pass.rb +35 -0
  364. data/lib/kumi/core/analyzer/passes/ir_validate_pass.rb +43 -0
  365. data/lib/kumi/core/analyzer/passes/{load_input_cse.rb → load_input_cse_pass.rb} +1 -1
  366. data/lib/kumi/core/analyzer/passes/loop/lower_pass.rb +23 -10
  367. data/lib/kumi/core/analyzer/passes/loop_validate_pass.rb +2 -10
  368. data/lib/kumi/core/analyzer/passes/lower_to_dfir_pass.rb +4 -2
  369. data/lib/kumi/core/analyzer/passes/{name_indexer.rb → name_indexer_pass.rb} +3 -7
  370. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +174 -23
  371. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +19 -3
  372. data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +3 -0
  373. data/lib/kumi/core/analyzer/passes/pass_base.rb +78 -5
  374. data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +7 -1
  375. data/lib/kumi/core/analyzer/passes/{semantic_constraint_validator.rb → semantic_constraint_validator_pass.rb} +7 -14
  376. data/lib/kumi/core/analyzer/passes/snast_pass.rb +22 -48
  377. data/lib/kumi/core/analyzer/passes/{toposorter.rb → toposorter_pass.rb} +4 -5
  378. data/lib/kumi/core/analyzer/passes/{unsat_detector.rb → unsat_detector_pass.rb} +4 -15
  379. data/lib/kumi/core/analyzer/passes/vec/lower_pass.rb +6 -8
  380. data/lib/kumi/core/analyzer/passes/vec_validate_pass.rb +2 -10
  381. data/lib/kumi/core/analyzer/structs/input_meta.rb +1 -1
  382. data/lib/kumi/core/compiler/access_builder.rb +1 -1
  383. data/lib/kumi/core/compiler/access_codegen.rb +1 -1
  384. data/lib/kumi/core/compiler/access_emit/base.rb +1 -1
  385. data/lib/kumi/core/compiler/access_planner_v2.rb +2 -2
  386. data/lib/kumi/core/compiler/accessors/each_indexed_accessor.rb +1 -1
  387. data/lib/kumi/core/compiler/accessors/materialize_accessor.rb +1 -1
  388. data/lib/kumi/core/compiler/accessors/ravel_accessor.rb +1 -1
  389. data/lib/kumi/core/compiler/accessors/read_accessor.rb +1 -1
  390. data/lib/kumi/core/error_reporter.rb +6 -11
  391. data/lib/kumi/core/errors.rb +37 -11
  392. data/lib/kumi/core/expression_renderer.rb +97 -0
  393. data/lib/kumi/core/functions/overload_resolver.rb +79 -149
  394. data/lib/kumi/core/ir/execution_engine/combinators.rb +16 -10
  395. data/lib/kumi/core/nast.rb +24 -0
  396. data/lib/kumi/core/ruby_parser/build_context.rb +6 -1
  397. data/lib/kumi/core/ruby_parser/dsl.rb +12 -2
  398. data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +14 -12
  399. data/lib/kumi/core/ruby_parser/guard_rails.rb +15 -1
  400. data/lib/kumi/core/ruby_parser/input_builder.rb +55 -48
  401. data/lib/kumi/core/ruby_parser/parser.rb +26 -18
  402. data/lib/kumi/core/ruby_parser/schema_builder.rb +60 -15
  403. data/lib/kumi/core/ruby_parser/sugar.rb +0 -86
  404. data/lib/kumi/core/types/dtype_rule.rb +76 -0
  405. data/lib/kumi/core/types/normalizer.rb +2 -2
  406. data/lib/kumi/core/types/profile.rb +82 -0
  407. data/lib/kumi/core/types/registry.rb +87 -0
  408. data/lib/kumi/core/types/system.rb +96 -0
  409. data/lib/kumi/core/types/value_objects.rb +14 -13
  410. data/lib/kumi/core/types.rb +41 -34
  411. data/lib/kumi/dev/golden_runtime.rb +163 -0
  412. data/lib/kumi/dev/golden_v2.rb +30 -5
  413. data/lib/kumi/dev/pretty_printer.rb +40 -73
  414. data/lib/kumi/frontends/ruby.rb +52 -12
  415. data/lib/kumi/frontends/source_frame.rb +71 -0
  416. data/lib/kumi/frontends/text.rb +4 -48
  417. data/lib/kumi/function_registry/loader.rb +101 -0
  418. data/lib/kumi/function_registry.rb +150 -0
  419. data/lib/kumi/ir/base/block.rb +11 -2
  420. data/lib/kumi/ir/base/builder.rb +1 -1
  421. data/lib/kumi/ir/base/function.rb +2 -4
  422. data/lib/kumi/ir/base/instruction.rb +10 -23
  423. data/lib/kumi/ir/base/module.rb +5 -4
  424. data/lib/kumi/ir/buf/lower.rb +1 -2
  425. data/lib/kumi/ir/df/access_contract.rb +3 -5
  426. data/lib/kumi/ir/df/import_inliner.rb +2 -5
  427. data/lib/kumi/ir/df/lower.rb +72 -51
  428. data/lib/kumi/ir/df/ops/axis_cross.rb +34 -0
  429. data/lib/kumi/ir/df/ops/axis_outer.rb +35 -0
  430. data/lib/kumi/ir/df/passes/broadcast_simplify.rb +1 -2
  431. data/lib/kumi/ir/df/passes/cse.rb +8 -3
  432. data/lib/kumi/ir/df/passes/decl_inlining.rb +5 -26
  433. data/lib/kumi/ir/df/passes/import_inlining.rb +42 -36
  434. data/lib/kumi/ir/df/passes/load_dedup.rb +9 -4
  435. data/lib/kumi/ir/df/passes/stencil_cse.rb +2 -5
  436. data/lib/kumi/ir/df/passes/support/instruction_cloner.rb +41 -14
  437. data/lib/kumi/ir/df/passes/tuple_fold_canonicalization.rb +8 -3
  438. data/lib/kumi/ir/df/passes/tuple_to_object.rb +1 -2
  439. data/lib/kumi/ir/df/validator.rb +3 -3
  440. data/lib/kumi/ir/df.rb +8 -0
  441. data/lib/kumi/ir/loop/lower.rb +231 -37
  442. data/lib/kumi/ir/loop/passes/array_contraction.rb +124 -0
  443. data/lib/kumi/ir/loop/passes/copy_cleanup.rb +112 -0
  444. data/lib/kumi/ir/loop/passes/loop_fusion.rb +125 -0
  445. data/lib/kumi/ir/loop/passes/support/structure.rb +100 -0
  446. data/lib/kumi/ir/loop/passes.rb +14 -0
  447. data/lib/kumi/ir/loop/pipeline.rb +9 -1
  448. data/lib/kumi/ir/loop/validator.rb +29 -4
  449. data/lib/kumi/ir/loop.rb +1 -0
  450. data/lib/kumi/ir/passes/register_generator.rb +32 -0
  451. data/lib/kumi/ir/testing/snast_factory.rb +2 -4
  452. data/lib/kumi/ir/vec/lower.rb +17 -7
  453. data/lib/kumi/ir/vec/ops/core_ops.rb +41 -0
  454. data/lib/kumi/ir/vec/passes/axis_canonicalization.rb +1 -2
  455. data/lib/kumi/ir/vec/passes/constant_propagation.rb +75 -47
  456. data/lib/kumi/ir/vec/passes/dce.rb +2 -5
  457. data/lib/kumi/ir/vec/passes/gvn.rb +8 -3
  458. data/lib/kumi/ir/vec/passes/peephole_simplify.rb +30 -13
  459. data/lib/kumi/ir/vec/passes/stencil_detection.rb +1 -2
  460. data/lib/kumi/ir/vec/passes/support/algebraic_identities.rb +70 -0
  461. data/lib/kumi/ir/vec/passes/support/instruction_cloner.rb +17 -3
  462. data/lib/kumi/ir/vec/validator.rb +26 -6
  463. data/lib/kumi/schema.rb +14 -10
  464. data/lib/kumi/schema_metadata/printer.rb +111 -0
  465. data/lib/kumi/schema_metadata.rb +289 -0
  466. data/lib/kumi/syntax/location.rb +14 -1
  467. data/lib/kumi/syntax/root.rb +35 -3
  468. data/lib/kumi/test_shared_schemas/pairwise.rb +27 -0
  469. data/lib/kumi/version.rb +1 -1
  470. data/lib/kumi.rb +3 -5
  471. data/tasks/docs_portal.rake +135 -0
  472. metadata +203 -81
  473. data/golden/array_element/expected.json +0 -5
  474. data/golden/array_index/expected.json +0 -5
  475. data/golden/cascade_logic/expected.json +0 -5
  476. data/golden/chained_fusion/expected.json +0 -45
  477. data/golden/decimal_explicit/expected.json +0 -1
  478. data/golden/element_arrays/expected.json +0 -55
  479. data/golden/empty_and_null_inputs/expected.json +0 -8
  480. data/golden/example_xpto/expected.json +0 -4
  481. data/golden/game_of_life/expected.json +0 -3
  482. data/golden/hash_keys/expected.json +0 -20
  483. data/golden/hash_value/expected.json +0 -19
  484. data/golden/hierarchical_complex/expected.json +0 -34
  485. data/golden/inline_rename_scope_leak/expected.json +0 -7
  486. data/golden/input_reference/expected.json +0 -7
  487. data/golden/interleaved_fusion/expected.json +0 -37
  488. data/golden/let_inline/expected.json +0 -1
  489. data/golden/loop_fusion/expected.json +0 -30
  490. data/golden/min_max_empty_arrays/expected.json +0 -7
  491. data/golden/min_reduce_scope/expected.json +0 -9
  492. data/golden/mixed_dimensions/expected.json +0 -6
  493. data/golden/multi_loop_reduction/expected.json +0 -5
  494. data/golden/multirank_hoisting/expected.json +0 -15
  495. data/golden/nested_hash/expected.json +0 -3
  496. data/golden/reduction_broadcast/expected.json +0 -25
  497. data/golden/roll/expected.json +0 -6
  498. data/golden/schema_imports_broadcasting_with_imports/expected.json +0 -4
  499. data/golden/schema_imports_complex_order_calc/expected.json +0 -12
  500. data/golden/schema_imports_composed_order/expected.json +0 -6
  501. data/golden/schema_imports_discount_with_tax/expected.json +0 -7
  502. data/golden/schema_imports_line_items/expected.json +0 -5
  503. data/golden/schema_imports_multiple/expected.json +0 -7
  504. data/golden/schema_imports_nested_expressions/expected.json +0 -5
  505. data/golden/schema_imports_nested_with_reductions/expected.json +0 -6
  506. data/golden/schema_imports_with_imports/expected.json +0 -4
  507. data/golden/shift/expected.json +0 -8
  508. data/golden/shift_2d/expected.json +0 -15
  509. data/golden/simple_math/expected.json +0 -1
  510. data/golden/streaming_basics/expected.json +0 -10
  511. data/golden/tuples/expected.json +0 -7
  512. data/golden/tuples_and_arrays/expected.json +0 -18
  513. data/golden/us_tax_2024/expected.json +0 -120
  514. data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +0 -130
  515. data/lib/kumi/core/analyzer/passes/declaration_validator.rb +0 -45
  516. data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +0 -197
  517. data/lib/kumi/core/compiler/access_planner.rb +0 -258
  518. data/lib/kumi/core/functions/function_spec.rb +0 -17
  519. data/lib/kumi/core/functions/loader.rb +0 -63
  520. data/lib/kumi/core/functions/type_categories.rb +0 -44
  521. data/lib/kumi/core/functions/type_error_reporter.rb +0 -116
  522. data/lib/kumi/core/functions/type_rules.rb +0 -228
  523. data/lib/kumi/core/irv2/builder.rb +0 -48
  524. data/lib/kumi/core/irv2/declaration.rb +0 -28
  525. data/lib/kumi/core/irv2/module.rb +0 -108
  526. data/lib/kumi/core/irv2/value.rb +0 -28
  527. data/lib/kumi/core/types/validator.rb +0 -33
  528. data/lib/kumi/dev/codegen.rb +0 -194
  529. data/lib/kumi/dev/golden/generator.rb +0 -109
  530. data/lib/kumi/dev/golden/reporter.rb +0 -169
  531. data/lib/kumi/dev/golden/representation.rb +0 -40
  532. data/lib/kumi/dev/golden/result.rb +0 -106
  533. data/lib/kumi/dev/golden/runtime_test.rb +0 -131
  534. data/lib/kumi/dev/golden/suite.rb +0 -147
  535. data/lib/kumi/dev/golden/value_normalizer.rb +0 -78
  536. data/lib/kumi/dev/golden/verifier.rb +0 -76
  537. data/lib/kumi/dev/golden.rb +0 -82
  538. data/lib/kumi/dev/golden_schema_wrapper.rb +0 -116
  539. data/lib/kumi/dev/printer/irv2_formatter.rb +0 -163
  540. data/lib/kumi/kernel_registry.rb +0 -59
  541. data/lib/kumi/pack/builder.rb +0 -229
  542. data/lib/kumi/pack.rb +0 -15
  543. data/lib/kumi/registry_v2/loader.rb +0 -170
  544. data/lib/kumi/registry_v2.rb +0 -135
@@ -25,8 +25,7 @@ function lo:
25
25
  %arr30 = array_init
26
26
  %rates_el25 = loop_start (:v24) [axis=:rates, index=:rates_i26]
27
27
  %v27 = load_field (:rates_el25) [field=:lo]
28
- %v28 = ref (:v27) [statuses, rates] -> float
29
- array_push (:arr30, :v28)
28
+ array_push (:arr30, :v27)
30
29
  loop_end [axis=:rates]
31
30
  array_push (:arr29, :arr30)
32
31
  loop_end [axis=:statuses]
@@ -38,8 +37,7 @@ function hi:
38
37
  %arr35 = array_init
39
38
  %rates_el30 = loop_start (:v29) [axis=:rates, index=:rates_i31]
40
39
  %v32 = load_field (:rates_el30) [field=:hi]
41
- %v33 = ref (:v32) [statuses, rates] -> float
42
- array_push (:arr35, :v33)
40
+ array_push (:arr35, :v32)
43
41
  loop_end [axis=:rates]
44
42
  array_push (:arr34, :arr35)
45
43
  loop_end [axis=:statuses]
@@ -51,8 +49,7 @@ function rate:
51
49
  %arr40 = array_init
52
50
  %rates_el35 = loop_start (:v34) [axis=:rates, index=:rates_i36]
53
51
  %v37 = load_field (:rates_el35) [field=:rate]
54
- %v38 = ref (:v37) [statuses, rates] -> float
55
- array_push (:arr40, :v38)
52
+ array_push (:arr40, :v37)
56
53
  loop_end [axis=:rates]
57
54
  array_push (:arr39, :arr40)
58
55
  loop_end [axis=:statuses]
@@ -126,8 +123,7 @@ function fed_tax:
126
123
  %v52 = kernel_call (:v94, :v114) [fn=:core.mul:numeric] [statuses, rates] -> float
127
124
  acc_step (:acc115, :v52) [fn=:agg.sum, nil_init=false]
128
125
  loop_end [axis=:rates]
129
- %v53 = acc_load (:acc115) [] -> float
130
- array_push (:arr116, :v53)
126
+ array_push (:arr116, :acc115)
131
127
  loop_end [axis=:statuses]
132
128
  function in_br:
133
129
  %v102 = load_input [key=:statuses]
@@ -180,12 +176,14 @@ function fed_marg:
180
176
  %v67 = select (:v112, :v131, :v132) [statuses, rates] -> float
181
177
  acc_step (:acc133, :v67) [fn=:agg.sum, nil_init=false]
182
178
  loop_end [axis=:rates]
183
- %v68 = acc_load (:acc133) [] -> float
184
- array_push (:arr134, :v68)
179
+ array_push (:arr134, :acc133)
185
180
  loop_end [axis=:statuses]
186
181
  function fed_eff:
187
182
  %v124 = load_input [key=:statuses]
188
- %arr144 = array_init
183
+ %v140 = load_input [key=:income]
184
+ %v141 = constant [value=1.0] [] -> float
185
+ %acc1 = kernel_call (:v140, :v141) [fn=:core.max] [] -> float
186
+ %arr146 = array_init
189
187
  %statuses_el125 = loop_start (:v124) [axis=:statuses, index=:statuses_i126]
190
188
  %v127 = load_input [key=:income]
191
189
  %v128 = load_field (:statuses_el125) [field=:std]
@@ -209,16 +207,7 @@ function fed_eff:
209
207
  %v122 = kernel_call (:v116, :v138) [fn=:core.mul:numeric] [statuses, rates] -> float
210
208
  acc_step (:acc139, :v122) [fn=:agg.sum, nil_init=false]
211
209
  loop_end [axis=:rates]
212
- %v123 = acc_load (:acc139) [] -> float
213
- array_push (:arr144, :v123)
214
- loop_end [axis=:statuses]
215
- %v140 = load_input [key=:income]
216
- %v141 = constant [value=1.0] [] -> float
217
- %acc1 = kernel_call (:v140, :v141) [fn=:core.max] [] -> float
218
- %arr146 = array_init
219
- %statuses_el142 = loop_start (:v124) [axis=:statuses, index=:statuses_i143]
220
- %v145 = index_read (:arr144, :statuses_i143)
221
- %v75 = kernel_call (:v145, :acc1) [fn=:core.div] [statuses] -> float
210
+ %v75 = kernel_call (:acc139, :acc1) [fn=:core.div] [statuses] -> float
222
211
  array_push (:arr146, :v75)
223
212
  loop_end [axis=:statuses]
224
213
  function ss_wage_base:
@@ -284,7 +273,9 @@ function fica_eff:
284
273
  %v122 = kernel_call (:v138, :v141) [fn=:core.mul:numeric] [] -> float
285
274
  %v123 = kernel_call (:v119, :v122) [fn=:core.add] [] -> float
286
275
  %v142 = load_input [key=:statuses]
287
- %arr152 = array_init
276
+ %v149 = constant [value=1.0] [] -> float
277
+ %acc2 = kernel_call (:v138, :v149) [fn=:core.max] [] -> float
278
+ %arr154 = array_init
288
279
  %statuses_el143 = loop_start (:v142) [axis=:statuses, index=:statuses_i144]
289
280
  %v145 = load_input [key=:income]
290
281
  %v146 = load_field (:statuses_el143) [field=:addl_threshold]
@@ -294,19 +285,24 @@ function fica_eff:
294
285
  %v148 = constant [value=0.009] [] -> float
295
286
  %v136 = kernel_call (:acc1, :v148) [fn=:core.mul:numeric] [statuses] -> float
296
287
  %v137 = kernel_call (:v123, :v136) [fn=:core.add] [statuses] -> float
297
- array_push (:arr152, :v137)
298
- loop_end [axis=:statuses]
299
- %v149 = constant [value=1.0] [] -> float
300
- %acc2 = kernel_call (:v138, :v149) [fn=:core.max] [] -> float
301
- %arr154 = array_init
302
- %statuses_el150 = loop_start (:v142) [axis=:statuses, index=:statuses_i151]
303
- %v153 = index_read (:arr152, :statuses_i151)
304
- %v113 = kernel_call (:v153, :acc2) [fn=:core.div] [statuses] -> float
288
+ %v113 = kernel_call (:v137, :acc2) [fn=:core.div] [statuses] -> float
305
289
  array_push (:arr154, :v113)
306
290
  loop_end [axis=:statuses]
307
291
  function total_tax:
308
292
  %v201 = load_input [key=:statuses]
309
- %arr227 = array_init
293
+ %v217 = load_input [key=:income]
294
+ %v218 = constant [value=168600.0] [] -> float
295
+ %acc1 = kernel_call (:v217, :v218) [fn=:core.min] [] -> float
296
+ %v219 = constant [value=0.062] [] -> float
297
+ %v176 = kernel_call (:acc1, :v219) [fn=:core.mul:numeric] [] -> float
298
+ %v220 = constant [value=0.0145] [] -> float
299
+ %v179 = kernel_call (:v217, :v220) [fn=:core.mul:numeric] [] -> float
300
+ %v180 = kernel_call (:v176, :v179) [fn=:core.add] [] -> float
301
+ %v229 = load_input [key=:state_rate]
302
+ %v197 = kernel_call (:v217, :v229) [fn=:core.mul:numeric] [] -> float
303
+ %v234 = load_input [key=:local_rate]
304
+ %v200 = kernel_call (:v217, :v234) [fn=:core.mul:numeric] [] -> float
305
+ %arr239 = array_init
310
306
  %statuses_el202 = loop_start (:v201) [axis=:statuses, index=:statuses_i203]
311
307
  %v204 = load_input [key=:income]
312
308
  %v205 = load_field (:statuses_el202) [field=:std]
@@ -330,50 +326,36 @@ function total_tax:
330
326
  %v169 = kernel_call (:v163, :v215) [fn=:core.mul:numeric] [statuses, rates] -> float
331
327
  acc_step (:acc216, :v169) [fn=:agg.sum, nil_init=false]
332
328
  loop_end [axis=:rates]
333
- %v170 = acc_load (:acc216) [] -> float
334
- array_push (:arr227, :v170)
335
- loop_end [axis=:statuses]
336
- %v217 = load_input [key=:income]
337
- %v218 = constant [value=168600.0] [] -> float
338
- %acc1 = kernel_call (:v217, :v218) [fn=:core.min] [] -> float
339
- %v219 = constant [value=0.062] [] -> float
340
- %v176 = kernel_call (:acc1, :v219) [fn=:core.mul:numeric] [] -> float
341
- %v220 = constant [value=0.0145] [] -> float
342
- %v179 = kernel_call (:v217, :v220) [fn=:core.mul:numeric] [] -> float
343
- %v180 = kernel_call (:v176, :v179) [fn=:core.add] [] -> float
344
- %arr232 = array_init
345
- %statuses_el221 = loop_start (:v201) [axis=:statuses, index=:statuses_i222]
346
329
  %v223 = load_input [key=:income]
347
- %v224 = load_field (:statuses_el221) [field=:addl_threshold]
330
+ %v224 = load_field (:statuses_el202) [field=:addl_threshold]
348
331
  %v187 = kernel_call (:v223, :v224) [fn=:core.sub] [statuses] -> float
349
332
  %v225 = constant [value=0] [] -> integer
350
333
  %acc2 = kernel_call (:v187, :v225) [fn=:core.max] [statuses] -> float
351
334
  %v226 = constant [value=0.009] [] -> float
352
335
  %v193 = kernel_call (:acc2, :v226) [fn=:core.mul:numeric] [statuses] -> float
353
336
  %v194 = kernel_call (:v180, :v193) [fn=:core.add] [statuses] -> float
354
- %v228 = index_read (:arr227, :statuses_i222)
355
- %v116 = kernel_call (:v228, :v194) [fn=:core.add] [statuses] -> float
356
- array_push (:arr232, :v116)
357
- loop_end [axis=:statuses]
358
- %v229 = load_input [key=:state_rate]
359
- %v197 = kernel_call (:v217, :v229) [fn=:core.mul:numeric] [] -> float
360
- %arr237 = array_init
361
- %statuses_el230 = loop_start (:v201) [axis=:statuses, index=:statuses_i231]
362
- %v233 = index_read (:arr232, :statuses_i231)
363
- %v119 = kernel_call (:v233, :v197) [fn=:core.add] [statuses] -> float
364
- array_push (:arr237, :v119)
365
- loop_end [axis=:statuses]
366
- %v234 = load_input [key=:local_rate]
367
- %v200 = kernel_call (:v217, :v234) [fn=:core.mul:numeric] [] -> float
368
- %arr239 = array_init
369
- %statuses_el235 = loop_start (:v201) [axis=:statuses, index=:statuses_i236]
370
- %v238 = index_read (:arr237, :statuses_i236)
371
- %v122 = kernel_call (:v238, :v200) [fn=:core.add] [statuses] -> float
337
+ %v116 = kernel_call (:acc216, :v194) [fn=:core.add] [statuses] -> float
338
+ %v119 = kernel_call (:v116, :v197) [fn=:core.add] [statuses] -> float
339
+ %v122 = kernel_call (:v119, :v200) [fn=:core.add] [statuses] -> float
372
340
  array_push (:arr239, :v122)
373
341
  loop_end [axis=:statuses]
374
342
  function total_eff:
375
343
  %v213 = load_input [key=:statuses]
376
- %arr239 = array_init
344
+ %v229 = load_input [key=:income]
345
+ %v230 = constant [value=168600.0] [] -> float
346
+ %acc1 = kernel_call (:v229, :v230) [fn=:core.min] [] -> float
347
+ %v231 = constant [value=0.062] [] -> float
348
+ %v183 = kernel_call (:acc1, :v231) [fn=:core.mul:numeric] [] -> float
349
+ %v232 = constant [value=0.0145] [] -> float
350
+ %v186 = kernel_call (:v229, :v232) [fn=:core.mul:numeric] [] -> float
351
+ %v187 = kernel_call (:v183, :v186) [fn=:core.add] [] -> float
352
+ %v241 = load_input [key=:state_rate]
353
+ %v205 = kernel_call (:v229, :v241) [fn=:core.mul:numeric] [] -> float
354
+ %v246 = load_input [key=:local_rate]
355
+ %v210 = kernel_call (:v229, :v246) [fn=:core.mul:numeric] [] -> float
356
+ %v251 = constant [value=1.0] [] -> float
357
+ %acc3 = kernel_call (:v229, :v251) [fn=:core.max] [] -> float
358
+ %arr256 = array_init
377
359
  %statuses_el214 = loop_start (:v213) [axis=:statuses, index=:statuses_i215]
378
360
  %v216 = load_input [key=:income]
379
361
  %v217 = load_field (:statuses_el214) [field=:std]
@@ -397,58 +379,35 @@ function total_eff:
397
379
  %v176 = kernel_call (:v170, :v227) [fn=:core.mul:numeric] [statuses, rates] -> float
398
380
  acc_step (:acc228, :v176) [fn=:agg.sum, nil_init=false]
399
381
  loop_end [axis=:rates]
400
- %v177 = acc_load (:acc228) [] -> float
401
- array_push (:arr239, :v177)
402
- loop_end [axis=:statuses]
403
- %v229 = load_input [key=:income]
404
- %v230 = constant [value=168600.0] [] -> float
405
- %acc1 = kernel_call (:v229, :v230) [fn=:core.min] [] -> float
406
- %v231 = constant [value=0.062] [] -> float
407
- %v183 = kernel_call (:acc1, :v231) [fn=:core.mul:numeric] [] -> float
408
- %v232 = constant [value=0.0145] [] -> float
409
- %v186 = kernel_call (:v229, :v232) [fn=:core.mul:numeric] [] -> float
410
- %v187 = kernel_call (:v183, :v186) [fn=:core.add] [] -> float
411
- %arr244 = array_init
412
- %statuses_el233 = loop_start (:v213) [axis=:statuses, index=:statuses_i234]
413
382
  %v235 = load_input [key=:income]
414
- %v236 = load_field (:statuses_el233) [field=:addl_threshold]
383
+ %v236 = load_field (:statuses_el214) [field=:addl_threshold]
415
384
  %v194 = kernel_call (:v235, :v236) [fn=:core.sub] [statuses] -> float
416
385
  %v237 = constant [value=0] [] -> integer
417
386
  %acc2 = kernel_call (:v194, :v237) [fn=:core.max] [statuses] -> float
418
387
  %v238 = constant [value=0.009] [] -> float
419
388
  %v200 = kernel_call (:acc2, :v238) [fn=:core.mul:numeric] [statuses] -> float
420
389
  %v201 = kernel_call (:v187, :v200) [fn=:core.add] [statuses] -> float
421
- %v240 = index_read (:arr239, :statuses_i234)
422
- %v202 = kernel_call (:v240, :v201) [fn=:core.add] [statuses] -> float
423
- array_push (:arr244, :v202)
424
- loop_end [axis=:statuses]
425
- %v241 = load_input [key=:state_rate]
426
- %v205 = kernel_call (:v229, :v241) [fn=:core.mul:numeric] [] -> float
427
- %arr249 = array_init
428
- %statuses_el242 = loop_start (:v213) [axis=:statuses, index=:statuses_i243]
429
- %v245 = index_read (:arr244, :statuses_i243)
430
- %v207 = kernel_call (:v245, :v205) [fn=:core.add] [statuses] -> float
431
- array_push (:arr249, :v207)
432
- loop_end [axis=:statuses]
433
- %v246 = load_input [key=:local_rate]
434
- %v210 = kernel_call (:v229, :v246) [fn=:core.mul:numeric] [] -> float
435
- %arr254 = array_init
436
- %statuses_el247 = loop_start (:v213) [axis=:statuses, index=:statuses_i248]
437
- %v250 = index_read (:arr249, :statuses_i248)
438
- %v212 = kernel_call (:v250, :v210) [fn=:core.add] [statuses] -> float
439
- array_push (:arr254, :v212)
440
- loop_end [axis=:statuses]
441
- %v251 = constant [value=1.0] [] -> float
442
- %acc3 = kernel_call (:v229, :v251) [fn=:core.max] [] -> float
443
- %arr256 = array_init
444
- %statuses_el252 = loop_start (:v213) [axis=:statuses, index=:statuses_i253]
445
- %v255 = index_read (:arr254, :statuses_i253)
446
- %v129 = kernel_call (:v255, :acc3) [fn=:core.div] [statuses] -> float
390
+ %v202 = kernel_call (:acc228, :v201) [fn=:core.add] [statuses] -> float
391
+ %v207 = kernel_call (:v202, :v205) [fn=:core.add] [statuses] -> float
392
+ %v212 = kernel_call (:v207, :v210) [fn=:core.add] [statuses] -> float
393
+ %v129 = kernel_call (:v212, :acc3) [fn=:core.div] [statuses] -> float
447
394
  array_push (:arr256, :v129)
448
395
  loop_end [axis=:statuses]
449
396
  function after_tax:
450
397
  %v217 = load_input [key=:statuses]
451
- %arr243 = array_init
398
+ %v233 = load_input [key=:income]
399
+ %v234 = constant [value=168600.0] [] -> float
400
+ %acc1 = kernel_call (:v233, :v234) [fn=:core.min] [] -> float
401
+ %v235 = constant [value=0.062] [] -> float
402
+ %v187 = kernel_call (:acc1, :v235) [fn=:core.mul:numeric] [] -> float
403
+ %v236 = constant [value=0.0145] [] -> float
404
+ %v190 = kernel_call (:v233, :v236) [fn=:core.mul:numeric] [] -> float
405
+ %v191 = kernel_call (:v187, :v190) [fn=:core.add] [] -> float
406
+ %v245 = load_input [key=:state_rate]
407
+ %v209 = kernel_call (:v233, :v245) [fn=:core.mul:numeric] [] -> float
408
+ %v250 = load_input [key=:local_rate]
409
+ %v214 = kernel_call (:v233, :v250) [fn=:core.mul:numeric] [] -> float
410
+ %arr256 = array_init
452
411
  %statuses_el218 = loop_start (:v217) [axis=:statuses, index=:statuses_i219]
453
412
  %v220 = load_input [key=:income]
454
413
  %v221 = load_field (:statuses_el218) [field=:std]
@@ -472,52 +431,36 @@ function after_tax:
472
431
  %v180 = kernel_call (:v174, :v231) [fn=:core.mul:numeric] [statuses, rates] -> float
473
432
  acc_step (:acc232, :v180) [fn=:agg.sum, nil_init=false]
474
433
  loop_end [axis=:rates]
475
- %v181 = acc_load (:acc232) [] -> float
476
- array_push (:arr243, :v181)
477
- loop_end [axis=:statuses]
478
- %v233 = load_input [key=:income]
479
- %v234 = constant [value=168600.0] [] -> float
480
- %acc1 = kernel_call (:v233, :v234) [fn=:core.min] [] -> float
481
- %v235 = constant [value=0.062] [] -> float
482
- %v187 = kernel_call (:acc1, :v235) [fn=:core.mul:numeric] [] -> float
483
- %v236 = constant [value=0.0145] [] -> float
484
- %v190 = kernel_call (:v233, :v236) [fn=:core.mul:numeric] [] -> float
485
- %v191 = kernel_call (:v187, :v190) [fn=:core.add] [] -> float
486
- %arr248 = array_init
487
- %statuses_el237 = loop_start (:v217) [axis=:statuses, index=:statuses_i238]
488
434
  %v239 = load_input [key=:income]
489
- %v240 = load_field (:statuses_el237) [field=:addl_threshold]
435
+ %v240 = load_field (:statuses_el218) [field=:addl_threshold]
490
436
  %v198 = kernel_call (:v239, :v240) [fn=:core.sub] [statuses] -> float
491
437
  %v241 = constant [value=0] [] -> integer
492
438
  %acc2 = kernel_call (:v198, :v241) [fn=:core.max] [statuses] -> float
493
439
  %v242 = constant [value=0.009] [] -> float
494
440
  %v204 = kernel_call (:acc2, :v242) [fn=:core.mul:numeric] [statuses] -> float
495
441
  %v205 = kernel_call (:v191, :v204) [fn=:core.add] [statuses] -> float
496
- %v244 = index_read (:arr243, :statuses_i238)
497
- %v206 = kernel_call (:v244, :v205) [fn=:core.add] [statuses] -> float
498
- array_push (:arr248, :v206)
499
- loop_end [axis=:statuses]
500
- %v245 = load_input [key=:state_rate]
501
- %v209 = kernel_call (:v233, :v245) [fn=:core.mul:numeric] [] -> float
502
- %arr253 = array_init
503
- %statuses_el246 = loop_start (:v217) [axis=:statuses, index=:statuses_i247]
504
- %v249 = index_read (:arr248, :statuses_i247)
505
- %v211 = kernel_call (:v249, :v209) [fn=:core.add] [statuses] -> float
506
- array_push (:arr253, :v211)
507
- loop_end [axis=:statuses]
508
- %v250 = load_input [key=:local_rate]
509
- %v214 = kernel_call (:v233, :v250) [fn=:core.mul:numeric] [] -> float
510
- %arr256 = array_init
511
- %statuses_el251 = loop_start (:v217) [axis=:statuses, index=:statuses_i252]
512
- %v254 = index_read (:arr253, :statuses_i252)
513
- %v216 = kernel_call (:v254, :v214) [fn=:core.add] [statuses] -> float
442
+ %v206 = kernel_call (:acc232, :v205) [fn=:core.add] [statuses] -> float
443
+ %v211 = kernel_call (:v206, :v209) [fn=:core.add] [statuses] -> float
444
+ %v216 = kernel_call (:v211, :v214) [fn=:core.add] [statuses] -> float
514
445
  %v255 = load_input [key=:income]
515
446
  %v133 = kernel_call (:v255, :v216) [fn=:core.sub] [statuses] -> float
516
447
  array_push (:arr256, :v133)
517
448
  loop_end [axis=:statuses]
518
449
  function take_home:
519
450
  %v224 = load_input [key=:statuses]
520
- %arr250 = array_init
451
+ %v240 = load_input [key=:income]
452
+ %v241 = constant [value=168600.0] [] -> float
453
+ %acc1 = kernel_call (:v240, :v241) [fn=:core.min] [] -> float
454
+ %v242 = constant [value=0.062] [] -> float
455
+ %v193 = kernel_call (:acc1, :v242) [fn=:core.mul:numeric] [] -> float
456
+ %v243 = constant [value=0.0145] [] -> float
457
+ %v196 = kernel_call (:v240, :v243) [fn=:core.mul:numeric] [] -> float
458
+ %v197 = kernel_call (:v193, :v196) [fn=:core.add] [] -> float
459
+ %v252 = load_input [key=:state_rate]
460
+ %v215 = kernel_call (:v240, :v252) [fn=:core.mul:numeric] [] -> float
461
+ %v257 = load_input [key=:local_rate]
462
+ %v220 = kernel_call (:v240, :v257) [fn=:core.mul:numeric] [] -> float
463
+ %arr264 = array_init
521
464
  %statuses_el225 = loop_start (:v224) [axis=:statuses, index=:statuses_i226]
522
465
  %v227 = load_input [key=:income]
523
466
  %v228 = load_field (:statuses_el225) [field=:std]
@@ -541,45 +484,17 @@ function take_home:
541
484
  %v186 = kernel_call (:v180, :v238) [fn=:core.mul:numeric] [statuses, rates] -> float
542
485
  acc_step (:acc239, :v186) [fn=:agg.sum, nil_init=false]
543
486
  loop_end [axis=:rates]
544
- %v187 = acc_load (:acc239) [] -> float
545
- array_push (:arr250, :v187)
546
- loop_end [axis=:statuses]
547
- %v240 = load_input [key=:income]
548
- %v241 = constant [value=168600.0] [] -> float
549
- %acc1 = kernel_call (:v240, :v241) [fn=:core.min] [] -> float
550
- %v242 = constant [value=0.062] [] -> float
551
- %v193 = kernel_call (:acc1, :v242) [fn=:core.mul:numeric] [] -> float
552
- %v243 = constant [value=0.0145] [] -> float
553
- %v196 = kernel_call (:v240, :v243) [fn=:core.mul:numeric] [] -> float
554
- %v197 = kernel_call (:v193, :v196) [fn=:core.add] [] -> float
555
- %arr255 = array_init
556
- %statuses_el244 = loop_start (:v224) [axis=:statuses, index=:statuses_i245]
557
487
  %v246 = load_input [key=:income]
558
- %v247 = load_field (:statuses_el244) [field=:addl_threshold]
488
+ %v247 = load_field (:statuses_el225) [field=:addl_threshold]
559
489
  %v204 = kernel_call (:v246, :v247) [fn=:core.sub] [statuses] -> float
560
490
  %v248 = constant [value=0] [] -> integer
561
491
  %acc2 = kernel_call (:v204, :v248) [fn=:core.max] [statuses] -> float
562
492
  %v249 = constant [value=0.009] [] -> float
563
493
  %v210 = kernel_call (:acc2, :v249) [fn=:core.mul:numeric] [statuses] -> float
564
494
  %v211 = kernel_call (:v197, :v210) [fn=:core.add] [statuses] -> float
565
- %v251 = index_read (:arr250, :statuses_i245)
566
- %v212 = kernel_call (:v251, :v211) [fn=:core.add] [statuses] -> float
567
- array_push (:arr255, :v212)
568
- loop_end [axis=:statuses]
569
- %v252 = load_input [key=:state_rate]
570
- %v215 = kernel_call (:v240, :v252) [fn=:core.mul:numeric] [] -> float
571
- %arr260 = array_init
572
- %statuses_el253 = loop_start (:v224) [axis=:statuses, index=:statuses_i254]
573
- %v256 = index_read (:arr255, :statuses_i254)
574
- %v217 = kernel_call (:v256, :v215) [fn=:core.add] [statuses] -> float
575
- array_push (:arr260, :v217)
576
- loop_end [axis=:statuses]
577
- %v257 = load_input [key=:local_rate]
578
- %v220 = kernel_call (:v240, :v257) [fn=:core.mul:numeric] [] -> float
579
- %arr264 = array_init
580
- %statuses_el258 = loop_start (:v224) [axis=:statuses, index=:statuses_i259]
581
- %v261 = index_read (:arr260, :statuses_i259)
582
- %v222 = kernel_call (:v261, :v220) [fn=:core.add] [statuses] -> float
495
+ %v212 = kernel_call (:acc239, :v211) [fn=:core.add] [statuses] -> float
496
+ %v217 = kernel_call (:v212, :v215) [fn=:core.add] [statuses] -> float
497
+ %v222 = kernel_call (:v217, :v220) [fn=:core.add] [statuses] -> float
583
498
  %v262 = load_input [key=:income]
584
499
  %v223 = kernel_call (:v262, :v222) [fn=:core.sub] [statuses] -> float
585
500
  %v263 = load_input [key=:retirement_contrib]
@@ -588,8 +503,23 @@ function take_home:
588
503
  loop_end [axis=:statuses]
589
504
  function summary:
590
505
  %v725 = load_input [key=:statuses]
591
- %arr746 = array_init
592
- %arr748 = array_init
506
+ %v742 = load_input [key=:income]
507
+ %v743 = constant [value=1.0] [] -> float
508
+ %acc3 = kernel_call (:v742, :v743) [fn=:core.max] [] -> float
509
+ %v750 = constant [value=168600.0] [] -> float
510
+ %acc5 = kernel_call (:v742, :v750) [fn=:core.min] [] -> float
511
+ %v751 = constant [value=0.062] [] -> float
512
+ %v323 = kernel_call (:acc5, :v751) [fn=:core.mul:numeric] [] -> float
513
+ %v752 = constant [value=0.0145] [] -> float
514
+ %v326 = kernel_call (:v742, :v752) [fn=:core.mul:numeric] [] -> float
515
+ %v327 = kernel_call (:v323, :v326) [fn=:core.add] [] -> float
516
+ %v759 = load_input [key=:state_rate]
517
+ %v374 = kernel_call (:v742, :v759) [fn=:core.mul:numeric] [] -> float
518
+ %v151 = make_object (:v759, :v759, :v374) [keys=[:marginal, :effective, :tax]] [] -> hash
519
+ %v760 = load_input [key=:local_rate]
520
+ %v377 = kernel_call (:v742, :v760) [fn=:core.mul:numeric] [] -> float
521
+ %v155 = make_object (:v760, :v760, :v377) [keys=[:marginal, :effective, :tax]] [] -> hash
522
+ %arr773 = array_init
593
523
  %statuses_el726 = loop_start (:v725) [axis=:statuses, index=:statuses_i727]
594
524
  %v728 = load_input [key=:income]
595
525
  %v729 = load_field (:statuses_el726) [field=:std]
@@ -619,56 +549,19 @@ function summary:
619
549
  %v262 = kernel_call (:v256, :v738) [fn=:core.mul:numeric] [statuses, rates] -> float
620
550
  acc_step (:acc741, :v262) [fn=:agg.sum, nil_init=false]
621
551
  loop_end [axis=:rates]
622
- %v215 = acc_load (:acc740) [] -> float
623
- array_push (:arr748, :v215)
624
- %v263 = acc_load (:acc741) [] -> float
625
- array_push (:arr746, :v263)
626
- loop_end [axis=:statuses]
627
- %v742 = load_input [key=:income]
628
- %v743 = constant [value=1.0] [] -> float
629
- %acc3 = kernel_call (:v742, :v743) [fn=:core.max] [] -> float
630
- %arr769 = array_init
631
- %statuses_el744 = loop_start (:v725) [axis=:statuses, index=:statuses_i745]
632
- %v747 = index_read (:arr746, :statuses_i745)
633
- %v269 = kernel_call (:v747, :acc3) [fn=:core.div] [statuses] -> float
634
- %v749 = index_read (:arr748, :statuses_i745)
635
- %v144 = make_object (:v749, :v269, :v747) [keys=[:marginal, :effective, :tax]] [statuses] -> hash
636
- array_push (:arr769, :v144)
637
- loop_end [axis=:statuses]
638
- %v750 = constant [value=168600.0] [] -> float
639
- %acc5 = kernel_call (:v742, :v750) [fn=:core.min] [] -> float
640
- %v751 = constant [value=0.062] [] -> float
641
- %v323 = kernel_call (:acc5, :v751) [fn=:core.mul:numeric] [] -> float
642
- %v752 = constant [value=0.0145] [] -> float
643
- %v326 = kernel_call (:v742, :v752) [fn=:core.mul:numeric] [] -> float
644
- %v327 = kernel_call (:v323, :v326) [fn=:core.add] [] -> float
645
- %arr764 = array_init
646
- %arr771 = array_init
647
- %statuses_el753 = loop_start (:v725) [axis=:statuses, index=:statuses_i754]
552
+ %v269 = kernel_call (:acc741, :acc3) [fn=:core.div] [statuses] -> float
553
+ %v144 = make_object (:acc740, :v269, :acc741) [keys=[:marginal, :effective, :tax]] [statuses] -> hash
648
554
  %v755 = load_input [key=:income]
649
- %v756 = load_field (:statuses_el753) [field=:addl_threshold]
555
+ %v756 = load_field (:statuses_el726) [field=:addl_threshold]
650
556
  %v334 = kernel_call (:v755, :v756) [fn=:core.sub] [statuses] -> float
651
557
  %v757 = constant [value=0] [] -> integer
652
558
  %acc6 = kernel_call (:v334, :v757) [fn=:core.max] [statuses] -> float
653
559
  %v758 = constant [value=0.009] [] -> float
654
560
  %v340 = kernel_call (:acc6, :v758) [fn=:core.mul:numeric] [statuses] -> float
655
561
  %v341 = kernel_call (:v327, :v340) [fn=:core.add] [statuses] -> float
656
- array_push (:arr764, :v341)
657
562
  %v347 = kernel_call (:v341, :acc3) [fn=:core.div] [statuses] -> float
658
563
  %v147 = make_object (:v347, :v341) [keys=[:effective, :tax]] [statuses] -> hash
659
- array_push (:arr771, :v147)
660
- loop_end [axis=:statuses]
661
- %v759 = load_input [key=:state_rate]
662
- %v374 = kernel_call (:v742, :v759) [fn=:core.mul:numeric] [] -> float
663
- %v151 = make_object (:v759, :v759, :v374) [keys=[:marginal, :effective, :tax]] [] -> hash
664
- %v760 = load_input [key=:local_rate]
665
- %v377 = kernel_call (:v742, :v760) [fn=:core.mul:numeric] [] -> float
666
- %v155 = make_object (:v760, :v760, :v377) [keys=[:marginal, :effective, :tax]] [] -> hash
667
- %arr773 = array_init
668
- %statuses_el761 = loop_start (:v725) [axis=:statuses, index=:statuses_i762]
669
- %v763 = index_read (:arr746, :statuses_i762)
670
- %v765 = index_read (:arr764, :statuses_i762)
671
- %v450 = kernel_call (:v763, :v765) [fn=:core.add] [statuses] -> float
564
+ %v450 = kernel_call (:acc741, :v341) [fn=:core.add] [statuses] -> float
672
565
  %v455 = kernel_call (:v450, :v374) [fn=:core.add] [statuses] -> float
673
566
  %v460 = kernel_call (:v455, :v377) [fn=:core.add] [statuses] -> float
674
567
  %v466 = kernel_call (:v460, :acc3) [fn=:core.div] [statuses] -> float
@@ -677,9 +570,7 @@ function summary:
677
570
  %v635 = kernel_call (:v766, :v460) [fn=:core.sub] [statuses] -> float
678
571
  %v767 = load_input [key=:retirement_contrib]
679
572
  %v724 = kernel_call (:v635, :v767) [fn=:core.sub] [statuses] -> float
680
- %v768 = load_field (:statuses_el761) [field=:name]
681
- %v770 = index_read (:arr769, :statuses_i762)
682
- %v772 = index_read (:arr771, :statuses_i762)
683
- %v162 = make_object (:v768, :v770, :v772, :v151, :v155, :v158, :v635, :v767, :v724) [keys=[:filing_status, :federal, :fica, :state, :local, :total, :after_tax, :retirement_contrib, :take_home]] [statuses] -> hash
573
+ %v768 = load_field (:statuses_el726) [field=:name]
574
+ %v162 = make_object (:v768, :v144, :v147, :v151, :v155, :v158, :v635, :v767, :v724) [keys=[:filing_status, :federal, :fica, :state, :local, :total, :after_tax, :retirement_contrib, :take_home]] [statuses] -> hash
684
575
  array_push (:arr773, :v162)
685
576
  loop_end [axis=:statuses]