kumi 0.0.31 → 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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kumi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.31
4
+ version: 0.0.33
5
5
  platform: ruby
6
6
  authors:
7
7
  - André Muta
@@ -83,12 +83,14 @@ files:
83
83
  - data/kernels/ruby/core/select.yaml
84
84
  - data/kernels/ruby/core/string.yaml
85
85
  - docs/ARCHITECTURE.md
86
+ - docs/COMPOSED_SCHEMAS.md
86
87
  - docs/DEVELOPMENT.md
87
88
  - docs/FORM_SCHEMA.md
88
89
  - docs/FUNCTIONS.md
89
90
  - docs/GOLDEN_QUICK_START.md
90
91
  - docs/GOLDEN_TESTS.md
91
92
  - docs/OUTPUT_SCHEMA.md
93
+ - docs/SCHEMA_IMPORTS.md
92
94
  - docs/SYNTAX.md
93
95
  - docs/UNSAT_DETECTION.md
94
96
  - docs/VSCODE_EXTENSION.md
@@ -221,6 +223,22 @@ files:
221
223
  - golden/empty_and_null_inputs/expected/snast.txt
222
224
  - golden/empty_and_null_inputs/input.json
223
225
  - golden/empty_and_null_inputs/schema.kumi
226
+ - golden/example_xpto/expected.json
227
+ - golden/example_xpto/expected/ast.txt
228
+ - golden/example_xpto/expected/input_plan.txt
229
+ - golden/example_xpto/expected/lir_00_unoptimized.txt
230
+ - golden/example_xpto/expected/lir_01_hoist_scalar_references.txt
231
+ - golden/example_xpto/expected/lir_02_inlined.txt
232
+ - golden/example_xpto/expected/lir_03_cse.txt
233
+ - golden/example_xpto/expected/lir_04_1_loop_fusion.txt
234
+ - golden/example_xpto/expected/lir_04_loop_invcm.txt
235
+ - golden/example_xpto/expected/lir_06_const_prop.txt
236
+ - golden/example_xpto/expected/nast.txt
237
+ - golden/example_xpto/expected/schema_javascript.mjs
238
+ - golden/example_xpto/expected/schema_ruby.rb
239
+ - golden/example_xpto/expected/snast.txt
240
+ - golden/example_xpto/input.json
241
+ - golden/example_xpto/schema.kumi
224
242
  - golden/function_overload/expected/ast.txt
225
243
  - golden/function_overload/expected/input_plan.txt
226
244
  - golden/function_overload/expected/lir_00_unoptimized.txt
@@ -476,6 +494,150 @@ files:
476
494
  - golden/roll/expected/snast.txt
477
495
  - golden/roll/input.json
478
496
  - golden/roll/schema.kumi
