kumi 0.0.36 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (544) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +39 -58
  3. data/.rubocop_todo.yml +931 -0
  4. data/CHANGELOG.md +39 -2
  5. data/README.md +75 -1
  6. data/data/functions/core/arithmetic.yaml +48 -0
  7. data/data/functions/core/conversion.yaml +13 -0
  8. data/data/functions/core/select.yaml +1 -1
  9. data/data/functions/core/stencil.yaml +32 -0
  10. data/data/kernels/javascript/agg/numeric.yaml +1 -0
  11. data/data/kernels/javascript/core/arithmetic.yaml +24 -0
  12. data/data/kernels/javascript/core/coercion.yaml +18 -4
  13. data/data/kernels/ruby/agg/numeric.yaml +2 -1
  14. data/data/kernels/ruby/core/arithmetic.yaml +31 -3
  15. data/data/kernels/ruby/core/coercion.yaml +8 -0
  16. data/docs/CROSS_TARGET_SEMANTICS.md +99 -0
  17. data/docs/FORM_SCHEMA.md +13 -8
  18. data/docs/FUNCTIONS.md +120 -13
  19. data/docs/INPUTS.md +164 -0
  20. data/docs/OUTPUT_SCHEMA.md +12 -8
  21. data/docs/PASSES.md +76 -0
  22. data/docs/PASS_AUDIT.md +179 -0
  23. data/docs/PORTAL.md +39 -0
  24. data/docs/SYNTAX.md +101 -120
  25. data/docs/SYNTAX_NOTES.md +612 -0
  26. data/docs/UNSAT_DETECTION.md +2 -2
  27. data/docs/functions-reference.json +276 -84
  28. data/docs/pairwise-design.md +125 -0
  29. data/docs/superpowers/plans/2026-06-12-pass-conventions-and-dedup.md +1559 -0
  30. data/docs/superpowers/specs/2026-06-12-pass-conventions-and-dedup-design.md +136 -0
  31. data/golden/algebraic_identities/expected/ast.txt +66 -0
  32. data/golden/algebraic_identities/expected/dfir.txt +47 -0
  33. data/golden/algebraic_identities/expected/dfir_optimized.txt +59 -0
  34. data/golden/algebraic_identities/expected/input_plan.txt +7 -0
  35. data/golden/algebraic_identities/expected/loopir.txt +61 -0
  36. data/golden/algebraic_identities/expected/nast.txt +51 -0
  37. data/golden/algebraic_identities/expected/runtime.json +24 -0
  38. data/golden/algebraic_identities/expected/schema_javascript.mjs +89 -0
  39. data/golden/algebraic_identities/expected/schema_ruby.rb +84 -0
  40. data/golden/algebraic_identities/expected/snast.txt +51 -0
  41. data/golden/algebraic_identities/expected/vecir.txt +47 -0
  42. data/golden/algebraic_identities/input.json +6 -0
  43. data/golden/algebraic_identities/schema.kumi +25 -0
  44. data/golden/array_element/expected/loopir.txt +1 -2
  45. data/golden/array_element/expected/runtime.json +5 -0
  46. data/golden/array_element/expected/schema_javascript.mjs +1 -2
  47. data/golden/array_element/expected/schema_ruby.rb +2 -3
  48. data/golden/array_index/expected/runtime.json +54 -0
  49. data/golden/array_index/expected/schema_ruby.rb +1 -1
  50. data/golden/array_operations/{expected.json → expected/runtime.json} +5 -15
  51. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  52. data/golden/cascade_logic/expected/runtime.json +3 -0
  53. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  54. data/golden/cascade_reuse_peephole/expected/ast.txt +193 -0
  55. data/golden/cascade_reuse_peephole/expected/dfir.txt +124 -0
  56. data/golden/cascade_reuse_peephole/expected/dfir_optimized.txt +320 -0
  57. data/golden/cascade_reuse_peephole/expected/input_plan.txt +2 -0
  58. data/golden/cascade_reuse_peephole/expected/loopir.txt +302 -0
  59. data/golden/cascade_reuse_peephole/expected/nast.txt +188 -0
  60. data/golden/cascade_reuse_peephole/expected/runtime.json +8 -0
  61. data/golden/cascade_reuse_peephole/expected/schema_javascript.mjs +335 -0
  62. data/golden/cascade_reuse_peephole/expected/schema_ruby.rb +337 -0
  63. data/golden/cascade_reuse_peephole/expected/snast.txt +188 -0
  64. data/golden/cascade_reuse_peephole/expected/vecir.txt +302 -0
  65. data/golden/cascade_reuse_peephole/input.json +4 -0
  66. data/golden/cascade_reuse_peephole/schema.kumi +31 -0
  67. data/golden/chained_fusion/expected/loopir.txt +5 -13
  68. data/golden/chained_fusion/expected/runtime.json +45 -0
  69. data/golden/chained_fusion/expected/schema_javascript.mjs +5 -13
  70. data/golden/chained_fusion/expected/schema_ruby.rb +6 -14
  71. data/golden/cross_import/expected/ast.txt +21 -0
  72. data/golden/cross_import/expected/dfir.txt +3 -0
  73. data/golden/cross_import/expected/dfir_optimized.txt +8 -0
  74. data/golden/cross_import/expected/input_plan.txt +5 -0
  75. data/golden/cross_import/expected/loopir.txt +14 -0
  76. data/golden/cross_import/expected/nast.txt +7 -0
  77. data/golden/cross_import/expected/runtime.json +10 -0
  78. data/golden/cross_import/expected/schema_javascript.mjs +19 -0
  79. data/golden/cross_import/expected/schema_ruby.rb +19 -0
  80. data/golden/cross_import/expected/snast.txt +7 -0
  81. data/golden/cross_import/expected/vecir.txt +8 -0
  82. data/golden/cross_import/input.json +1 -0
  83. data/golden/cross_import/schema.kumi +15 -0
  84. data/golden/cross_let/expected/ast.txt +62 -0
  85. data/golden/cross_let/expected/dfir.txt +35 -0
  86. data/golden/cross_let/expected/dfir_optimized.txt +51 -0
  87. data/golden/cross_let/expected/input_plan.txt +5 -0
  88. data/golden/cross_let/expected/loopir.txt +100 -0
  89. data/golden/cross_let/expected/nast.txt +46 -0
  90. data/golden/cross_let/expected/runtime.json +61 -0
  91. data/golden/cross_let/expected/schema_javascript.mjs +136 -0
  92. data/golden/cross_let/expected/schema_ruby.rb +123 -0
  93. data/golden/cross_let/expected/snast.txt +46 -0
  94. data/golden/cross_let/expected/vecir.txt +51 -0
  95. data/golden/cross_let/input.json +7 -0
  96. data/golden/cross_let/schema.kumi +25 -0
  97. data/golden/decimal_explicit/expected/dfir.txt +6 -6
  98. data/golden/decimal_explicit/expected/dfir_optimized.txt +6 -6
  99. data/golden/decimal_explicit/expected/loopir.txt +6 -6
  100. data/golden/decimal_explicit/expected/runtime.json +10 -0
  101. data/golden/decimal_explicit/expected/schema_ruby.rb +1 -1
  102. data/golden/decimal_explicit/expected/snast.txt +9 -9
  103. data/golden/decimal_explicit/expected/vecir.txt +6 -6
  104. data/golden/element_arrays/expected/loopir.txt +6 -13
  105. data/golden/element_arrays/expected/runtime.json +117 -0
  106. data/golden/element_arrays/expected/schema_javascript.mjs +7 -14
  107. data/golden/element_arrays/expected/schema_ruby.rb +8 -15
  108. data/golden/empty_and_null_inputs/expected/loopir.txt +4 -9
  109. data/golden/empty_and_null_inputs/expected/runtime.json +8 -0
  110. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +5 -10
  111. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +6 -11
  112. data/golden/example_xpto/expected/runtime.json +4 -0
  113. data/golden/example_xpto/expected/schema_ruby.rb +1 -1
  114. data/golden/function_overload/expected/runtime.json +8 -0
  115. data/golden/function_overload/expected/schema_ruby.rb +1 -1
  116. data/golden/game_of_life/expected/loopir.txt +1 -58
  117. data/golden/game_of_life/expected/runtime.json +418 -0
  118. data/golden/game_of_life/expected/schema_javascript.mjs +1 -58
  119. data/golden/game_of_life/expected/schema_ruby.rb +2 -59
  120. data/golden/hash_keys/expected/runtime.json +20 -0
  121. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  122. data/golden/hash_value/expected/runtime.json +19 -0
  123. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  124. data/golden/hierarchical_complex/expected/loopir.txt +0 -4
  125. data/golden/hierarchical_complex/expected/runtime.json +16 -0
  126. data/golden/hierarchical_complex/expected/schema_javascript.mjs +0 -4
  127. data/golden/hierarchical_complex/expected/schema_ruby.rb +1 -5
  128. data/golden/inline_rename_scope_leak/expected/loopir.txt +1 -5
  129. data/golden/inline_rename_scope_leak/expected/runtime.json +10 -0
  130. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +3 -7
  131. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +4 -8
  132. data/golden/input_reference/expected/dfir.txt +2 -2
  133. data/golden/input_reference/expected/dfir_optimized.txt +2 -2
  134. data/golden/input_reference/expected/loopir.txt +2 -5
  135. data/golden/input_reference/expected/runtime.json +15 -0
  136. data/golden/input_reference/expected/schema_javascript.mjs +3 -6
  137. data/golden/input_reference/expected/schema_ruby.rb +4 -7
  138. data/golden/input_reference/expected/snast.txt +1 -1
  139. data/golden/input_reference/expected/vecir.txt +2 -2
  140. data/golden/interleaved_fusion/expected/loopir.txt +5 -10
  141. data/golden/interleaved_fusion/expected/runtime.json +37 -0
  142. data/golden/interleaved_fusion/expected/schema_javascript.mjs +5 -10
  143. data/golden/interleaved_fusion/expected/schema_ruby.rb +6 -11
  144. data/golden/let_inline/expected/runtime.json +6 -0
  145. data/golden/let_inline/expected/schema_ruby.rb +2 -2
  146. data/golden/loop_fusion/expected/loopir.txt +3 -7
  147. data/golden/loop_fusion/expected/runtime.json +29 -0
  148. data/golden/loop_fusion/expected/schema_javascript.mjs +3 -7
  149. data/golden/loop_fusion/expected/schema_ruby.rb +4 -8
  150. data/golden/min_max_empty_arrays/expected/loopir.txt +5 -12
  151. data/golden/min_max_empty_arrays/expected/runtime.json +16 -0
  152. data/golden/min_max_empty_arrays/expected/schema_javascript.mjs +7 -14
  153. data/golden/min_max_empty_arrays/expected/schema_ruby.rb +10 -17
  154. data/golden/min_reduce_scope/expected/loopir.txt +3 -7
  155. data/golden/min_reduce_scope/expected/runtime.json +11 -0
  156. data/golden/min_reduce_scope/expected/schema_javascript.mjs +4 -8
  157. data/golden/min_reduce_scope/expected/schema_ruby.rb +5 -9
  158. data/golden/mixed_dimensions/expected/loopir.txt +2 -5
  159. data/golden/mixed_dimensions/expected/runtime.json +34 -0
  160. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -6
  161. data/golden/mixed_dimensions/expected/schema_ruby.rb +4 -7
  162. data/golden/mlp_backprop/expected/ast.txt +147 -0
  163. data/golden/mlp_backprop/expected/dfir.txt +99 -0
  164. data/golden/mlp_backprop/expected/dfir_optimized.txt +374 -0
  165. data/golden/mlp_backprop/expected/input_plan.txt +17 -0
  166. data/golden/mlp_backprop/expected/loopir.txt +440 -0
  167. data/golden/mlp_backprop/expected/nast.txt +120 -0
  168. data/golden/mlp_backprop/expected/runtime.json +43 -0
  169. data/golden/mlp_backprop/expected/schema_javascript.mjs +516 -0
  170. data/golden/mlp_backprop/expected/schema_ruby.rb +484 -0
  171. data/golden/mlp_backprop/expected/snast.txt +120 -0
  172. data/golden/mlp_backprop/expected/vecir.txt +374 -0
  173. data/golden/mlp_backprop/input.json +8 -0
  174. data/golden/mlp_backprop/schema.kumi +43 -0
  175. data/golden/multi_loop_reduction/expected/loopir.txt +2 -6
  176. data/golden/multi_loop_reduction/expected/runtime.json +5 -0
  177. data/golden/multi_loop_reduction/expected/schema_javascript.mjs +4 -8
  178. data/golden/multi_loop_reduction/expected/schema_ruby.rb +5 -9
  179. data/golden/multirank_hoisting/expected/loopir.txt +24 -42
  180. data/golden/multirank_hoisting/expected/runtime.json +47 -0
  181. data/golden/multirank_hoisting/expected/schema_javascript.mjs +24 -45
  182. data/golden/multirank_hoisting/expected/schema_ruby.rb +25 -43
  183. data/golden/nested_hash/expected/runtime.json +3 -0
  184. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  185. data/golden/outer_let/expected/ast.txt +106 -0
  186. data/golden/outer_let/expected/dfir.txt +66 -0
  187. data/golden/outer_let/expected/dfir_optimized.txt +145 -0
  188. data/golden/outer_let/expected/input_plan.txt +19 -0
  189. data/golden/outer_let/expected/loopir.txt +166 -0
  190. data/golden/outer_let/expected/nast.txt +78 -0
  191. data/golden/outer_let/expected/runtime.json +89 -0
  192. data/golden/outer_let/expected/schema_javascript.mjs +220 -0
  193. data/golden/outer_let/expected/schema_ruby.rb +201 -0
  194. data/golden/outer_let/expected/snast.txt +78 -0
  195. data/golden/outer_let/expected/vecir.txt +145 -0
  196. data/golden/outer_let/input.json +9 -0
  197. data/golden/outer_let/schema.kumi +32 -0
  198. data/golden/pairwise_cross/expected/ast.txt +62 -0
  199. data/golden/pairwise_cross/expected/dfir.txt +36 -0
  200. data/golden/pairwise_cross/expected/dfir_optimized.txt +50 -0
  201. data/golden/pairwise_cross/expected/input_plan.txt +8 -0
  202. data/golden/pairwise_cross/expected/loopir.txt +84 -0
  203. data/golden/pairwise_cross/expected/nast.txt +46 -0
  204. data/golden/pairwise_cross/expected/runtime.json +80 -0
  205. data/golden/pairwise_cross/expected/schema_javascript.mjs +113 -0
  206. data/golden/pairwise_cross/expected/schema_ruby.rb +104 -0
  207. data/golden/pairwise_cross/expected/snast.txt +46 -0
  208. data/golden/pairwise_cross/expected/vecir.txt +50 -0
  209. data/golden/pairwise_cross/input.json +8 -0
  210. data/golden/pairwise_cross/schema.kumi +18 -0
  211. data/golden/reduction_broadcast/expected/loopir.txt +4 -10
  212. data/golden/reduction_broadcast/expected/runtime.json +14 -0
  213. data/golden/reduction_broadcast/expected/schema_javascript.mjs +4 -10
  214. data/golden/reduction_broadcast/expected/schema_ruby.rb +5 -11
  215. data/golden/roll/expected/loopir.txt +4 -8
  216. data/golden/roll/expected/runtime.json +26 -0
  217. data/golden/roll/expected/schema_javascript.mjs +4 -8
  218. data/golden/roll/expected/schema_ruby.rb +5 -9
  219. data/golden/schema_imports_broadcasting_with_imports/expected/dfir.txt +3 -3
  220. data/golden/schema_imports_broadcasting_with_imports/expected/dfir_optimized.txt +3 -3
  221. data/golden/schema_imports_broadcasting_with_imports/expected/loopir.txt +3 -4
  222. data/golden/schema_imports_broadcasting_with_imports/expected/runtime.json +11 -0
  223. data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +2 -3
  224. data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +3 -4
  225. data/golden/schema_imports_broadcasting_with_imports/expected/snast.txt +5 -5
  226. data/golden/schema_imports_broadcasting_with_imports/expected/vecir.txt +3 -3
  227. data/golden/schema_imports_complex_order_calc/expected/dfir.txt +20 -20
  228. data/golden/schema_imports_complex_order_calc/expected/dfir_optimized.txt +60 -60
  229. data/golden/schema_imports_complex_order_calc/expected/loopir.txt +34 -47
  230. data/golden/schema_imports_complex_order_calc/expected/runtime.json +33 -0
  231. data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +16 -29
  232. data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +17 -30
  233. data/golden/schema_imports_complex_order_calc/expected/snast.txt +26 -26
  234. data/golden/schema_imports_complex_order_calc/expected/vecir.txt +60 -60
  235. data/golden/schema_imports_composed_order/expected/dfir.txt +3 -3
  236. data/golden/schema_imports_composed_order/expected/dfir_optimized.txt +6 -6
  237. data/golden/schema_imports_composed_order/expected/loopir.txt +6 -6
  238. data/golden/schema_imports_composed_order/expected/runtime.json +9 -0
  239. data/golden/schema_imports_composed_order/expected/schema_ruby.rb +1 -1
  240. data/golden/schema_imports_composed_order/expected/snast.txt +5 -5
  241. data/golden/schema_imports_composed_order/expected/vecir.txt +6 -6
  242. data/golden/schema_imports_discount_with_tax/expected/dfir.txt +7 -7
  243. data/golden/schema_imports_discount_with_tax/expected/dfir_optimized.txt +10 -10
  244. data/golden/schema_imports_discount_with_tax/expected/loopir.txt +10 -10
  245. data/golden/schema_imports_discount_with_tax/expected/runtime.json +10 -0
  246. data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +1 -1
  247. data/golden/schema_imports_discount_with_tax/expected/snast.txt +11 -11
  248. data/golden/schema_imports_discount_with_tax/expected/vecir.txt +10 -10
  249. data/golden/schema_imports_line_items/expected/dfir.txt +1 -1
  250. data/golden/schema_imports_line_items/expected/dfir_optimized.txt +3 -3
  251. data/golden/schema_imports_line_items/expected/loopir.txt +3 -6
  252. data/golden/schema_imports_line_items/expected/runtime.json +8 -0
  253. data/golden/schema_imports_line_items/expected/schema_javascript.mjs +4 -7
  254. data/golden/schema_imports_line_items/expected/schema_ruby.rb +5 -8
  255. data/golden/schema_imports_line_items/expected/snast.txt +1 -1
  256. data/golden/schema_imports_line_items/expected/vecir.txt +3 -3
  257. data/golden/schema_imports_multiple/expected/dfir.txt +7 -7
  258. data/golden/schema_imports_multiple/expected/dfir_optimized.txt +13 -13
  259. data/golden/schema_imports_multiple/expected/loopir.txt +13 -13
  260. data/golden/schema_imports_multiple/expected/runtime.json +10 -0
  261. data/golden/schema_imports_multiple/expected/schema_ruby.rb +1 -1
  262. data/golden/schema_imports_multiple/expected/snast.txt +11 -11
  263. data/golden/schema_imports_multiple/expected/vecir.txt +13 -13
  264. data/golden/schema_imports_nested_expressions/expected/dfir.txt +4 -4
  265. data/golden/schema_imports_nested_expressions/expected/dfir_optimized.txt +6 -6
  266. data/golden/schema_imports_nested_expressions/expected/loopir.txt +6 -6
  267. data/golden/schema_imports_nested_expressions/expected/runtime.json +8 -0
  268. data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +1 -1
  269. data/golden/schema_imports_nested_expressions/expected/snast.txt +6 -6
  270. data/golden/schema_imports_nested_expressions/expected/vecir.txt +6 -6
  271. data/golden/schema_imports_nested_with_reductions/expected/dfir.txt +6 -6
  272. data/golden/schema_imports_nested_with_reductions/expected/dfir_optimized.txt +15 -15
  273. data/golden/schema_imports_nested_with_reductions/expected/loopir.txt +7 -14
  274. data/golden/schema_imports_nested_with_reductions/expected/runtime.json +12 -0
  275. data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +8 -15
  276. data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +9 -16
  277. data/golden/schema_imports_nested_with_reductions/expected/snast.txt +6 -6
  278. data/golden/schema_imports_nested_with_reductions/expected/vecir.txt +15 -15
  279. data/golden/schema_imports_with_imports/expected/dfir.txt +3 -3
  280. data/golden/schema_imports_with_imports/expected/dfir_optimized.txt +3 -3
  281. data/golden/schema_imports_with_imports/expected/loopir.txt +3 -3
  282. data/golden/schema_imports_with_imports/expected/runtime.json +7 -0
  283. data/golden/schema_imports_with_imports/expected/schema_ruby.rb +1 -1
  284. data/golden/schema_imports_with_imports/expected/snast.txt +5 -5
  285. data/golden/schema_imports_with_imports/expected/vecir.txt +3 -3
  286. data/golden/shift/expected/loopir.txt +4 -8
  287. data/golden/shift/expected/runtime.json +38 -0
  288. data/golden/shift/expected/schema_javascript.mjs +4 -8
  289. data/golden/shift/expected/schema_ruby.rb +5 -9
  290. data/golden/shift_2d/expected/loopir.txt +8 -16
  291. data/golden/shift_2d/expected/runtime.json +146 -0
  292. data/golden/shift_2d/expected/schema_javascript.mjs +8 -16
  293. data/golden/shift_2d/expected/schema_ruby.rb +9 -17
  294. data/golden/simple_math/expected/runtime.json +10 -0
  295. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  296. data/golden/streaming_basics/expected/loopir.txt +0 -3
  297. data/golden/streaming_basics/expected/runtime.json +25 -0
  298. data/golden/streaming_basics/expected/schema_javascript.mjs +3 -6
  299. data/golden/streaming_basics/expected/schema_ruby.rb +4 -7
  300. data/golden/transcendentals/expected/ast.txt +48 -0
  301. data/golden/transcendentals/expected/dfir.txt +31 -0
  302. data/golden/transcendentals/expected/dfir_optimized.txt +34 -0
  303. data/golden/transcendentals/expected/input_plan.txt +5 -0
  304. data/golden/transcendentals/expected/loopir.txt +46 -0
  305. data/golden/transcendentals/expected/nast.txt +34 -0
  306. data/golden/transcendentals/expected/runtime.json +27 -0
  307. data/golden/transcendentals/expected/schema_javascript.mjs +66 -0
  308. data/golden/transcendentals/expected/schema_ruby.rb +63 -0
  309. data/golden/transcendentals/expected/snast.txt +34 -0
  310. data/golden/transcendentals/expected/vecir.txt +34 -0
  311. data/golden/transcendentals/input.json +1 -0
  312. data/golden/transcendentals/schema.kumi +16 -0
  313. data/golden/tuples/expected/dfir.txt +4 -4
  314. data/golden/tuples/expected/runtime.json +12 -0
  315. data/golden/tuples/expected/schema_ruby.rb +1 -1
  316. data/golden/tuples_and_arrays/expected/dfir.txt +1 -1
  317. data/golden/tuples_and_arrays/expected/loopir.txt +0 -1
  318. data/golden/tuples_and_arrays/expected/runtime.json +13 -0
  319. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +1 -2
  320. data/golden/tuples_and_arrays/expected/schema_ruby.rb +2 -3
  321. data/golden/type_promotion/expected/ast.txt +75 -0
  322. data/golden/type_promotion/expected/dfir.txt +38 -0
  323. data/golden/type_promotion/expected/dfir_optimized.txt +51 -0
  324. data/golden/type_promotion/expected/input_plan.txt +9 -0
  325. data/golden/type_promotion/expected/loopir.txt +57 -0
  326. data/golden/type_promotion/expected/nast.txt +57 -0
  327. data/golden/type_promotion/expected/runtime.json +23 -0
  328. data/golden/type_promotion/expected/schema_javascript.mjs +90 -0
  329. data/golden/type_promotion/expected/schema_ruby.rb +89 -0
  330. data/golden/type_promotion/expected/snast.txt +57 -0
  331. data/golden/type_promotion/expected/vecir.txt +51 -0
  332. data/golden/type_promotion/input.json +11 -0
  333. data/golden/type_promotion/schema.kumi +30 -0
  334. data/golden/us_tax_2024/expected/dfir.txt +6 -6
  335. data/golden/us_tax_2024/expected/loopir.txt +108 -217
  336. data/golden/us_tax_2024/expected/runtime.json +423 -0
  337. data/golden/us_tax_2024/expected/schema_javascript.mjs +108 -235
  338. data/golden/us_tax_2024/expected/schema_ruby.rb +109 -218
  339. data/golden/vector_make_object/expected/schema_ruby.rb +1 -1
  340. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  341. data/lib/kumi/analyzer.rb +29 -34
  342. data/lib/kumi/configuration.rb +31 -0
  343. data/lib/kumi/core/analyzer/binder.rb +2 -2
  344. data/lib/kumi/core/analyzer/macro_expander.rb +3 -3
  345. data/lib/kumi/core/analyzer/pass_failure.rb +1 -1
  346. data/lib/kumi/core/analyzer/pass_manager.rb +211 -100
  347. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +44 -15
  348. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +6 -20
  349. data/lib/kumi/core/analyzer/passes/codegen/loop/js/emitter.rb +252 -14
  350. data/lib/kumi/core/analyzer/passes/codegen/loop/ruby/emitter.rb +6 -3
  351. data/lib/kumi/core/analyzer/passes/codegen/loop_js_pass.rb +5 -1
  352. data/lib/kumi/core/analyzer/passes/codegen/loop_ruby_pass.rb +3 -0
  353. data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +3 -0
  354. data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +1 -1
  355. data/lib/kumi/core/analyzer/passes/declaration_validator_pass.rb +83 -0
  356. data/lib/kumi/core/analyzer/passes/{dependency_resolver.rb → dependency_resolver_pass.rb} +8 -6
  357. data/lib/kumi/core/analyzer/passes/df_validate_pass.rb +3 -13
  358. data/lib/kumi/core/analyzer/passes/import_analysis_pass.rb +7 -2
  359. data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +4 -28
  360. data/lib/kumi/core/analyzer/passes/{input_collector.rb → input_collector_pass.rb} +30 -3
  361. data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +4 -1
  362. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +4 -2
  363. data/lib/kumi/core/analyzer/passes/ir_lower_pass.rb +35 -0
  364. data/lib/kumi/core/analyzer/passes/ir_validate_pass.rb +43 -0
  365. data/lib/kumi/core/analyzer/passes/{load_input_cse.rb → load_input_cse_pass.rb} +1 -1
  366. data/lib/kumi/core/analyzer/passes/loop/lower_pass.rb +23 -10
  367. data/lib/kumi/core/analyzer/passes/loop_validate_pass.rb +2 -10
  368. data/lib/kumi/core/analyzer/passes/lower_to_dfir_pass.rb +4 -2
  369. data/lib/kumi/core/analyzer/passes/{name_indexer.rb → name_indexer_pass.rb} +3 -7
  370. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +174 -23
  371. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +19 -3
  372. data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +3 -0
  373. data/lib/kumi/core/analyzer/passes/pass_base.rb +78 -5
  374. data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +7 -1
  375. data/lib/kumi/core/analyzer/passes/{semantic_constraint_validator.rb → semantic_constraint_validator_pass.rb} +7 -14
  376. data/lib/kumi/core/analyzer/passes/snast_pass.rb +22 -48
  377. data/lib/kumi/core/analyzer/passes/{toposorter.rb → toposorter_pass.rb} +4 -5
  378. data/lib/kumi/core/analyzer/passes/{unsat_detector.rb → unsat_detector_pass.rb} +4 -15
  379. data/lib/kumi/core/analyzer/passes/vec/lower_pass.rb +6 -8
  380. data/lib/kumi/core/analyzer/passes/vec_validate_pass.rb +2 -10
  381. data/lib/kumi/core/analyzer/structs/input_meta.rb +1 -1
  382. data/lib/kumi/core/compiler/access_builder.rb +1 -1
  383. data/lib/kumi/core/compiler/access_codegen.rb +1 -1
  384. data/lib/kumi/core/compiler/access_emit/base.rb +1 -1
  385. data/lib/kumi/core/compiler/access_planner_v2.rb +2 -2
  386. data/lib/kumi/core/compiler/accessors/each_indexed_accessor.rb +1 -1
  387. data/lib/kumi/core/compiler/accessors/materialize_accessor.rb +1 -1
  388. data/lib/kumi/core/compiler/accessors/ravel_accessor.rb +1 -1
  389. data/lib/kumi/core/compiler/accessors/read_accessor.rb +1 -1
  390. data/lib/kumi/core/error_reporter.rb +6 -11
  391. data/lib/kumi/core/errors.rb +37 -11
  392. data/lib/kumi/core/expression_renderer.rb +97 -0
  393. data/lib/kumi/core/functions/overload_resolver.rb +79 -149
  394. data/lib/kumi/core/ir/execution_engine/combinators.rb +16 -10
  395. data/lib/kumi/core/nast.rb +24 -0
  396. data/lib/kumi/core/ruby_parser/build_context.rb +6 -1
  397. data/lib/kumi/core/ruby_parser/dsl.rb +12 -2
  398. data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +14 -12
  399. data/lib/kumi/core/ruby_parser/guard_rails.rb +15 -1
  400. data/lib/kumi/core/ruby_parser/input_builder.rb +55 -48
  401. data/lib/kumi/core/ruby_parser/parser.rb +26 -18
  402. data/lib/kumi/core/ruby_parser/schema_builder.rb +60 -15
  403. data/lib/kumi/core/ruby_parser/sugar.rb +0 -86
  404. data/lib/kumi/core/types/dtype_rule.rb +76 -0
  405. data/lib/kumi/core/types/normalizer.rb +2 -2
  406. data/lib/kumi/core/types/profile.rb +82 -0
  407. data/lib/kumi/core/types/registry.rb +87 -0
  408. data/lib/kumi/core/types/system.rb +96 -0
  409. data/lib/kumi/core/types/value_objects.rb +14 -13
  410. data/lib/kumi/core/types.rb +41 -34
  411. data/lib/kumi/dev/golden_runtime.rb +163 -0
  412. data/lib/kumi/dev/golden_v2.rb +30 -5
  413. data/lib/kumi/dev/pretty_printer.rb +40 -73
  414. data/lib/kumi/frontends/ruby.rb +52 -12
  415. data/lib/kumi/frontends/source_frame.rb +71 -0
  416. data/lib/kumi/frontends/text.rb +4 -48
  417. data/lib/kumi/function_registry/loader.rb +101 -0
  418. data/lib/kumi/function_registry.rb +150 -0
  419. data/lib/kumi/ir/base/block.rb +11 -2
  420. data/lib/kumi/ir/base/builder.rb +1 -1
  421. data/lib/kumi/ir/base/function.rb +2 -4
  422. data/lib/kumi/ir/base/instruction.rb +10 -23
  423. data/lib/kumi/ir/base/module.rb +5 -4
  424. data/lib/kumi/ir/buf/lower.rb +1 -2
  425. data/lib/kumi/ir/df/access_contract.rb +3 -5
  426. data/lib/kumi/ir/df/import_inliner.rb +2 -5
  427. data/lib/kumi/ir/df/lower.rb +72 -51
  428. data/lib/kumi/ir/df/ops/axis_cross.rb +34 -0
  429. data/lib/kumi/ir/df/ops/axis_outer.rb +35 -0
  430. data/lib/kumi/ir/df/passes/broadcast_simplify.rb +1 -2
  431. data/lib/kumi/ir/df/passes/cse.rb +8 -3
  432. data/lib/kumi/ir/df/passes/decl_inlining.rb +5 -26
  433. data/lib/kumi/ir/df/passes/import_inlining.rb +42 -36
  434. data/lib/kumi/ir/df/passes/load_dedup.rb +9 -4
  435. data/lib/kumi/ir/df/passes/stencil_cse.rb +2 -5
  436. data/lib/kumi/ir/df/passes/support/instruction_cloner.rb +41 -14
  437. data/lib/kumi/ir/df/passes/tuple_fold_canonicalization.rb +8 -3
  438. data/lib/kumi/ir/df/passes/tuple_to_object.rb +1 -2
  439. data/lib/kumi/ir/df/validator.rb +3 -3
  440. data/lib/kumi/ir/df.rb +8 -0
  441. data/lib/kumi/ir/loop/lower.rb +231 -37
  442. data/lib/kumi/ir/loop/passes/array_contraction.rb +124 -0
  443. data/lib/kumi/ir/loop/passes/copy_cleanup.rb +112 -0
  444. data/lib/kumi/ir/loop/passes/loop_fusion.rb +125 -0
  445. data/lib/kumi/ir/loop/passes/support/structure.rb +100 -0
  446. data/lib/kumi/ir/loop/passes.rb +14 -0
  447. data/lib/kumi/ir/loop/pipeline.rb +9 -1
  448. data/lib/kumi/ir/loop/validator.rb +29 -4
  449. data/lib/kumi/ir/loop.rb +1 -0
  450. data/lib/kumi/ir/passes/register_generator.rb +32 -0
  451. data/lib/kumi/ir/testing/snast_factory.rb +2 -4
  452. data/lib/kumi/ir/vec/lower.rb +17 -7
  453. data/lib/kumi/ir/vec/ops/core_ops.rb +41 -0
  454. data/lib/kumi/ir/vec/passes/axis_canonicalization.rb +1 -2
  455. data/lib/kumi/ir/vec/passes/constant_propagation.rb +75 -47
  456. data/lib/kumi/ir/vec/passes/dce.rb +2 -5
  457. data/lib/kumi/ir/vec/passes/gvn.rb +8 -3
  458. data/lib/kumi/ir/vec/passes/peephole_simplify.rb +30 -13
  459. data/lib/kumi/ir/vec/passes/stencil_detection.rb +1 -2
  460. data/lib/kumi/ir/vec/passes/support/algebraic_identities.rb +70 -0
  461. data/lib/kumi/ir/vec/passes/support/instruction_cloner.rb +17 -3
  462. data/lib/kumi/ir/vec/validator.rb +26 -6
  463. data/lib/kumi/schema.rb +14 -10
  464. data/lib/kumi/schema_metadata/printer.rb +111 -0
  465. data/lib/kumi/schema_metadata.rb +289 -0
  466. data/lib/kumi/syntax/location.rb +14 -1
  467. data/lib/kumi/syntax/root.rb +35 -3
  468. data/lib/kumi/test_shared_schemas/pairwise.rb +27 -0
  469. data/lib/kumi/version.rb +1 -1
  470. data/lib/kumi.rb +3 -5
  471. data/tasks/docs_portal.rake +135 -0
  472. metadata +203 -81
  473. data/golden/array_element/expected.json +0 -5
  474. data/golden/array_index/expected.json +0 -5
  475. data/golden/cascade_logic/expected.json +0 -5
  476. data/golden/chained_fusion/expected.json +0 -45
  477. data/golden/decimal_explicit/expected.json +0 -1
  478. data/golden/element_arrays/expected.json +0 -55
  479. data/golden/empty_and_null_inputs/expected.json +0 -8
  480. data/golden/example_xpto/expected.json +0 -4
  481. data/golden/game_of_life/expected.json +0 -3
  482. data/golden/hash_keys/expected.json +0 -20
  483. data/golden/hash_value/expected.json +0 -19
  484. data/golden/hierarchical_complex/expected.json +0 -34
  485. data/golden/inline_rename_scope_leak/expected.json +0 -7
  486. data/golden/input_reference/expected.json +0 -7
  487. data/golden/interleaved_fusion/expected.json +0 -37
  488. data/golden/let_inline/expected.json +0 -1
  489. data/golden/loop_fusion/expected.json +0 -30
  490. data/golden/min_max_empty_arrays/expected.json +0 -7
  491. data/golden/min_reduce_scope/expected.json +0 -9
  492. data/golden/mixed_dimensions/expected.json +0 -6
  493. data/golden/multi_loop_reduction/expected.json +0 -5
  494. data/golden/multirank_hoisting/expected.json +0 -15
  495. data/golden/nested_hash/expected.json +0 -3
  496. data/golden/reduction_broadcast/expected.json +0 -25
  497. data/golden/roll/expected.json +0 -6
  498. data/golden/schema_imports_broadcasting_with_imports/expected.json +0 -4
  499. data/golden/schema_imports_complex_order_calc/expected.json +0 -12
  500. data/golden/schema_imports_composed_order/expected.json +0 -6
  501. data/golden/schema_imports_discount_with_tax/expected.json +0 -7
  502. data/golden/schema_imports_line_items/expected.json +0 -5
  503. data/golden/schema_imports_multiple/expected.json +0 -7
  504. data/golden/schema_imports_nested_expressions/expected.json +0 -5
  505. data/golden/schema_imports_nested_with_reductions/expected.json +0 -6
  506. data/golden/schema_imports_with_imports/expected.json +0 -4
  507. data/golden/shift/expected.json +0 -8
  508. data/golden/shift_2d/expected.json +0 -15
  509. data/golden/simple_math/expected.json +0 -1
  510. data/golden/streaming_basics/expected.json +0 -10
  511. data/golden/tuples/expected.json +0 -7
  512. data/golden/tuples_and_arrays/expected.json +0 -18
  513. data/golden/us_tax_2024/expected.json +0 -120
  514. data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +0 -130
  515. data/lib/kumi/core/analyzer/passes/declaration_validator.rb +0 -45
  516. data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +0 -197
  517. data/lib/kumi/core/compiler/access_planner.rb +0 -258
  518. data/lib/kumi/core/functions/function_spec.rb +0 -17
  519. data/lib/kumi/core/functions/loader.rb +0 -63
  520. data/lib/kumi/core/functions/type_categories.rb +0 -44
  521. data/lib/kumi/core/functions/type_error_reporter.rb +0 -116
  522. data/lib/kumi/core/functions/type_rules.rb +0 -228
  523. data/lib/kumi/core/irv2/builder.rb +0 -48
  524. data/lib/kumi/core/irv2/declaration.rb +0 -28
  525. data/lib/kumi/core/irv2/module.rb +0 -108
  526. data/lib/kumi/core/irv2/value.rb +0 -28
  527. data/lib/kumi/core/types/validator.rb +0 -33
  528. data/lib/kumi/dev/codegen.rb +0 -194
  529. data/lib/kumi/dev/golden/generator.rb +0 -109
  530. data/lib/kumi/dev/golden/reporter.rb +0 -169
  531. data/lib/kumi/dev/golden/representation.rb +0 -40
  532. data/lib/kumi/dev/golden/result.rb +0 -106
  533. data/lib/kumi/dev/golden/runtime_test.rb +0 -131
  534. data/lib/kumi/dev/golden/suite.rb +0 -147
  535. data/lib/kumi/dev/golden/value_normalizer.rb +0 -78
  536. data/lib/kumi/dev/golden/verifier.rb +0 -76
  537. data/lib/kumi/dev/golden.rb +0 -82
  538. data/lib/kumi/dev/golden_schema_wrapper.rb +0 -116
  539. data/lib/kumi/dev/printer/irv2_formatter.rb +0 -163
  540. data/lib/kumi/kernel_registry.rb +0 -59
  541. data/lib/kumi/pack/builder.rb +0 -229
  542. data/lib/kumi/pack.rb +0 -15
  543. data/lib/kumi/registry_v2/loader.rb +0 -170
  544. data/lib/kumi/registry_v2.rb +0 -135
