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
@@ -0,0 +1,22 @@
1
+ export function _item_taxes(input) {
2
+ let out = [];
3
+ let t1 = input["items"];
4
+ t1.forEach((items_el_2, items_i_3) => {
5
+ let t4 = items_el_2["amount"];
6
+ let t5 = Kumi.TestSharedSchemas.Tax.from({'amount': t4})._tax;
7
+ out.push(t5);
8
+ });
9
+ return out;
10
+ }
11
+
12
+ export function _total_tax(input) {
13
+ let acc_6 = 0.0;
14
+ let t7 = input["items"];
15
+ t7.forEach((items_el_8, items_i_9) => {
16
+ let t13 = items_el_8["amount"];
17
+ let t14 = Kumi.TestSharedSchemas.Tax.from({'amount': t13})._tax;
18
+ acc_6 += t14;
19
+ });
20
+ return acc_6;
21
+ }
22
+
@@ -0,0 +1,24 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_e4504edf626687333aef4d85adaabe128968741254711318cfd3f4fe5d40cebe
3
+ def self._item_taxes(input)
4
+ out = []
5
+ t1 = input["items"] || input[:items]
6
+ t1.each_with_index do |items_el_2, items_i_3|
7
+ t4 = items_el_2["amount"] || items_el_2[:amount]
8
+ t5 = Kumi::TestSharedSchemas::Tax._tax({"amount" => t4})
9
+ out << t5
10
+ end
11
+ out
12
+ end
13
+
14
+ def self._total_tax(input)
15
+ acc_6 = 0.0
16
+ t7 = input["items"] || input[:items]
17
+ t7.each_with_index do |items_el_8, items_i_9|
18
+ t13 = items_el_8["amount"] || items_el_8[:amount]
19
+ t14 = Kumi::TestSharedSchemas::Tax._tax({"amount" => t13})
20
+ acc_6 += t14
21
+ end
22
+ acc_6
23
+ end
24
+ end
@@ -0,0 +1,12 @@
1
+ (SNAST
2
+ (VALUE item_taxes
3
+ (ImportCall :tax
4
+ (amount (InputRef items.item.amount key_chain=[]) :: [items] -> decimal)
5
+ ) :: [items] -> float
6
+ ) :: [items] -> float
7
+ (VALUE total_tax
8
+ (Reduce :agg.sum over [items]
9
+ (Ref item_taxes) :: [items] -> float
10
+ ) :: [] -> float
11
+ ) :: [] -> float
12
+ )
@@ -0,0 +1,4 @@
1
+ {
2
+ "item_taxes": [15, 30, 45],
3
+ "total_tax": 90
4
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "items": [
3
+ { "amount": 100 },
4
+ { "amount": 200 },
5
+ { "amount": 300 }
6
+ ]
7
+ }
@@ -0,0 +1,14 @@
1
+ schema do
2
+ import :tax, from: Kumi::TestSharedSchemas::Tax
3
+
4
+ input do
5
+ array :items do
6
+ hash :item do
7
+ decimal :amount
8
+ end
9
+ end
10
+ end
11
+
12
+ value :item_taxes, tax(amount: input.items.item.amount)
13
+ value :total_tax, fn(:sum, item_taxes)
14
+ end
@@ -0,0 +1,82 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :global_discount_rate :decimal)
4
+ (InputDeclaration :orders :array
5
+ [
6
+ (InputDeclaration :order :hash
7
+ [
8
+ (InputDeclaration :id :string)
9
+ (InputDeclaration :items :array
10
+ [
11
+ (InputDeclaration :item :hash
12
+ [
13
+ (InputDeclaration :quantity :integer)
14
+ (InputDeclaration :unit_price :integer)
15
+ ]
16
+ )
17
+ ]
18
+ )
19
+ (InputDeclaration :shipping_cost :decimal)
20
+ ]
21
+ )
22
+ ]
23
+ )
24
+ ]
25
+ values: [
26
+ (ValueDeclaration :order_subtotals
27
+ (ImportCall :subtotal
28
+ (items (InputElementReference orders.order.items))
29
+ )
30
+ )
31
+ (ValueDeclaration :order_with_shipping
32
+ (CallExpression :add
33
+ (DeclarationReference :order_subtotals)
34
+ (InputElementReference orders.order.shipping_cost)
35
+ )
36
+ )
37
+ (ValueDeclaration :order_discounted
38
+ (ImportCall :discounted
39
+ (price (DeclarationReference :order_with_shipping))
40
+ (rate (InputReference :global_discount_rate))
41
+ )
42
+ )
43
+ (ValueDeclaration :order_tax
44
+ (ImportCall :tax
45
+ (amount (DeclarationReference :order_discounted))
46
+ )
47
+ )
48
+ (ValueDeclaration :order_totals
49
+ (CallExpression :add
50
+ (DeclarationReference :order_discounted)
51
+ (DeclarationReference :order_tax)
52
+ )
53
+ )
54
+ (ValueDeclaration :discount_per_order
55
+ (CallExpression :subtract
56
+ (DeclarationReference :order_with_shipping)
57
+ (DeclarationReference :order_discounted)
58
+ )
59
+ )
60
+ (ValueDeclaration :total_orders
61
+ (CallExpression :count
62
+ (InputElementReference orders.order.id)
63
+ )
64
+ )
65
+ (ValueDeclaration :total_revenue
66
+ (CallExpression :sum
67
+ (DeclarationReference :order_totals)
68
+ )
69
+ )
70
+ (ValueDeclaration :total_tax_collected
71
+ (CallExpression :sum
72
+ (DeclarationReference :order_tax)
73
+ )
74
+ )
75
+ (ValueDeclaration :total_discount_given
76
+ (CallExpression :sum
77
+ (DeclarationReference :discount_per_order)
78
+ )
79
+ )
80
+ ]
81
+ traits: []
82
+ )
@@ -0,0 +1,16 @@
1
+ global_discount_rate: decimal
2
+ orders: array (array) access_mode=element
3
+ └─> order: element_access
4
+ order: hash (hash)
5
+ └─> id: property_access
6
+ └─> items: property_access → array_loop
7
+ └─> shipping_cost: property_access
8
+ id: string
9
+ items: array (array) access_mode=element
10
+ └─> item: element_access
11
+ item: hash (hash)
12
+ └─> quantity: property_access
13
+ └─> unit_price: property_access
14
+ quantity: integer
15
+ unit_price: integer
16
+ shipping_cost: decimal
@@ -0,0 +1,94 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration order_with_shipping
11
+ %t6 = load_input "orders" :: array
12
+ loop orders id=L2 in %t6 as el=%orders_el_7, idx=%orders_i_8
13
+ %t9 = load_decl order_subtotals axes=[orders] :: integer
14
+ %t10 = load_field orders_el_7["shipping_cost"] :: decimal
15
+ %t11 = call core.add(%t9, %t10) :: integer
16
+ yield %t11
17
+ end_loop
18
+ )
19
+ (Declaration order_discounted
20
+ %t12 = load_input "orders" :: array
21
+ loop orders id=L3 in %t12 as el=%orders_el_13, idx=%orders_i_14
22
+ %t15 = load_decl order_with_shipping axes=[orders] :: integer
23
+ %t16 = load_input "global_discount_rate" :: decimal
24
+ %t17 = importschemacall %t15, %t16 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
25
+ yield %t17
26
+ end_loop
27
+ )
28
+ (Declaration order_tax
29
+ %t18 = load_input "orders" :: array
30
+ loop orders id=L4 in %t18 as el=%orders_el_19, idx=%orders_i_20
31
+ %t21 = load_decl order_discounted axes=[orders] :: float
32
+ %t22 = importschemacall %t21 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
33
+ yield %t22
34
+ end_loop
35
+ )
36
+ (Declaration order_totals
37
+ %t23 = load_input "orders" :: array
38
+ loop orders id=L5 in %t23 as el=%orders_el_24, idx=%orders_i_25
39
+ %t26 = load_decl order_discounted axes=[orders] :: float
40
+ %t27 = load_decl order_tax axes=[orders] :: float
41
+ %t28 = call core.add(%t26, %t27) :: float
42
+ yield %t28
43
+ end_loop
44
+ )
45
+ (Declaration discount_per_order
46
+ %t29 = load_input "orders" :: array
47
+ loop orders id=L6 in %t29 as el=%orders_el_30, idx=%orders_i_31
48
+ %t32 = load_decl order_with_shipping axes=[orders] :: integer
49
+ %t33 = load_decl order_discounted axes=[orders] :: float
50
+ %t34 = call core.sub(%t32, %t33) :: float
51
+ yield %t34
52
+ end_loop
53
+ )
54
+ (Declaration total_orders
55
+ %acc_35 = decl_acc :: integer
56
+ %t36 = load_input "orders" :: array
57
+ loop orders id=L7 in %t36 as el=%orders_el_37, idx=%orders_i_38
58
+ %t39 = load_field orders_el_37["id"] :: string
59
+ %acc_35 = acc_add agg.count(%acc_35, %t39) :: integer
60
+ end_loop
61
+ %t40 = acc_load %acc_35 :: integer
62
+ yield %t40
63
+ )
64
+ (Declaration total_revenue
65
+ %acc_41 = decl_acc :: float
66
+ %t42 = load_input "orders" :: array
67
+ loop orders id=L8 in %t42 as el=%orders_el_43, idx=%orders_i_44
68
+ %t45 = load_decl order_totals axes=[orders] :: float
69
+ %acc_41 = acc_add agg.sum(%acc_41, %t45) :: float
70
+ end_loop
71
+ %t46 = acc_load %acc_41 :: float
72
+ yield %t46
73
+ )
74
+ (Declaration total_tax_collected
75
+ %acc_47 = decl_acc :: float
76
+ %t48 = load_input "orders" :: array
77
+ loop orders id=L9 in %t48 as el=%orders_el_49, idx=%orders_i_50
78
+ %t51 = load_decl order_tax axes=[orders] :: float
79
+ %acc_47 = acc_add agg.sum(%acc_47, %t51) :: float
80
+ end_loop
81
+ %t52 = acc_load %acc_47 :: float
82
+ yield %t52
83
+ )
84
+ (Declaration total_discount_given
85
+ %acc_53 = decl_acc :: float
86
+ %t54 = load_input "orders" :: array
87
+ loop orders id=L10 in %t54 as el=%orders_el_55, idx=%orders_i_56
88
+ %t57 = load_decl discount_per_order axes=[orders] :: float
89
+ %acc_53 = acc_add agg.sum(%acc_53, %t57) :: float
90
+ end_loop
91
+ %t58 = acc_load %acc_53 :: float
92
+ yield %t58
93
+ )
94
+ )
@@ -0,0 +1,94 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration order_with_shipping
11
+ %t6 = load_input "orders" :: array
12
+ loop orders id=L2 in %t6 as el=%orders_el_7, idx=%orders_i_8
13
+ %t9 = load_decl order_subtotals axes=[orders] :: integer
14
+ %t10 = load_field orders_el_7["shipping_cost"] :: decimal
15
+ %t11 = call core.add(%t9, %t10) :: integer
16
+ yield %t11
17
+ end_loop
18
+ )
19
+ (Declaration order_discounted
20
+ %t12 = load_input "orders" :: array
21
+ loop orders id=L3 in %t12 as el=%orders_el_13, idx=%orders_i_14
22
+ %t15 = load_decl order_with_shipping axes=[orders] :: integer
23
+ %t16 = load_input "global_discount_rate" :: decimal
24
+ %t17 = importschemacall %t15, %t16 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
25
+ yield %t17
26
+ end_loop
27
+ )
28
+ (Declaration order_tax
29
+ %t18 = load_input "orders" :: array
30
+ loop orders id=L4 in %t18 as el=%orders_el_19, idx=%orders_i_20
31
+ %t21 = load_decl order_discounted axes=[orders] :: float
32
+ %t22 = importschemacall %t21 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
33
+ yield %t22
34
+ end_loop
35
+ )
36
+ (Declaration order_totals
37
+ %t23 = load_input "orders" :: array
38
+ loop orders id=L5 in %t23 as el=%orders_el_24, idx=%orders_i_25
39
+ %t26 = load_decl order_discounted axes=[orders] :: float
40
+ %t27 = load_decl order_tax axes=[orders] :: float
41
+ %t28 = call core.add(%t26, %t27) :: float
42
+ yield %t28
43
+ end_loop
44
+ )
45
+ (Declaration discount_per_order
46
+ %t29 = load_input "orders" :: array
47
+ loop orders id=L6 in %t29 as el=%orders_el_30, idx=%orders_i_31
48
+ %t32 = load_decl order_with_shipping axes=[orders] :: integer
49
+ %t33 = load_decl order_discounted axes=[orders] :: float
50
+ %t34 = call core.sub(%t32, %t33) :: float
51
+ yield %t34
52
+ end_loop
53
+ )
54
+ (Declaration total_orders
55
+ %acc_35 = decl_acc :: integer
56
+ %t36 = load_input "orders" :: array
57
+ loop orders id=L7 in %t36 as el=%orders_el_37, idx=%orders_i_38
58
+ %t39 = load_field orders_el_37["id"] :: string
59
+ %acc_35 = acc_add agg.count(%acc_35, %t39) :: integer
60
+ end_loop
61
+ %t40 = acc_load %acc_35 :: integer
62
+ yield %t40
63
+ )
64
+ (Declaration total_revenue
65
+ %acc_41 = decl_acc :: float
66
+ %t42 = load_input "orders" :: array
67
+ loop orders id=L8 in %t42 as el=%orders_el_43, idx=%orders_i_44
68
+ %t45 = load_decl order_totals axes=[orders] :: float
69
+ %acc_41 = acc_add agg.sum(%acc_41, %t45) :: float
70
+ end_loop
71
+ %t46 = acc_load %acc_41 :: float
72
+ yield %t46
73
+ )
74
+ (Declaration total_tax_collected
75
+ %acc_47 = decl_acc :: float
76
+ %t48 = load_input "orders" :: array
77
+ loop orders id=L9 in %t48 as el=%orders_el_49, idx=%orders_i_50
78
+ %t51 = load_decl order_tax axes=[orders] :: float
79
+ %acc_47 = acc_add agg.sum(%acc_47, %t51) :: float
80
+ end_loop
81
+ %t52 = acc_load %acc_47 :: float
82
+ yield %t52
83
+ )
84
+ (Declaration total_discount_given
85
+ %acc_53 = decl_acc :: float
86
+ %t54 = load_input "orders" :: array
87
+ loop orders id=L10 in %t54 as el=%orders_el_55, idx=%orders_i_56
88
+ %t57 = load_decl discount_per_order axes=[orders] :: float
89
+ %acc_53 = acc_add agg.sum(%acc_53, %t57) :: float
90
+ end_loop
91
+ %t58 = acc_load %acc_53 :: float
92
+ yield %t58
93
+ )
94
+ )
@@ -0,0 +1,187 @@
1
+ (LIR
2
+ (Declaration order_subtotals
3
+ %t1 = load_input "orders" :: array
4
+ loop orders id=L1 in %t1 as el=%orders_el_2, idx=%orders_i_3
5
+ %t4 = load_field orders_el_2["items"] :: array
6
+ %t5 = importschemacall %t4 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
7
+ yield %t5
8
+ end_loop
9
+ )
10
+ (Declaration order_with_shipping
11
+ %t6 = load_input "orders" :: array
12
+ loop orders id=L2 in %t6 as el=%orders_el_7, idx=%orders_i_8
13
+ %t59 = load_input "orders" :: array
14
+ %t60 = load_field orders_el_7["items"] :: array
15
+ %t61 = importschemacall %t60 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
16
+ %t10 = load_field orders_el_7["shipping_cost"] :: decimal
17
+ %t11 = call core.add(%t61, %t10) :: integer
18
+ yield %t11
19
+ end_loop
20
+ )
21
+ (Declaration order_discounted
22
+ %t12 = load_input "orders" :: array
23
+ loop orders id=L3 in %t12 as el=%orders_el_13, idx=%orders_i_14
24
+ %t62 = load_input "orders" :: array
25
+ %t66 = load_input "orders" :: array
26
+ %t67 = load_field orders_el_13["items"] :: array
27
+ %t68 = importschemacall %t67 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
28
+ %t64 = load_field orders_el_13["shipping_cost"] :: decimal
29
+ %t65 = call core.add(%t68, %t64) :: integer
30
+ %t16 = load_input "global_discount_rate" :: decimal
31
+ %t17 = importschemacall %t65, %t16 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
32
+ yield %t17
33
+ end_loop
34
+ )
35
+ (Declaration order_tax
36
+ %t18 = load_input "orders" :: array
37
+ loop orders id=L4 in %t18 as el=%orders_el_19, idx=%orders_i_20
38
+ %t69 = load_input "orders" :: array
39
+ %t73 = load_input "orders" :: array
40
+ %t77 = load_input "orders" :: array
41
+ %t78 = load_field orders_el_19["items"] :: array
42
+ %t79 = importschemacall %t78 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
43
+ %t75 = load_field orders_el_19["shipping_cost"] :: decimal
44
+ %t76 = call core.add(%t79, %t75) :: integer
45
+ %t71 = load_input "global_discount_rate" :: decimal
46
+ %t72 = importschemacall %t76, %t71 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
47
+ %t22 = importschemacall %t72 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
48
+ yield %t22
49
+ end_loop
50
+ )
51
+ (Declaration order_totals
52
+ %t23 = load_input "orders" :: array
53
+ loop orders id=L5 in %t23 as el=%orders_el_24, idx=%orders_i_25
54
+ %t80 = load_input "orders" :: array
55
+ %t84 = load_input "orders" :: array
56
+ %t88 = load_input "orders" :: array
57
+ %t89 = load_field orders_el_24["items"] :: array
58
+ %t90 = importschemacall %t89 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
59
+ %t86 = load_field orders_el_24["shipping_cost"] :: decimal
60
+ %t87 = call core.add(%t90, %t86) :: integer
61
+ %t82 = load_input "global_discount_rate" :: decimal
62
+ %t83 = importschemacall %t87, %t82 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
63
+ %t91 = load_input "orders" :: array
64
+ %t94 = load_input "orders" :: array
65
+ %t98 = load_input "orders" :: array
66
+ %t102 = load_input "orders" :: array
67
+ %t103 = load_field orders_el_24["items"] :: array
68
+ %t104 = importschemacall %t103 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
69
+ %t100 = load_field orders_el_24["shipping_cost"] :: decimal
70
+ %t101 = call core.add(%t104, %t100) :: integer
71
+ %t96 = load_input "global_discount_rate" :: decimal
72
+ %t97 = importschemacall %t101, %t96 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
73
+ %t93 = importschemacall %t97 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
74
+ %t28 = call core.add(%t83, %t93) :: float
75
+ yield %t28
76
+ end_loop
77
+ )
78
+ (Declaration discount_per_order
79
+ %t29 = load_input "orders" :: array
80
+ loop orders id=L6 in %t29 as el=%orders_el_30, idx=%orders_i_31
81
+ %t105 = load_input "orders" :: array
82
+ %t109 = load_input "orders" :: array
83
+ %t110 = load_field orders_el_30["items"] :: array
84
+ %t111 = importschemacall %t110 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
85
+ %t107 = load_field orders_el_30["shipping_cost"] :: decimal
86
+ %t108 = call core.add(%t111, %t107) :: integer
87
+ %t112 = load_input "orders" :: array
88
+ %t116 = load_input "orders" :: array
89
+ %t120 = load_input "orders" :: array
90
+ %t121 = load_field orders_el_30["items"] :: array
91
+ %t122 = importschemacall %t121 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
92
+ %t118 = load_field orders_el_30["shipping_cost"] :: decimal
93
+ %t119 = call core.add(%t122, %t118) :: integer
94
+ %t114 = load_input "global_discount_rate" :: decimal
95
+ %t115 = importschemacall %t119, %t114 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
96
+ %t34 = call core.sub(%t108, %t115) :: float
97
+ yield %t34
98
+ end_loop
99
+ )
100
+ (Declaration total_orders
101
+ %acc_35 = decl_acc :: integer
102
+ %t36 = load_input "orders" :: array
103
+ loop orders id=L7 in %t36 as el=%orders_el_37, idx=%orders_i_38
104
+ %t39 = load_field orders_el_37["id"] :: string
105
+ %acc_35 = acc_add agg.count(%acc_35, %t39) :: integer
106
+ end_loop
107
+ %t40 = acc_load %acc_35 :: integer
108
+ yield %t40
109
+ )
110
+ (Declaration total_revenue
111
+ %acc_41 = decl_acc :: float
112
+ %t42 = load_input "orders" :: array
113
+ loop orders id=L8 in %t42 as el=%orders_el_43, idx=%orders_i_44
114
+ %t123 = load_input "orders" :: array
115
+ %t127 = load_input "orders" :: array
116
+ %t131 = load_input "orders" :: array
117
+ %t135 = load_input "orders" :: array
118
+ %t136 = load_field orders_el_43["items"] :: array
119
+ %t137 = importschemacall %t136 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
120
+ %t133 = load_field orders_el_43["shipping_cost"] :: decimal
121
+ %t134 = call core.add(%t137, %t133) :: integer
122
+ %t129 = load_input "global_discount_rate" :: decimal
123
+ %t130 = importschemacall %t134, %t129 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
124
+ %t138 = load_input "orders" :: array
125
+ %t141 = load_input "orders" :: array
126
+ %t145 = load_input "orders" :: array
127
+ %t149 = load_input "orders" :: array
128
+ %t150 = load_field orders_el_43["items"] :: array
129
+ %t151 = importschemacall %t150 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
130
+ %t147 = load_field orders_el_43["shipping_cost"] :: decimal
131
+ %t148 = call core.add(%t151, %t147) :: integer
132
+ %t143 = load_input "global_discount_rate" :: decimal
133
+ %t144 = importschemacall %t148, %t143 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
134
+ %t140 = importschemacall %t144 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
135
+ %t126 = call core.add(%t130, %t140) :: float
136
+ %acc_41 = acc_add agg.sum(%acc_41, %t126) :: float
137
+ end_loop
138
+ %t46 = acc_load %acc_41 :: float
139
+ yield %t46
140
+ )
141
+ (Declaration total_tax_collected
142
+ %acc_47 = decl_acc :: float
143
+ %t48 = load_input "orders" :: array
144
+ loop orders id=L9 in %t48 as el=%orders_el_49, idx=%orders_i_50
145
+ %t152 = load_input "orders" :: array
146
+ %t155 = load_input "orders" :: array
147
+ %t159 = load_input "orders" :: array
148
+ %t163 = load_input "orders" :: array
149
+ %t164 = load_field orders_el_49["items"] :: array
150
+ %t165 = importschemacall %t164 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
151
+ %t161 = load_field orders_el_49["shipping_cost"] :: decimal
152
+ %t162 = call core.add(%t165, %t161) :: integer
153
+ %t157 = load_input "global_discount_rate" :: decimal
154
+ %t158 = importschemacall %t162, %t157 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
155
+ %t154 = importschemacall %t158 fn_name="tax" source_module="Kumi::TestSharedSchemas::Tax" input_mapping_keys=["amount"] :: float
156
+ %acc_47 = acc_add agg.sum(%acc_47, %t154) :: float
157
+ end_loop
158
+ %t52 = acc_load %acc_47 :: float
159
+ yield %t52
160
+ )
161
+ (Declaration total_discount_given
162
+ %acc_53 = decl_acc :: float
163
+ %t54 = load_input "orders" :: array
164
+ loop orders id=L10 in %t54 as el=%orders_el_55, idx=%orders_i_56
165
+ %t166 = load_input "orders" :: array
166
+ %t170 = load_input "orders" :: array
167
+ %t174 = load_input "orders" :: array
168
+ %t175 = load_field orders_el_55["items"] :: array
169
+ %t176 = importschemacall %t175 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
170
+ %t172 = load_field orders_el_55["shipping_cost"] :: decimal
171
+ %t173 = call core.add(%t176, %t172) :: integer
172
+ %t177 = load_input "orders" :: array
173
+ %t181 = load_input "orders" :: array
174
+ %t185 = load_input "orders" :: array
175
+ %t186 = load_field orders_el_55["items"] :: array
176
+ %t187 = importschemacall %t186 fn_name="subtotal" source_module="Kumi::TestSharedSchemas::Subtotal" input_mapping_keys=["items"] :: integer
177
+ %t183 = load_field orders_el_55["shipping_cost"] :: decimal
178
+ %t184 = call core.add(%t187, %t183) :: integer
179
+ %t179 = load_input "global_discount_rate" :: decimal
180
+ %t180 = importschemacall %t184, %t179 fn_name="discounted" source_module="Kumi::TestSharedSchemas::Discount" input_mapping_keys=["price", "rate"] :: float
181
+ %t169 = call core.sub(%t173, %t180) :: float
182
+ %acc_53 = acc_add agg.sum(%acc_53, %t169) :: float
183
+ end_loop
184
+ %t58 = acc_load %acc_53 :: float
185
+ yield %t58
186
+ )
187
+ )