497
+ - golden/schema_imports_broadcasting_with_imports/expected.json
498
+ - golden/schema_imports_broadcasting_with_imports/expected/ast.txt
499
+ - golden/schema_imports_broadcasting_with_imports/expected/input_plan.txt
500
+ - golden/schema_imports_broadcasting_with_imports/expected/lir_00_unoptimized.txt
501
+ - golden/schema_imports_broadcasting_with_imports/expected/lir_01_hoist_scalar_references.txt
502
+ - golden/schema_imports_broadcasting_with_imports/expected/lir_02_inlined.txt
503
+ - golden/schema_imports_broadcasting_with_imports/expected/lir_03_cse.txt
504
+ - golden/schema_imports_broadcasting_with_imports/expected/lir_04_1_loop_fusion.txt
505
+ - golden/schema_imports_broadcasting_with_imports/expected/lir_04_loop_invcm.txt
506
+ - golden/schema_imports_broadcasting_with_imports/expected/lir_06_const_prop.txt
507
+ - golden/schema_imports_broadcasting_with_imports/expected/nast.txt
508
+ - golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs
509
+ - golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb
510
+ - golden/schema_imports_broadcasting_with_imports/expected/snast.txt
511
+ - golden/schema_imports_broadcasting_with_imports/input.json
512
+ - golden/schema_imports_broadcasting_with_imports/schema.kumi
513
+ - golden/schema_imports_complex_order_calc/expected.json
514
+ - golden/schema_imports_complex_order_calc/expected/ast.txt
515
+ - golden/schema_imports_complex_order_calc/expected/input_plan.txt
516
+ - golden/schema_imports_complex_order_calc/expected/lir_00_unoptimized.txt
517
+ - golden/schema_imports_complex_order_calc/expected/lir_01_hoist_scalar_references.txt
518
+ - golden/schema_imports_complex_order_calc/expected/lir_02_inlined.txt
519
+ - golden/schema_imports_complex_order_calc/expected/lir_03_cse.txt
520
+ - golden/schema_imports_complex_order_calc/expected/lir_04_1_loop_fusion.txt
521
+ - golden/schema_imports_complex_order_calc/expected/lir_04_loop_invcm.txt
522
+ - golden/schema_imports_complex_order_calc/expected/lir_06_const_prop.txt
523
+ - golden/schema_imports_complex_order_calc/expected/nast.txt
524
+ - golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs
525
+ - golden/schema_imports_complex_order_calc/expected/schema_ruby.rb
526
+ - golden/schema_imports_complex_order_calc/expected/snast.txt
527
+ - golden/schema_imports_complex_order_calc/input.json
528
+ - golden/schema_imports_complex_order_calc/schema.kumi
529
+ - golden/schema_imports_composed_order/expected.json
530
+ - golden/schema_imports_composed_order/expected/ast.txt
531
+ - golden/schema_imports_composed_order/expected/input_plan.txt
532
+ - golden/schema_imports_composed_order/expected/lir_00_unoptimized.txt
533
+ - golden/schema_imports_composed_order/expected/lir_01_hoist_scalar_references.txt
534
+ - golden/schema_imports_composed_order/expected/lir_02_inlined.txt
535
+ - golden/schema_imports_composed_order/expected/lir_03_cse.txt
536
+ - golden/schema_imports_composed_order/expected/lir_04_1_loop_fusion.txt
537
+ - golden/schema_imports_composed_order/expected/lir_04_loop_invcm.txt
538
+ - golden/schema_imports_composed_order/expected/lir_06_const_prop.txt
539
+ - golden/schema_imports_composed_order/expected/nast.txt
540
+ - golden/schema_imports_composed_order/expected/schema_javascript.mjs
541
+ - golden/schema_imports_composed_order/expected/schema_ruby.rb
542
+ - golden/schema_imports_composed_order/expected/snast.txt
543
+ - golden/schema_imports_composed_order/input.json
544
+ - golden/schema_imports_composed_order/schema.kumi
545
+ - golden/schema_imports_discount_with_tax/expected.json
546
+ - golden/schema_imports_discount_with_tax/expected/ast.txt
547
+ - golden/schema_imports_discount_with_tax/expected/input_plan.txt
548
+ - golden/schema_imports_discount_with_tax/expected/lir_00_unoptimized.txt
549
+ - golden/schema_imports_discount_with_tax/expected/lir_01_hoist_scalar_references.txt
550
+ - golden/schema_imports_discount_with_tax/expected/lir_02_inlined.txt
551
+ - golden/schema_imports_discount_with_tax/expected/lir_03_cse.txt
552
+ - golden/schema_imports_discount_with_tax/expected/lir_04_1_loop_fusion.txt
553
+ - golden/schema_imports_discount_with_tax/expected/lir_04_loop_invcm.txt
554
+ - golden/schema_imports_discount_with_tax/expected/lir_06_const_prop.txt
555
+ - golden/schema_imports_discount_with_tax/expected/nast.txt
556
+ - golden/schema_imports_discount_with_tax/expected/schema_javascript.mjs
557
+ - golden/schema_imports_discount_with_tax/expected/schema_ruby.rb
558
+ - golden/schema_imports_discount_with_tax/expected/snast.txt
559
+ - golden/schema_imports_discount_with_tax/input.json
560
+ - golden/schema_imports_discount_with_tax/schema.kumi
561
+ - golden/schema_imports_line_items/expected.json
562
+ - golden/schema_imports_line_items/expected/ast.txt
563
+ - golden/schema_imports_line_items/expected/input_plan.txt
564
+ - golden/schema_imports_line_items/expected/lir_00_unoptimized.txt
565
+ - golden/schema_imports_line_items/expected/lir_01_hoist_scalar_references.txt
566
+ - golden/schema_imports_line_items/expected/lir_02_inlined.txt
567
+ - golden/schema_imports_line_items/expected/lir_03_cse.txt
568
+ - golden/schema_imports_line_items/expected/lir_04_1_loop_fusion.txt
569
+ - golden/schema_imports_line_items/expected/lir_04_loop_invcm.txt
570
+ - golden/schema_imports_line_items/expected/lir_06_const_prop.txt
571
+ - golden/schema_imports_line_items/expected/nast.txt
572
+ - golden/schema_imports_line_items/expected/schema_javascript.mjs
573
+ - golden/schema_imports_line_items/expected/schema_ruby.rb
574
+ - golden/schema_imports_line_items/expected/snast.txt
575
+ - golden/schema_imports_line_items/input.json
576
+ - golden/schema_imports_line_items/schema.kumi
577
+ - golden/schema_imports_multiple/expected.json
578
+ - golden/schema_imports_multiple/expected/ast.txt
579
+ - golden/schema_imports_multiple/expected/input_plan.txt
580
+ - golden/schema_imports_multiple/expected/lir_00_unoptimized.txt
581
+ - golden/schema_imports_multiple/expected/lir_01_hoist_scalar_references.txt
582
+ - golden/schema_imports_multiple/expected/lir_02_inlined.txt
583
+ - golden/schema_imports_multiple/expected/lir_03_cse.txt
584
+ - golden/schema_imports_multiple/expected/lir_04_1_loop_fusion.txt
585
+ - golden/schema_imports_multiple/expected/lir_04_loop_invcm.txt
586
+ - golden/schema_imports_multiple/expected/lir_06_const_prop.txt
587
+ - golden/schema_imports_multiple/expected/nast.txt
588
+ - golden/schema_imports_multiple/expected/schema_javascript.mjs
589
+ - golden/schema_imports_multiple/expected/schema_ruby.rb
590
+ - golden/schema_imports_multiple/expected/snast.txt
591
+ - golden/schema_imports_multiple/input.json
592
+ - golden/schema_imports_multiple/schema.kumi
593
+ - golden/schema_imports_nested_expressions/expected.json
594
+ - golden/schema_imports_nested_expressions/expected/ast.txt
595
+ - golden/schema_imports_nested_expressions/expected/input_plan.txt
596
+ - golden/schema_imports_nested_expressions/expected/lir_00_unoptimized.txt
597
+ - golden/schema_imports_nested_expressions/expected/lir_01_hoist_scalar_references.txt
598
+ - golden/schema_imports_nested_expressions/expected/lir_02_inlined.txt
599
+ - golden/schema_imports_nested_expressions/expected/lir_03_cse.txt
600
+ - golden/schema_imports_nested_expressions/expected/lir_04_1_loop_fusion.txt
601
+ - golden/schema_imports_nested_expressions/expected/lir_04_loop_invcm.txt
602
+ - golden/schema_imports_nested_expressions/expected/lir_06_const_prop.txt
603
+ - golden/schema_imports_nested_expressions/expected/nast.txt
604
+ - golden/schema_imports_nested_expressions/expected/schema_javascript.mjs
605
+ - golden/schema_imports_nested_expressions/expected/schema_ruby.rb
606
+ - golden/schema_imports_nested_expressions/expected/snast.txt
607
+ - golden/schema_imports_nested_expressions/input.json
608
+ - golden/schema_imports_nested_expressions/schema.kumi
609
+ - golden/schema_imports_nested_with_reductions/expected.json
610
+ - golden/schema_imports_nested_with_reductions/expected/ast.txt
611
+ - golden/schema_imports_nested_with_reductions/expected/input_plan.txt
612
+ - golden/schema_imports_nested_with_reductions/expected/lir_00_unoptimized.txt
613
+ - golden/schema_imports_nested_with_reductions/expected/lir_01_hoist_scalar_references.txt
614
+ - golden/schema_imports_nested_with_reductions/expected/lir_02_inlined.txt
615
+ - golden/schema_imports_nested_with_reductions/expected/lir_03_cse.txt
616
+ - golden/schema_imports_nested_with_reductions/expected/lir_04_1_loop_fusion.txt
617
+ - golden/schema_imports_nested_with_reductions/expected/lir_04_loop_invcm.txt
618
+ - golden/schema_imports_nested_with_reductions/expected/lir_06_const_prop.txt
619
+ - golden/schema_imports_nested_with_reductions/expected/nast.txt
620
+ - golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs
621
+ - golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb
622
+ - golden/schema_imports_nested_with_reductions/expected/snast.txt
623
+ - golden/schema_imports_nested_with_reductions/input.json
624
+ - golden/schema_imports_nested_with_reductions/schema.kumi
625
+ - golden/schema_imports_with_imports/expected.json
626
+ - golden/schema_imports_with_imports/expected/ast.txt
627
+ - golden/schema_imports_with_imports/expected/input_plan.txt
628
+ - golden/schema_imports_with_imports/expected/lir_00_unoptimized.txt
629
+ - golden/schema_imports_with_imports/expected/lir_01_hoist_scalar_references.txt
630
+ - golden/schema_imports_with_imports/expected/lir_02_inlined.txt
631
+ - golden/schema_imports_with_imports/expected/lir_03_cse.txt
632
+ - golden/schema_imports_with_imports/expected/lir_04_1_loop_fusion.txt
633
+ - golden/schema_imports_with_imports/expected/lir_04_loop_invcm.txt
634
+ - golden/schema_imports_with_imports/expected/lir_06_const_prop.txt
635
+ - golden/schema_imports_with_imports/expected/nast.txt
636
+ - golden/schema_imports_with_imports/expected/schema_javascript.mjs
637
+ - golden/schema_imports_with_imports/expected/schema_ruby.rb
638
+ - golden/schema_imports_with_imports/expected/snast.txt
639
+ - golden/schema_imports_with_imports/input.json
640
+ - golden/schema_imports_with_imports/schema.kumi
479
641
  - golden/shift/expected.json