@@ -1,16 +1,16 @@
1
1
  function order_subtotals:
2
- %v1 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
3
- %v2 = load_field (:v1) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
4
- %v3 = load_field (:v2) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
2
+ %v1 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
3
+ %v2 = load_field (:v1) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
4
+ %v3 = load_field (:v2) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
5
5
  %v5 = load_field (:v3) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
6
6
  %v6 = load_field (:v5) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
7
7
  %v7 = load_field (:v5) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
8
8
  %v8 = map (:v6, :v7) [fn=:core.mul:numeric] [orders, items] -> integer
9
9
  %v9 = reduce (:v8) [fn=:agg.sum, over_axes=[:items]] [orders] -> integer
10
10
  function order_with_shipping:
11
- %v10 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
12
- %v11 = load_field (:v10) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
13
- %v12 = load_field (:v11) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
11
+ %v10 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
12
+ %v11 = load_field (:v10) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
13
+ %v12 = load_field (:v11) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
14
14
  %v14 = load_field (:v12) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
15
15
  %v15 = load_field (:v14) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
16
16
  %v16 = load_field (:v14) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -19,11 +19,11 @@ function order_with_shipping:
19
19
  %v6 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
20
20
  %v7 = load_field (:v6) [field=:order, plan_ref="orders.order"] [orders] -> decimal
