kumi 0.0.31 → 0.0.35

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 (771) hide show
  1. checksums.yaml +4 -4
  2. data/.codex +0 -0
  3. data/CHANGELOG.md +39 -1
  4. data/README.md +50 -106
  5. data/Rakefile +2 -0
  6. data/data/functions/agg/numeric.yaml +6 -0
  7. data/data/functions/core/arithmetic.yaml +26 -0
  8. data/data/kernels/javascript/agg/numeric.yaml +8 -4
  9. data/data/kernels/javascript/agg/string.yaml +4 -1
  10. data/data/kernels/javascript/core/arithmetic.yaml +8 -0
  11. data/data/kernels/ruby/agg/numeric.yaml +6 -2
  12. data/data/kernels/ruby/agg/string.yaml +4 -1
  13. data/data/kernels/ruby/core/arithmetic.yaml +12 -2
  14. data/docs/AGENTS.md +60 -0
  15. data/docs/ARCHITECTURE.md +114 -250
  16. data/docs/DEVELOPMENT.md +13 -0
  17. data/docs/GOLDEN_TESTS.md +88 -161
  18. data/docs/RELEASING.md +52 -0
  19. data/docs/SCHEMA_IMPORTS.md +155 -0
  20. data/docs/SYNTAX.md +48 -0
  21. data/docs/UNSAT_DETECTION.md +2 -1
  22. data/golden/array_element/expected/dfir.txt +5 -0
  23. data/golden/array_element/expected/dfir_optimized.txt +5 -0
  24. data/golden/array_element/expected/loopir.txt +11 -0
  25. data/golden/array_element/expected/schema_javascript.mjs +13 -10
  26. data/golden/array_element/expected/schema_ruby.rb +11 -36
  27. data/golden/array_element/expected/vecir.txt +5 -0
  28. data/golden/array_index/expected/dfir.txt +25 -0
  29. data/golden/array_index/expected/dfir_optimized.txt +27 -0
  30. data/golden/array_index/expected/loopir.txt +44 -0
  31. data/golden/array_index/expected/nast.txt +6 -6
  32. data/golden/array_index/expected/schema_javascript.mjs +53 -36
  33. data/golden/array_index/expected/schema_ruby.rb +41 -58
  34. data/golden/array_index/expected/snast.txt +2 -2
  35. data/golden/array_index/expected/vecir.txt +27 -0
  36. data/golden/array_operations/expected/dfir.txt +36 -0
  37. data/golden/array_operations/expected/dfir_optimized.txt +36 -0
  38. data/golden/array_operations/expected/loopir.txt +45 -0
  39. data/golden/array_operations/expected/schema_javascript.mjs +50 -45
  40. data/golden/array_operations/expected/schema_ruby.rb +46 -75
  41. data/golden/array_operations/expected/vecir.txt +36 -0
  42. data/golden/cascade_logic/expected/dfir.txt +21 -0
  43. data/golden/cascade_logic/expected/dfir_optimized.txt +22 -0
  44. data/golden/cascade_logic/expected/loopir.txt +22 -0
  45. data/golden/cascade_logic/expected/schema_javascript.mjs +18 -18
  46. data/golden/cascade_logic/expected/schema_ruby.rb +25 -49
  47. data/golden/cascade_logic/expected/vecir.txt +22 -0
  48. data/golden/chained_fusion/expected/dfir.txt +53 -0
  49. data/golden/chained_fusion/expected/dfir_optimized.txt +75 -0
  50. data/golden/chained_fusion/expected/loopir.txt +95 -0
  51. data/golden/chained_fusion/expected/schema_javascript.mjs +105 -101
  52. data/golden/chained_fusion/expected/schema_ruby.rb +93 -128
  53. data/golden/chained_fusion/expected/vecir.txt +75 -0
  54. data/golden/decimal_explicit/expected/dfir.txt +18 -0
  55. data/golden/decimal_explicit/expected/dfir_optimized.txt +28 -0
  56. data/golden/decimal_explicit/expected/loopir.txt +28 -0
  57. data/golden/decimal_explicit/expected/schema_javascript.mjs +31 -19
  58. data/golden/decimal_explicit/expected/schema_ruby.rb +34 -46
  59. data/golden/decimal_explicit/expected/vecir.txt +28 -0
  60. data/golden/element_arrays/expected/dfir.txt +42 -0
  61. data/golden/element_arrays/expected/dfir_optimized.txt +50 -0
  62. data/golden/element_arrays/expected/loopir.txt +92 -0
  63. data/golden/element_arrays/expected/schema_javascript.mjs +107 -85
  64. data/golden/element_arrays/expected/schema_ruby.rb +85 -111
  65. data/golden/element_arrays/expected/snast.txt +6 -6
  66. data/golden/element_arrays/expected/vecir.txt +50 -0
  67. data/golden/empty_and_null_inputs/expected/dfir.txt +14 -0
  68. data/golden/empty_and_null_inputs/expected/dfir_optimized.txt +25 -0
  69. data/golden/empty_and_null_inputs/expected/loopir.txt +43 -0
  70. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +49 -38
  71. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +41 -66
  72. data/golden/empty_and_null_inputs/expected/vecir.txt +25 -0
  73. data/golden/example_xpto/expected/ast.txt +23 -0
  74. data/golden/example_xpto/expected/dfir.txt +10 -0
  75. data/golden/example_xpto/expected/dfir_optimized.txt +10 -0
  76. data/golden/example_xpto/expected/input_plan.txt +1 -0
  77. data/golden/example_xpto/expected/loopir.txt +10 -0
  78. data/golden/example_xpto/expected/nast.txt +17 -0
  79. data/golden/example_xpto/expected/schema_javascript.mjs +16 -0
  80. data/golden/example_xpto/expected/schema_ruby.rb +18 -0
  81. data/golden/example_xpto/expected/snast.txt +17 -0
  82. data/golden/example_xpto/expected/vecir.txt +10 -0
  83. data/golden/example_xpto/expected.json +4 -0
  84. data/golden/example_xpto/input.json +3 -0
  85. data/golden/example_xpto/schema.kumi +8 -0
  86. data/golden/function_overload/expected/dfir.txt +10 -0
  87. data/golden/function_overload/expected/dfir_optimized.txt +12 -0
  88. data/golden/function_overload/expected/loopir.txt +12 -0
  89. data/golden/function_overload/expected/schema_javascript.mjs +17 -8
  90. data/golden/function_overload/expected/schema_ruby.rb +16 -32
  91. data/golden/function_overload/expected/snast.txt +1 -1
  92. data/golden/function_overload/expected/vecir.txt +12 -0
  93. data/golden/game_of_life/expected/dfir.txt +69 -0
  94. data/golden/game_of_life/expected/dfir_optimized.txt +207 -0
  95. data/golden/game_of_life/expected/loopir.txt +694 -0
  96. data/golden/game_of_life/expected/schema_javascript.mjs +841 -97
  97. data/golden/game_of_life/expected/schema_ruby.rb +792 -115
  98. data/golden/game_of_life/expected/vecir.txt +207 -0
  99. data/golden/hash_keys/expected/dfir.txt +14 -0
  100. data/golden/hash_keys/expected/dfir_optimized.txt +14 -0
  101. data/golden/hash_keys/expected/loopir.txt +14 -0
  102. data/golden/hash_keys/expected/schema_javascript.mjs +13 -30
  103. data/golden/hash_keys/expected/schema_ruby.rb +16 -58
  104. data/golden/hash_keys/expected/vecir.txt +14 -0
  105. data/golden/hash_value/expected/dfir.txt +21 -0
  106. data/golden/hash_value/expected/dfir_optimized.txt +25 -0
  107. data/golden/hash_value/expected/loopir.txt +31 -0
  108. data/golden/hash_value/expected/schema_javascript.mjs +34 -37
  109. data/golden/hash_value/expected/schema_ruby.rb +32 -65
  110. data/golden/hash_value/expected/vecir.txt +25 -0
  111. data/golden/hierarchical_complex/expected/dfir.txt +86 -0
  112. data/golden/hierarchical_complex/expected/dfir_optimized.txt +88 -0
  113. data/golden/hierarchical_complex/expected/loopir.txt +129 -0
  114. data/golden/hierarchical_complex/expected/schema_javascript.mjs +145 -109
  115. data/golden/hierarchical_complex/expected/schema_ruby.rb +119 -127
  116. data/golden/hierarchical_complex/expected/vecir.txt +88 -0
  117. data/golden/inline_rename_scope_leak/expected/dfir.txt +19 -0
  118. data/golden/inline_rename_scope_leak/expected/dfir_optimized.txt +27 -0
  119. data/golden/inline_rename_scope_leak/expected/loopir.txt +35 -0
  120. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +39 -39
  121. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +36 -69
  122. data/golden/inline_rename_scope_leak/expected/vecir.txt +23 -0
  123. data/golden/input_reference/expected/dfir.txt +22 -0
  124. data/golden/input_reference/expected/dfir_optimized.txt +22 -0
  125. data/golden/input_reference/expected/loopir.txt +33 -0
  126. data/golden/input_reference/expected/schema_javascript.mjs +36 -30
  127. data/golden/input_reference/expected/schema_ruby.rb +36 -60
  128. data/golden/input_reference/expected/snast.txt +1 -1
  129. data/golden/input_reference/expected/vecir.txt +22 -0
  130. data/golden/interleaved_fusion/expected/dfir.txt +35 -0
  131. data/golden/interleaved_fusion/expected/dfir_optimized.txt +60 -0
  132. data/golden/interleaved_fusion/expected/loopir.txt +74 -0
  133. data/golden/interleaved_fusion/expected/schema_javascript.mjs +82 -73
  134. data/golden/interleaved_fusion/expected/schema_ruby.rb +70 -104
  135. data/golden/interleaved_fusion/expected/vecir.txt +60 -0
  136. data/golden/let_inline/expected/dfir.txt +16 -0
  137. data/golden/let_inline/expected/dfir_optimized.txt +20 -0
  138. data/golden/let_inline/expected/loopir.txt +20 -0
  139. data/golden/let_inline/expected/schema_javascript.mjs +28 -7
  140. data/golden/let_inline/expected/schema_ruby.rb +25 -28
  141. data/golden/let_inline/expected/vecir.txt +20 -0
  142. data/golden/loop_fusion/expected/dfir.txt +29 -0
  143. data/golden/loop_fusion/expected/dfir_optimized.txt +47 -0
  144. data/golden/loop_fusion/expected/loopir.txt +55 -0
  145. data/golden/loop_fusion/expected/schema_javascript.mjs +61 -55
  146. data/golden/loop_fusion/expected/schema_ruby.rb +53 -84
  147. data/golden/loop_fusion/expected/vecir.txt +47 -0
  148. data/golden/min_max_empty_arrays/expected/ast.txt +58 -0
  149. data/golden/min_max_empty_arrays/expected/dfir.txt +27 -0
  150. data/golden/min_max_empty_arrays/expected/dfir_optimized.txt +37 -0
  151. data/golden/min_max_empty_arrays/expected/input_plan.txt +15 -0
  152. data/golden/min_max_empty_arrays/expected/loopir.txt +67 -0
  153. data/golden/min_max_empty_arrays/expected/nast.txt +27 -0
  154. data/golden/min_max_empty_arrays/expected/schema_javascript.mjs +92 -0
  155. data/golden/min_max_empty_arrays/expected/schema_ruby.rb +90 -0
  156. data/golden/min_max_empty_arrays/expected/snast.txt +27 -0
  157. data/golden/min_max_empty_arrays/expected/vecir.txt +37 -0
  158. data/golden/min_max_empty_arrays/expected.json +7 -0
  159. data/golden/min_max_empty_arrays/input.json +12 -0
  160. data/golden/min_max_empty_arrays/schema.kumi +24 -0
  161. data/golden/min_reduce_scope/expected/dfir.txt +35 -0
  162. data/golden/min_reduce_scope/expected/dfir_optimized.txt +37 -0
  163. data/golden/min_reduce_scope/expected/loopir.txt +58 -0
  164. data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -54
  165. data/golden/min_reduce_scope/expected/schema_ruby.rb +55 -82
  166. data/golden/min_reduce_scope/expected/vecir.txt +37 -0
  167. data/golden/mixed_dimensions/expected/dfir.txt +23 -0
  168. data/golden/mixed_dimensions/expected/dfir_optimized.txt +26 -0
  169. data/golden/mixed_dimensions/expected/loopir.txt +44 -0
  170. data/golden/mixed_dimensions/expected/schema_javascript.mjs +50 -41
  171. data/golden/mixed_dimensions/expected/schema_ruby.rb +43 -69
  172. data/golden/mixed_dimensions/expected/vecir.txt +28 -0
  173. data/golden/multi_loop_reduction/expected/ast.txt +39 -0
  174. data/golden/multi_loop_reduction/expected/dfir.txt +23 -0
  175. data/golden/multi_loop_reduction/expected/dfir_optimized.txt +25 -0
  176. data/golden/multi_loop_reduction/expected/input_plan.txt +5 -0
  177. data/golden/multi_loop_reduction/expected/loopir.txt +37 -0
  178. data/golden/multi_loop_reduction/expected/nast.txt +25 -0
  179. data/golden/multi_loop_reduction/expected/schema_javascript.mjs +50 -0
  180. data/golden/multi_loop_reduction/expected/schema_ruby.rb +48 -0
  181. data/golden/multi_loop_reduction/expected/snast.txt +25 -0
  182. data/golden/multi_loop_reduction/expected/vecir.txt +25 -0
  183. data/golden/multi_loop_reduction/expected.json +5 -0
  184. data/golden/multi_loop_reduction/input.json +7 -0
  185. data/golden/multi_loop_reduction/schema.kumi +20 -0
  186. data/golden/multirank_hoisting/expected/dfir.txt +40 -0
  187. data/golden/multirank_hoisting/expected/dfir_optimized.txt +109 -0
  188. data/golden/multirank_hoisting/expected/loopir.txt +164 -0
  189. data/golden/multirank_hoisting/expected/schema_javascript.mjs +183 -108
  190. data/golden/multirank_hoisting/expected/schema_ruby.rb +157 -135
  191. data/golden/multirank_hoisting/expected/vecir.txt +109 -0
  192. data/golden/nested_hash/expected/dfir.txt +6 -0
  193. data/golden/nested_hash/expected/dfir_optimized.txt +6 -0
  194. data/golden/nested_hash/expected/loopir.txt +6 -0
  195. data/golden/nested_hash/expected/schema_javascript.mjs +5 -5
  196. data/golden/nested_hash/expected/schema_ruby.rb +8 -32
  197. data/golden/nested_hash/expected/vecir.txt +6 -0
  198. data/golden/reduction_broadcast/expected/dfir.txt +27 -0
  199. data/golden/reduction_broadcast/expected/dfir_optimized.txt +44 -0
  200. data/golden/reduction_broadcast/expected/loopir.txt +68 -0
  201. data/golden/reduction_broadcast/expected/schema_javascript.mjs +77 -62
  202. data/golden/reduction_broadcast/expected/schema_ruby.rb +64 -92
  203. data/golden/reduction_broadcast/expected/vecir.txt +44 -0
  204. data/golden/roll/expected/dfir.txt +16 -0
  205. data/golden/roll/expected/dfir_optimized.txt +16 -0
  206. data/golden/roll/expected/loopir.txt +40 -0
  207. data/golden/roll/expected/schema_javascript.mjs +44 -53
  208. data/golden/roll/expected/schema_ruby.rb +41 -82
  209. data/golden/roll/expected/vecir.txt +16 -0
  210. data/golden/schema_imports_broadcasting_with_imports/expected/ast.txt +26 -0
  211. data/golden/schema_imports_broadcasting_with_imports/expected/dfir.txt +8 -0
  212. data/golden/schema_imports_broadcasting_with_imports/expected/dfir_optimized.txt +13 -0
  213. data/golden/schema_imports_broadcasting_with_imports/expected/input_plan.txt +5 -0
  214. data/golden/schema_imports_broadcasting_with_imports/expected/loopir.txt +19 -0
  215. data/golden/schema_imports_broadcasting_with_imports/expected/nast.txt +12 -0
  216. data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +27 -0
  217. data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +27 -0
  218. data/golden/schema_imports_broadcasting_with_imports/expected/snast.txt +12 -0
  219. data/golden/schema_imports_broadcasting_with_imports/expected/vecir.txt +13 -0
  220. data/golden/schema_imports_broadcasting_with_imports/expected.json +4 -0
  221. data/golden/schema_imports_broadcasting_with_imports/input.json +7 -0
  222. data/golden/schema_imports_broadcasting_with_imports/schema.kumi +14 -0
  223. data/golden/schema_imports_complex_order_calc/expected/ast.txt +82 -0
  224. data/golden/schema_imports_complex_order_calc/expected/dfir.txt +41 -0
  225. data/golden/schema_imports_complex_order_calc/expected/dfir_optimized.txt +168 -0
  226. data/golden/schema_imports_complex_order_calc/expected/input_plan.txt +16 -0
  227. data/golden/schema_imports_complex_order_calc/expected/loopir.txt +202 -0
  228. data/golden/schema_imports_complex_order_calc/expected/nast.txt +56 -0
  229. data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +251 -0
  230. data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +234 -0
  231. data/golden/schema_imports_complex_order_calc/expected/snast.txt +56 -0
  232. data/golden/schema_imports_complex_order_calc/expected/vecir.txt +168 -0
  233. data/golden/schema_imports_complex_order_calc/expected.json +12 -0
  234. data/golden/schema_imports_complex_order_calc/input.json +20 -0
  235. data/golden/schema_imports_complex_order_calc/schema.kumi +33 -0
  236. data/golden/schema_imports_composed_order/expected/ast.txt +33 -0
  237. data/golden/schema_imports_composed_order/expected/dfir.txt +15 -0
  238. data/golden/schema_imports_composed_order/expected/dfir_optimized.txt +29 -0
  239. data/golden/schema_imports_composed_order/expected/input_plan.txt +3 -0
  240. data/golden/schema_imports_composed_order/expected/loopir.txt +29 -0
  241. data/golden/schema_imports_composed_order/expected/nast.txt +25 -0
  242. data/golden/schema_imports_composed_order/expected/schema_javascript.mjs +41 -0
  243. data/golden/schema_imports_composed_order/expected/schema_ruby.rb +43 -0
  244. data/golden/schema_imports_composed_order/expected/snast.txt +25 -0
  245. data/golden/schema_imports_composed_order/expected/vecir.txt +29 -0
  246. data/golden/schema_imports_composed_order/expected.json +6 -0
  247. data/golden/schema_imports_composed_order/input.json +5 -0
  248. data/golden/schema_imports_composed_order/schema.kumi +15 -0
  249. data/golden/schema_imports_discount_with_tax/expected/ast.txt +37 -0
  250. data/golden/schema_imports_discount_with_tax/expected/dfir.txt +18 -0
  251. data/golden/schema_imports_discount_with_tax/expected/dfir_optimized.txt +31 -0
  252. data/golden/schema_imports_discount_with_tax/expected/input_plan.txt +2 -0
  253. data/golden/schema_imports_discount_with_tax/expected/loopir.txt +31 -0
  254. data/golden/schema_imports_discount_with_tax/expected/nast.txt +30 -0
  255. data/golden/schema_imports_discount_with_tax/expected/schema_javascript.mjs +46 -0
  256. data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +48 -0
  257. data/golden/schema_imports_discount_with_tax/expected/snast.txt +30 -0
  258. data/golden/schema_imports_discount_with_tax/expected/vecir.txt +31 -0
  259. data/golden/schema_imports_discount_with_tax/expected.json +7 -0
  260. data/golden/schema_imports_discount_with_tax/input.json +4 -0
  261. data/golden/schema_imports_discount_with_tax/schema.kumi +15 -0
  262. data/golden/schema_imports_line_items/expected/ast.txt +35 -0
  263. data/golden/schema_imports_line_items/expected/dfir.txt +11 -0
  264. data/golden/schema_imports_line_items/expected/dfir_optimized.txt +26 -0
  265. data/golden/schema_imports_line_items/expected/input_plan.txt +8 -0
  266. data/golden/schema_imports_line_items/expected/loopir.txt +35 -0
  267. data/golden/schema_imports_line_items/expected/nast.txt +19 -0
  268. data/golden/schema_imports_line_items/expected/schema_javascript.mjs +47 -0
  269. data/golden/schema_imports_line_items/expected/schema_ruby.rb +46 -0
  270. data/golden/schema_imports_line_items/expected/snast.txt +19 -0
  271. data/golden/schema_imports_line_items/expected/vecir.txt +26 -0
  272. data/golden/schema_imports_line_items/expected.json +5 -0
  273. data/golden/schema_imports_line_items/input.json +13 -0
  274. data/golden/schema_imports_line_items/schema.kumi +17 -0
  275. data/golden/schema_imports_multiple/expected/ast.txt +35 -0
  276. data/golden/schema_imports_multiple/expected/dfir.txt +17 -0
  277. data/golden/schema_imports_multiple/expected/dfir_optimized.txt +34 -0
  278. data/golden/schema_imports_multiple/expected/input_plan.txt +2 -0
  279. data/golden/schema_imports_multiple/expected/loopir.txt +34 -0
  280. data/golden/schema_imports_multiple/expected/nast.txt +28 -0
  281. data/golden/schema_imports_multiple/expected/schema_javascript.mjs +49 -0
  282. data/golden/schema_imports_multiple/expected/schema_ruby.rb +51 -0
  283. data/golden/schema_imports_multiple/expected/snast.txt +28 -0
  284. data/golden/schema_imports_multiple/expected/vecir.txt +34 -0
  285. data/golden/schema_imports_multiple/expected.json +7 -0
  286. data/golden/schema_imports_multiple/input.json +4 -0
  287. data/golden/schema_imports_multiple/schema.kumi +15 -0
  288. data/golden/schema_imports_nested_expressions/expected/ast.txt +31 -0
  289. data/golden/schema_imports_nested_expressions/expected/dfir.txt +14 -0
  290. data/golden/schema_imports_nested_expressions/expected/dfir_optimized.txt +24 -0
  291. data/golden/schema_imports_nested_expressions/expected/input_plan.txt +3 -0
  292. data/golden/schema_imports_nested_expressions/expected/loopir.txt +24 -0
  293. data/golden/schema_imports_nested_expressions/expected/nast.txt +23 -0
  294. data/golden/schema_imports_nested_expressions/expected/schema_javascript.mjs +33 -0
  295. data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +35 -0
  296. data/golden/schema_imports_nested_expressions/expected/snast.txt +23 -0
  297. data/golden/schema_imports_nested_expressions/expected/vecir.txt +24 -0
  298. data/golden/schema_imports_nested_expressions/expected.json +5 -0
  299. data/golden/schema_imports_nested_expressions/input.json +5 -0
  300. data/golden/schema_imports_nested_expressions/schema.kumi +13 -0
  301. data/golden/schema_imports_nested_with_reductions/expected/ast.txt +47 -0
  302. data/golden/schema_imports_nested_with_reductions/expected/dfir.txt +15 -0
  303. data/golden/schema_imports_nested_with_reductions/expected/dfir_optimized.txt +44 -0
  304. data/golden/schema_imports_nested_with_reductions/expected/input_plan.txt +12 -0
  305. data/golden/schema_imports_nested_with_reductions/expected/loopir.txt +68 -0
  306. data/golden/schema_imports_nested_with_reductions/expected/nast.txt +23 -0
  307. data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +88 -0
  308. data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +82 -0
  309. data/golden/schema_imports_nested_with_reductions/expected/snast.txt +23 -0
  310. data/golden/schema_imports_nested_with_reductions/expected/vecir.txt +44 -0
  311. data/golden/schema_imports_nested_with_reductions/expected.json +6 -0
  312. data/golden/schema_imports_nested_with_reductions/input.json +16 -0
  313. data/golden/schema_imports_nested_with_reductions/schema.kumi +23 -0
  314. data/golden/schema_imports_with_imports/expected/ast.txt +19 -0
  315. data/golden/schema_imports_with_imports/expected/dfir.txt +7 -0
  316. data/golden/schema_imports_with_imports/expected/dfir_optimized.txt +9 -0
  317. data/golden/schema_imports_with_imports/expected/input_plan.txt +1 -0
  318. data/golden/schema_imports_with_imports/expected/loopir.txt +9 -0
  319. data/golden/schema_imports_with_imports/expected/nast.txt +13 -0
  320. data/golden/schema_imports_with_imports/expected/schema_javascript.mjs +15 -0
  321. data/golden/schema_imports_with_imports/expected/schema_ruby.rb +17 -0
  322. data/golden/schema_imports_with_imports/expected/snast.txt +13 -0
  323. data/golden/schema_imports_with_imports/expected/vecir.txt +9 -0
  324. data/golden/schema_imports_with_imports/expected.json +4 -0
  325. data/golden/schema_imports_with_imports/input.json +3 -0
  326. data/golden/schema_imports_with_imports/schema.kumi +10 -0
  327. data/golden/shift/expected/dfir.txt +24 -0
  328. data/golden/shift/expected/dfir_optimized.txt +24 -0
  329. data/golden/shift/expected/loopir.txt +64 -0
  330. data/golden/shift/expected/schema_javascript.mjs +72 -88
  331. data/golden/shift/expected/schema_ruby.rb +67 -119
  332. data/golden/shift/expected/vecir.txt +24 -0
  333. data/golden/shift_2d/expected/dfir.txt +60 -0
  334. data/golden/shift_2d/expected/dfir_optimized.txt +60 -0
  335. data/golden/shift_2d/expected/loopir.txt +176 -0
  336. data/golden/shift_2d/expected/schema_javascript.mjs +204 -284
  337. data/golden/shift_2d/expected/schema_ruby.rb +169 -309
  338. data/golden/shift_2d/expected/vecir.txt +60 -0
  339. data/golden/simple_math/expected/dfir.txt +21 -0
  340. data/golden/simple_math/expected/dfir_optimized.txt +21 -0
  341. data/golden/simple_math/expected/loopir.txt +21 -0
  342. data/golden/simple_math/expected/schema_javascript.mjs +17 -17
  343. data/golden/simple_math/expected/schema_ruby.rb +24 -48
  344. data/golden/simple_math/expected/vecir.txt +21 -0
  345. data/golden/streaming_basics/expected/dfir.txt +43 -0
  346. data/golden/streaming_basics/expected/dfir_optimized.txt +69 -0
  347. data/golden/streaming_basics/expected/loopir.txt +76 -0
  348. data/golden/streaming_basics/expected/schema_javascript.mjs +83 -73
  349. data/golden/streaming_basics/expected/schema_ruby.rb +77 -105
  350. data/golden/streaming_basics/expected/vecir.txt +69 -0
  351. data/golden/tuples/expected/dfir.txt +28 -0
  352. data/golden/tuples/expected/dfir_optimized.txt +42 -0
  353. data/golden/tuples/expected/loopir.txt +42 -0
  354. data/golden/tuples/expected/schema_javascript.mjs +41 -35
  355. data/golden/tuples/expected/schema_ruby.rb +56 -74
  356. data/golden/tuples/expected/vecir.txt +42 -0
  357. data/golden/tuples_and_arrays/expected/dfir.txt +26 -0
  358. data/golden/tuples_and_arrays/expected/dfir_optimized.txt +37 -0
  359. data/golden/tuples_and_arrays/expected/loopir.txt +45 -0
  360. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +49 -46
  361. data/golden/tuples_and_arrays/expected/schema_ruby.rb +46 -75
  362. data/golden/tuples_and_arrays/expected/vecir.txt +37 -0
  363. data/golden/us_tax_2024/expected/dfir.txt +189 -0
  364. data/golden/us_tax_2024/expected/dfir_optimized.txt +565 -0
  365. data/golden/us_tax_2024/expected/loopir.txt +685 -0
  366. data/golden/us_tax_2024/expected/schema_javascript.mjs +813 -127
  367. data/golden/us_tax_2024/expected/schema_ruby.rb +763 -159
  368. data/golden/us_tax_2024/expected/vecir.txt +567 -0
  369. data/golden/vector_make_object/expected/ast.txt +22 -0
  370. data/golden/vector_make_object/expected/dfir.txt +6 -0
  371. data/golden/vector_make_object/expected/dfir_optimized.txt +6 -0
  372. data/golden/vector_make_object/expected/input_plan.txt +5 -0
  373. data/golden/vector_make_object/expected/loopir.txt +9 -0
  374. data/golden/vector_make_object/expected/nast.txt +8 -0
  375. data/golden/vector_make_object/expected/schema_javascript.mjs +13 -0
  376. data/golden/vector_make_object/expected/schema_ruby.rb +14 -0
  377. data/golden/vector_make_object/expected/snast.txt +8 -0
  378. data/golden/vector_make_object/expected/vecir.txt +7 -0
  379. data/golden/vector_make_object/schema.kumi +11 -0
  380. data/golden/with_constants/expected/dfir.txt +9 -0
  381. data/golden/with_constants/expected/dfir_optimized.txt +9 -0
  382. data/golden/with_constants/expected/loopir.txt +9 -0
  383. data/golden/with_constants/expected/schema_javascript.mjs +8 -8
  384. data/golden/with_constants/expected/schema_ruby.rb +13 -37
  385. data/golden/with_constants/expected/vecir.txt +9 -0
  386. data/lib/kumi/analyzer.rb +28 -34
  387. data/lib/kumi/configuration.rb +7 -6
  388. data/lib/kumi/core/analyzer/pass_manager.rb +6 -1
  389. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +1 -1
  390. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +1 -1
  391. data/lib/kumi/core/analyzer/passes/codegen/loop/js/emitter.rb +204 -0
  392. data/lib/kumi/core/analyzer/passes/codegen/loop/ruby/emitter.rb +212 -0
  393. data/lib/kumi/core/analyzer/passes/codegen/loop/ruby/output_buffer.rb +74 -0
  394. data/lib/kumi/core/analyzer/passes/codegen/loop_js_pass.rb +24 -0
  395. data/lib/kumi/core/analyzer/passes/codegen/loop_ruby_pass.rb +24 -0
  396. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +6 -0
  397. data/lib/kumi/core/analyzer/passes/df_validate_pass.rb +24 -0
  398. data/lib/kumi/core/analyzer/passes/import_analysis_pass.rb +90 -0
  399. data/lib/kumi/core/analyzer/passes/loop/lower_pass.rb +28 -0
  400. data/lib/kumi/core/analyzer/passes/loop_validate_pass.rb +21 -0
  401. data/lib/kumi/core/analyzer/passes/lower_to_dfir_pass.rb +37 -0
  402. data/lib/kumi/core/analyzer/passes/name_indexer.rb +20 -2
  403. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +44 -0
  404. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +30 -0
  405. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -1
  406. data/lib/kumi/core/analyzer/passes/snast_pass.rb +15 -0
  407. data/lib/kumi/core/analyzer/passes/vec/lower_pass.rb +24 -0
  408. data/lib/kumi/core/analyzer/passes/vec_validate_pass.rb +21 -0
  409. data/lib/kumi/core/analyzer/plans.rb +2 -3
  410. data/lib/kumi/core/compiler/access_planner_v2.rb +33 -2
  411. data/lib/kumi/core/nast.rb +16 -0
  412. data/lib/kumi/core/ruby_parser/build_context.rb +3 -1
  413. data/lib/kumi/core/ruby_parser/parser.rb +1 -1
  414. data/lib/kumi/core/ruby_parser/schema_builder.rb +33 -3
  415. data/lib/kumi/dev/golden/representation.rb +4 -7
  416. data/lib/kumi/dev/golden/result.rb +9 -3
  417. data/lib/kumi/dev/golden/runtime_test.rb +16 -1
  418. data/lib/kumi/dev/golden.rb +18 -20
  419. data/lib/kumi/dev/golden_schema_modules.rb +8 -0
  420. data/lib/kumi/dev/golden_schema_wrapper.rb +116 -0
  421. data/lib/kumi/dev/golden_v2.rb +292 -0
  422. data/lib/kumi/dev/pretty_printer.rb +42 -67
  423. data/lib/kumi/dev/support/kumi_runner.mjs +18 -0
  424. data/lib/kumi/ir/README.md +163 -0
  425. data/lib/kumi/ir/base/block.rb +32 -0
  426. data/lib/kumi/ir/base/builder.rb +43 -0
  427. data/lib/kumi/ir/base/function.rb +45 -0
  428. data/lib/kumi/ir/base/instruction.rb +206 -0
  429. data/lib/kumi/ir/base/module.rb +37 -0
  430. data/lib/kumi/ir/base.rb +10 -0
  431. data/lib/kumi/ir/buf/lower.rb +28 -0
  432. data/lib/kumi/ir/buf/pipeline.rb +19 -0
  433. data/lib/kumi/ir/buf.rb +29 -0
  434. data/lib/kumi/ir/df/access_contract.rb +87 -0
  435. data/lib/kumi/ir/df/import_inliner.rb +89 -0
  436. data/lib/kumi/ir/df/import_loader.rb +63 -0
  437. data/lib/kumi/ir/df/lower.rb +397 -0
  438. data/lib/kumi/ir/df/ops/array_build.rb +23 -0
  439. data/lib/kumi/ir/df/ops/array_get.rb +29 -0
  440. data/lib/kumi/ir/df/ops/array_len.rb +23 -0
  441. data/lib/kumi/ir/df/ops/axis_broadcast.rb +28 -0
  442. data/lib/kumi/ir/df/ops/axis_index.rb +23 -0
  443. data/lib/kumi/ir/df/ops/axis_shift.rb +35 -0
  444. data/lib/kumi/ir/df/ops/constant.rb +21 -0
  445. data/lib/kumi/ir/df/ops/decl_ref.rb +23 -0
  446. data/lib/kumi/ir/df/ops/fold.rb +25 -0
  447. data/lib/kumi/ir/df/ops/import_call.rb +25 -0
  448. data/lib/kumi/ir/df/ops/load_field.rb +33 -0
  449. data/lib/kumi/ir/df/ops/load_input.rb +31 -0
  450. data/lib/kumi/ir/df/ops/make_object.rb +23 -0
  451. data/lib/kumi/ir/df/ops/map.rb +21 -0
  452. data/lib/kumi/ir/df/ops/node.rb +46 -0
  453. data/lib/kumi/ir/df/ops/reduce.rb +27 -0
  454. data/lib/kumi/ir/df/ops/select.rb +25 -0
  455. data/lib/kumi/ir/df/ops.rb +10 -0
  456. data/lib/kumi/ir/df/passes/broadcast_simplify.rb +74 -0
  457. data/lib/kumi/ir/df/passes/cse.rb +51 -0
  458. data/lib/kumi/ir/df/passes/decl_inlining.rb +131 -0
  459. data/lib/kumi/ir/df/passes/import_inlining.rb +272 -0
  460. data/lib/kumi/ir/df/passes/load_dedup.rb +93 -0
  461. data/lib/kumi/ir/df/passes/stencil_cse.rb +71 -0
  462. data/lib/kumi/ir/df/passes/support/instruction_cloner.rb +82 -0
  463. data/lib/kumi/ir/df/passes/tuple_fold_canonicalization.rb +181 -0
  464. data/lib/kumi/ir/df/passes/tuple_to_object.rb +58 -0
  465. data/lib/kumi/ir/df/passes.rb +11 -0
  466. data/lib/kumi/ir/df/pipeline.rb +32 -0
  467. data/lib/kumi/ir/df/validator.rb +120 -0
  468. data/lib/kumi/ir/df.rb +95 -0
  469. data/lib/kumi/ir/loop/builder.rb +84 -0
  470. data/lib/kumi/ir/loop/lower.rb +679 -0
  471. data/lib/kumi/ir/loop/ops/core_ops.rb +194 -0
  472. data/lib/kumi/ir/loop/ops/node.rb +45 -0
  473. data/lib/kumi/ir/loop/ops.rb +4 -0
  474. data/lib/kumi/ir/loop/pipeline.rb +19 -0
  475. data/lib/kumi/ir/loop/validator.rb +101 -0
  476. data/lib/kumi/ir/loop.rb +28 -0
  477. data/lib/kumi/ir/loop_definition.md +93 -0
  478. data/lib/kumi/ir/passes.rb +32 -0
  479. data/lib/kumi/ir/printer.rb +54 -0
  480. data/lib/kumi/ir/testing/snast_factory.rb +146 -0
  481. data/lib/kumi/ir/testing.rb +9 -0
  482. data/lib/kumi/ir/vec/lower.rb +131 -0
  483. data/lib/kumi/ir/vec/ops/core_ops.rb +126 -0
  484. data/lib/kumi/ir/vec/ops/node.rb +45 -0
  485. data/lib/kumi/ir/vec/ops.rb +13 -0
  486. data/lib/kumi/ir/vec/passes/axis_canonicalization.rb +57 -0
  487. data/lib/kumi/ir/vec/passes/constant_propagation.rb +110 -0
  488. data/lib/kumi/ir/vec/passes/dce.rb +52 -0
  489. data/lib/kumi/ir/vec/passes/gvn.rb +64 -0
  490. data/lib/kumi/ir/vec/passes/peephole_simplify.rb +67 -0
  491. data/lib/kumi/ir/vec/passes/stencil_detection.rb +60 -0
  492. data/lib/kumi/ir/vec/passes/support/instruction_cloner.rb +48 -0
  493. data/lib/kumi/ir/vec/passes.rb +16 -0
  494. data/lib/kumi/ir/vec/pipeline.rb +30 -0
  495. data/lib/kumi/ir/vec/validator.rb +68 -0
  496. data/lib/kumi/ir/vec.rb +66 -0
  497. data/lib/kumi/ir/vec_definition.md +102 -0
  498. data/lib/kumi/ir.rb +14 -0
  499. data/lib/kumi/schema.rb +44 -2
  500. data/lib/kumi/support/nast_printer.rb +14 -0
  501. data/lib/kumi/support/s_expression_printer.rb +9 -0
  502. data/lib/kumi/support/snast_printer.rb +6 -0
  503. data/lib/kumi/syntax/import_call.rb +11 -0
  504. data/lib/kumi/syntax/import_declaration.rb +11 -0
  505. data/lib/kumi/syntax/root.rb +2 -2
  506. data/lib/kumi/test_shared_schemas/compound.rb +21 -0
  507. data/lib/kumi/test_shared_schemas/discount.rb +19 -0
  508. data/lib/kumi/test_shared_schemas/price.rb +19 -0
  509. data/lib/kumi/test_shared_schemas/subtotal.rb +22 -0
  510. data/lib/kumi/test_shared_schemas/tax.rb +18 -0
  511. data/lib/kumi/version.rb +1 -1
  512. data/lib/kumi.rb +50 -34
  513. data/tasks/release.rake +129 -0
  514. metadata +401 -261
  515. data/CLAUDE.md +0 -45
  516. data/docs/GOLDEN_QUICK_START.md +0 -141
  517. data/golden/array_element/expected/lir_00_unoptimized.txt +0 -13
  518. data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +0 -13
  519. data/golden/array_element/expected/lir_02_inlined.txt +0 -13
  520. data/golden/array_element/expected/lir_03_cse.txt +0 -13
  521. data/golden/array_element/expected/lir_04_1_loop_fusion.txt +0 -13
  522. data/golden/array_element/expected/lir_04_loop_invcm.txt +0 -13
  523. data/golden/array_element/expected/lir_06_const_prop.txt +0 -13
  524. data/golden/array_index/expected/lir_00_unoptimized.txt +0 -41
  525. data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +0 -41
  526. data/golden/array_index/expected/lir_02_inlined.txt +0 -42
  527. data/golden/array_index/expected/lir_03_cse.txt +0 -40
  528. data/golden/array_index/expected/lir_04_1_loop_fusion.txt +0 -40
  529. data/golden/array_index/expected/lir_04_loop_invcm.txt +0 -40
  530. data/golden/array_index/expected/lir_06_const_prop.txt +0 -40
  531. data/golden/array_operations/expected/lir_00_unoptimized.txt +0 -47
  532. data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +0 -47
  533. data/golden/array_operations/expected/lir_02_inlined.txt +0 -47
  534. data/golden/array_operations/expected/lir_03_cse.txt +0 -47
  535. data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +0 -47
  536. data/golden/array_operations/expected/lir_04_loop_invcm.txt +0 -47
  537. data/golden/array_operations/expected/lir_06_const_prop.txt +0 -47
  538. data/golden/cascade_logic/expected/lir_00_unoptimized.txt +0 -29
  539. data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +0 -29
  540. data/golden/cascade_logic/expected/lir_02_inlined.txt +0 -37
  541. data/golden/cascade_logic/expected/lir_03_cse.txt +0 -30
  542. data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +0 -30
  543. data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +0 -30
  544. data/golden/cascade_logic/expected/lir_06_const_prop.txt +0 -30
  545. data/golden/chained_fusion/expected/lir_00_unoptimized.txt +0 -76
  546. data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +0 -76
  547. data/golden/chained_fusion/expected/lir_02_inlined.txt +0 -114
  548. data/golden/chained_fusion/expected/lir_03_cse.txt +0 -97
  549. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +0 -99
  550. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +0 -97
  551. data/golden/chained_fusion/expected/lir_06_const_prop.txt +0 -97
  552. data/golden/decimal_explicit/expected/lir_00_unoptimized.txt +0 -30
  553. data/golden/decimal_explicit/expected/lir_01_hoist_scalar_references.txt +0 -30
  554. data/golden/decimal_explicit/expected/lir_02_inlined.txt +0 -44
  555. data/golden/decimal_explicit/expected/lir_03_cse.txt +0 -40
  556. data/golden/decimal_explicit/expected/lir_04_1_loop_fusion.txt +0 -40
  557. data/golden/decimal_explicit/expected/lir_04_loop_invcm.txt +0 -40
  558. data/golden/decimal_explicit/expected/lir_06_const_prop.txt +0 -40
  559. data/golden/element_arrays/expected/lir_00_unoptimized.txt +0 -81
  560. data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +0 -81
  561. data/golden/element_arrays/expected/lir_02_inlined.txt +0 -85
  562. data/golden/element_arrays/expected/lir_03_cse.txt +0 -83
  563. data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +0 -83
  564. data/golden/element_arrays/expected/lir_04_loop_invcm.txt +0 -83
  565. data/golden/element_arrays/expected/lir_06_const_prop.txt +0 -83
  566. data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +0 -31
  567. data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +0 -31
  568. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +0 -51
  569. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +0 -49
  570. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +0 -49
  571. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +0 -49
  572. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +0 -49
  573. data/golden/function_overload/expected/lir_00_unoptimized.txt +0 -18
  574. data/golden/function_overload/expected/lir_01_hoist_scalar_references.txt +0 -18
  575. data/golden/function_overload/expected/lir_02_inlined.txt +0 -20
  576. data/golden/function_overload/expected/lir_03_cse.txt +0 -20
  577. data/golden/function_overload/expected/lir_04_1_loop_fusion.txt +0 -20
  578. data/golden/function_overload/expected/lir_04_loop_invcm.txt +0 -20
  579. data/golden/function_overload/expected/lir_06_const_prop.txt +0 -20
  580. data/golden/game_of_life/expected/lir_00_unoptimized.txt +0 -343
  581. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +0 -343
  582. data/golden/game_of_life/expected/lir_02_inlined.txt +0 -1918
  583. data/golden/game_of_life/expected/lir_03_cse.txt +0 -770
  584. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +0 -770
  585. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +0 -770
  586. data/golden/game_of_life/expected/lir_06_const_prop.txt +0 -770
  587. data/golden/hash_keys/expected/lir_00_unoptimized.txt +0 -18
  588. data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +0 -18
  589. data/golden/hash_keys/expected/lir_02_inlined.txt +0 -18
  590. data/golden/hash_keys/expected/lir_03_cse.txt +0 -18
  591. data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +0 -18
  592. data/golden/hash_keys/expected/lir_04_loop_invcm.txt +0 -18
  593. data/golden/hash_keys/expected/lir_06_const_prop.txt +0 -18
  594. data/golden/hash_value/expected/lir_00_unoptimized.txt +0 -30
  595. data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +0 -30
  596. data/golden/hash_value/expected/lir_02_inlined.txt +0 -36
  597. data/golden/hash_value/expected/lir_03_cse.txt +0 -33
  598. data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +0 -33
  599. data/golden/hash_value/expected/lir_04_loop_invcm.txt +0 -33
  600. data/golden/hash_value/expected/lir_06_const_prop.txt +0 -33
  601. data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +0 -87
  602. data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +0 -87
  603. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +0 -115
  604. data/golden/hierarchical_complex/expected/lir_03_cse.txt +0 -89
  605. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +0 -89
  606. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +0 -89
  607. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +0 -89
  608. data/golden/inline_rename_scope_leak/expected/lir_00_unoptimized.txt +0 -35
  609. data/golden/inline_rename_scope_leak/expected/lir_01_hoist_scalar_references.txt +0 -35
  610. data/golden/inline_rename_scope_leak/expected/lir_02_inlined.txt +0 -49
  611. data/golden/inline_rename_scope_leak/expected/lir_03_cse.txt +0 -49
  612. data/golden/inline_rename_scope_leak/expected/lir_04_1_loop_fusion.txt +0 -49
  613. data/golden/inline_rename_scope_leak/expected/lir_04_loop_invcm.txt +0 -49
  614. data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +0 -49
  615. data/golden/input_reference/expected/lir_00_unoptimized.txt +0 -39
  616. data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +0 -39
  617. data/golden/input_reference/expected/lir_02_inlined.txt +0 -39
  618. data/golden/input_reference/expected/lir_03_cse.txt +0 -39
  619. data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +0 -39
  620. data/golden/input_reference/expected/lir_04_loop_invcm.txt +0 -39
  621. data/golden/input_reference/expected/lir_06_const_prop.txt +0 -39
  622. data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +0 -53
  623. data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +0 -53
  624. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +0 -89
  625. data/golden/interleaved_fusion/expected/lir_03_cse.txt +0 -77
  626. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +0 -78
  627. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +0 -77
  628. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +0 -77
  629. data/golden/let_inline/expected/lir_00_unoptimized.txt +0 -26
  630. data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +0 -26
  631. data/golden/let_inline/expected/lir_02_inlined.txt +0 -36
  632. data/golden/let_inline/expected/lir_03_cse.txt +0 -30
  633. data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +0 -30
  634. data/golden/let_inline/expected/lir_04_loop_invcm.txt +0 -30
  635. data/golden/let_inline/expected/lir_06_const_prop.txt +0 -30
  636. data/golden/loop_fusion/expected/lir_00_unoptimized.txt +0 -43
  637. data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +0 -43
  638. data/golden/loop_fusion/expected/lir_02_inlined.txt +0 -62
  639. data/golden/loop_fusion/expected/lir_03_cse.txt +0 -57
  640. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +0 -57
  641. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +0 -57
  642. data/golden/loop_fusion/expected/lir_06_const_prop.txt +0 -57
  643. data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +0 -59
  644. data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +0 -59
  645. data/golden/min_reduce_scope/expected/lir_02_inlined.txt +0 -63
  646. data/golden/min_reduce_scope/expected/lir_03_cse.txt +0 -60
  647. data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +0 -60
  648. data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +0 -60
  649. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +0 -60
  650. data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +0 -42
  651. data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +0 -42
  652. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +0 -48
  653. data/golden/mixed_dimensions/expected/lir_03_cse.txt +0 -48
  654. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +0 -48
  655. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +0 -48
  656. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +0 -48
  657. data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +0 -75
  658. data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +0 -75
  659. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +0 -126
  660. data/golden/multirank_hoisting/expected/lir_03_cse.txt +0 -109
  661. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +0 -109
  662. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +0 -109
  663. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +0 -109
  664. data/golden/nested_hash/expected/lir_00_unoptimized.txt +0 -10
  665. data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +0 -10
  666. data/golden/nested_hash/expected/lir_02_inlined.txt +0 -10
  667. data/golden/nested_hash/expected/lir_03_cse.txt +0 -10
  668. data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +0 -10
  669. data/golden/nested_hash/expected/lir_04_loop_invcm.txt +0 -10
  670. data/golden/nested_hash/expected/lir_06_const_prop.txt +0 -10
  671. data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +0 -49
  672. data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +0 -49
  673. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +0 -80
  674. data/golden/reduction_broadcast/expected/lir_03_cse.txt +0 -68
  675. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +0 -68
  676. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +0 -68
  677. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +0 -68
  678. data/golden/roll/expected/lir_00_unoptimized.txt +0 -56
  679. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +0 -56
  680. data/golden/roll/expected/lir_02_inlined.txt +0 -56
  681. data/golden/roll/expected/lir_03_cse.txt +0 -55
  682. data/golden/roll/expected/lir_04_1_loop_fusion.txt +0 -55
  683. data/golden/roll/expected/lir_04_loop_invcm.txt +0 -55
  684. data/golden/roll/expected/lir_06_const_prop.txt +0 -55
  685. data/golden/shift/expected/lir_00_unoptimized.txt +0 -96
  686. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +0 -96
  687. data/golden/shift/expected/lir_02_inlined.txt +0 -96
  688. data/golden/shift/expected/lir_03_cse.txt +0 -90
  689. data/golden/shift/expected/lir_04_1_loop_fusion.txt +0 -90
  690. data/golden/shift/expected/lir_04_loop_invcm.txt +0 -90
  691. data/golden/shift/expected/lir_06_const_prop.txt +0 -90
  692. data/golden/shift_2d/expected/lir_00_unoptimized.txt +0 -274
  693. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +0 -274
  694. data/golden/shift_2d/expected/lir_02_inlined.txt +0 -274
  695. data/golden/shift_2d/expected/lir_03_cse.txt +0 -262
  696. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +0 -262
  697. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +0 -262
  698. data/golden/shift_2d/expected/lir_06_const_prop.txt +0 -262
  699. data/golden/simple_math/expected/lir_00_unoptimized.txt +0 -31
  700. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +0 -31
  701. data/golden/simple_math/expected/lir_02_inlined.txt +0 -31
  702. data/golden/simple_math/expected/lir_03_cse.txt +0 -31
  703. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +0 -31
  704. data/golden/simple_math/expected/lir_04_loop_invcm.txt +0 -31
  705. data/golden/simple_math/expected/lir_06_const_prop.txt +0 -31
  706. data/golden/streaming_basics/expected/lir_00_unoptimized.txt +0 -73
  707. data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +0 -73
  708. data/golden/streaming_basics/expected/lir_02_inlined.txt +0 -100
  709. data/golden/streaming_basics/expected/lir_03_cse.txt +0 -84
  710. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +0 -84
  711. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +0 -84
  712. data/golden/streaming_basics/expected/lir_06_const_prop.txt +0 -84
  713. data/golden/tuples/expected/lir_00_unoptimized.txt +0 -40
  714. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +0 -40
  715. data/golden/tuples/expected/lir_02_inlined.txt +0 -48
  716. data/golden/tuples/expected/lir_03_cse.txt +0 -48
  717. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +0 -48
  718. data/golden/tuples/expected/lir_04_loop_invcm.txt +0 -48
  719. data/golden/tuples/expected/lir_06_const_prop.txt +0 -48
  720. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +0 -41
  721. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +0 -41
  722. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +0 -62
  723. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +0 -51
  724. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +0 -51
  725. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +0 -51
  726. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +0 -51
  727. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +0 -291
  728. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +0 -291
  729. data/golden/us_tax_2024/expected/lir_02_inlined.txt +0 -1254
  730. data/golden/us_tax_2024/expected/lir_03_cse.txt +0 -626
  731. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +0 -671
  732. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +0 -626
  733. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +0 -626
  734. data/golden/with_constants/expected/lir_00_unoptimized.txt +0 -17
  735. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +0 -17
  736. data/golden/with_constants/expected/lir_02_inlined.txt +0 -17
  737. data/golden/with_constants/expected/lir_03_cse.txt +0 -17
  738. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +0 -17
  739. data/golden/with_constants/expected/lir_04_loop_invcm.txt +0 -17
  740. data/golden/with_constants/expected/lir_06_const_prop.txt +0 -17
  741. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +0 -317
  742. data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +0 -75
  743. data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +0 -103
  744. data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +0 -27
  745. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +0 -321
  746. data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +0 -85
  747. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +0 -111
  748. data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +0 -32
  749. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +0 -84
  750. data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +0 -93
  751. data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +0 -115
  752. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +0 -394
  753. data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +0 -198
  754. data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +0 -30
  755. data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +0 -121
  756. data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +0 -156
  757. data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +0 -148
  758. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +0 -407
  759. data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +0 -241
  760. data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +0 -83
  761. data/lib/kumi/core/lir/analyze.rb +0 -64
  762. data/lib/kumi/core/lir/build.rb +0 -363
  763. data/lib/kumi/core/lir/emit.rb +0 -62
  764. data/lib/kumi/core/lir/structs/instruction.rb +0 -44
  765. data/lib/kumi/core/lir/structs/literal.rb +0 -14
  766. data/lib/kumi/core/lir/structs/stamp.rb +0 -13
  767. data/lib/kumi/core/lir/support/error.rb +0 -9
  768. data/lib/kumi/core/lir/support/ids.rb +0 -34
  769. data/lib/kumi/core/lir/validate.rb +0 -74
  770. data/lib/kumi/core/lir.rb +0 -34
  771. data/lib/kumi/support/lir_printer.rb +0 -143