480
642
  - golden/shift/expected/ast.txt
481
643
  - golden/shift/expected/input_plan.txt
@@ -634,6 +796,7 @@ files:
634
796
  - lib/kumi/core/analyzer/passes/declaration_validator.rb
635
797
  - lib/kumi/core/analyzer/passes/dependency_resolver.rb
636
798
  - lib/kumi/core/analyzer/passes/formal_constraint_propagator.rb
799
+ - lib/kumi/core/analyzer/passes/import_analysis_pass.rb
637
800
  - lib/kumi/core/analyzer/passes/input_access_planner_pass.rb
638
801
  - lib/kumi/core/analyzer/passes/input_collector.rb
639
802
  - lib/kumi/core/analyzer/passes/input_form_schema_pass.rb
@@ -723,6 +886,7 @@ files:
723
886
  - lib/kumi/core/lir/analyze.rb
724
887
  - lib/kumi/core/lir/build.rb
725
888
  - lib/kumi/core/lir/emit.rb
889
+ - lib/kumi/core/lir/peephole.rb
726
890
  - lib/kumi/core/lir/structs/instruction.rb
727
891
  - lib/kumi/core/lir/structs/literal.rb
728
892
  - lib/kumi/core/lir/structs/stamp.rb
@@ -760,6 +924,8 @@ files:
760
924
  - lib/kumi/dev/golden/suite.rb