21
21
  %v8 = load_field (:v7) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
22
- %v9 = map (:v18, :v8) [fn=:core.add] [orders] -> integer
22
+ %v9 = map (:v18, :v8) [fn=:core.add] [orders] -> decimal
23
23
  function order_discounted:
24
- %v14 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
25
- %v15 = load_field (:v14) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
26
- %v16 = load_field (:v15) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
24
+ %v14 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
25
+ %v15 = load_field (:v14) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
26
+ %v16 = load_field (:v15) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
27
27
  %v22 = load_field (:v16) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
28
28
  %v23 = load_field (:v22) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
29
29
  %v24 = load_field (:v22) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -32,16 +32,16 @@ function order_discounted:
32
32
  %v18 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
33
33
  %v19 = load_field (:v18) [field=:order, plan_ref="orders.order"] [orders] -> decimal
34
34
  %v20 = load_field (:v19) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
35
- %v21 = map (:v26, :v20) [fn=:core.add] [orders] -> integer
35
+ %v21 = map (:v26, :v20) [fn=:core.add] [orders] -> decimal
36
36
  %v11 = load_input [key=:global_discount_rate, chain=[], plan_ref="global_discount_rate"] [] -> decimal
37
37
  %v12 = axis_broadcast (:v11) [from_axes=[], to_axes=[:orders]] [orders] -> decimal
