kumi 0.0.30 → 0.0.33

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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -1
  3. data/README.md +31 -99
  4. data/data/kernels/ruby/core/arithmetic.yaml +2 -2
  5. data/docs/COMPOSED_SCHEMAS.md +137 -0
  6. data/docs/SCHEMA_IMPORTS.md +275 -0
  7. data/docs/SYNTAX.md +48 -0
  8. data/golden/array_element/expected/schema_ruby.rb +2 -27
  9. data/golden/array_index/expected/nast.txt +6 -6
  10. data/golden/array_index/expected/schema_ruby.rb +4 -31
  11. data/golden/array_operations/expected/lir_06_const_prop.txt +4 -8
  12. data/golden/array_operations/expected/schema_javascript.mjs +4 -8
  13. data/golden/array_operations/expected/schema_ruby.rb +10 -43
  14. data/golden/cascade_logic/expected/lir_06_const_prop.txt +7 -14
  15. data/golden/cascade_logic/expected/schema_javascript.mjs +7 -14
  16. data/golden/cascade_logic/expected/schema_ruby.rb +11 -45
  17. data/golden/chained_fusion/expected/lir_06_const_prop.txt +8 -18
  18. data/golden/chained_fusion/expected/schema_javascript.mjs +8 -18
  19. data/golden/chained_fusion/expected/schema_ruby.rb +14 -53
  20. data/golden/decimal_explicit/expected/schema_ruby.rb +4 -31
  21. data/golden/element_arrays/expected/lir_06_const_prop.txt +5 -11
  22. data/golden/element_arrays/expected/schema_javascript.mjs +5 -11
  23. data/golden/element_arrays/expected/schema_ruby.rb +13 -50
  24. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +4 -31
  25. data/golden/example_xpto/expected/ast.txt +23 -0
  26. data/golden/example_xpto/expected/input_plan.txt +1 -0
  27. data/golden/example_xpto/expected/lir_00_unoptimized.txt +16 -0
  28. data/golden/example_xpto/expected/lir_01_hoist_scalar_references.txt +16 -0
  29. data/golden/example_xpto/expected/lir_02_inlined.txt +16 -0
  30. data/golden/example_xpto/expected/lir_03_cse.txt +16 -0
  31. data/golden/example_xpto/expected/lir_04_1_loop_fusion.txt +16 -0
  32. data/golden/example_xpto/expected/lir_04_loop_invcm.txt +16 -0
  33. data/golden/example_xpto/expected/lir_06_const_prop.txt +13 -0
  34. data/golden/example_xpto/expected/nast.txt +17 -0
  35. data/golden/example_xpto/expected/schema_javascript.mjs +13 -0
  36. data/golden/example_xpto/expected/schema_ruby.rb +13 -0
  37. data/golden/example_xpto/expected/snast.txt +17 -0
  38. data/golden/example_xpto/expected.json +4 -0
  39. data/golden/example_xpto/input.json +3 -0
  40. data/golden/example_xpto/schema.kumi +8 -0
  41. data/golden/function_overload/expected/schema_ruby.rb +2 -27
  42. data/golden/game_of_life/expected/lir_06_const_prop.txt +236 -287
  43. data/golden/game_of_life/expected/schema_javascript.mjs +32 -39
  44. data/golden/game_of_life/expected/schema_ruby.rb +34 -66
  45. data/golden/hash_keys/expected/lir_06_const_prop.txt +4 -10
  46. data/golden/hash_keys/expected/schema_javascript.mjs +6 -12
  47. data/golden/hash_keys/expected/schema_ruby.rb +8 -39
  48. data/golden/hash_value/expected/lir_06_const_prop.txt +3 -6
  49. data/golden/hash_value/expected/schema_javascript.mjs +3 -6
  50. data/golden/hash_value/expected/schema_ruby.rb +7 -37
  51. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +9 -18
  52. data/golden/hierarchical_complex/expected/schema_javascript.mjs +9 -18
  53. data/golden/hierarchical_complex/expected/schema_ruby.rb +14 -51
  54. data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +2 -6
  55. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +2 -6
  56. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +7 -39
  57. data/golden/input_reference/expected/schema_ruby.rb +6 -35
  58. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +6 -14
  59. data/golden/interleaved_fusion/expected/schema_javascript.mjs +6 -14
  60. data/golden/interleaved_fusion/expected/schema_ruby.rb +11 -47
  61. data/golden/let_inline/expected/lir_06_const_prop.txt +1 -2
  62. data/golden/let_inline/expected/schema_javascript.mjs +1 -2
  63. data/golden/let_inline/expected/schema_ruby.rb +3 -29
  64. data/golden/loop_fusion/expected/lir_06_const_prop.txt +4 -10
  65. data/golden/loop_fusion/expected/schema_javascript.mjs +4 -10
  66. data/golden/loop_fusion/expected/schema_ruby.rb +8 -41
  67. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +3 -6
  68. data/golden/min_reduce_scope/expected/schema_javascript.mjs +3 -6
  69. data/golden/min_reduce_scope/expected/schema_ruby.rb +8 -39
  70. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +1 -2
  71. data/golden/mixed_dimensions/expected/schema_javascript.mjs +1 -2
  72. data/golden/mixed_dimensions/expected/schema_ruby.rb +5 -33
  73. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +9 -18
  74. data/golden/multirank_hoisting/expected/schema_javascript.mjs +9 -18
  75. data/golden/multirank_hoisting/expected/schema_ruby.rb +16 -55
  76. data/golden/nested_hash/expected/lir_06_const_prop.txt +1 -2
  77. data/golden/nested_hash/expected/schema_javascript.mjs +1 -2
  78. data/golden/nested_hash/expected/schema_ruby.rb +3 -29
  79. data/golden/reduction_broadcast/expected/schema_ruby.rb +5 -33
  80. data/golden/roll/expected/lir_06_const_prop.txt +8 -15
  81. data/golden/roll/expected/schema_javascript.mjs +8 -15
  82. data/golden/roll/expected/schema_ruby.rb +13 -48
  83. data/golden/schema_imports_broadcasting_with_imports/expected/ast.txt +26 -0
  84. data/golden/schema_imports_broadcasting_with_imports/expected/input_plan.txt +5 -0
  85. data/golden/schema_imports_broadcasting_with_imports/expected/lir_00_unoptimized.txt +20 -0
  86. data/golden/schema_imports_broadcasting_with_imports/expected/lir_01_hoist_scalar_references.txt +20 -0
  87. data/golden/schema_imports_broadcasting_with_imports/expected/lir_02_inlined.txt +22 -0
  88. data/golden/schema_imports_broadcasting_with_imports/expected/lir_03_cse.txt +21 -0
  89. data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_1_loop_fusion.txt +21 -0
  90. data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_loop_invcm.txt +21 -0
  91. data/golden/schema_imports_broadcasting_with_imports/expected/lir_06_const_prop.txt +21 -0
  92. data/golden/schema_imports_broadcasting_with_imports/expected/nast.txt +12 -0
  93. data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +22 -0
  94. data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +24 -0
  95. data/golden/schema_imports_broadcasting_with_imports/expected/snast.txt +12 -0
  96. data/golden/schema_imports_broadcasting_with_imports/expected.json +4 -0
  97. data/golden/schema_imports_broadcasting_with_imports/input.json +7 -0
  98. data/golden/schema_imports_broadcasting_with_imports/schema.kumi +14 -0
  99. data/golden/schema_imports_complex_order_calc/expected/ast.txt +82 -0
  100. data/golden/schema_imports_complex_order_calc/expected/input_plan.txt +16 -0
  101. data/golden/schema_imports_complex_order_calc/expected/lir_00_unoptimized.txt +94 -0
  102. data/golden/schema_imports_complex_order_calc/expected/lir_01_hoist_scalar_references.txt +94 -0
  103. data/golden/schema_imports_complex_order_calc/expected/lir_02_inlined.txt +187 -0
  104. data/golden/schema_imports_complex_order_calc/expected/lir_03_cse.txt +131 -0
  105. data/golden/schema_imports_complex_order_calc/expected/lir_04_1_loop_fusion.txt +131 -0
  106. data/golden/schema_imports_complex_order_calc/expected/lir_04_loop_invcm.txt +131 -0
  107. data/golden/schema_imports_complex_order_calc/expected/lir_06_const_prop.txt +131 -0
  108. data/golden/schema_imports_complex_order_calc/expected/nast.txt +56 -0
  109. data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +147 -0
  110. data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +149 -0
  111. data/golden/schema_imports_complex_order_calc/expected/snast.txt +56 -0
  112. data/golden/schema_imports_complex_order_calc/expected.json +12 -0
  113. data/golden/schema_imports_complex_order_calc/input.json +20 -0
  114. data/golden/schema_imports_complex_order_calc/schema.kumi +33 -0
  115. data/golden/schema_imports_composed_order/expected/ast.txt +33 -0
  116. data/golden/schema_imports_composed_order/expected/input_plan.txt +3 -0
  117. data/golden/schema_imports_composed_order/expected/lir_00_unoptimized.txt +25 -0
  118. data/golden/schema_imports_composed_order/expected/lir_01_hoist_scalar_references.txt +25 -0
  119. data/golden/schema_imports_composed_order/expected/lir_02_inlined.txt +33 -0
  120. data/golden/schema_imports_composed_order/expected/lir_03_cse.txt +33 -0
  121. data/golden/schema_imports_composed_order/expected/lir_04_1_loop_fusion.txt +33 -0
  122. data/golden/schema_imports_composed_order/expected/lir_04_loop_invcm.txt +33 -0
  123. data/golden/schema_imports_composed_order/expected/lir_06_const_prop.txt +33 -0
  124. data/golden/schema_imports_composed_order/expected/nast.txt +25 -0
  125. data/golden/schema_imports_composed_order/expected/schema_javascript.mjs +35 -0
  126. data/golden/schema_imports_composed_order/expected/schema_ruby.rb +33 -0
  127. data/golden/schema_imports_composed_order/expected/snast.txt +25 -0
  128. data/golden/schema_imports_composed_order/expected.json +6 -0
  129. data/golden/schema_imports_composed_order/input.json +5 -0
  130. data/golden/schema_imports_composed_order/schema.kumi +15 -0
  131. data/golden/schema_imports_discount_with_tax/expected/ast.txt +37 -0
  132. data/golden/schema_imports_discount_with_tax/expected/input_plan.txt +2 -0
  133. data/golden/schema_imports_discount_with_tax/expected/lir_00_unoptimized.txt +30 -0
  134. data/golden/schema_imports_discount_with_tax/expected/lir_01_hoist_scalar_references.txt +30 -0
  135. data/golden/schema_imports_discount_with_tax/expected/lir_02_inlined.txt +37 -0
  136. data/golden/schema_imports_discount_with_tax/expected/lir_03_cse.txt +34 -0
  137. data/golden/schema_imports_discount_with_tax/expected/lir_04_1_loop_fusion.txt +34 -0
  138. data/golden/schema_imports_discount_with_tax/expected/lir_04_loop_invcm.txt +34 -0
  139. data/golden/schema_imports_discount_with_tax/expected/lir_06_const_prop.txt +34 -0
  140. data/golden/schema_imports_discount_with_tax/expected/nast.txt +30 -0
  141. data/golden/schema_imports_discount_with_tax/expected/schema_javascript.mjs +37 -0
  142. data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +34 -0
  143. data/golden/schema_imports_discount_with_tax/expected/snast.txt +30 -0
  144. data/golden/schema_imports_discount_with_tax/expected.json +7 -0
  145. data/golden/schema_imports_discount_with_tax/input.json +4 -0
  146. data/golden/schema_imports_discount_with_tax/schema.kumi +15 -0
  147. data/golden/schema_imports_line_items/expected/ast.txt +35 -0
  148. data/golden/schema_imports_line_items/expected/input_plan.txt +8 -0
  149. data/golden/schema_imports_line_items/expected/lir_00_unoptimized.txt +19 -0
  150. data/golden/schema_imports_line_items/expected/lir_01_hoist_scalar_references.txt +19 -0
  151. data/golden/schema_imports_line_items/expected/lir_02_inlined.txt +24 -0
  152. data/golden/schema_imports_line_items/expected/lir_03_cse.txt +22 -0
  153. data/golden/schema_imports_line_items/expected/lir_04_1_loop_fusion.txt +22 -0
  154. data/golden/schema_imports_line_items/expected/lir_04_loop_invcm.txt +22 -0
  155. data/golden/schema_imports_line_items/expected/lir_06_const_prop.txt +22 -0
  156. data/golden/schema_imports_line_items/expected/nast.txt +19 -0
  157. data/golden/schema_imports_line_items/expected/schema_javascript.mjs +23 -0
  158. data/golden/schema_imports_line_items/expected/schema_ruby.rb +22 -0
  159. data/golden/schema_imports_line_items/expected/snast.txt +19 -0
  160. data/golden/schema_imports_line_items/expected.json +5 -0
  161. data/golden/schema_imports_line_items/input.json +13 -0
  162. data/golden/schema_imports_line_items/schema.kumi +17 -0
  163. data/golden/schema_imports_multiple/expected/ast.txt +35 -0
  164. data/golden/schema_imports_multiple/expected/input_plan.txt +2 -0
  165. data/golden/schema_imports_multiple/expected/lir_00_unoptimized.txt +29 -0
  166. data/golden/schema_imports_multiple/expected/lir_01_hoist_scalar_references.txt +29 -0
  167. data/golden/schema_imports_multiple/expected/lir_02_inlined.txt +41 -0
  168. data/golden/schema_imports_multiple/expected/lir_03_cse.txt +37 -0
  169. data/golden/schema_imports_multiple/expected/lir_04_1_loop_fusion.txt +37 -0
  170. data/golden/schema_imports_multiple/expected/lir_04_loop_invcm.txt +37 -0
  171. data/golden/schema_imports_multiple/expected/lir_06_const_prop.txt +37 -0
  172. data/golden/schema_imports_multiple/expected/nast.txt +28 -0
  173. data/golden/schema_imports_multiple/expected/schema_javascript.mjs +40 -0
  174. data/golden/schema_imports_multiple/expected/schema_ruby.rb +37 -0
  175. data/golden/schema_imports_multiple/expected/snast.txt +28 -0
  176. data/golden/schema_imports_multiple/expected.json +7 -0
  177. data/golden/schema_imports_multiple/input.json +4 -0
  178. data/golden/schema_imports_multiple/schema.kumi +15 -0
  179. data/golden/schema_imports_nested_expressions/expected/ast.txt +31 -0
  180. data/golden/schema_imports_nested_expressions/expected/input_plan.txt +3 -0
  181. data/golden/schema_imports_nested_expressions/expected/lir_00_unoptimized.txt +22 -0
  182. data/golden/schema_imports_nested_expressions/expected/lir_01_hoist_scalar_references.txt +22 -0
  183. data/golden/schema_imports_nested_expressions/expected/lir_02_inlined.txt +32 -0
  184. data/golden/schema_imports_nested_expressions/expected/lir_03_cse.txt +32 -0
  185. data/golden/schema_imports_nested_expressions/expected/lir_04_1_loop_fusion.txt +32 -0
  186. data/golden/schema_imports_nested_expressions/expected/lir_04_loop_invcm.txt +32 -0
  187. data/golden/schema_imports_nested_expressions/expected/lir_06_const_prop.txt +28 -0
  188. data/golden/schema_imports_nested_expressions/expected/nast.txt +23 -0
  189. data/golden/schema_imports_nested_expressions/expected/schema_javascript.mjs +29 -0
  190. data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +28 -0
  191. data/golden/schema_imports_nested_expressions/expected/snast.txt +23 -0
  192. data/golden/schema_imports_nested_expressions/expected.json +5 -0
  193. data/golden/schema_imports_nested_expressions/input.json +5 -0
  194. data/golden/schema_imports_nested_expressions/schema.kumi +13 -0
  195. data/golden/schema_imports_nested_with_reductions/expected/ast.txt +47 -0
  196. data/golden/schema_imports_nested_with_reductions/expected/input_plan.txt +12 -0
  197. data/golden/schema_imports_nested_with_reductions/expected/lir_00_unoptimized.txt +31 -0
  198. data/golden/schema_imports_nested_with_reductions/expected/lir_01_hoist_scalar_references.txt +31 -0
  199. data/golden/schema_imports_nested_with_reductions/expected/lir_02_inlined.txt +58 -0
  200. data/golden/schema_imports_nested_with_reductions/expected/lir_03_cse.txt +49 -0
  201. data/golden/schema_imports_nested_with_reductions/expected/lir_04_1_loop_fusion.txt +51 -0
  202. data/golden/schema_imports_nested_with_reductions/expected/lir_04_loop_invcm.txt +49 -0
  203. data/golden/schema_imports_nested_with_reductions/expected/lir_06_const_prop.txt +49 -0
  204. data/golden/schema_imports_nested_with_reductions/expected/nast.txt +23 -0
  205. data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +49 -0
  206. data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +52 -0
  207. data/golden/schema_imports_nested_with_reductions/expected/snast.txt +23 -0
  208. data/golden/schema_imports_nested_with_reductions/expected.json +6 -0
  209. data/golden/schema_imports_nested_with_reductions/input.json +16 -0
  210. data/golden/schema_imports_nested_with_reductions/schema.kumi +23 -0
  211. data/golden/schema_imports_with_imports/expected/ast.txt +19 -0
  212. data/golden/schema_imports_with_imports/expected/input_plan.txt +1 -0
  213. data/golden/schema_imports_with_imports/expected/lir_00_unoptimized.txt +13 -0
  214. data/golden/schema_imports_with_imports/expected/lir_01_hoist_scalar_references.txt +13 -0
  215. data/golden/schema_imports_with_imports/expected/lir_02_inlined.txt +14 -0
  216. data/golden/schema_imports_with_imports/expected/lir_03_cse.txt +13 -0
  217. data/golden/schema_imports_with_imports/expected/lir_04_1_loop_fusion.txt +13 -0
  218. data/golden/schema_imports_with_imports/expected/lir_04_loop_invcm.txt +13 -0
  219. data/golden/schema_imports_with_imports/expected/lir_06_const_prop.txt +13 -0
  220. data/golden/schema_imports_with_imports/expected/nast.txt +13 -0
  221. data/golden/schema_imports_with_imports/expected/schema_javascript.mjs +13 -0
  222. data/golden/schema_imports_with_imports/expected/schema_ruby.rb +13 -0
  223. data/golden/schema_imports_with_imports/expected/snast.txt +13 -0
  224. data/golden/schema_imports_with_imports/expected.json +4 -0
  225. data/golden/schema_imports_with_imports/input.json +3 -0
  226. data/golden/schema_imports_with_imports/schema.kumi +10 -0
  227. data/golden/shift/expected/lir_06_const_prop.txt +18 -30
  228. data/golden/shift/expected/schema_javascript.mjs +18 -30
  229. data/golden/shift/expected/schema_ruby.rb +25 -67
  230. data/golden/shift_2d/expected/lir_06_const_prop.txt +36 -60
  231. data/golden/shift_2d/expected/schema_javascript.mjs +36 -60
  232. data/golden/shift_2d/expected/schema_ruby.rb +49 -109
  233. data/golden/simple_math/expected/lir_06_const_prop.txt +3 -6
  234. data/golden/simple_math/expected/schema_javascript.mjs +3 -6
  235. data/golden/simple_math/expected/schema_ruby.rb +8 -39
  236. data/golden/streaming_basics/expected/lir_06_const_prop.txt +6 -12
  237. data/golden/streaming_basics/expected/schema_javascript.mjs +6 -12
  238. data/golden/streaming_basics/expected/schema_ruby.rb +14 -51
  239. data/golden/tuples/expected/lir_06_const_prop.txt +5 -22
  240. data/golden/tuples/expected/schema_javascript.mjs +5 -22
  241. data/golden/tuples/expected/schema_ruby.rb +11 -57
  242. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +4 -8
  243. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +4 -8
  244. data/golden/tuples_and_arrays/expected/schema_ruby.rb +9 -41
  245. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +94 -171
  246. data/golden/us_tax_2024/expected/schema_javascript.mjs +13 -21
  247. data/golden/us_tax_2024/expected/schema_ruby.rb +15 -48
  248. data/golden/with_constants/expected/lir_06_const_prop.txt +3 -8
  249. data/golden/with_constants/expected/schema_javascript.mjs +3 -8
  250. data/golden/with_constants/expected/schema_ruby.rb +5 -35
  251. data/lib/kumi/analyzer.rb +8 -7
  252. data/lib/kumi/configuration.rb +7 -6
  253. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +1 -1
  254. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +1 -1
  255. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +20 -0
  256. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +16 -7
  257. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +3 -35
  258. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +6 -0
  259. data/lib/kumi/core/analyzer/passes/import_analysis_pass.rb +90 -0
  260. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +77 -36
  261. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +26 -11
  262. data/lib/kumi/core/analyzer/passes/name_indexer.rb +20 -2
  263. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +44 -0
  264. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +30 -0
  265. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -1
  266. data/lib/kumi/core/analyzer/passes/snast_pass.rb +15 -0
  267. data/lib/kumi/core/lir/build.rb +27 -0
  268. data/lib/kumi/core/lir/peephole.rb +164 -0
  269. data/lib/kumi/core/nast.rb +16 -0
  270. data/lib/kumi/core/ruby_parser/build_context.rb +3 -1
  271. data/lib/kumi/core/ruby_parser/parser.rb +1 -1
  272. data/lib/kumi/core/ruby_parser/schema_builder.rb +33 -3
  273. data/lib/kumi/dev/golden/result.rb +9 -3
  274. data/lib/kumi/dev/golden/runtime_test.rb +16 -1
  275. data/lib/kumi/dev/golden.rb +18 -20
  276. data/lib/kumi/dev/golden_schema_modules.rb +8 -0
  277. data/lib/kumi/dev/golden_schema_wrapper.rb +116 -0
  278. data/lib/kumi/dev/support/kumi_runner.mjs +18 -0
  279. data/lib/kumi/schema.rb +44 -2
  280. data/lib/kumi/support/lir_printer.rb +21 -5
  281. data/lib/kumi/support/nast_printer.rb +11 -0
  282. data/lib/kumi/support/s_expression_printer.rb +9 -0
  283. data/lib/kumi/support/snast_printer.rb +6 -0
  284. data/lib/kumi/syntax/import_call.rb +11 -0
  285. data/lib/kumi/syntax/import_declaration.rb +11 -0
  286. data/lib/kumi/syntax/root.rb +2 -2
  287. data/lib/kumi/test_shared_schemas/compound.rb +21 -0
  288. data/lib/kumi/test_shared_schemas/discount.rb +19 -0
  289. data/lib/kumi/test_shared_schemas/price.rb +19 -0
  290. data/lib/kumi/test_shared_schemas/subtotal.rb +22 -0
  291. data/lib/kumi/test_shared_schemas/tax.rb +18 -0
  292. data/lib/kumi/version.rb +1 -1
  293. data/lib/kumi.rb +19 -4
  294. metadata +176 -3