@@ -0,0 +1,565 @@
1
+ function state_tax:
2
+ %v1 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
3
+ %v2 = load_input [key=:state_rate, chain=[], plan_ref="state_rate"] [] -> float
4
+ %v3 = map (:v1, :v2) [fn=:core.mul:numeric] [] -> float
5
+ function local_tax:
6
+ %v4 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
7
+ %v5 = load_input [key=:local_rate, chain=[], plan_ref="local_rate"] [] -> float
8
+ %v6 = map (:v4, :v5) [fn=:core.mul:numeric] [] -> float
9
+ function taxable:
10
+ %v7 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
11
+ %v8 = axis_broadcast (:v7) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
12
+ %v9 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
13
+ %v10 = load_field (:v9) [field=:status, plan_ref="statuses.status"] [statuses] -> float
14
+ %v11 = load_field (:v10) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
15
+ %v12 = map (:v8, :v11) [fn=:core.sub] [statuses] -> float
16
+ %v13 = constant [value=0] [] -> integer
17
+ %acc0 = map (:v12, :v13) [fn=:core.max] [statuses] -> float
18
+ function lo:
19
+ %v16 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
20
+ %v17 = load_field (:v16) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
21
+ %v18 = load_field (:v17) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
22
+ %v19 = load_field (:v18) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
23
+ %v20 = load_field (:v19) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
24
+ function hi:
25
+ %v21 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
26
+ %v22 = load_field (:v21) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
27
+ %v23 = load_field (:v22) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
28
+ %v24 = load_field (:v23) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
29
+ %v25 = load_field (:v24) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
30
+ function rate:
31
+ %v26 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
32
+ %v27 = load_field (:v26) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
33
+ %v28 = load_field (:v27) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
34
+ %v29 = load_field (:v28) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
35
+ %v30 = load_field (:v29) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
36
+ function big_hi:
37
+ %v31 = constant [value=100000000000.0] [] -> float
38
+ function hi_eff:
39
+ %v40 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
40
+ %v41 = load_field (:v40) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
41
+ %v42 = load_field (:v41) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
42
+ %v43 = load_field (:v42) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
43
+ %v44 = load_field (:v43) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
44
+ %v33 = constant [value=-1] [] -> integer
45
+ %v34 = axis_broadcast (:v33) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
46
+ %v35 = map (:v44, :v34) [fn=:core.eq] [statuses, rates] -> boolean
47
+ %v36 = constant [value=100000000000.0] [] -> float
48
+ %v38 = axis_broadcast (:v36) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
49
+ %v39 = select (:v35, :v38, :v44) [statuses, rates] -> float
50
+ function amt:
51
+ %v50 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
52
+ %v51 = axis_broadcast (:v50) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
53
+ %v52 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
54
+ %v53 = load_field (:v52) [field=:status, plan_ref="statuses.status"] [statuses] -> float
55
+ %v54 = load_field (:v53) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
56
+ %v55 = map (:v51, :v54) [fn=:core.sub] [statuses] -> float
57
+ %v56 = constant [value=0] [] -> integer
58
+ %acc0 = map (:v55, :v56) [fn=:core.max] [statuses] -> float
59
+ %v41 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
60
+ %v59 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
61
+ %v60 = load_field (:v59) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
62
+ %v61 = load_field (:v60) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
63
+ %v62 = load_field (:v61) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
64
+ %v63 = load_field (:v62) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
65
+ %v43 = map (:v41, :v63) [fn=:core.sub] [statuses, rates] -> float
66
+ %v45 = axis_broadcast (:v56) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
67
+ %v68 = load_field (:v62) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
68
+ %v69 = constant [value=-1] [] -> integer
69
+ %v70 = axis_broadcast (:v69) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
70
+ %v71 = map (:v68, :v70) [fn=:core.eq] [statuses, rates] -> boolean
71
+ %v72 = constant [value=100000000000.0] [] -> float
72
+ %v78 = axis_broadcast (:v72) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
73
+ %v79 = select (:v71, :v78, :v68) [statuses, rates] -> float
74
+ %v48 = map (:v79, :v63) [fn=:core.sub] [statuses, rates] -> float
75
+ %v49 = map (:v43, :v45, :v48) [fn=:core.clamp] [statuses, rates] -> float
76
+ function fed_tax:
77
+ %v54 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
78
+ %v55 = axis_broadcast (:v54) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
79
+ %v56 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
80
+ %v57 = load_field (:v56) [field=:status, plan_ref="statuses.status"] [statuses] -> float
81
+ %v58 = load_field (:v57) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
82
+ %v59 = map (:v55, :v58) [fn=:core.sub] [statuses] -> float
83
+ %v60 = constant [value=0] [] -> integer
84
+ %acc0 = map (:v59, :v60) [fn=:core.max] [statuses] -> float
85
+ %v63 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
86
+ %v64 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
87
+ %v65 = load_field (:v64) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
88
+ %v66 = load_field (:v65) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
89
+ %v67 = load_field (:v66) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
90
+ %v68 = load_field (:v67) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
91
+ %v69 = map (:v63, :v68) [fn=:core.sub] [statuses, rates] -> float
92
+ %v71 = axis_broadcast (:v60) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
93
+ %v76 = load_field (:v67) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
94
+ %v77 = constant [value=-1] [] -> integer
95
+ %v78 = axis_broadcast (:v77) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
96
+ %v79 = map (:v76, :v78) [fn=:core.eq] [statuses, rates] -> boolean
97
+ %v80 = constant [value=100000000000.0] [] -> float
98
+ %v86 = axis_broadcast (:v80) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
99
+ %v87 = select (:v79, :v86, :v76) [statuses, rates] -> float
100
+ %v93 = map (:v87, :v68) [fn=:core.sub] [statuses, rates] -> float
101
+ %v94 = map (:v69, :v71, :v93) [fn=:core.clamp] [statuses, rates] -> float
102
+ %v99 = load_field (:v67) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
103
+ %v52 = map (:v94, :v99) [fn=:core.mul:numeric] [statuses, rates] -> float
104
+ %v53 = reduce (:v52) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
105
+ function in_br:
106
+ %v63 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
107
+ %v64 = axis_broadcast (:v63) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
108
+ %v65 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
109
+ %v66 = load_field (:v65) [field=:status, plan_ref="statuses.status"] [statuses] -> float
110
+ %v67 = load_field (:v66) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
111
+ %v68 = map (:v64, :v67) [fn=:core.sub] [statuses] -> float
112
+ %v69 = constant [value=0] [] -> integer
113
+ %acc0 = map (:v68, :v69) [fn=:core.max] [statuses] -> float
114
+ %v55 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
115
+ %v72 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
116
+ %v73 = load_field (:v72) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
117
+ %v74 = load_field (:v73) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
118
+ %v75 = load_field (:v74) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
119
+ %v76 = load_field (:v75) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
120
+ %v57 = map (:v55, :v76) [fn=:core.gte] [statuses, rates] -> boolean
121
+ %v90 = load_field (:v75) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
122
+ %v91 = constant [value=-1] [] -> integer
123
+ %v92 = axis_broadcast (:v91) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
124
+ %v93 = map (:v90, :v92) [fn=:core.eq] [statuses, rates] -> boolean
125
+ %v94 = constant [value=100000000000.0] [] -> float
126
+ %v100 = axis_broadcast (:v94) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
127
+ %v101 = select (:v93, :v100, :v90) [statuses, rates] -> float
128
+ %v61 = map (:v55, :v101) [fn=:core.lt] [statuses, rates] -> boolean
129
+ %v62 = map (:v57, :v61) [fn=:core.and] [statuses, rates] -> boolean
130
+ function fed_marg:
131
+ %v69 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
132
+ %v70 = axis_broadcast (:v69) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
133
+ %v71 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
134
+ %v72 = load_field (:v71) [field=:status, plan_ref="statuses.status"] [statuses] -> float
135
+ %v73 = load_field (:v72) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
136
+ %v74 = map (:v70, :v73) [fn=:core.sub] [statuses] -> float
137
+ %v75 = constant [value=0] [] -> integer
138
+ %acc0 = map (:v74, :v75) [fn=:core.max] [statuses] -> float
139
+ %v78 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
140
+ %v79 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
141
+ %v80 = load_field (:v79) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
142
+ %v81 = load_field (:v80) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
143
+ %v82 = load_field (:v81) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
144
+ %v83 = load_field (:v82) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
145
+ %v84 = map (:v78, :v83) [fn=:core.gte] [statuses, rates] -> boolean
146
+ %v99 = load_field (:v82) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
147
+ %v100 = constant [value=-1] [] -> integer
148
+ %v101 = axis_broadcast (:v100) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
149
+ %v102 = map (:v99, :v101) [fn=:core.eq] [statuses, rates] -> boolean
150
+ %v103 = constant [value=100000000000.0] [] -> float
151
+ %v109 = axis_broadcast (:v103) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
152
+ %v110 = select (:v102, :v109, :v99) [statuses, rates] -> float
153
+ %v111 = map (:v78, :v110) [fn=:core.lt] [statuses, rates] -> boolean
154
+ %v112 = map (:v84, :v111) [fn=:core.and] [statuses, rates] -> boolean
155
+ %v117 = load_field (:v82) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
156
+ %v66 = axis_broadcast (:v75) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
157
+ %v67 = select (:v112, :v117, :v66) [statuses, rates] -> float
158
+ %v68 = reduce (:v67) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
159
+ function fed_eff:
160
+ %v76 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
161
+ %v77 = axis_broadcast (:v76) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
162
+ %v78 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
163
+ %v79 = load_field (:v78) [field=:status, plan_ref="statuses.status"] [statuses] -> float
164
+ %v80 = load_field (:v79) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
165
+ %v81 = map (:v77, :v80) [fn=:core.sub] [statuses] -> float
166
+ %v82 = constant [value=0] [] -> integer
167
+ %acc0 = map (:v81, :v82) [fn=:core.max] [statuses] -> float
168
+ %v85 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
169
+ %v86 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
170
+ %v87 = load_field (:v86) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
171
+ %v88 = load_field (:v87) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
172
+ %v89 = load_field (:v88) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
173
+ %v90 = load_field (:v89) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
174
+ %v91 = map (:v85, :v90) [fn=:core.sub] [statuses, rates] -> float
175
+ %v93 = axis_broadcast (:v82) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
176
+ %v98 = load_field (:v89) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
177
+ %v99 = constant [value=-1] [] -> integer
178
+ %v100 = axis_broadcast (:v99) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
179
+ %v101 = map (:v98, :v100) [fn=:core.eq] [statuses, rates] -> boolean
180
+ %v102 = constant [value=100000000000.0] [] -> float
181
+ %v108 = axis_broadcast (:v102) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
182
+ %v109 = select (:v101, :v108, :v98) [statuses, rates] -> float
183
+ %v115 = map (:v109, :v90) [fn=:core.sub] [statuses, rates] -> float
184
+ %v116 = map (:v91, :v93, :v115) [fn=:core.clamp] [statuses, rates] -> float
185
+ %v121 = load_field (:v89) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
186
+ %v122 = map (:v116, :v121) [fn=:core.mul:numeric] [statuses, rates] -> float
187
+ %v123 = reduce (:v122) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
188
+ %v71 = constant [value=1.0] [] -> float
189
+ %acc1 = map (:v76, :v71) [fn=:core.max] [] -> float
190
+ %v74 = axis_broadcast (:acc1) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
191
+ %v75 = map (:v123, :v74) [fn=:core.div] [statuses] -> float
192
+ function ss_wage_base:
193
+ %v76 = constant [value=168600.0] [] -> float
194
+ function ss_rate:
195
+ %v77 = constant [value=0.062] [] -> float
196
+ function ss_tax:
197
+ %v78 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
198
+ %v79 = constant [value=168600.0] [] -> float
199
+ %acc0 = map (:v78, :v79) [fn=:core.min] [] -> float
200
+ %v82 = constant [value=0.062] [] -> float
201
+ %v83 = map (:acc0, :v82) [fn=:core.mul:numeric] [] -> float
202
+ function med_base_rate:
203
+ %v84 = constant [value=0.0145] [] -> float
204
+ function med_tax:
205
+ %v85 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
206
+ %v86 = constant [value=0.0145] [] -> float
207
+ %v87 = map (:v85, :v86) [fn=:core.mul:numeric] [] -> float
208
+ function addl_med_rate:
209
+ %v88 = constant [value=0.009] [] -> float
210
+ function addl_med_tax:
211
+ %v89 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
212
+ %v90 = axis_broadcast (:v89) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
213
+ %v91 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
214
+ %v92 = load_field (:v91) [field=:status, plan_ref="statuses.status"] [statuses] -> float
215
+ %v93 = load_field (:v92) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
216
+ %v94 = map (:v90, :v93) [fn=:core.sub] [statuses] -> float
217
+ %v95 = constant [value=0] [] -> integer
218
+ %acc0 = map (:v94, :v95) [fn=:core.max] [statuses] -> float
219
+ %v98 = constant [value=0.009] [] -> float
220
+ %v99 = axis_broadcast (:v98) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
221
+ %v100 = map (:acc0, :v99) [fn=:core.mul:numeric] [statuses] -> float
222
+ function fica_tax:
223
+ %v107 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
224
+ %v108 = constant [value=168600.0] [] -> float
225
+ %acc0 = map (:v107, :v108) [fn=:core.min] [] -> float
226
+ %v111 = constant [value=0.062] [] -> float
227
+ %v112 = map (:acc0, :v111) [fn=:core.mul:numeric] [] -> float
228
+ %v114 = constant [value=0.0145] [] -> float
229
+ %v115 = map (:v107, :v114) [fn=:core.mul:numeric] [] -> float
230
+ %v103 = map (:v112, :v115) [fn=:core.add] [] -> float
231
+ %v104 = axis_broadcast (:v103) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
232
+ %v117 = axis_broadcast (:v107) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
233
+ %v118 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
234
+ %v119 = load_field (:v118) [field=:status, plan_ref="statuses.status"] [statuses] -> float
235
+ %v120 = load_field (:v119) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
236
+ %v121 = map (:v117, :v120) [fn=:core.sub] [statuses] -> float
237
+ %v122 = constant [value=0] [] -> integer
238
+ %acc1 = map (:v121, :v122) [fn=:core.max] [statuses] -> float
239
+ %v125 = constant [value=0.009] [] -> float
240
+ %v126 = axis_broadcast (:v125) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
241
+ %v127 = map (:acc1, :v126) [fn=:core.mul:numeric] [statuses] -> float
242
+ %v106 = map (:v104, :v127) [fn=:core.add] [statuses] -> float
243
+ function fica_eff:
244
+ %v114 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
245
+ %v115 = constant [value=168600.0] [] -> float
246
+ %acc0 = map (:v114, :v115) [fn=:core.min] [] -> float
247
+ %v118 = constant [value=0.062] [] -> float
248
+ %v119 = map (:acc0, :v118) [fn=:core.mul:numeric] [] -> float
249
+ %v121 = constant [value=0.0145] [] -> float
250
+ %v122 = map (:v114, :v121) [fn=:core.mul:numeric] [] -> float
251
+ %v123 = map (:v119, :v122) [fn=:core.add] [] -> float
252
+ %v124 = axis_broadcast (:v123) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
253
+ %v126 = axis_broadcast (:v114) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
254
+ %v127 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
255
+ %v128 = load_field (:v127) [field=:status, plan_ref="statuses.status"] [statuses] -> float
256
+ %v129 = load_field (:v128) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
257
+ %v130 = map (:v126, :v129) [fn=:core.sub] [statuses] -> float
258
+ %v131 = constant [value=0] [] -> integer
259
+ %acc1 = map (:v130, :v131) [fn=:core.max] [statuses] -> float
260
+ %v134 = constant [value=0.009] [] -> float
261
+ %v135 = axis_broadcast (:v134) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
262
+ %v136 = map (:acc1, :v135) [fn=:core.mul:numeric] [statuses] -> float
263
+ %v137 = map (:v124, :v136) [fn=:core.add] [statuses] -> float
264
+ %v109 = constant [value=1.0] [] -> float
265
+ %acc2 = map (:v114, :v109) [fn=:core.max] [] -> float
266
+ %v112 = axis_broadcast (:acc2) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
267
+ %v113 = map (:v137, :v112) [fn=:core.div] [statuses] -> float
268
+ function total_tax:
269
+ %v123 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
270
+ %v124 = axis_broadcast (:v123) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
271
+ %v125 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
272
+ %v126 = load_field (:v125) [field=:status, plan_ref="statuses.status"] [statuses] -> float
273
+ %v127 = load_field (:v126) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
274
+ %v128 = map (:v124, :v127) [fn=:core.sub] [statuses] -> float
275
+ %v129 = constant [value=0] [] -> integer
276
+ %acc0 = map (:v128, :v129) [fn=:core.max] [statuses] -> float
277
+ %v132 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
278
+ %v133 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
279
+ %v134 = load_field (:v133) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
280
+ %v135 = load_field (:v134) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
281
+ %v136 = load_field (:v135) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
282
+ %v137 = load_field (:v136) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
283
+ %v138 = map (:v132, :v137) [fn=:core.sub] [statuses, rates] -> float
284
+ %v140 = axis_broadcast (:v129) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
285
+ %v145 = load_field (:v136) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
286
+ %v146 = constant [value=-1] [] -> integer
287
+ %v147 = axis_broadcast (:v146) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
288
+ %v148 = map (:v145, :v147) [fn=:core.eq] [statuses, rates] -> boolean
289
+ %v149 = constant [value=100000000000.0] [] -> float
290
+ %v155 = axis_broadcast (:v149) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
291
+ %v156 = select (:v148, :v155, :v145) [statuses, rates] -> float
292
+ %v162 = map (:v156, :v137) [fn=:core.sub] [statuses, rates] -> float
293
+ %v163 = map (:v138, :v140, :v162) [fn=:core.clamp] [statuses, rates] -> float
294
+ %v168 = load_field (:v136) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
295
+ %v169 = map (:v163, :v168) [fn=:core.mul:numeric] [statuses, rates] -> float
296
+ %v170 = reduce (:v169) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
297
+ %v172 = constant [value=168600.0] [] -> float
298
+ %acc1 = map (:v123, :v172) [fn=:core.min] [] -> float
299
+ %v175 = constant [value=0.062] [] -> float
300
+ %v176 = map (:acc1, :v175) [fn=:core.mul:numeric] [] -> float
301
+ %v178 = constant [value=0.0145] [] -> float
302
+ %v179 = map (:v123, :v178) [fn=:core.mul:numeric] [] -> float
303
+ %v180 = map (:v176, :v179) [fn=:core.add] [] -> float
304
+ %v181 = axis_broadcast (:v180) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
305
+ %v186 = load_field (:v126) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
306
+ %v187 = map (:v124, :v186) [fn=:core.sub] [statuses] -> float
307
+ %acc2 = map (:v187, :v129) [fn=:core.max] [statuses] -> float
308
+ %v191 = constant [value=0.009] [] -> float
309
+ %v192 = axis_broadcast (:v191) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
310
+ %v193 = map (:acc2, :v192) [fn=:core.mul:numeric] [statuses] -> float
311
+ %v194 = map (:v181, :v193) [fn=:core.add] [statuses] -> float
312
+ %v116 = map (:v170, :v194) [fn=:core.add] [statuses] -> float
313
+ %v196 = load_input [key=:state_rate, chain=[], plan_ref="state_rate"] [] -> float
314
+ %v197 = map (:v123, :v196) [fn=:core.mul:numeric] [] -> float
315
+ %v118 = axis_broadcast (:v197) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
316
+ %v119 = map (:v116, :v118) [fn=:core.add] [statuses] -> float
317
+ %v199 = load_input [key=:local_rate, chain=[], plan_ref="local_rate"] [] -> float
318
+ %v200 = map (:v123, :v199) [fn=:core.mul:numeric] [] -> float
319
+ %v121 = axis_broadcast (:v200) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
320
+ %v122 = map (:v119, :v121) [fn=:core.add] [statuses] -> float
321
+ function total_eff:
322
+ %v130 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
323
+ %v131 = axis_broadcast (:v130) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
324
+ %v132 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
325
+ %v133 = load_field (:v132) [field=:status, plan_ref="statuses.status"] [statuses] -> float
326
+ %v134 = load_field (:v133) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
327
+ %v135 = map (:v131, :v134) [fn=:core.sub] [statuses] -> float
328
+ %v136 = constant [value=0] [] -> integer
329
+ %acc0 = map (:v135, :v136) [fn=:core.max] [statuses] -> float
330
+ %v139 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
331
+ %v140 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
332
+ %v141 = load_field (:v140) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
333
+ %v142 = load_field (:v141) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
334
+ %v143 = load_field (:v142) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
335
+ %v144 = load_field (:v143) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
336
+ %v145 = map (:v139, :v144) [fn=:core.sub] [statuses, rates] -> float
337
+ %v147 = axis_broadcast (:v136) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
338
+ %v152 = load_field (:v143) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
339
+ %v153 = constant [value=-1] [] -> integer
340
+ %v154 = axis_broadcast (:v153) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
341
+ %v155 = map (:v152, :v154) [fn=:core.eq] [statuses, rates] -> boolean
342
+ %v156 = constant [value=100000000000.0] [] -> float
343
+ %v162 = axis_broadcast (:v156) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
344
+ %v163 = select (:v155, :v162, :v152) [statuses, rates] -> float
345
+ %v169 = map (:v163, :v144) [fn=:core.sub] [statuses, rates] -> float
346
+ %v170 = map (:v145, :v147, :v169) [fn=:core.clamp] [statuses, rates] -> float
347
+ %v175 = load_field (:v143) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
348
+ %v176 = map (:v170, :v175) [fn=:core.mul:numeric] [statuses, rates] -> float
349
+ %v177 = reduce (:v176) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
350
+ %v179 = constant [value=168600.0] [] -> float
351
+ %acc1 = map (:v130, :v179) [fn=:core.min] [] -> float
352
+ %v182 = constant [value=0.062] [] -> float
353
+ %v183 = map (:acc1, :v182) [fn=:core.mul:numeric] [] -> float
354
+ %v185 = constant [value=0.0145] [] -> float
355
+ %v186 = map (:v130, :v185) [fn=:core.mul:numeric] [] -> float
356
+ %v187 = map (:v183, :v186) [fn=:core.add] [] -> float
357
+ %v188 = axis_broadcast (:v187) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
358
+ %v193 = load_field (:v133) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
359
+ %v194 = map (:v131, :v193) [fn=:core.sub] [statuses] -> float
360
+ %acc2 = map (:v194, :v136) [fn=:core.max] [statuses] -> float
361
+ %v198 = constant [value=0.009] [] -> float
362
+ %v199 = axis_broadcast (:v198) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
363
+ %v200 = map (:acc2, :v199) [fn=:core.mul:numeric] [statuses] -> float
364
+ %v201 = map (:v188, :v200) [fn=:core.add] [statuses] -> float
365
+ %v202 = map (:v177, :v201) [fn=:core.add] [statuses] -> float
366
+ %v204 = load_input [key=:state_rate, chain=[], plan_ref="state_rate"] [] -> float
367
+ %v205 = map (:v130, :v204) [fn=:core.mul:numeric] [] -> float
368
+ %v206 = axis_broadcast (:v205) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
369
+ %v207 = map (:v202, :v206) [fn=:core.add] [statuses] -> float
370
+ %v209 = load_input [key=:local_rate, chain=[], plan_ref="local_rate"] [] -> float
371
+ %v210 = map (:v130, :v209) [fn=:core.mul:numeric] [] -> float
372
+ %v211 = axis_broadcast (:v210) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
373
+ %v212 = map (:v207, :v211) [fn=:core.add] [statuses] -> float
374
+ %v125 = constant [value=1.0] [] -> float
375
+ %acc3 = map (:v130, :v125) [fn=:core.max] [] -> float
376
+ %v128 = axis_broadcast (:acc3) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
377
+ %v129 = map (:v212, :v128) [fn=:core.div] [statuses] -> float
378
+ function after_tax:
379
+ %v130 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
380
+ %v131 = axis_broadcast (:v130) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
381
+ %v136 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
382
+ %v137 = load_field (:v136) [field=:status, plan_ref="statuses.status"] [statuses] -> float
383
+ %v138 = load_field (:v137) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
384
+ %v139 = map (:v131, :v138) [fn=:core.sub] [statuses] -> float
385
+ %v140 = constant [value=0] [] -> integer
386
+ %acc0 = map (:v139, :v140) [fn=:core.max] [statuses] -> float
387
+ %v143 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
388
+ %v144 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
389
+ %v145 = load_field (:v144) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
390
+ %v146 = load_field (:v145) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
391
+ %v147 = load_field (:v146) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
392
+ %v148 = load_field (:v147) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
393
+ %v149 = map (:v143, :v148) [fn=:core.sub] [statuses, rates] -> float
394
+ %v151 = axis_broadcast (:v140) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
395
+ %v156 = load_field (:v147) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
396
+ %v157 = constant [value=-1] [] -> integer
397
+ %v158 = axis_broadcast (:v157) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
398
+ %v159 = map (:v156, :v158) [fn=:core.eq] [statuses, rates] -> boolean
399
+ %v160 = constant [value=100000000000.0] [] -> float
400
+ %v166 = axis_broadcast (:v160) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
401
+ %v167 = select (:v159, :v166, :v156) [statuses, rates] -> float
402
+ %v173 = map (:v167, :v148) [fn=:core.sub] [statuses, rates] -> float
403
+ %v174 = map (:v149, :v151, :v173) [fn=:core.clamp] [statuses, rates] -> float
404
+ %v179 = load_field (:v147) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
405
+ %v180 = map (:v174, :v179) [fn=:core.mul:numeric] [statuses, rates] -> float
406
+ %v181 = reduce (:v180) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
407
+ %v183 = constant [value=168600.0] [] -> float
408
+ %acc1 = map (:v130, :v183) [fn=:core.min] [] -> float
409
+ %v186 = constant [value=0.062] [] -> float
410
+ %v187 = map (:acc1, :v186) [fn=:core.mul:numeric] [] -> float
411
+ %v189 = constant [value=0.0145] [] -> float
412
+ %v190 = map (:v130, :v189) [fn=:core.mul:numeric] [] -> float
413
+ %v191 = map (:v187, :v190) [fn=:core.add] [] -> float
414
+ %v192 = axis_broadcast (:v191) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
415
+ %v197 = load_field (:v137) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
416
+ %v198 = map (:v131, :v197) [fn=:core.sub] [statuses] -> float
417
+ %acc2 = map (:v198, :v140) [fn=:core.max] [statuses] -> float
418
+ %v202 = constant [value=0.009] [] -> float
419
+ %v203 = axis_broadcast (:v202) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
420
+ %v204 = map (:acc2, :v203) [fn=:core.mul:numeric] [statuses] -> float
421
+ %v205 = map (:v192, :v204) [fn=:core.add] [statuses] -> float
422
+ %v206 = map (:v181, :v205) [fn=:core.add] [statuses] -> float
423
+ %v208 = load_input [key=:state_rate, chain=[], plan_ref="state_rate"] [] -> float
424
+ %v209 = map (:v130, :v208) [fn=:core.mul:numeric] [] -> float
425
+ %v210 = axis_broadcast (:v209) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
426
+ %v211 = map (:v206, :v210) [fn=:core.add] [statuses] -> float
427
+ %v213 = load_input [key=:local_rate, chain=[], plan_ref="local_rate"] [] -> float
428
+ %v214 = map (:v130, :v213) [fn=:core.mul:numeric] [] -> float
429
+ %v215 = axis_broadcast (:v214) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
430
+ %v216 = map (:v211, :v215) [fn=:core.add] [statuses] -> float
431
+ %v133 = map (:v131, :v216) [fn=:core.sub] [statuses] -> float
432
+ function take_home:
433
+ %v138 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
434
+ %v139 = axis_broadcast (:v138) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
435
+ %v142 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
436
+ %v143 = load_field (:v142) [field=:status, plan_ref="statuses.status"] [statuses] -> float
437
+ %v144 = load_field (:v143) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
438
+ %v145 = map (:v139, :v144) [fn=:core.sub] [statuses] -> float
439
+ %v146 = constant [value=0] [] -> integer
440
+ %acc0 = map (:v145, :v146) [fn=:core.max] [statuses] -> float
441
+ %v149 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
442
+ %v150 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
443
+ %v151 = load_field (:v150) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
444
+ %v152 = load_field (:v151) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
445
+ %v153 = load_field (:v152) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
446
+ %v154 = load_field (:v153) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
447
+ %v155 = map (:v149, :v154) [fn=:core.sub] [statuses, rates] -> float
448
+ %v157 = axis_broadcast (:v146) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
449
+ %v162 = load_field (:v153) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
450
+ %v163 = constant [value=-1] [] -> integer
451
+ %v164 = axis_broadcast (:v163) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
452
+ %v165 = map (:v162, :v164) [fn=:core.eq] [statuses, rates] -> boolean
453
+ %v166 = constant [value=100000000000.0] [] -> float
454
+ %v172 = axis_broadcast (:v166) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
455
+ %v173 = select (:v165, :v172, :v162) [statuses, rates] -> float
456
+ %v179 = map (:v173, :v154) [fn=:core.sub] [statuses, rates] -> float
457
+ %v180 = map (:v155, :v157, :v179) [fn=:core.clamp] [statuses, rates] -> float
458
+ %v185 = load_field (:v153) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
459
+ %v186 = map (:v180, :v185) [fn=:core.mul:numeric] [statuses, rates] -> float
460
+ %v187 = reduce (:v186) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
461
+ %v189 = constant [value=168600.0] [] -> float
462
+ %acc1 = map (:v138, :v189) [fn=:core.min] [] -> float
463
+ %v192 = constant [value=0.062] [] -> float
464
+ %v193 = map (:acc1, :v192) [fn=:core.mul:numeric] [] -> float
465
+ %v195 = constant [value=0.0145] [] -> float
466
+ %v196 = map (:v138, :v195) [fn=:core.mul:numeric] [] -> float
467
+ %v197 = map (:v193, :v196) [fn=:core.add] [] -> float
468
+ %v198 = axis_broadcast (:v197) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
469
+ %v203 = load_field (:v143) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
470
+ %v204 = map (:v139, :v203) [fn=:core.sub] [statuses] -> float
471
+ %acc2 = map (:v204, :v146) [fn=:core.max] [statuses] -> float
472
+ %v208 = constant [value=0.009] [] -> float
473
+ %v209 = axis_broadcast (:v208) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
474
+ %v210 = map (:acc2, :v209) [fn=:core.mul:numeric] [statuses] -> float
475
+ %v211 = map (:v198, :v210) [fn=:core.add] [statuses] -> float
476
+ %v212 = map (:v187, :v211) [fn=:core.add] [statuses] -> float
477
+ %v214 = load_input [key=:state_rate, chain=[], plan_ref="state_rate"] [] -> float
478
+ %v215 = map (:v138, :v214) [fn=:core.mul:numeric] [] -> float
479
+ %v216 = axis_broadcast (:v215) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
480
+ %v217 = map (:v212, :v216) [fn=:core.add] [statuses] -> float
481
+ %v219 = load_input [key=:local_rate, chain=[], plan_ref="local_rate"] [] -> float
482
+ %v220 = map (:v138, :v219) [fn=:core.mul:numeric] [] -> float
483
+ %v221 = axis_broadcast (:v220) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
484
+ %v222 = map (:v217, :v221) [fn=:core.add] [statuses] -> float
485
+ %v223 = map (:v139, :v222) [fn=:core.sub] [statuses] -> float
486
+ %v135 = load_input [key=:retirement_contrib, chain=[], plan_ref="retirement_contrib"] [] -> float
487
+ %v136 = axis_broadcast (:v135) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
488
+ %v137 = map (:v223, :v136) [fn=:core.sub] [statuses] -> float
489
+ function summary:
490
+ %v138 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> string
491
+ %v139 = load_field (:v138) [field=:status, plan_ref="statuses.status"] [statuses] -> string
492
+ %v140 = load_field (:v139) [field=:name, plan_ref="statuses.status.name"] [statuses] -> string
493
+ %v163 = load_input [key=:income, chain=[], plan_ref="income"] [] -> float
494
+ %v164 = axis_broadcast (:v163) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
495
+ %v165 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses] -> float
496
+ %v166 = load_field (:v165) [field=:status, plan_ref="statuses.status"] [statuses] -> float
497
+ %v167 = load_field (:v166) [field=:std, plan_ref="statuses.status.std"] [statuses] -> float
498
+ %v168 = map (:v164, :v167) [fn=:core.sub] [statuses] -> float
499
+ %v169 = constant [value=0] [] -> integer
500
+ %acc0 = map (:v168, :v169) [fn=:core.max] [statuses] -> float
501
+ %v172 = axis_broadcast (:acc0) [from_axes=[:statuses], to_axes=[:statuses, :rates]] [statuses, rates] -> float
502
+ %v173 = load_input [key=:statuses, chain=[], plan_ref="statuses"] [statuses, rates] -> float
503
+ %v174 = load_field (:v173) [field=:status, plan_ref="statuses.status"] [statuses, rates] -> float
504
+ %v175 = load_field (:v174) [field=:rates, plan_ref="statuses.status.rates"] [statuses, rates] -> float
505
+ %v176 = load_field (:v175) [field=:bracket, plan_ref="statuses.status.rates.bracket"] [statuses, rates] -> float
506
+ %v177 = load_field (:v176) [field=:lo, plan_ref="statuses.status.rates.bracket.lo"] [statuses, rates] -> float
507
+ %v178 = map (:v172, :v177) [fn=:core.gte] [statuses, rates] -> boolean
508
+ %v193 = load_field (:v176) [field=:hi, plan_ref="statuses.status.rates.bracket.hi"] [statuses, rates] -> float
509
+ %v194 = constant [value=-1] [] -> integer
510
+ %v195 = axis_broadcast (:v194) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
511
+ %v196 = map (:v193, :v195) [fn=:core.eq] [statuses, rates] -> boolean
512
+ %v197 = constant [value=100000000000.0] [] -> float
513
+ %v203 = axis_broadcast (:v197) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> float
514
+ %v204 = select (:v196, :v203, :v193) [statuses, rates] -> float
515
+ %v205 = map (:v172, :v204) [fn=:core.lt] [statuses, rates] -> boolean
516
+ %v206 = map (:v178, :v205) [fn=:core.and] [statuses, rates] -> boolean
517
+ %v211 = load_field (:v176) [field=:rate, plan_ref="statuses.status.rates.bracket.rate"] [statuses, rates] -> float
518
+ %v213 = axis_broadcast (:v169) [from_axes=[], to_axes=[:statuses, :rates]] [statuses, rates] -> integer
519
+ %v214 = select (:v206, :v211, :v213) [statuses, rates] -> float
520
+ %v215 = reduce (:v214) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
521
+ %v231 = map (:v172, :v177) [fn=:core.sub] [statuses, rates] -> float
522
+ %v255 = map (:v204, :v177) [fn=:core.sub] [statuses, rates] -> float
523
+ %v256 = map (:v231, :v213, :v255) [fn=:core.clamp] [statuses, rates] -> float
524
+ %v262 = map (:v256, :v211) [fn=:core.mul:numeric] [statuses, rates] -> float
525
+ %v263 = reduce (:v262) [fn=:agg.sum, over_axes=[:rates]] [statuses] -> float
526
+ %v265 = constant [value=1.0] [] -> float
527
+ %acc3 = map (:v163, :v265) [fn=:core.max] [] -> float
528
+ %v268 = axis_broadcast (:acc3) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
529
+ %v269 = map (:v263, :v268) [fn=:core.div] [statuses] -> float
530
+ %v144 = make_object (:v215, :v269, :v263) [keys=[:marginal, :effective, :tax]] [statuses] -> hash
531
+ %v319 = constant [value=168600.0] [] -> float
532
+ %acc5 = map (:v163, :v319) [fn=:core.min] [] -> float
533
+ %v322 = constant [value=0.062] [] -> float
534
+ %v323 = map (:acc5, :v322) [fn=:core.mul:numeric] [] -> float
535
+ %v325 = constant [value=0.0145] [] -> float
536
+ %v326 = map (:v163, :v325) [fn=:core.mul:numeric] [] -> float
537
+ %v327 = map (:v323, :v326) [fn=:core.add] [] -> float
538
+ %v328 = axis_broadcast (:v327) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
539
+ %v333 = load_field (:v166) [field=:addl_threshold, plan_ref="statuses.status.addl_threshold"] [statuses] -> float
540
+ %v334 = map (:v164, :v333) [fn=:core.sub] [statuses] -> float
541
+ %acc6 = map (:v334, :v169) [fn=:core.max] [statuses] -> float
542
+ %v338 = constant [value=0.009] [] -> float
543
+ %v339 = axis_broadcast (:v338) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
544
+ %v340 = map (:acc6, :v339) [fn=:core.mul:numeric] [statuses] -> float
545
+ %v341 = map (:v328, :v340) [fn=:core.add] [statuses] -> float
546
+ %v347 = map (:v341, :v268) [fn=:core.div] [statuses] -> float
547
+ %v147 = make_object (:v347, :v341) [keys=[:effective, :tax]] [statuses] -> hash
548
+ %v148 = load_input [key=:state_rate, chain=[], plan_ref="state_rate"] [] -> float
549
+ %v374 = map (:v163, :v148) [fn=:core.mul:numeric] [] -> float
550
+ %v151 = make_object (:v148, :v148, :v374) [keys=[:marginal, :effective, :tax]] [] -> hash
551
+ %v152 = load_input [key=:local_rate, chain=[], plan_ref="local_rate"] [] -> float
552
+ %v377 = map (:v163, :v152) [fn=:core.mul:numeric] [] -> float
553
+ %v155 = make_object (:v152, :v152, :v377) [keys=[:marginal, :effective, :tax]] [] -> hash
554
+ %v450 = map (:v263, :v341) [fn=:core.add] [statuses] -> float
555
+ %v454 = axis_broadcast (:v374) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
556
+ %v455 = map (:v450, :v454) [fn=:core.add] [statuses] -> float
557
+ %v459 = axis_broadcast (:v377) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
558
+ %v460 = map (:v455, :v459) [fn=:core.add] [statuses] -> float
559
+ %v466 = map (:v460, :v268) [fn=:core.div] [statuses] -> float
560
+ %v158 = make_object (:v466, :v460) [keys=[:effective, :tax]] [statuses] -> hash
561
+ %v635 = map (:v164, :v460) [fn=:core.sub] [statuses] -> float
562
+ %v160 = load_input [key=:retirement_contrib, chain=[], plan_ref="retirement_contrib"] [] -> float
563
+ %v723 = axis_broadcast (:v160) [from_axes=[], to_axes=[:statuses]] [statuses] -> float
564
+ %v724 = map (:v635, :v723) [fn=:core.sub] [statuses] -> float
565
+ %v162 = make_object (:v140, :v144, :v147, :v151, :v155, :v158, :v635, :v160, :v724) [keys=[:filing_status, :federal, :fica, :state, :local, :total, :after_tax, :retirement_contrib, :take_home]] [statuses] -> hash