38
38
  %v27 = constant [value=1.0] [orders] -> float
39
- %v28 = map (:v27, :v12) [fn=:core.sub] [orders] -> float
40
- %v29 = map (:v21, :v28) [fn=:core.mul:numeric] [orders] -> float
39
+ %v28 = map (:v27, :v12) [fn=:core.sub] [orders] -> decimal
40
+ %v29 = map (:v21, :v28) [fn=:core.mul:numeric] [orders] -> decimal
41
41
  function order_tax:
42
- %v16 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
43
- %v17 = load_field (:v16) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
44
- %v18 = load_field (:v17) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
42
+ %v16 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
43
+ %v17 = load_field (:v16) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
44
+ %v18 = load_field (:v17) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
45
45
  %v27 = load_field (:v18) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
46
46
  %v28 = load_field (:v27) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
47
47
  %v29 = load_field (:v27) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -50,18 +50,18 @@ function order_tax:
50
50
  %v20 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
51
51
  %v21 = load_field (:v20) [field=:order, plan_ref="orders.order"] [orders] -> decimal
52
52
  %v22 = load_field (:v21) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
53
- %v23 = map (:v31, :v22) [fn=:core.add] [orders] -> integer
53
+ %v23 = map (:v31, :v22) [fn=:core.add] [orders] -> decimal
54
54
  %v24 = load_input [key=:global_discount_rate, chain=[], plan_ref="global_discount_rate"] [] -> decimal