@@ -14,11 +14,10 @@
14
14
  (Declaration taxable
15
15
  %t7 = load_input "statuses" :: array
16
16
  %t10 = load_input "income" :: float
17
- %t13 = const 0 :: integer
18
17
  loop statuses id=L1 in %t7 as el=%statuses_el_8, idx=%statuses_i_9
19
18
  %t11 = load_field statuses_el_8["std"] :: float
20
19
  %t12 = call core.sub(%t10, %t11) :: float
21
- %t14 = make_tuple(%t12, %t13) :: tuple<float, integer>
20
+ %t14 = make_tuple(%t12, %__immediate_placeholder__) :: tuple<float, integer>
22
21
  %t15 = fold %t14 fn="agg.max" :: float
23
22
  yield %t15
24
23
  end_loop
@@ -54,19 +53,16 @@
54
53
  end_loop
55
54
  )
56
55
  (Declaration big_hi
57
- %t37 = const 100000000000.0 :: float
58
- yield %t37
56
+ yield %__immediate_placeholder__
59
57
  )
60
58
  (Declaration hi_eff
61
59
  %t38 = load_input "statuses" :: array
62
- %t45 = const -1 :: integer
63
- %t47 = const 100000000000.0 :: float
64
60
  loop statuses id=L8 in %t38 as el=%statuses_el_39, idx=%statuses_i_40
65
61
  %t41 = load_field statuses_el_39["rates"] :: any
66
62
  loop rates id=L9 in %t41 as el=%rates_el_42, idx=%rates_i_43
67
63
  %t209 = load_field rates_el_42["hi"] :: float
68
- %t46 = call core.eq(%t209, %t45) :: boolean
69
- %t49 = select %t46, %t47, %t209 :: float
64
+ %t46 = call core.eq(%t209, -1) :: boolean
65
+ %t49 = select %t46, 100000000000.0, %t209 :: float
70
66
  yield %t49
71
67
  end_loop
72
68
  end_loop
@@ -74,23 +70,20 @@
74
70
  (Declaration amt
75
71
  %t50 = load_input "statuses" :: array
76
72
  %t214 = load_input "income" :: float
77
- %t217 = const 0 :: integer
78
- %t226 = const -1 :: integer
79
- %t228 = const 100000000000.0 :: float
80
73
  loop statuses id=L10 in %t50 as el=%statuses_el_51, idx=%statuses_i_52
81
74
  %t215 = load_field statuses_el_51["std"] :: float
82
75
  %t53 = load_field statuses_el_51["rates"] :: any
83
76
  %t216 = call core.sub(%t214, %t215) :: float
84
- %t218 = make_tuple(%t216, %t217) :: tuple<float, integer>
77
+ %t218 = make_tuple(%t216, %__immediate_placeholder__) :: tuple<float, integer>
85
78
  %t219 = fold %t218 fn="agg.max" :: float
86
79
  loop rates id=L11 in %t53 as el=%rates_el_54, idx=%rates_i_55
87
80
  %t222 = load_field rates_el_54["lo"] :: float
88
81
  %t58 = call core.sub(%t219, %t222) :: float
89
82
  %t233 = load_field rates_el_54["hi"] :: float
90
- %t227 = call core.eq(%t233, %t226) :: boolean
91
- %t230 = select %t227, %t228, %t233 :: float
83
+ %t227 = call core.eq(%t233, -1) :: boolean
84
+ %t230 = select %t227, 100000000000.0, %t233 :: float
92
85
  %t62 = call core.sub(%t230, %t222) :: float
93
- %t63 = call core.clamp(%t58, %t217, %t62) :: float
86
+ %t63 = call core.clamp(%t58, 0, %t62) :: float
94
87
  yield %t63
95
88
  end_loop
96
89
  end_loop
@@ -98,24 +91,21 @@
98
91
  (Declaration fed_tax
99
92
  %t64 = load_input "statuses" :: array
100
93
  %t251 = load_input "income" :: float
101
- %t254 = const 0 :: integer
102
- %t263 = const -1 :: integer
103
- %t265 = const 100000000000.0 :: float
104
94
  loop statuses id=L12 in %t64 as el=%statuses_el_65, idx=%statuses_i_66
105
95
  %t252 = load_field statuses_el_65["std"] :: float
106
96
  %acc_67 = decl_acc :: float
107
97
  %t68 = load_field statuses_el_65["rates"] :: any
108
98
  %t253 = call core.sub(%t251, %t252) :: float
109
- %t255 = make_tuple(%t253, %t254) :: tuple<float, integer>
99
+ %t255 = make_tuple(%t253, %__immediate_placeholder__) :: tuple<float, integer>
110
100
  %t256 = fold %t255 fn="agg.max" :: float
111
101
  loop rates id=L13 in %t68 as el=%rates_el_69, idx=%rates_i_70
112
102
  %t259 = load_field rates_el_69["lo"] :: float
113
103
  %t244 = call core.sub(%t256, %t259) :: float
114
104
  %t270 = load_field rates_el_69["hi"] :: float
115
- %t264 = call core.eq(%t270, %t263) :: boolean
116
- %t267 = select %t264, %t265, %t270 :: float
105
+ %t264 = call core.eq(%t270, -1) :: boolean
106
+ %t267 = select %t264, 100000000000.0, %t270 :: float
117
107
  %t248 = call core.sub(%t267, %t259) :: float
118
- %t249 = call core.clamp(%t244, %t254, %t248) :: float
108
+ %t249 = call core.clamp(%t244, 0, %t248) :: float
119
109
  %t279 = load_field rates_el_69["rate"] :: float
120
110
  %t73 = call core.mul:numeric(%t249, %t279) :: float
121
111
  %acc_67 = acc_add agg.sum(%acc_67, %t73) :: float
@@ -127,21 +117,18 @@
127
117
  (Declaration in_br
128
118
  %t75 = load_input "statuses" :: array
129
119
  %t281 = load_input "income" :: float
130
- %t284 = const 0 :: integer
131
- %t300 = const -1 :: integer
132
- %t302 = const 100000000000.0 :: float
133
120
  loop statuses id=L14 in %t75 as el=%statuses_el_76, idx=%statuses_i_77
134
121
  %t282 = load_field statuses_el_76["std"] :: float
135
122
  %t78 = load_field statuses_el_76["rates"] :: any
136
123
  %t283 = call core.sub(%t281, %t282) :: float
137
- %t285 = make_tuple(%t283, %t284) :: tuple<float, integer>
124
+ %t285 = make_tuple(%t283, %__immediate_placeholder__) :: tuple<float, integer>
138
125
  %t286 = fold %t285 fn="agg.max" :: float
139
126
  loop rates id=L15 in %t78 as el=%rates_el_79, idx=%rates_i_80
140
127
  %t289 = load_field rates_el_79["lo"] :: float
141
128
  %t83 = call core.gte(%t286, %t289) :: boolean
142
129
  %t307 = load_field rates_el_79["hi"] :: float
143
- %t301 = call core.eq(%t307, %t300) :: boolean
144
- %t304 = select %t301, %t302, %t307 :: float
130
+ %t301 = call core.eq(%t307, -1) :: boolean
131
+ %t304 = select %t301, 100000000000.0, %t307 :: float
145
132
  %t86 = call core.lt(%t286, %t304) :: boolean
146
133
  %t87 = call core.and(%t83, %t86) :: boolean
147
134
  yield %t87
@@ -151,26 +138,23 @@
151
138
  (Declaration fed_marg
152
139
  %t88 = load_input "statuses" :: array
153
140
  %t321 = load_input "income" :: float
154
- %t324 = const 0 :: integer
155
- %t340 = const -1 :: integer
156
- %t342 = const 100000000000.0 :: float
157
141
  loop statuses id=L16 in %t88 as el=%statuses_el_89, idx=%statuses_i_90
158
142
  %t322 = load_field statuses_el_89["std"] :: float
159
143
  %acc_91 = decl_acc :: float
160
144
  %t92 = load_field statuses_el_89["rates"] :: any
161
145
  %t323 = call core.sub(%t321, %t322) :: float
162
- %t325 = make_tuple(%t323, %t324) :: tuple<float, integer>
146
+ %t325 = make_tuple(%t323, %__immediate_placeholder__) :: tuple<float, integer>
163
147
  %t326 = fold %t325 fn="agg.max" :: float
164
148
  loop rates id=L17 in %t92 as el=%rates_el_93, idx=%rates_i_94
165
149
  %t329 = load_field rates_el_93["lo"] :: float
166
150
  %t315 = call core.gte(%t326, %t329) :: boolean
167
151
  %t347 = load_field rates_el_93["hi"] :: float
168
- %t341 = call core.eq(%t347, %t340) :: boolean
169
- %t344 = select %t341, %t342, %t347 :: float
152
+ %t341 = call core.eq(%t347, -1) :: boolean
153
+ %t344 = select %t341, 100000000000.0, %t347 :: float
170
154
  %t318 = call core.lt(%t326, %t344) :: boolean
171
155
  %t319 = call core.and(%t315, %t318) :: boolean
172
156
  %t353 = load_field rates_el_93["rate"] :: float
173
- %t98 = select %t319, %t353, %t324 :: float
157
+ %t98 = select %t319, %t353, 0 :: float
174
158
  %acc_91 = acc_add agg.sum(%acc_91, %t98) :: float
175
159
  end_loop
176
160
  %t99 = acc_load %acc_91 :: float
@@ -180,27 +164,23 @@
180
164
  (Declaration fed_eff
181
165
  %t100 = load_input "statuses" :: array
182
166
  %t375 = load_input "income" :: float
183
- %t378 = const 0 :: integer
184
- %t105 = const 1.0 :: float
185
- %t387 = const -1 :: integer
186
- %t389 = const 100000000000.0 :: float
187
- %t106 = make_tuple(%t375, %t105) :: tuple<float, float>
167
+ %t106 = make_tuple(%t375, %__immediate_placeholder__) :: tuple<float, float>
188
168
  %t107 = fold %t106 fn="agg.max" :: float
189
169
  loop statuses id=L18 in %t100 as el=%statuses_el_101, idx=%statuses_i_102
190
170
  %t376 = load_field statuses_el_101["std"] :: float
191
171
  %acc356 = decl_acc :: float
192
172
  %t357 = load_field statuses_el_101["rates"] :: any
193
173
  %t377 = call core.sub(%t375, %t376) :: float
194
- %t379 = make_tuple(%t377, %t378) :: tuple<float, integer>
174
+ %t379 = make_tuple(%t377, %__immediate_placeholder__) :: tuple<float, integer>
195
175
  %t380 = fold %t379 fn="agg.max" :: float
196
176
  loop rates id=L27 in %t357 as el=%t358, idx=%t359
197
177
  %t383 = load_field t358["lo"] :: float
198
178
  %t368 = call core.sub(%t380, %t383) :: float
199
179
  %t394 = load_field t358["hi"] :: float
200
- %t388 = call core.eq(%t394, %t387) :: boolean
201
- %t391 = select %t388, %t389, %t394 :: float
180
+ %t388 = call core.eq(%t394, -1) :: boolean
181
+ %t391 = select %t388, 100000000000.0, %t394 :: float
202
182
  %t372 = call core.sub(%t391, %t383) :: float
203
- %t373 = call core.clamp(%t368, %t378, %t372) :: float
183
+ %t373 = call core.clamp(%t368, 0, %t372) :: float
204
184
  %t403 = load_field t358["rate"] :: float
205
185
  %t362 = call core.mul:numeric(%t373, %t403) :: float
206
186
  %acc356 = acc_add agg.sum(%acc356, %t362) :: float
@@ -211,95 +191,75 @@
211
191
  end_loop
212
192
  )
213
193
  (Declaration ss_wage_base
214
- %t109 = const 168600.0 :: float
215
- yield %t109
194
+ yield %__immediate_placeholder__
216
195
  )
217
196
  (Declaration ss_rate
218
- %t110 = const 0.062 :: float
219
- yield %t110
197
+ yield %__immediate_placeholder__
220
198
  )
221
199
  (Declaration ss_tax
222
200
  %t111 = load_input "income" :: float
223
- %t112 = const 168600.0 :: float
224
- %t113 = make_tuple(%t111, %t112) :: tuple<float, float>
201
+ %t113 = make_tuple(%t111, %__immediate_placeholder__) :: tuple<float, float>
225
202
  %t114 = fold %t113 fn="agg.min" :: float
226
- %t115 = const 0.062 :: float
227
- %t116 = call core.mul:numeric(%t114, %t115) :: float
203
+ %t116 = call core.mul:numeric(%t114, 0.062) :: float
228
204
  yield %t116
229
205
  )
230
206
  (Declaration med_base_rate
231
- %t117 = const 0.0145 :: float
232
- yield %t117
207
+ yield %__immediate_placeholder__
233
208
  )
234
209
  (Declaration med_tax
235
210
  %t118 = load_input "income" :: float
236
- %t119 = const 0.0145 :: float
237
- %t120 = call core.mul:numeric(%t118, %t119) :: float
211
+ %t120 = call core.mul:numeric(%t118, 0.0145) :: float
238
212
  yield %t120
239
213
  )
240
214
  (Declaration addl_med_rate
241
- %t121 = const 0.009 :: float
242
- yield %t121
215
+ yield %__immediate_placeholder__
243
216
  )
244
217
  (Declaration addl_med_tax
245
218
  %t122 = load_input "statuses" :: array
246
219
  %t125 = load_input "income" :: float
247
- %t128 = const 0 :: integer
248
- %t131 = const 0.009 :: float
249
220
  loop statuses id=L19 in %t122 as el=%statuses_el_123, idx=%statuses_i_124
250
221
  %t126 = load_field statuses_el_123["addl_threshold"] :: float
251
222
  %t127 = call core.sub(%t125, %t126) :: float
252
- %t129 = make_tuple(%t127, %t128) :: tuple<float, integer>
223
+ %t129 = make_tuple(%t127, %__immediate_placeholder__) :: tuple<float, integer>
253
224
  %t130 = fold %t129 fn="agg.max" :: float
254
- %t132 = call core.mul:numeric(%t130, %t131) :: float
225
+ %t132 = call core.mul:numeric(%t130, 0.009) :: float
255
226
  yield %t132
256
227
  end_loop
257
228
  )
258
229
  (Declaration fica_tax
259
230
  %t133 = load_input "statuses" :: array
260
231
  %t404 = load_input "income" :: float
261
- %t405 = const 168600.0 :: float
262
- %t406 = make_tuple(%t404, %t405) :: tuple<float, float>
232
+ %t406 = make_tuple(%t404, %__immediate_placeholder__) :: tuple<float, float>
263
233
  %t407 = fold %t406 fn="agg.min" :: float
264
- %t408 = const 0.062 :: float
265
- %t409 = call core.mul:numeric(%t407, %t408) :: float
266
- %t411 = const 0.0145 :: float
267
- %t412 = call core.mul:numeric(%t404, %t411) :: float
234
+ %t409 = call core.mul:numeric(%t407, 0.062) :: float
235
+ %t412 = call core.mul:numeric(%t404, 0.0145) :: float
268
236
  %t138 = call core.add(%t409, %t412) :: float
269
- %t417 = const 0 :: integer
270
- %t420 = const 0.009 :: float
271
237
  loop statuses id=L20 in %t133 as el=%statuses_el_134, idx=%statuses_i_135
272
238
  %t415 = load_field statuses_el_134["addl_threshold"] :: float
273
239
  %t416 = call core.sub(%t404, %t415) :: float
274
- %t418 = make_tuple(%t416, %t417) :: tuple<float, integer>
240
+ %t418 = make_tuple(%t416, %__immediate_placeholder__) :: tuple<float, integer>
275
241
  %t419 = fold %t418 fn="agg.max" :: float
276
- %t421 = call core.mul:numeric(%t419, %t420) :: float
242
+ %t421 = call core.mul:numeric(%t419, 0.009) :: float
277
243
  %t140 = call core.add(%t138, %t421) :: float
278
244
  yield %t140
279
245
  end_loop
280
246
  )
281
247
  (Declaration fica_eff
282
248
  %t428 = load_input "income" :: float
283
- %t429 = const 168600.0 :: float
284
- %t430 = make_tuple(%t428, %t429) :: tuple<float, float>
249
+ %t430 = make_tuple(%t428, %__immediate_placeholder__) :: tuple<float, float>
285
250
  %t431 = fold %t430 fn="agg.min" :: float
286
- %t432 = const 0.062 :: float
287
- %t433 = call core.mul:numeric(%t431, %t432) :: float
288
- %t435 = const 0.0145 :: float
289
- %t436 = call core.mul:numeric(%t428, %t435) :: float
251
+ %t433 = call core.mul:numeric(%t431, 0.062) :: float
252
+ %t436 = call core.mul:numeric(%t428, 0.0145) :: float
290
253
  %t141 = load_input "statuses" :: array
291
254
  %t425 = call core.add(%t433, %t436) :: float
292
- %t441 = const 0 :: integer
293
- %t444 = const 0.009 :: float
294
- %t146 = const 1.0 :: float
295
- %t147 = make_tuple(%t428, %t146) :: tuple<float, float>
255
+ %t147 = make_tuple(%t428, %__immediate_placeholder__) :: tuple<float, float>
296
256
  %t148 = fold %t147 fn="agg.max" :: float
297
257
  loop statuses id=L21 in %t141 as el=%statuses_el_142, idx=%statuses_i_143
298
258
  %t439 = load_field statuses_el_142["addl_threshold"] :: float
299
259
  %t440 = call core.sub(%t428, %t439) :: float
300
- %t442 = make_tuple(%t440, %t441) :: tuple<float, integer>
260
+ %t442 = make_tuple(%t440, %__immediate_placeholder__) :: tuple<float, integer>
301
261
  %t443 = fold %t442 fn="agg.max" :: float
302
- %t445 = call core.mul:numeric(%t443, %t444) :: float
262
+ %t445 = call core.mul:numeric(%t443, 0.009) :: float
303
263
  %t427 = call core.add(%t425, %t445) :: float
304
264
  %t149 = call core.div(%t427, %t148) :: float
305
265
  yield %t149
@@ -307,23 +267,16 @@
307
267
  )
308
268
  (Declaration total_tax
309
269
  %t508 = load_input "income" :: float
310
- %t509 = const 168600.0 :: float
311
- %t510 = make_tuple(%t508, %t509) :: tuple<float, float>
270
+ %t510 = make_tuple(%t508, %__immediate_placeholder__) :: tuple<float, float>
312
271
  %t511 = fold %t510 fn="agg.min" :: float
313
- %t512 = const 0.062 :: float
314
- %t513 = call core.mul:numeric(%t511, %t512) :: float
315
- %t515 = const 0.0145 :: float
316
- %t516 = call core.mul:numeric(%t508, %t515) :: float
272
+ %t513 = call core.mul:numeric(%t511, 0.062) :: float
273
+ %t516 = call core.mul:numeric(%t508, 0.0145) :: float
317
274
  %t150 = load_input "statuses" :: array
318
275
  %t447 = load_input "state_rate" :: float
319
276
  %t448 = call core.mul:numeric(%t508, %t447) :: float
320
277
  %t450 = load_input "local_rate" :: float
321
278
  %t451 = call core.mul:numeric(%t508, %t450) :: float
322
- %t476 = const 0 :: integer
323
279
  %t505 = call core.add(%t513, %t516) :: float
324
- %t524 = const 0.009 :: float
325
- %t485 = const -1 :: integer
326
- %t487 = const 100000000000.0 :: float
327
280
  loop statuses id=L22 in %t150 as el=%statuses_el_151, idx=%statuses_i_152
328
281
  %t474 = load_field statuses_el_151["std"] :: float
329
282
  %acc454 = decl_acc :: float
@@ -331,23 +284,23 @@
331
284
  %t519 = load_field statuses_el_151["addl_threshold"] :: float
332
285
  %t475 = call core.sub(%t508, %t474) :: float
333
286
  %t520 = call core.sub(%t508, %t519) :: float
334
- %t477 = make_tuple(%t475, %t476) :: tuple<float, integer>
335
- %t522 = make_tuple(%t520, %t476) :: tuple<float, integer>
287
+ %t477 = make_tuple(%t475, %__immediate_placeholder__) :: tuple<float, integer>
288
+ %t522 = make_tuple(%t520, %__immediate_placeholder__) :: tuple<float, integer>
336
289
  %t478 = fold %t477 fn="agg.max" :: float
337
290
  %t523 = fold %t522 fn="agg.max" :: float
338
291
  loop rates id=L28 in %t455 as el=%t456, idx=%t457
339
292
  %t481 = load_field t456["lo"] :: float
340
293
  %t466 = call core.sub(%t478, %t481) :: float
341
294
  %t492 = load_field t456["hi"] :: float
342
- %t486 = call core.eq(%t492, %t485) :: boolean
343
- %t489 = select %t486, %t487, %t492 :: float
295
+ %t486 = call core.eq(%t492, -1) :: boolean
296
+ %t489 = select %t486, 100000000000.0, %t492 :: float
344
297
  %t470 = call core.sub(%t489, %t481) :: float
345
- %t471 = call core.clamp(%t466, %t476, %t470) :: float
298
+ %t471 = call core.clamp(%t466, 0, %t470) :: float
346
299
  %t501 = load_field t456["rate"] :: float
347
300
  %t460 = call core.mul:numeric(%t471, %t501) :: float
348
301
  %acc454 = acc_add agg.sum(%acc454, %t460) :: float
349
302
  end_loop
350
- %t525 = call core.mul:numeric(%t523, %t524) :: float
303
+ %t525 = call core.mul:numeric(%t523, 0.009) :: float
351
304
  %t461 = acc_load %acc454 :: float
352
305
  %t507 = call core.add(%t505, %t525) :: float
353
306
  %t155 = call core.add(%t461, %t507) :: float
@@ -362,21 +315,13 @@
362
315
  %t536 = call core.mul:numeric(%t534, %t535) :: float
363
316
  %t538 = load_input "local_rate" :: float
364
317
  %t539 = call core.mul:numeric(%t534, %t538) :: float
365
- %t597 = const 168600.0 :: float
366
- %t598 = make_tuple(%t534, %t597) :: tuple<float, float>
318
+ %t598 = make_tuple(%t534, %__immediate_placeholder__) :: tuple<float, float>
367
319
  %t599 = fold %t598 fn="agg.min" :: float
368
- %t600 = const 0.062 :: float
369
- %t601 = call core.mul:numeric(%t599, %t600) :: float
370
- %t603 = const 0.0145 :: float
371
- %t604 = call core.mul:numeric(%t534, %t603) :: float
320
+ %t601 = call core.mul:numeric(%t599, 0.062) :: float
321
+ %t604 = call core.mul:numeric(%t534, 0.0145) :: float
372
322
  %t160 = load_input "statuses" :: array
373
- %t564 = const 0 :: integer
374
323
  %t593 = call core.add(%t601, %t604) :: float
375
- %t612 = const 0.009 :: float
376
- %t165 = const 1.0 :: float
377
- %t573 = const -1 :: integer
378
- %t575 = const 100000000000.0 :: float
379
- %t166 = make_tuple(%t534, %t165) :: tuple<float, float>
324
+ %t166 = make_tuple(%t534, %__immediate_placeholder__) :: tuple<float, float>
380
325
  %t167 = fold %t166 fn="agg.max" :: float
381
326
  loop statuses id=L23 in %t160 as el=%statuses_el_161, idx=%statuses_i_162
382
327
  %t562 = load_field statuses_el_161["std"] :: float
@@ -385,23 +330,23 @@
385
330
  %t607 = load_field statuses_el_161["addl_threshold"] :: float
386
331
  %t563 = call core.sub(%t534, %t562) :: float
387
332
  %t608 = call core.sub(%t534, %t607) :: float
388
- %t565 = make_tuple(%t563, %t564) :: tuple<float, integer>
389
- %t610 = make_tuple(%t608, %t564) :: tuple<float, integer>
333
+ %t565 = make_tuple(%t563, %__immediate_placeholder__) :: tuple<float, integer>
334
+ %t610 = make_tuple(%t608, %__immediate_placeholder__) :: tuple<float, integer>
390
335
  %t566 = fold %t565 fn="agg.max" :: float
391
336
  %t611 = fold %t610 fn="agg.max" :: float
392
337
  loop rates id=L29 in %t543 as el=%t544, idx=%t545
393
338
  %t569 = load_field t544["lo"] :: float
394
339
  %t554 = call core.sub(%t566, %t569) :: float
395
340
  %t580 = load_field t544["hi"] :: float
396
- %t574 = call core.eq(%t580, %t573) :: boolean
397
- %t577 = select %t574, %t575, %t580 :: float
341
+ %t574 = call core.eq(%t580, -1) :: boolean
342
+ %t577 = select %t574, 100000000000.0, %t580 :: float
398
343
  %t558 = call core.sub(%t577, %t569) :: float
399
- %t559 = call core.clamp(%t554, %t564, %t558) :: float
344
+ %t559 = call core.clamp(%t554, 0, %t558) :: float
400
345
  %t589 = load_field t544["rate"] :: float
401
346
  %t548 = call core.mul:numeric(%t559, %t589) :: float
402
347
  %acc542 = acc_add agg.sum(%acc542, %t548) :: float
403
348
  end_loop
404
- %t613 = call core.mul:numeric(%t611, %t612) :: float
349
+ %t613 = call core.mul:numeric(%t611, 0.009) :: float
405
350
  %t549 = acc_load %acc542 :: float
406
351
  %t595 = call core.add(%t593, %t613) :: float
407
352
  %t531 = call core.add(%t549, %t595) :: float
@@ -417,19 +362,12 @@
417
362
  %t624 = call core.mul:numeric(%t622, %t623) :: float
418
363
  %t626 = load_input "local_rate" :: float
419
364
  %t627 = call core.mul:numeric(%t622, %t626) :: float
420
- %t685 = const 168600.0 :: float
421
- %t686 = make_tuple(%t622, %t685) :: tuple<float, float>
365
+ %t686 = make_tuple(%t622, %__immediate_placeholder__) :: tuple<float, float>
422
366
  %t687 = fold %t686 fn="agg.min" :: float
423
- %t688 = const 0.062 :: float
424
- %t689 = call core.mul:numeric(%t687, %t688) :: float
425
- %t691 = const 0.0145 :: float
426
- %t692 = call core.mul:numeric(%t622, %t691) :: float
367
+ %t689 = call core.mul:numeric(%t687, 0.062) :: float
368
+ %t692 = call core.mul:numeric(%t622, 0.0145) :: float
427
369
  %t169 = load_input "statuses" :: array
428
- %t652 = const 0 :: integer
429
370
  %t681 = call core.add(%t689, %t692) :: float
430
- %t700 = const 0.009 :: float
431
- %t661 = const -1 :: integer
432
- %t663 = const 100000000000.0 :: float
433
371
  loop statuses id=L24 in %t169 as el=%statuses_el_170, idx=%statuses_i_171
434
372
  %t650 = load_field statuses_el_170["std"] :: float
435
373
  %acc630 = decl_acc :: float
@@ -437,23 +375,23 @@
437
375
  %t695 = load_field statuses_el_170["addl_threshold"] :: float
438
376
  %t651 = call core.sub(%t622, %t650) :: float
439
377
  %t696 = call core.sub(%t622, %t695) :: float
440
- %t653 = make_tuple(%t651, %t652) :: tuple<float, integer>
441
- %t698 = make_tuple(%t696, %t652) :: tuple<float, integer>
378
+ %t653 = make_tuple(%t651, %__immediate_placeholder__) :: tuple<float, integer>
379
+ %t698 = make_tuple(%t696, %__immediate_placeholder__) :: tuple<float, integer>
442
380
  %t654 = fold %t653 fn="agg.max" :: float
443
381
  %t699 = fold %t698 fn="agg.max" :: float
444
382
  loop rates id=L30 in %t631 as el=%t632, idx=%t633
445
383
  %t657 = load_field t632["lo"] :: float
446
384
  %t642 = call core.sub(%t654, %t657) :: float
447
385
  %t668 = load_field t632["hi"] :: float
448
- %t662 = call core.eq(%t668, %t661) :: boolean
449
- %t665 = select %t662, %t663, %t668 :: float
386
+ %t662 = call core.eq(%t668, -1) :: boolean
387
+ %t665 = select %t662, 100000000000.0, %t668 :: float
450
388
  %t646 = call core.sub(%t665, %t657) :: float
451
- %t647 = call core.clamp(%t642, %t652, %t646) :: float
389
+ %t647 = call core.clamp(%t642, 0, %t646) :: float
452
390
  %t677 = load_field t632["rate"] :: float
453
391
  %t636 = call core.mul:numeric(%t647, %t677) :: float
454
392
  %acc630 = acc_add agg.sum(%acc630, %t636) :: float
455
393
  end_loop
456
- %t701 = call core.mul:numeric(%t699, %t700) :: float
394
+ %t701 = call core.mul:numeric(%t699, 0.009) :: float
457
395
  %t637 = acc_load %acc630 :: float
458
396
  %t683 = call core.add(%t681, %t701) :: float
459
397
  %t619 = call core.add(%t637, %t683) :: float
@@ -469,20 +407,13 @@
469
407
  %t716 = call core.mul:numeric(%t714, %t715) :: float
470
408
  %t718 = load_input "local_rate" :: float
471
409
  %t719 = call core.mul:numeric(%t714, %t718) :: float
472
- %t777 = const 168600.0 :: float
473
- %t778 = make_tuple(%t714, %t777) :: tuple<float, float>
410
+ %t778 = make_tuple(%t714, %__immediate_placeholder__) :: tuple<float, float>
474
411
  %t779 = fold %t778 fn="agg.min" :: float
475
- %t780 = const 0.062 :: float
476
- %t781 = call core.mul:numeric(%t779, %t780) :: float
477
- %t783 = const 0.0145 :: float
478
- %t784 = call core.mul:numeric(%t714, %t783) :: float
412
+ %t781 = call core.mul:numeric(%t779, 0.062) :: float
413
+ %t784 = call core.mul:numeric(%t714, 0.0145) :: float
479
414
  %t175 = load_input "statuses" :: array
480
- %t744 = const 0 :: integer
481
415
  %t773 = call core.add(%t781, %t784) :: float
482
- %t792 = const 0.009 :: float
483
416
  %t179 = load_input "retirement_contrib" :: float
484
- %t753 = const -1 :: integer
485
- %t755 = const 100000000000.0 :: float
486
417
  loop statuses id=L25 in %t175 as el=%statuses_el_176, idx=%statuses_i_177
487
418
  %t742 = load_field statuses_el_176["std"] :: float
488
419
  %acc722 = decl_acc :: float
@@ -490,23 +421,23 @@
490
421
  %t787 = load_field statuses_el_176["addl_threshold"] :: float
491
422
  %t743 = call core.sub(%t714, %t742) :: float
492
423
  %t788 = call core.sub(%t714, %t787) :: float
493
- %t745 = make_tuple(%t743, %t744) :: tuple<float, integer>
494
- %t790 = make_tuple(%t788, %t744) :: tuple<float, integer>
424
+ %t745 = make_tuple(%t743, %__immediate_placeholder__) :: tuple<float, integer>
425
+ %t790 = make_tuple(%t788, %__immediate_placeholder__) :: tuple<float, integer>
495
426
  %t746 = fold %t745 fn="agg.max" :: float
496
427
  %t791 = fold %t790 fn="agg.max" :: float
497
428
  loop rates id=L31 in %t723 as el=%t724, idx=%t725
498
429
  %t749 = load_field t724["lo"] :: float
499
430
  %t734 = call core.sub(%t746, %t749) :: float
500
431
  %t760 = load_field t724["hi"] :: float
501
- %t754 = call core.eq(%t760, %t753) :: boolean
502
- %t757 = select %t754, %t755, %t760 :: float
432
+ %t754 = call core.eq(%t760, -1) :: boolean
433
+ %t757 = select %t754, 100000000000.0, %t760 :: float
503
434
  %t738 = call core.sub(%t757, %t749) :: float
504
- %t739 = call core.clamp(%t734, %t744, %t738) :: float
435
+ %t739 = call core.clamp(%t734, 0, %t738) :: float
505
436
  %t769 = load_field t724["rate"] :: float
506
437
  %t728 = call core.mul:numeric(%t739, %t769) :: float
507
438
  %acc722 = acc_add agg.sum(%acc722, %t728) :: float
508
439
  end_loop
509
- %t793 = call core.mul:numeric(%t791, %t792) :: float
440
+ %t793 = call core.mul:numeric(%t791, 0.009) :: float
510
441
  %t729 = acc_load %acc722 :: float
511
442
  %t775 = call core.add(%t773, %t793) :: float
512
443
  %t711 = call core.add(%t729, %t775) :: float
@@ -519,28 +450,20 @@
519
450
  )
520
451
  (Declaration summary
521
452
  %t974 = load_input "income" :: float
522
- %t975 = const 168600.0 :: float
523
- %t976 = make_tuple(%t974, %t975) :: tuple<float, float>
453
+ %t976 = make_tuple(%t974, %__immediate_placeholder__) :: tuple<float, float>
524
454
  %t977 = fold %t976 fn="agg.min" :: float
525
- %t978 = const 0.062 :: float
526
- %t979 = call core.mul:numeric(%t977, %t978) :: float
527
- %t981 = const 0.0145 :: float
528
- %t982 = call core.mul:numeric(%t974, %t981) :: float
455
+ %t979 = call core.mul:numeric(%t977, 0.062) :: float
456
+ %t982 = call core.mul:numeric(%t974, 0.0145) :: float
529
457
  %t1032 = load_input "state_rate" :: float
530
458
  %t1033 = call core.mul:numeric(%t974, %t1032) :: float
531
459
  %t1035 = load_input "local_rate" :: float
532
460
  %t1036 = call core.mul:numeric(%t974, %t1035) :: float
533
461
  %t181 = load_input "statuses" :: array
534
- %t824 = const 0 :: integer
535
- %t857 = const 1.0 :: float
536
462
  %t971 = call core.add(%t979, %t982) :: float
537
- %t990 = const 0.009 :: float
538
463
  %t195 = make_object{marginal: %t1032, effective: %t1032, tax: %t1033} :: object
539
464
  %t199 = make_object{marginal: %t1035, effective: %t1035, tax: %t1036} :: object
540
465
  %t204 = load_input "retirement_contrib" :: float
541
- %t840 = const -1 :: integer
542
- %t842 = const 100000000000.0 :: float
543
- %t858 = make_tuple(%t974, %t857) :: tuple<float, float>
466
+ %t858 = make_tuple(%t974, %__immediate_placeholder__) :: tuple<float, float>
544
467
  %t859 = fold %t858 fn="agg.max" :: float
545
468
  loop statuses id=L26 in %t181 as el=%statuses_el_182, idx=%statuses_i_183
546
469
  %t184 = load_field statuses_el_182["name"] :: string
@@ -556,32 +479,32 @@
556
479
  %acc1315 = decl_acc :: float
557
480
  %t823 = call core.sub(%t974, %t822) :: float
558
481
  %t986 = call core.sub(%t974, %t985) :: float
559
- %t825 = make_tuple(%t823, %t824) :: tuple<float, integer>
560
- %t988 = make_tuple(%t986, %t824) :: tuple<float, integer>
482
+ %t825 = make_tuple(%t823, %__immediate_placeholder__) :: tuple<float, integer>
483
+ %t988 = make_tuple(%t986, %__immediate_placeholder__) :: tuple<float, integer>
561
484
  %t826 = fold %t825 fn="agg.max" :: float
562
485
  %t989 = fold %t988 fn="agg.max" :: float
563
486
  loop rates id=L32 in %t803 as el=%t804, idx=%t805
564
487
  %t829 = load_field t804["lo"] :: float
565
488
  %t815 = call core.gte(%t826, %t829) :: boolean
566
489
  %t847 = load_field t804["hi"] :: float
567
- %t841 = call core.eq(%t847, %t840) :: boolean
568
- %t844 = select %t841, %t842, %t847 :: float
490
+ %t841 = call core.eq(%t847, -1) :: boolean
491
+ %t844 = select %t841, 100000000000.0, %t847 :: float
569
492
  %t818 = call core.lt(%t826, %t844) :: boolean
570
493
  %t819 = call core.and(%t815, %t818) :: boolean
571
494
  %t853 = load_field t804["rate"] :: float
572
- %t809 = select %t819, %t853, %t824 :: float
495
+ %t809 = select %t819, %t853, 0 :: float
573
496
  %acc802 = acc_add agg.sum(%acc802, %t809) :: float
574
497
  end_loop
575
- %t991 = call core.mul:numeric(%t989, %t990) :: float
498
+ %t991 = call core.mul:numeric(%t989, 0.009) :: float
576
499
  %t810 = acc_load %acc802 :: float
577
500
  loop rates id=L33 in %t803 as el=%t865, idx=%t866
578
501
  %t890 = load_field t865["lo"] :: float
579
502
  %t875 = call core.sub(%t826, %t890) :: float
580
503
  %t901 = load_field t865["hi"] :: float
581
- %t895 = call core.eq(%t901, %t840) :: boolean
582
- %t898 = select %t895, %t842, %t901 :: float
504
+ %t895 = call core.eq(%t901, -1) :: boolean
505
+ %t898 = select %t895, 100000000000.0, %t901 :: float
583
506
  %t879 = call core.sub(%t898, %t890) :: float
584
- %t880 = call core.clamp(%t875, %t824, %t879) :: float
507
+ %t880 = call core.clamp(%t875, 0, %t879) :: float
585
508
  %t910 = load_field t865["rate"] :: float
586
509
  %t869 = call core.mul:numeric(%t880, %t910) :: float
587
510
  %acc863 = acc_add agg.sum(%acc863, %t869) :: float