761
925
  - lib/kumi/dev/golden/value_normalizer.rb
762
926
  - lib/kumi/dev/golden/verifier.rb
927
+ - lib/kumi/dev/golden_schema_modules.rb
928
+ - lib/kumi/dev/golden_schema_wrapper.rb
763
929
  - lib/kumi/dev/ir.rb
764
930
  - lib/kumi/dev/parse.rb
765
931
  - lib/kumi/dev/pretty_printer.rb
@@ -796,6 +962,8 @@ files:
796
962
  - lib/kumi/syntax/case_expression.rb
797
963
  - lib/kumi/syntax/declaration_reference.rb
798
964
  - lib/kumi/syntax/hash_expression.rb
965
+ - lib/kumi/syntax/import_call.rb
966
+ - lib/kumi/syntax/import_declaration.rb
799
967
  - lib/kumi/syntax/input_declaration.rb
800
968
  - lib/kumi/syntax/input_element_reference.rb
801
969
  - lib/kumi/syntax/input_reference.rb
@@ -805,6 +973,11 @@ files:
805
973
  - lib/kumi/syntax/root.rb
806
974
  - lib/kumi/syntax/trait_declaration.rb
807
975
  - lib/kumi/syntax/value_declaration.rb
976
+ - lib/kumi/test_shared_schemas/compound.rb
977
+ - lib/kumi/test_shared_schemas/discount.rb
978
+ - lib/kumi/test_shared_schemas/price.rb
979
+ - lib/kumi/test_shared_schemas/subtotal.rb
980
+ - lib/kumi/test_shared_schemas/tax.rb
808
981
  - lib/kumi/version.rb
809
982
  - vscode-extension/.gitignore
810
983
  - vscode-extension/README.md
@@ -839,6 +1012,6 @@ rubygems_version: 3.6.9
839
1012
  specification_version: 4
840
1013
  summary: Kumi is a declarative rules-and-calculation DSL for Ruby that compiles your
841
1014
  business logic into a typed, analyzable dependency graph with
842
- vector semantics over nested data. It does static checks at definition time, lowers
843
- to a small IR, and runs with consistent, predictable behavior.
1015
+ vector semantics over ragged data. It does static checks at definition time, lowers
1016
+ to a small IR, and compiles to zero-runtime modules
844
1017
  test_files: []