55
55
  %v25 = axis_broadcast (:v24) [from_axes=[], to_axes=[:orders]] [orders] -> decimal
56
56
  %v32 = constant [value=1.0] [orders] -> float
57
- %v33 = map (:v32, :v25) [fn=:core.sub] [orders] -> float
58
- %v34 = map (:v23, :v33) [fn=:core.mul:numeric] [orders] -> float
57
+ %v33 = map (:v32, :v25) [fn=:core.sub] [orders] -> decimal
58
+ %v34 = map (:v23, :v33) [fn=:core.mul:numeric] [orders] -> decimal
59
59
  %v35 = constant [value=0.15] [orders] -> float
60
- %v36 = map (:v34, :v35) [fn=:core.mul:numeric] [orders] -> float
60
+ %v36 = map (:v34, :v35) [fn=:core.mul:numeric] [orders] -> decimal
61
61
  function order_totals:
62
- %v19 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
63
- %v20 = load_field (:v19) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
64
- %v21 = load_field (:v20) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
62
+ %v19 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
63
+ %v20 = load_field (:v19) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
64
+ %v21 = load_field (:v20) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
65
65
  %v42 = load_field (:v21) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
66
66
  %v43 = load_field (:v42) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
67
67
  %v44 = load_field (:v42) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -70,19 +70,19 @@ function order_totals:
70
70
  %v23 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
71
71
  %v24 = load_field (:v23) [field=:order, plan_ref="orders.order"] [orders] -> decimal
72
72
  %v25 = load_field (:v24) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
73
- %v26 = map (:v46, :v25) [fn=:core.add] [orders] -> integer
73
+ %v26 = map (:v46, :v25) [fn=:core.add] [orders] -> decimal
74
74
  %v27 = load_input [key=:global_discount_rate, chain=[], plan_ref="global_discount_rate"] [] -> decimal
75
75
  %v28 = axis_broadcast (:v27) [from_axes=[], to_axes=[:orders]] [orders] -> decimal
76
76
  %v47 = constant [value=1.0] [orders] -> float
77
- %v48 = map (:v47, :v28) [fn=:core.sub] [orders] -> float
78
- %v49 = map (:v26, :v48) [fn=:core.mul:numeric] [orders] -> float
77
+ %v48 = map (:v47, :v28) [fn=:core.sub] [orders] -> decimal
78
+ %v49 = map (:v26, :v48) [fn=:core.mul:numeric] [orders] -> decimal
79
79
  %v50 = constant [value=0.15] [orders] -> float
80
- %v51 = map (:v49, :v50) [fn=:core.mul:numeric] [orders] -> float
81
- %v18 = map (:v49, :v51) [fn=:core.add] [orders] -> float
80
+ %v51 = map (:v49, :v50) [fn=:core.mul:numeric] [orders] -> decimal
81
+ %v18 = map (:v49, :v51) [fn=:core.add] [orders] -> decimal
82
82
  function discount_per_order:
83
- %v22 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
84
- %v23 = load_field (:v22) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
85
- %v24 = load_field (:v23) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
83
+ %v22 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
84
+ %v23 = load_field (:v22) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
85
+ %v24 = load_field (:v23) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
86
86
  %v41 = load_field (:v24) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
87
87
  %v42 = load_field (:v41) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
88
88
  %v43 = load_field (:v41) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -91,22 +91,22 @@ function discount_per_order:
91
91
  %v26 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
92
92
  %v27 = load_field (:v26) [field=:order, plan_ref="orders.order"] [orders] -> decimal
93
93
  %v28 = load_field (:v27) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
94
- %v29 = map (:v45, :v28) [fn=:core.add] [orders] -> integer
94
+ %v29 = map (:v45, :v28) [fn=:core.add] [orders] -> decimal
95
95
  %v38 = load_input [key=:global_discount_rate, chain=[], plan_ref="global_discount_rate"] [] -> decimal
96
96
  %v39 = axis_broadcast (:v38) [from_axes=[], to_axes=[:orders]] [orders] -> decimal
97
97
  %v46 = constant [value=1.0] [orders] -> float
98
- %v47 = map (:v46, :v39) [fn=:core.sub] [orders] -> float
99
- %v48 = map (:v29, :v47) [fn=:core.mul:numeric] [orders] -> float
100
- %v21 = map (:v29, :v48) [fn=:core.sub] [orders] -> float
98
+ %v47 = map (:v46, :v39) [fn=:core.sub] [orders] -> decimal
99
+ %v48 = map (:v29, :v47) [fn=:core.mul:numeric] [orders] -> decimal
100
+ %v21 = map (:v29, :v48) [fn=:core.sub] [orders] -> decimal
101
101
  function total_orders:
102
102
  %v22 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> string
103
103
  %v23 = load_field (:v22) [field=:order, plan_ref="orders.order"] [orders] -> string
104
104
  %v24 = load_field (:v23) [field=:id, plan_ref="orders.order.id"] [orders] -> string
105
105
  %v25 = reduce (:v24) [fn=:agg.count, over_axes=[:orders]] [] -> integer
106
106
  function total_revenue:
107
- %v28 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
108
- %v29 = load_field (:v28) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
109
- %v30 = load_field (:v29) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
107
+ %v28 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
108
+ %v29 = load_field (:v28) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
109
+ %v30 = load_field (:v29) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
110
110
  %v52 = load_field (:v30) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
111
111
  %v53 = load_field (:v52) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
112
112
  %v54 = load_field (:v52) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -115,20 +115,20 @@ function total_revenue:
115
115
  %v32 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
116
116
  %v33 = load_field (:v32) [field=:order, plan_ref="orders.order"] [orders] -> decimal
117
117
  %v34 = load_field (:v33) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
118
- %v35 = map (:v56, :v34) [fn=:core.add] [orders] -> integer
118
+ %v35 = map (:v56, :v34) [fn=:core.add] [orders] -> decimal
119
119
  %v36 = load_input [key=:global_discount_rate, chain=[], plan_ref="global_discount_rate"] [] -> decimal
120
120
  %v37 = axis_broadcast (:v36) [from_axes=[], to_axes=[:orders]] [orders] -> decimal
121
121
  %v57 = constant [value=1.0] [orders] -> float
122
- %v58 = map (:v57, :v37) [fn=:core.sub] [orders] -> float
123
- %v59 = map (:v35, :v58) [fn=:core.mul:numeric] [orders] -> float
122
+ %v58 = map (:v57, :v37) [fn=:core.sub] [orders] -> decimal
123
+ %v59 = map (:v35, :v58) [fn=:core.mul:numeric] [orders] -> decimal
124
124
  %v60 = constant [value=0.15] [orders] -> float
125
- %v61 = map (:v59, :v60) [fn=:core.mul:numeric] [orders] -> float
126
- %v51 = map (:v59, :v61) [fn=:core.add] [orders] -> float
127
- %v27 = reduce (:v51) [fn=:agg.sum, over_axes=[:orders]] [] -> float
125
+ %v61 = map (:v59, :v60) [fn=:core.mul:numeric] [orders] -> decimal
126
+ %v51 = map (:v59, :v61) [fn=:core.add] [orders] -> decimal
127
+ %v27 = reduce (:v51) [fn=:agg.sum, over_axes=[:orders]] [] -> decimal
128
128
  function total_tax_collected:
129
- %v30 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
130
- %v31 = load_field (:v30) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
131
- %v32 = load_field (:v31) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
129
+ %v30 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
130
+ %v31 = load_field (:v30) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
131
+ %v32 = load_field (:v31) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
132
132
  %v42 = load_field (:v32) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
133
133
  %v43 = load_field (:v42) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
134
134
  %v44 = load_field (:v42) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -137,19 +137,19 @@ function total_tax_collected:
137
137
  %v34 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
138
138
  %v35 = load_field (:v34) [field=:order, plan_ref="orders.order"] [orders] -> decimal
139
139
  %v36 = load_field (:v35) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
140
- %v37 = map (:v46, :v36) [fn=:core.add] [orders] -> integer
140
+ %v37 = map (:v46, :v36) [fn=:core.add] [orders] -> decimal
141
141
  %v38 = load_input [key=:global_discount_rate, chain=[], plan_ref="global_discount_rate"] [] -> decimal
142
142
  %v39 = axis_broadcast (:v38) [from_axes=[], to_axes=[:orders]] [orders] -> decimal
143
143
  %v47 = constant [value=1.0] [orders] -> float
144
- %v48 = map (:v47, :v39) [fn=:core.sub] [orders] -> float
145
- %v49 = map (:v37, :v48) [fn=:core.mul:numeric] [orders] -> float
144
+ %v48 = map (:v47, :v39) [fn=:core.sub] [orders] -> decimal
145
+ %v49 = map (:v37, :v48) [fn=:core.mul:numeric] [orders] -> decimal
146
146
  %v50 = constant [value=0.15] [orders] -> float
147
- %v51 = map (:v49, :v50) [fn=:core.mul:numeric] [orders] -> float
148
- %v29 = reduce (:v51) [fn=:agg.sum, over_axes=[:orders]] [] -> float
147
+ %v51 = map (:v49, :v50) [fn=:core.mul:numeric] [orders] -> decimal
148
+ %v29 = reduce (:v51) [fn=:agg.sum, over_axes=[:orders]] [] -> decimal
149
149
  function total_discount_given:
150
- %v32 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<any>
151
- %v33 = load_field (:v32) [field=:order, plan_ref="orders.order"] [orders] -> array<any>
152
- %v34 = load_field (:v33) [field=:items, plan_ref="orders.order.items"] [orders] -> array<any>
150
+ %v32 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> array<hash>
151
+ %v33 = load_field (:v32) [field=:order, plan_ref="orders.order"] [orders] -> array<hash>
152
+ %v34 = load_field (:v33) [field=:items, plan_ref="orders.order.items"] [orders] -> array<hash>
153
153
  %v52 = load_field (:v34) [field=:item, plan_ref="orders.order.items.item"] [orders, items] -> integer
154
154
  %v53 = load_field (:v52) [field=:quantity, plan_ref="orders.order.items.item.quantity"] [orders, items] -> integer
155
155
  %v54 = load_field (:v52) [field=:unit_price, plan_ref="orders.order.items.item.unit_price"] [orders, items] -> integer
@@ -158,11 +158,11 @@ function total_discount_given:
158
158
  %v36 = load_input [key=:orders, chain=[], plan_ref="orders"] [orders] -> decimal
159
159
  %v37 = load_field (:v36) [field=:order, plan_ref="orders.order"] [orders] -> decimal
160
160
  %v38 = load_field (:v37) [field=:shipping_cost, plan_ref="orders.order.shipping_cost"] [orders] -> decimal
161
- %v39 = map (:v56, :v38) [fn=:core.add] [orders] -> integer
161
+ %v39 = map (:v56, :v38) [fn=:core.add] [orders] -> decimal
162
162
  %v48 = load_input [key=:global_discount_rate, chain=[], plan_ref="global_discount_rate"] [] -> decimal
163
163
  %v49 = axis_broadcast (:v48) [from_axes=[], to_axes=[:orders]] [orders] -> decimal
164
164
  %v57 = constant [value=1.0] [orders] -> float
165
- %v58 = map (:v57, :v49) [fn=:core.sub] [orders] -> float
166
- %v59 = map (:v39, :v58) [fn=:core.mul:numeric] [orders] -> float
167
- %v51 = map (:v39, :v59) [fn=:core.sub] [orders] -> float
168
- %v31 = reduce (:v51) [fn=:agg.sum, over_axes=[:orders]] [] -> float
165
+ %v58 = map (:v57, :v49) [fn=:core.sub] [orders] -> decimal
166
+ %v59 = map (:v39, :v58) [fn=:core.mul:numeric] [orders] -> decimal
167
+ %v51 = map (:v39, :v59) [fn=:core.sub] [orders] -> decimal
168
+ %v31 = reduce (:v51) [fn=:agg.sum, over_axes=[:orders]] [] -> decimal
@@ -10,8 +10,7 @@ function order_subtotals:
10
10
  %v8 = kernel_call (:v16, :v17) [fn=:core.mul:numeric] [orders, items] -> integer
11
11
  acc_step (:acc18, :v8) [fn=:agg.sum, nil_init=false]
12
12
  loop_end [axis=:items]
13
- %v9 = acc_load (:acc18) [] -> integer
14
- array_push (:arr19, :v9)
13
+ array_push (:arr19, :acc18)
15
14
  loop_end [axis=:orders]
16
15
  function order_with_shipping:
17
16
  %v19 = load_input [key=:orders]
@@ -25,9 +24,8 @@ function order_with_shipping:
25
24
  %v17 = kernel_call (:v25, :v26) [fn=:core.mul:numeric] [orders, items] -> integer
26
25
  acc_step (:acc27, :v17) [fn=:agg.sum, nil_init=false]
27
26
  loop_end [axis=:items]
28
- %v18 = acc_load (:acc27) [] -> integer
29
27
  %v28 = load_field (:orders_el20) [field=:shipping_cost]
30
- %v9 = kernel_call (:v18, :v28) [fn=:core.add] [orders] -> integer
28
+ %v9 = kernel_call (:acc27, :v28) [fn=:core.add] [orders] -> decimal
31
29
  array_push (:arr29, :v9)
32
30
  loop_end [axis=:orders]
33
31
  function order_discounted:
@@ -42,13 +40,12 @@ function order_discounted:
42
40
  %v25 = kernel_call (:v36, :v37) [fn=:core.mul:numeric] [orders, items] -> integer
43
41
  acc_step (:acc38, :v25) [fn=:agg.sum, nil_init=false]
44
42
  loop_end [axis=:items]
45
- %v26 = acc_load (:acc38) [] -> integer
46
43
  %v39 = load_field (:orders_el31) [field=:shipping_cost]
47
- %v21 = kernel_call (:v26, :v39) [fn=:core.add] [orders] -> integer
44
+ %v21 = kernel_call (:acc38, :v39) [fn=:core.add] [orders] -> decimal
48
45
  %v40 = constant [value=1.0] [] -> float
49
46
  %v41 = load_input [key=:global_discount_rate]
50
- %v28 = kernel_call (:v40, :v41) [fn=:core.sub] [orders] -> float
51
- %v29 = kernel_call (:v21, :v28) [fn=:core.mul:numeric] [orders] -> float
47
+ %v28 = kernel_call (:v40, :v41) [fn=:core.sub] [orders] -> decimal
48
+ %v29 = kernel_call (:v21, :v28) [fn=:core.mul:numeric] [orders] -> decimal
52
49
  array_push (:arr42, :v29)
53
50
  loop_end [axis=:orders]
54
51
  function order_tax:
@@ -63,15 +60,14 @@ function order_tax:
63
60
  %v30 = kernel_call (:v43, :v44) [fn=:core.mul:numeric] [orders, items] -> integer
64
61
  acc_step (:acc45, :v30) [fn=:agg.sum, nil_init=false]
65
62
  loop_end [axis=:items]
66
- %v31 = acc_load (:acc45) [] -> integer
67
63
  %v46 = load_field (:orders_el38) [field=:shipping_cost]
68
- %v23 = kernel_call (:v31, :v46) [fn=:core.add] [orders] -> integer
64
+ %v23 = kernel_call (:acc45, :v46) [fn=:core.add] [orders] -> decimal
69
65
  %v47 = constant [value=1.0] [] -> float
70
66
  %v48 = load_input [key=:global_discount_rate]
71
- %v33 = kernel_call (:v47, :v48) [fn=:core.sub] [orders] -> float
72
- %v34 = kernel_call (:v23, :v33) [fn=:core.mul:numeric] [orders] -> float
67
+ %v33 = kernel_call (:v47, :v48) [fn=:core.sub] [orders] -> decimal
68
+ %v34 = kernel_call (:v23, :v33) [fn=:core.mul:numeric] [orders] -> decimal
73
69
  %v49 = constant [value=0.15] [] -> float
74
- %v36 = kernel_call (:v34, :v49) [fn=:core.mul:numeric] [orders] -> float
70
+ %v36 = kernel_call (:v34, :v49) [fn=:core.mul:numeric] [orders] -> decimal
75
71
  array_push (:arr50, :v36)
76
72
  loop_end [axis=:orders]
77
73
  function order_totals:
@@ -86,16 +82,15 @@ function order_totals:
86
82
  %v45 = kernel_call (:v58, :v59) [fn=:core.mul:numeric] [orders, items] -> integer
87
83
  acc_step (:acc60, :v45) [fn=:agg.sum, nil_init=false]
88
84
  loop_end [axis=:items]
89
- %v46 = acc_load (:acc60) [] -> integer
90
85
  %v61 = load_field (:orders_el53) [field=:shipping_cost]
91
- %v26 = kernel_call (:v46, :v61) [fn=:core.add] [orders] -> integer
86
+ %v26 = kernel_call (:acc60, :v61) [fn=:core.add] [orders] -> decimal
92
87
  %v62 = constant [value=1.0] [] -> float
93
88
  %v63 = load_input [key=:global_discount_rate]
94
- %v48 = kernel_call (:v62, :v63) [fn=:core.sub] [orders] -> float
95
- %v49 = kernel_call (:v26, :v48) [fn=:core.mul:numeric] [orders] -> float
89
+ %v48 = kernel_call (:v62, :v63) [fn=:core.sub] [orders] -> decimal
90
+ %v49 = kernel_call (:v26, :v48) [fn=:core.mul:numeric] [orders] -> decimal
96
91
  %v64 = constant [value=0.15] [] -> float
97
- %v51 = kernel_call (:v49, :v64) [fn=:core.mul:numeric] [orders] -> float
98
- %v18 = kernel_call (:v49, :v51) [fn=:core.add] [orders] -> float
92
+ %v51 = kernel_call (:v49, :v64) [fn=:core.mul:numeric] [orders] -> decimal
93
+ %v18 = kernel_call (:v49, :v51) [fn=:core.add] [orders] -> decimal
99
94
  array_push (:arr65, :v18)
100
95
  loop_end [axis=:orders]
101
96
  function discount_per_order:
@@ -110,14 +105,13 @@ function discount_per_order:
110
105
  %v44 = kernel_call (:v55, :v56) [fn=:core.mul:numeric] [orders, items] -> integer
111
106
  acc_step (:acc57, :v44) [fn=:agg.sum, nil_init=false]
112
107
  loop_end [axis=:items]
113
- %v45 = acc_load (:acc57) [] -> integer
114
108
  %v58 = load_field (:orders_el50) [field=:shipping_cost]
115
- %v29 = kernel_call (:v45, :v58) [fn=:core.add] [orders] -> integer
109
+ %v29 = kernel_call (:acc57, :v58) [fn=:core.add] [orders] -> decimal
116
110
  %v59 = constant [value=1.0] [] -> float
117
111
  %v60 = load_input [key=:global_discount_rate]
118
- %v47 = kernel_call (:v59, :v60) [fn=:core.sub] [orders] -> float
119
- %v48 = kernel_call (:v29, :v47) [fn=:core.mul:numeric] [orders] -> float
120
- %v21 = kernel_call (:v29, :v48) [fn=:core.sub] [orders] -> float
112
+ %v47 = kernel_call (:v59, :v60) [fn=:core.sub] [orders] -> decimal
113
+ %v48 = kernel_call (:v29, :v47) [fn=:core.mul:numeric] [orders] -> decimal
114
+ %v21 = kernel_call (:v29, :v48) [fn=:core.sub] [orders] -> decimal
121
115
  array_push (:arr61, :v21)
122
116
  loop_end [axis=:orders]
123
117
  function total_orders:
@@ -127,10 +121,9 @@ function total_orders:
127
121
  %v29 = load_field (:orders_el27) [field=:id]
128
122
  acc_step (:acc30, :v29) [fn=:agg.count, nil_init=false]
129
123
  loop_end [axis=:orders]
130
- %v25 = acc_load (:acc30) [] -> integer
131
124
  function total_revenue:
132
125
  %v62 = load_input [key=:orders]
133
- %acc75 = acc_init [fn=:agg.sum, init=0.0, nil_init=false] [] -> float
126
+ %acc75 = acc_init [fn=:agg.sum, init=0, nil_init=false] [] -> decimal
134
127
  %orders_el63 = loop_start (:v62) [axis=:orders, index=:orders_i64]
135
128
  %v65 = load_field (:orders_el63) [field=:items]
136
129
  %acc70 = acc_init [fn=:agg.sum, init=0, nil_init=false] [] -> integer
@@ -140,22 +133,20 @@ function total_revenue:
140
133
  %v55 = kernel_call (:v68, :v69) [fn=:core.mul:numeric] [orders, items] -> integer
141
134
  acc_step (:acc70, :v55) [fn=:agg.sum, nil_init=false]
142
135
  loop_end [axis=:items]
143
- %v56 = acc_load (:acc70) [] -> integer
144
136
  %v71 = load_field (:orders_el63) [field=:shipping_cost]
145
- %v35 = kernel_call (:v56, :v71) [fn=:core.add] [orders] -> integer
137
+ %v35 = kernel_call (:acc70, :v71) [fn=:core.add] [orders] -> decimal
146
138
  %v72 = constant [value=1.0] [] -> float
147
139
  %v73 = load_input [key=:global_discount_rate]
148
- %v58 = kernel_call (:v72, :v73) [fn=:core.sub] [orders] -> float
149
- %v59 = kernel_call (:v35, :v58) [fn=:core.mul:numeric] [orders] -> float
140
+ %v58 = kernel_call (:v72, :v73) [fn=:core.sub] [orders] -> decimal
141
+ %v59 = kernel_call (:v35, :v58) [fn=:core.mul:numeric] [orders] -> decimal
150
142
  %v74 = constant [value=0.15] [] -> float
151
- %v61 = kernel_call (:v59, :v74) [fn=:core.mul:numeric] [orders] -> float
152
- %v51 = kernel_call (:v59, :v61) [fn=:core.add] [orders] -> float
143
+ %v61 = kernel_call (:v59, :v74) [fn=:core.mul:numeric] [orders] -> decimal
144
+ %v51 = kernel_call (:v59, :v61) [fn=:core.add] [orders] -> decimal
153
145
  acc_step (:acc75, :v51) [fn=:agg.sum, nil_init=false]
154
146
  loop_end [axis=:orders]
155
- %v27 = acc_load (:acc75) [] -> float
156
147
  function total_tax_collected:
157
148
  %v52 = load_input [key=:orders]
158
- %acc65 = acc_init [fn=:agg.sum, init=0.0, nil_init=false] [] -> float
149
+ %acc65 = acc_init [fn=:agg.sum, init=0, nil_init=false] [] -> decimal
159
150
  %orders_el53 = loop_start (:v52) [axis=:orders, index=:orders_i54]
160
151
  %v55 = load_field (:orders_el53) [field=:items]
161
152
  %acc60 = acc_init [fn=:agg.sum, init=0, nil_init=false] [] -> integer
@@ -165,21 +156,19 @@ function total_tax_collected:
165
156
  %v45 = kernel_call (:v58, :v59) [fn=:core.mul:numeric] [orders, items] -> integer
166
157
  acc_step (:acc60, :v45) [fn=:agg.sum, nil_init=false]
167
158
  loop_end [axis=:items]
168
- %v46 = acc_load (:acc60) [] -> integer
169
159
  %v61 = load_field (:orders_el53) [field=:shipping_cost]
170
- %v37 = kernel_call (:v46, :v61) [fn=:core.add] [orders] -> integer
160
+ %v37 = kernel_call (:acc60, :v61) [fn=:core.add] [orders] -> decimal
171
161
  %v62 = constant [value=1.0] [] -> float
172
162
  %v63 = load_input [key=:global_discount_rate]
173
- %v48 = kernel_call (:v62, :v63) [fn=:core.sub] [orders] -> float
174
- %v49 = kernel_call (:v37, :v48) [fn=:core.mul:numeric] [orders] -> float
163
+ %v48 = kernel_call (:v62, :v63) [fn=:core.sub] [orders] -> decimal
164
+ %v49 = kernel_call (:v37, :v48) [fn=:core.mul:numeric] [orders] -> decimal
175
165
  %v64 = constant [value=0.15] [] -> float
176
- %v51 = kernel_call (:v49, :v64) [fn=:core.mul:numeric] [orders] -> float
166
+ %v51 = kernel_call (:v49, :v64) [fn=:core.mul:numeric] [orders] -> decimal
177
167
  acc_step (:acc65, :v51) [fn=:agg.sum, nil_init=false]
178
168
  loop_end [axis=:orders]
179
- %v29 = acc_load (:acc65) [] -> float
180
169
  function total_discount_given:
181
170
  %v60 = load_input [key=:orders]
182
- %acc72 = acc_init [fn=:agg.sum, init=0.0, nil_init=false] [] -> float
171
+ %acc72 = acc_init [fn=:agg.sum, init=0, nil_init=false] [] -> decimal
183
172
  %orders_el61 = loop_start (:v60) [axis=:orders, index=:orders_i62]
184
173
  %v63 = load_field (:orders_el61) [field=:items]
185
174
  %acc68 = acc_init [fn=:agg.sum, init=0, nil_init=false] [] -> integer
@@ -189,14 +178,12 @@ function total_discount_given:
189
178
  %v55 = kernel_call (:v66, :v67) [fn=:core.mul:numeric] [orders, items] -> integer
190
179
  acc_step (:acc68, :v55) [fn=:agg.sum, nil_init=false]
191
180
  loop_end [axis=:items]
192
- %v56 = acc_load (:acc68) [] -> integer
193
181
  %v69 = load_field (:orders_el61) [field=:shipping_cost]
194
- %v39 = kernel_call (:v56, :v69) [fn=:core.add] [orders] -> integer
182
+ %v39 = kernel_call (:acc68, :v69) [fn=:core.add] [orders] -> decimal
195
183
  %v70 = constant [value=1.0] [] -> float
196
184
  %v71 = load_input [key=:global_discount_rate]
197
- %v58 = kernel_call (:v70, :v71) [fn=:core.sub] [orders] -> float
198
- %v59 = kernel_call (:v39, :v58) [fn=:core.mul:numeric] [orders] -> float
199
- %v51 = kernel_call (:v39, :v59) [fn=:core.sub] [orders] -> float
185
+ %v58 = kernel_call (:v70, :v71) [fn=:core.sub] [orders] -> decimal
186
+ %v59 = kernel_call (:v39, :v58) [fn=:core.mul:numeric] [orders] -> decimal
187
+ %v51 = kernel_call (:v39, :v59) [fn=:core.sub] [orders] -> decimal
200
188
  acc_step (:acc72, :v51) [fn=:agg.sum, nil_init=false]
201
189
  loop_end [axis=:orders]
202
- %v31 = acc_load (:acc72) [] -> float
@@ -0,0 +1,33 @@
1
+ {
2
+ "__ruby_js_parity_skipped": "imports",
3
+ "outputs": {
4
+ "discount_per_order": [
5
+ 21.0,
6
+ 13.0
7
+ ],
8
+ "order_discounted": [
9
+ 189.0,
10
+ 117.0
11
+ ],
12
+ "order_subtotals": [
13
+ 200.0,
14
+ 120.0
15
+ ],
16
+ "order_tax": [
17
+ 28.349999999999998,
18
+ 17.55
19
+ ],
20
+ "order_totals": [
21
+ 217.35,
22
+ 134.55
23
+ ],
24
+ "order_with_shipping": [
25
+ 210.0,
26
+ 130.0
27
+ ],
28
+ "total_discount_given": 34.0,
29
+ "total_orders": 2.0,
30
+ "total_revenue": 351.9,
31
+ "total_tax_collected": 45.9
32
+ }
33
+ }
@@ -12,8 +12,7 @@ export function _order_subtotals(input) {
12
12
  let t8 = t16 * t17;
13
13
  acc18 += t8;
14
14
  }
15
- let t9 = acc18;
16
- arr19.push(t9);
15
+ arr19.push(acc18);
17
16
  }
18
17
  return arr19;
19
18
  }
@@ -32,9 +31,8 @@ export function _order_with_shipping(input) {
32
31
  let t17 = t25 * t26;
33
32
  acc27 += t17;
34
33
  }
35
- let t18 = acc27;
36
34
  let t28 = orders_el20["shipping_cost"];
37
- let t9 = t18 + t28;
35
+ let t9 = acc27 + t28;
38
36
  arr29.push(t9);
39
37
  }
40
38
  return arr29;
@@ -54,9 +52,8 @@ export function _order_discounted(input) {
54
52
  let t25 = t36 * t37;
55
53
  acc38 += t25;
56
54
  }
57
- let t26 = acc38;
58
55
  let t39 = orders_el31["shipping_cost"];
59
- let t21 = t26 + t39;
56
+ let t21 = acc38 + t39;
60
57
  let t40 = 1.0;
61
58
  let t41 = input["global_discount_rate"];
62
59
  let t28 = t40 - t41;
@@ -80,9 +77,8 @@ export function _order_tax(input) {
80
77
  let t30 = t43 * t44;
81
78
  acc45 += t30;
82
79
  }
83
- let t31 = acc45;
84
80
  let t46 = orders_el38["shipping_cost"];
85
- let t23 = t31 + t46;
81
+ let t23 = acc45 + t46;
86
82
  let t47 = 1.0;
87
83
  let t48 = input["global_discount_rate"];
88
84
  let t33 = t47 - t48;
@@ -108,9 +104,8 @@ export function _order_totals(input) {
108
104
  let t45 = t58 * t59;
109
105
  acc60 += t45;
110
106
  }
111
- let t46 = acc60;
112
107
  let t61 = orders_el53["shipping_cost"];
113
- let t26 = t46 + t61;
108
+ let t26 = acc60 + t61;
114
109
  let t62 = 1.0;
115
110
  let t63 = input["global_discount_rate"];
116
111
  let t48 = t62 - t63;
@@ -137,9 +132,8 @@ export function _discount_per_order(input) {
137
132
  let t44 = t55 * t56;
138
133
  acc57 += t44;
139
134
  }
140
- let t45 = acc57;
141
135
  let t58 = orders_el50["shipping_cost"];
142
- let t29 = t45 + t58;
136
+ let t29 = acc57 + t58;
143
137
  let t59 = 1.0;
144
138
  let t60 = input["global_discount_rate"];
145
139
  let t47 = t59 - t60;
@@ -158,13 +152,12 @@ export function _total_orders(input) {
158
152
  let t29 = orders_el27["id"];
159
153
  acc30 += 1;
160
154
  }
161
- let t25 = acc30;
162
- return t25;
155
+ return acc30;
163
156
  }
164
157
 
165
158
  export function _total_revenue(input) {
166
159
  let t62 = input["orders"];
167
- let acc75 = 0.0;
160
+ let acc75 = 0;
168
161
  for (let orders_i64 = 0; orders_i64 < t62.length; orders_i64++) {
169
162
  let orders_el63 = t62[orders_i64];
170
163
  let t65 = orders_el63["items"];
@@ -176,9 +169,8 @@ export function _total_revenue(input) {
176
169
  let t55 = t68 * t69;
177
170
  acc70 += t55;
178
171
  }
179
- let t56 = acc70;
180
172
  let t71 = orders_el63["shipping_cost"];
181
- let t35 = t56 + t71;
173
+ let t35 = acc70 + t71;
182
174
  let t72 = 1.0;
183
175
  let t73 = input["global_discount_rate"];
184
176
  let t58 = t72 - t73;
@@ -188,13 +180,12 @@ export function _total_revenue(input) {
188
180
  let t51 = t59 + t61;
189
181
  acc75 += t51;
190
182
  }
191
- let t27 = acc75;
192
- return t27;
183
+ return acc75;
193
184
  }
194
185
 
195
186
  export function _total_tax_collected(input) {
196
187
  let t52 = input["orders"];
197
- let acc65 = 0.0;
188
+ let acc65 = 0;
198
189
  for (let orders_i54 = 0; orders_i54 < t52.length; orders_i54++) {
199
190
  let orders_el53 = t52[orders_i54];
200
191
  let t55 = orders_el53["items"];
@@ -206,9 +197,8 @@ export function _total_tax_collected(input) {
206
197
  let t45 = t58 * t59;
207
198
  acc60 += t45;
208
199
  }
209
- let t46 = acc60;
210
200
  let t61 = orders_el53["shipping_cost"];
211
- let t37 = t46 + t61;
201
+ let t37 = acc60 + t61;
212
202
  let t62 = 1.0;
213
203
  let t63 = input["global_discount_rate"];
214
204
  let t48 = t62 - t63;
@@ -217,13 +207,12 @@ export function _total_tax_collected(input) {
217
207
  let t51 = t49 * t64;
218
208
  acc65 += t51;
219
209
  }
220
- let t29 = acc65;
221
- return t29;
210
+ return acc65;
222
211
  }
223
212
 
224
213
  export function _total_discount_given(input) {
225
214
  let t60 = input["orders"];
226
- let acc72 = 0.0;
215
+ let acc72 = 0;
227
216
  for (let orders_i62 = 0; orders_i62 < t60.length; orders_i62++) {
228
217
  let orders_el61 = t60[orders_i62];
229
218
  let t63 = orders_el61["items"];
@@ -235,9 +224,8 @@ export function _total_discount_given(input) {
235
224
  let t55 = t66 * t67;
236
225
  acc68 += t55;
237
226
  }
238
- let t56 = acc68;
239
227
  let t69 = orders_el61["shipping_cost"];
240
- let t39 = t56 + t69;
228
+ let t39 = acc68 + t69;
241
229
  let t70 = 1.0;
242
230
  let t71 = input["global_discount_rate"];
243
231
  let t58 = t70 - t71;
@@ -245,7 +233,6 @@ export function _total_discount_given(input) {
245
233
  let t51 = t39 - t59;
246
234
  acc72 += t51;
247
235
  }
248
- let t31 = acc72;
249
- return t31;
236
+ return acc72;
250
237
  }
251
238