kumi 0.0.18 → 0.0.20

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 (676) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +27 -0
  5. data/CLAUDE.md +26 -139
  6. data/README.md +143 -372
  7. data/data/functions/agg/boolean.yaml +14 -0
  8. data/data/functions/agg/numeric.yaml +80 -0
  9. data/data/functions/agg/string.yaml +8 -0
  10. data/data/functions/core/arithmetic.yaml +50 -0
  11. data/data/functions/core/boolean.yaml +18 -0
  12. data/data/functions/core/comparison.yaml +42 -0
  13. data/data/functions/core/constructor.yaml +32 -0
  14. data/data/functions/core/select.yaml +7 -0
  15. data/data/functions/core/stencil.yaml +21 -0
  16. data/data/functions/core/string.yaml +19 -0
  17. data/data/kernels/javascript/agg/boolean.yaml +12 -0
  18. data/data/kernels/javascript/agg/numeric.yaml +27 -0
  19. data/data/kernels/javascript/agg/string.yaml +5 -0
  20. data/data/kernels/javascript/core/arithmetic.yaml +32 -0
  21. data/data/kernels/javascript/core/boolean.yaml +12 -0
  22. data/data/kernels/javascript/core/comparison.yaml +24 -0
  23. data/data/kernels/javascript/core/constructor.yaml +15 -0
  24. data/data/kernels/javascript/core/select.yaml +7 -0
  25. data/data/kernels/javascript/core/string.yaml +12 -0
  26. data/data/kernels/ruby/agg/boolean.yaml +18 -0
  27. data/data/kernels/ruby/agg/numeric.yaml +29 -0
  28. data/data/kernels/ruby/agg/string.yaml +5 -0
  29. data/data/kernels/ruby/core/arithmetic.yaml +38 -0
  30. data/data/kernels/ruby/core/boolean.yaml +15 -0
  31. data/data/kernels/ruby/core/comparison.yaml +30 -0
  32. data/data/kernels/ruby/core/constructor.yaml +17 -0
  33. data/data/kernels/ruby/core/select.yaml +4 -0
  34. data/data/kernels/ruby/core/string.yaml +15 -0
  35. data/debug_ordering.rb +52 -0
  36. data/docs/FORM_SCHEMA.md +85 -0
  37. data/docs/OUTPUT_SCHEMA.md +69 -0
  38. data/docs/SYNTAX.md +626 -373
  39. data/golden/array_element/expected/ast.txt +21 -0
  40. data/golden/array_element/expected/input_plan.txt +5 -0
  41. data/golden/array_element/expected/lir_00_unoptimized.txt +13 -0
  42. data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +13 -0
  43. data/golden/array_element/expected/lir_02_inlined.txt +13 -0
  44. data/golden/array_element/expected/lir_03_cse.txt +13 -0
  45. data/golden/array_element/expected/lir_04_1_loop_fusion.txt +13 -0
  46. data/golden/array_element/expected/lir_04_loop_invcm.txt +13 -0
  47. data/golden/array_element/expected/lir_06_const_prop.txt +13 -0
  48. data/golden/array_element/expected/nast.txt +7 -0
  49. data/golden/array_element/expected/schema_javascript.mjs +13 -0
  50. data/golden/array_element/expected/schema_ruby.rb +41 -0
  51. data/golden/array_element/expected/snast.txt +7 -0
  52. data/golden/array_element/expected.json +5 -0
  53. data/golden/array_element/input.json +9 -0
  54. data/golden/array_element/schema.kumi +11 -0
  55. data/golden/array_index/expected/ast.txt +59 -0
  56. data/golden/array_index/expected/input_plan.txt +5 -0
  57. data/golden/array_index/expected/lir_00_unoptimized.txt +41 -0
  58. data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +41 -0
  59. data/golden/array_index/expected/lir_02_inlined.txt +42 -0
  60. data/golden/array_index/expected/lir_03_cse.txt +40 -0
  61. data/golden/array_index/expected/lir_04_1_loop_fusion.txt +40 -0
  62. data/golden/array_index/expected/lir_04_loop_invcm.txt +40 -0
  63. data/golden/array_index/expected/lir_06_const_prop.txt +40 -0
  64. data/golden/array_index/expected/nast.txt +33 -0
  65. data/golden/array_index/expected/schema_javascript.mjs +46 -0
  66. data/golden/array_index/expected/schema_ruby.rb +75 -0
  67. data/golden/array_index/expected/snast.txt +33 -0
  68. data/golden/array_index/expected.json +5 -0
  69. data/golden/array_index/input.json +1 -0
  70. data/golden/array_index/schema.kumi +19 -0
  71. data/golden/array_operations/expected/ast.txt +50 -0
  72. data/golden/array_operations/expected/input_plan.txt +10 -0
  73. data/golden/array_operations/expected/lir_00_unoptimized.txt +47 -0
  74. data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +47 -0
  75. data/golden/array_operations/expected/lir_02_inlined.txt +47 -0
  76. data/golden/array_operations/expected/lir_03_cse.txt +47 -0
  77. data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +47 -0
  78. data/golden/array_operations/expected/lir_04_loop_invcm.txt +47 -0
  79. data/golden/array_operations/expected/lir_06_const_prop.txt +47 -0
  80. data/golden/array_operations/expected/nast.txt +32 -0
  81. data/golden/array_operations/expected/schema_javascript.mjs +60 -0
  82. data/golden/array_operations/expected/schema_ruby.rb +91 -0
  83. data/golden/array_operations/expected/snast.txt +32 -0
  84. data/golden/array_operations/expected.json +27 -0
  85. data/golden/array_operations/input.json +8 -0
  86. data/golden/array_operations/schema.kumi +12 -10
  87. data/golden/cascade_logic/expected/ast.txt +37 -0
  88. data/golden/cascade_logic/expected/input_plan.txt +2 -0
  89. data/golden/cascade_logic/expected/lir_00_unoptimized.txt +29 -0
  90. data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +29 -0
  91. data/golden/cascade_logic/expected/lir_02_inlined.txt +37 -0
  92. data/golden/cascade_logic/expected/lir_03_cse.txt +30 -0
  93. data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +30 -0
  94. data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +30 -0
  95. data/golden/cascade_logic/expected/lir_06_const_prop.txt +30 -0
  96. data/golden/cascade_logic/expected/nast.txt +32 -0
  97. data/golden/cascade_logic/expected/schema_javascript.mjs +31 -0
  98. data/golden/cascade_logic/expected/schema_ruby.rb +57 -0
  99. data/golden/cascade_logic/expected/snast.txt +32 -0
  100. data/golden/cascade_logic/expected.json +5 -0
  101. data/golden/cascade_logic/input.json +4 -0
  102. data/golden/cascade_logic/schema.kumi +1 -3
  103. data/golden/chained_fusion/expected/ast.txt +57 -0
  104. data/golden/chained_fusion/expected/input_plan.txt +13 -0
  105. data/golden/chained_fusion/expected/lir_00_unoptimized.txt +76 -0
  106. data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +76 -0
  107. data/golden/chained_fusion/expected/lir_02_inlined.txt +114 -0
  108. data/golden/chained_fusion/expected/lir_03_cse.txt +97 -0
  109. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +99 -0
  110. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +97 -0
  111. data/golden/chained_fusion/expected/lir_06_const_prop.txt +97 -0
  112. data/golden/chained_fusion/expected/nast.txt +55 -0
  113. data/golden/chained_fusion/expected/schema_javascript.mjs +116 -0
  114. data/golden/chained_fusion/expected/schema_ruby.rb +149 -0
  115. data/golden/chained_fusion/expected/snast.txt +55 -0
  116. data/golden/chained_fusion/expected.json +45 -0
  117. data/golden/chained_fusion/input.json +51 -0
  118. data/golden/chained_fusion/schema.kumi +52 -0
  119. data/golden/element_arrays/expected/ast.txt +55 -0
  120. data/golden/element_arrays/expected/input_plan.txt +7 -0
  121. data/golden/element_arrays/expected/lir_00_unoptimized.txt +81 -0
  122. data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +81 -0
  123. data/golden/element_arrays/expected/lir_02_inlined.txt +85 -0
  124. data/golden/element_arrays/expected/lir_03_cse.txt +83 -0
  125. data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +83 -0
  126. data/golden/element_arrays/expected/lir_04_loop_invcm.txt +83 -0
  127. data/golden/element_arrays/expected/lir_06_const_prop.txt +83 -0
  128. data/golden/element_arrays/expected/nast.txt +42 -0
  129. data/golden/element_arrays/expected/schema_javascript.mjs +106 -0
  130. data/golden/element_arrays/expected/schema_ruby.rb +141 -0
  131. data/golden/element_arrays/expected/snast.txt +42 -0
  132. data/golden/element_arrays/expected.json +55 -0
  133. data/golden/element_arrays/input.json +12 -0
  134. data/golden/element_arrays/schema.kumi +21 -0
  135. data/golden/empty_and_null_inputs/expected/ast.txt +42 -0
  136. data/golden/empty_and_null_inputs/expected/input_plan.txt +12 -0
  137. data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +31 -0
  138. data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +31 -0
  139. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +51 -0
  140. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +49 -0
  141. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +49 -0
  142. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +49 -0
  143. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +49 -0
  144. data/golden/empty_and_null_inputs/expected/nast.txt +18 -0
  145. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +47 -0
  146. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +79 -0
  147. data/golden/empty_and_null_inputs/expected/snast.txt +18 -0
  148. data/golden/empty_and_null_inputs/expected.json +8 -0
  149. data/golden/empty_and_null_inputs/input.json +16 -0
  150. data/golden/empty_and_null_inputs/schema.kumi +30 -0
  151. data/golden/game_of_life/expected/ast.txt +118 -0
  152. data/golden/game_of_life/expected/input_plan.txt +5 -0
  153. data/golden/game_of_life/expected/lir_00_unoptimized.txt +343 -0
  154. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +343 -0
  155. data/golden/game_of_life/expected/lir_02_inlined.txt +1918 -0
  156. data/golden/game_of_life/expected/lir_03_cse.txt +766 -0
  157. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +766 -0
  158. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +766 -0
  159. data/golden/game_of_life/expected/lir_06_const_prop.txt +766 -0
  160. data/golden/game_of_life/expected/nast.txt +104 -0
  161. data/golden/game_of_life/expected/schema_javascript.mjs +98 -0
  162. data/golden/game_of_life/expected/schema_ruby.rb +125 -0
  163. data/golden/game_of_life/expected/snast.txt +104 -0
  164. data/golden/game_of_life/expected.json +3 -0
  165. data/golden/game_of_life/input.json +8 -0
  166. data/golden/game_of_life/schema.kumi +33 -0
  167. data/golden/hash_keys/expected/ast.txt +29 -0
  168. data/golden/hash_keys/expected/input_plan.txt +2 -0
  169. data/golden/hash_keys/expected/lir_00_unoptimized.txt +18 -0
  170. data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +18 -0
  171. data/golden/hash_keys/expected/lir_02_inlined.txt +18 -0
  172. data/golden/hash_keys/expected/lir_03_cse.txt +18 -0
  173. data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +18 -0
  174. data/golden/hash_keys/expected/lir_04_loop_invcm.txt +18 -0
  175. data/golden/hash_keys/expected/lir_06_const_prop.txt +18 -0
  176. data/golden/hash_keys/expected/nast.txt +46 -0
  177. data/golden/hash_keys/expected/schema_javascript.mjs +34 -0
  178. data/golden/hash_keys/expected/schema_ruby.rb +61 -0
  179. data/golden/hash_keys/expected/snast.txt +46 -0
  180. data/golden/hash_keys/expected.json +20 -0
  181. data/golden/hash_keys/input.json +4 -0
  182. data/golden/hash_keys/schema.kumi +14 -0
  183. data/golden/hash_value/expected/ast.txt +37 -0
  184. data/golden/hash_value/expected/input_plan.txt +7 -0
  185. data/golden/hash_value/expected/lir_00_unoptimized.txt +30 -0
  186. data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +30 -0
  187. data/golden/hash_value/expected/lir_02_inlined.txt +36 -0
  188. data/golden/hash_value/expected/lir_03_cse.txt +33 -0
  189. data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +33 -0
  190. data/golden/hash_value/expected/lir_04_loop_invcm.txt +33 -0
  191. data/golden/hash_value/expected/lir_06_const_prop.txt +33 -0
  192. data/golden/hash_value/expected/nast.txt +25 -0
  193. data/golden/hash_value/expected/schema_javascript.mjs +46 -0
  194. data/golden/hash_value/expected/schema_ruby.rb +75 -0
  195. data/golden/hash_value/expected/snast.txt +25 -0
  196. data/golden/hash_value/expected.json +19 -0
  197. data/golden/hash_value/input.json +12 -0
  198. data/golden/hash_value/schema.kumi +19 -0
  199. data/golden/hierarchical_complex/expected/ast.txt +85 -0
  200. data/golden/hierarchical_complex/expected/input_plan.txt +23 -0
  201. data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +87 -0
  202. data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +87 -0
  203. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +115 -0
  204. data/golden/hierarchical_complex/expected/lir_03_cse.txt +89 -0
  205. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +89 -0
  206. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +89 -0
  207. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +89 -0
  208. data/golden/hierarchical_complex/expected/nast.txt +49 -0
  209. data/golden/hierarchical_complex/expected/schema_javascript.mjs +121 -0
  210. data/golden/hierarchical_complex/expected/schema_ruby.rb +151 -0
  211. data/golden/hierarchical_complex/expected/snast.txt +49 -0
  212. data/golden/hierarchical_complex/expected.json +34 -0
  213. data/golden/hierarchical_complex/input.json +26 -0
  214. data/golden/hierarchical_complex/schema.kumi +38 -0
  215. data/golden/input_reference/expected/ast.txt +46 -0
  216. data/golden/input_reference/expected/input_plan.txt +15 -0
  217. data/golden/input_reference/expected/lir_00_unoptimized.txt +39 -0
  218. data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +39 -0
  219. data/golden/input_reference/expected/lir_02_inlined.txt +39 -0
  220. data/golden/input_reference/expected/lir_03_cse.txt +39 -0
  221. data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +39 -0
  222. data/golden/input_reference/expected/lir_04_loop_invcm.txt +39 -0
  223. data/golden/input_reference/expected/lir_06_const_prop.txt +39 -0
  224. data/golden/input_reference/expected/nast.txt +21 -0
  225. data/golden/input_reference/expected/schema_javascript.mjs +45 -0
  226. data/golden/input_reference/expected/schema_ruby.rb +74 -0
  227. data/golden/input_reference/expected/snast.txt +21 -0
  228. data/golden/input_reference/expected.json +7 -0
  229. data/golden/input_reference/input.json +11 -0
  230. data/golden/input_reference/schema.kumi +22 -0
  231. data/golden/interleaved_fusion/expected/ast.txt +51 -0
  232. data/golden/interleaved_fusion/expected/input_plan.txt +13 -0
  233. data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +53 -0
  234. data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +53 -0
  235. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +89 -0
  236. data/golden/interleaved_fusion/expected/lir_03_cse.txt +77 -0
  237. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +77 -0
  238. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +77 -0
  239. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +77 -0
  240. data/golden/interleaved_fusion/expected/nast.txt +41 -0
  241. data/golden/interleaved_fusion/expected/schema_javascript.mjs +86 -0
  242. data/golden/interleaved_fusion/expected/schema_ruby.rb +122 -0
  243. data/golden/interleaved_fusion/expected/snast.txt +41 -0
  244. data/golden/interleaved_fusion/expected.json +37 -0
  245. data/golden/interleaved_fusion/input.json +26 -0
  246. data/golden/interleaved_fusion/schema.kumi +57 -0
  247. data/golden/let_inline/expected/ast.txt +33 -0
  248. data/golden/let_inline/expected/input_plan.txt +2 -0
  249. data/golden/let_inline/expected/lir_00_unoptimized.txt +26 -0
  250. data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +26 -0
  251. data/golden/let_inline/expected/lir_02_inlined.txt +36 -0
  252. data/golden/let_inline/expected/lir_03_cse.txt +30 -0
  253. data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +30 -0
  254. data/golden/let_inline/expected/lir_04_loop_invcm.txt +30 -0
  255. data/golden/let_inline/expected/lir_06_const_prop.txt +30 -0
  256. data/golden/let_inline/expected/nast.txt +26 -0
  257. data/golden/let_inline/expected/schema_javascript.mjs +11 -0
  258. data/golden/let_inline/expected/schema_ruby.rb +37 -0
  259. data/golden/let_inline/expected/snast.txt +26 -0
  260. data/golden/let_inline/expected.json +1 -0
  261. data/golden/let_inline/input.json +1 -0
  262. data/golden/let_inline/schema.kumi +11 -0
  263. data/golden/loop_fusion/expected/ast.txt +44 -0
  264. data/golden/loop_fusion/expected/input_plan.txt +13 -0
  265. data/golden/loop_fusion/expected/lir_00_unoptimized.txt +43 -0
  266. data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +43 -0
  267. data/golden/loop_fusion/expected/lir_02_inlined.txt +62 -0
  268. data/golden/loop_fusion/expected/lir_03_cse.txt +57 -0
  269. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +57 -0
  270. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +57 -0
  271. data/golden/loop_fusion/expected/lir_06_const_prop.txt +57 -0
  272. data/golden/loop_fusion/expected/nast.txt +32 -0
  273. data/golden/loop_fusion/expected/schema_javascript.mjs +64 -0
  274. data/golden/loop_fusion/expected/schema_ruby.rb +97 -0
  275. data/golden/loop_fusion/expected/snast.txt +32 -0
  276. data/golden/loop_fusion/expected.json +30 -0
  277. data/golden/loop_fusion/input.json +28 -0
  278. data/golden/loop_fusion/schema.kumi +32 -0
  279. data/golden/min_reduce_scope/expected/ast.txt +49 -0
  280. data/golden/min_reduce_scope/expected/input_plan.txt +9 -0
  281. data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +59 -0
  282. data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +59 -0
  283. data/golden/min_reduce_scope/expected/lir_02_inlined.txt +63 -0
  284. data/golden/min_reduce_scope/expected/lir_03_cse.txt +60 -0
  285. data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +60 -0
  286. data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +60 -0
  287. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +60 -0
  288. data/golden/min_reduce_scope/expected/nast.txt +29 -0
  289. data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -0
  290. data/golden/min_reduce_scope/expected/schema_ruby.rb +99 -0
  291. data/golden/min_reduce_scope/expected/snast.txt +29 -0
  292. data/golden/min_reduce_scope/expected.json +9 -0
  293. data/golden/min_reduce_scope/input.json +18 -0
  294. data/golden/min_reduce_scope/schema.kumi +25 -0
  295. data/golden/mixed_dimensions/expected/ast.txt +54 -0
  296. data/golden/mixed_dimensions/expected/input_plan.txt +15 -0
  297. data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +42 -0
  298. data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +42 -0
  299. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +48 -0
  300. data/golden/mixed_dimensions/expected/lir_03_cse.txt +48 -0
  301. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +48 -0
  302. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +48 -0
  303. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +48 -0
  304. data/golden/mixed_dimensions/expected/nast.txt +22 -0
  305. data/golden/mixed_dimensions/expected/schema_javascript.mjs +53 -0
  306. data/golden/mixed_dimensions/expected/schema_ruby.rb +84 -0
  307. data/golden/mixed_dimensions/expected/snast.txt +22 -0
  308. data/golden/mixed_dimensions/expected.json +6 -0
  309. data/golden/mixed_dimensions/input.json +22 -0
  310. data/golden/mixed_dimensions/schema.kumi +35 -0
  311. data/golden/multirank_hoisting/expected/ast.txt +72 -0
  312. data/golden/multirank_hoisting/expected/input_plan.txt +18 -0
  313. data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +75 -0
  314. data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +75 -0
  315. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +126 -0
  316. data/golden/multirank_hoisting/expected/lir_03_cse.txt +109 -0
  317. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +109 -0
  318. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +109 -0
  319. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +109 -0
  320. data/golden/multirank_hoisting/expected/nast.txt +39 -0
  321. data/golden/multirank_hoisting/expected/schema_javascript.mjs +128 -0
  322. data/golden/multirank_hoisting/expected/schema_ruby.rb +162 -0
  323. data/golden/multirank_hoisting/expected/snast.txt +39 -0
  324. data/golden/multirank_hoisting/expected.json +15 -0
  325. data/golden/multirank_hoisting/input.json +19 -0
  326. data/golden/multirank_hoisting/schema.kumi +38 -0
  327. data/golden/nested_hash/expected/ast.txt +22 -0
  328. data/golden/nested_hash/expected/input_plan.txt +5 -0
  329. data/golden/nested_hash/expected/lir_00_unoptimized.txt +10 -0
  330. data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +10 -0
  331. data/golden/nested_hash/expected/lir_02_inlined.txt +10 -0
  332. data/golden/nested_hash/expected/lir_03_cse.txt +10 -0
  333. data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +10 -0
  334. data/golden/nested_hash/expected/lir_04_loop_invcm.txt +10 -0
  335. data/golden/nested_hash/expected/lir_06_const_prop.txt +10 -0
  336. data/golden/nested_hash/expected/nast.txt +8 -0
  337. data/golden/nested_hash/expected/schema_javascript.mjs +9 -0
  338. data/golden/nested_hash/expected/schema_ruby.rb +35 -0
  339. data/golden/nested_hash/expected/snast.txt +8 -0
  340. data/golden/nested_hash/expected.json +3 -0
  341. data/golden/nested_hash/input.json +7 -0
  342. data/golden/nested_hash/schema.kumi +11 -0
  343. data/golden/reduction_broadcast/expected/ast.txt +49 -0
  344. data/golden/reduction_broadcast/expected/input_plan.txt +13 -0
  345. data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +49 -0
  346. data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +49 -0
  347. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +80 -0
  348. data/golden/reduction_broadcast/expected/lir_03_cse.txt +68 -0
  349. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +68 -0
  350. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +68 -0
  351. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +68 -0
  352. data/golden/reduction_broadcast/expected/nast.txt +24 -0
  353. data/golden/reduction_broadcast/expected/schema_javascript.mjs +74 -0
  354. data/golden/reduction_broadcast/expected/schema_ruby.rb +110 -0
  355. data/golden/reduction_broadcast/expected/snast.txt +24 -0
  356. data/golden/reduction_broadcast/expected.json +25 -0
  357. data/golden/reduction_broadcast/input.json +19 -0
  358. data/golden/reduction_broadcast/schema.kumi +34 -0
  359. data/golden/roll/expected/ast.txt +36 -0
  360. data/golden/roll/expected/input_plan.txt +3 -0
  361. data/golden/roll/expected/lir_00_unoptimized.txt +56 -0
  362. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +56 -0
  363. data/golden/roll/expected/lir_02_inlined.txt +56 -0
  364. data/golden/roll/expected/lir_03_cse.txt +55 -0
  365. data/golden/roll/expected/lir_04_1_loop_fusion.txt +55 -0
  366. data/golden/roll/expected/lir_04_loop_invcm.txt +55 -0
  367. data/golden/roll/expected/lir_06_const_prop.txt +55 -0
  368. data/golden/roll/expected/nast.txt +26 -0
  369. data/golden/roll/expected/schema_javascript.mjs +65 -0
  370. data/golden/roll/expected/schema_ruby.rb +95 -0
  371. data/golden/roll/expected/snast.txt +26 -0
  372. data/golden/roll/expected.json +6 -0
  373. data/golden/roll/input.json +1 -0
  374. data/golden/roll/schema.kumi +13 -0
  375. data/golden/shift/expected/ast.txt +48 -0
  376. data/golden/shift/expected/input_plan.txt +3 -0
  377. data/golden/shift/expected/lir_00_unoptimized.txt +96 -0
  378. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +96 -0
  379. data/golden/shift/expected/lir_02_inlined.txt +96 -0
  380. data/golden/shift/expected/lir_03_cse.txt +90 -0
  381. data/golden/shift/expected/lir_04_1_loop_fusion.txt +90 -0
  382. data/golden/shift/expected/lir_04_loop_invcm.txt +90 -0
  383. data/golden/shift/expected/lir_06_const_prop.txt +90 -0
  384. data/golden/shift/expected/nast.txt +38 -0
  385. data/golden/shift/expected/schema_javascript.mjs +106 -0
  386. data/golden/shift/expected/schema_ruby.rb +138 -0
  387. data/golden/shift/expected/snast.txt +38 -0
  388. data/golden/shift/expected.json +8 -0
  389. data/golden/shift/input.json +1 -0
  390. data/golden/shift/schema.kumi +15 -0
  391. data/golden/shift_2d/expected/ast.txt +88 -0
  392. data/golden/shift_2d/expected/input_plan.txt +5 -0
  393. data/golden/shift_2d/expected/lir_00_unoptimized.txt +274 -0
  394. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +274 -0
  395. data/golden/shift_2d/expected/lir_02_inlined.txt +274 -0
  396. data/golden/shift_2d/expected/lir_03_cse.txt +262 -0
  397. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +262 -0
  398. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +262 -0
  399. data/golden/shift_2d/expected/lir_06_const_prop.txt +262 -0
  400. data/golden/shift_2d/expected/nast.txt +74 -0
  401. data/golden/shift_2d/expected/schema_javascript.mjs +320 -0
  402. data/golden/shift_2d/expected/schema_ruby.rb +358 -0
  403. data/golden/shift_2d/expected/snast.txt +74 -0
  404. data/golden/shift_2d/expected.json +15 -0
  405. data/golden/shift_2d/input.json +14 -0
  406. data/golden/shift_2d/schema.kumi +25 -0
  407. data/golden/simple_math/expected/ast.txt +40 -0
  408. data/golden/simple_math/expected/input_plan.txt +2 -0
  409. data/golden/simple_math/expected/lir_00_unoptimized.txt +31 -0
  410. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +31 -0
  411. data/golden/simple_math/expected/lir_02_inlined.txt +31 -0
  412. data/golden/simple_math/expected/lir_03_cse.txt +31 -0
  413. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +31 -0
  414. data/golden/simple_math/expected/lir_04_loop_invcm.txt +31 -0
  415. data/golden/simple_math/expected/lir_06_const_prop.txt +31 -0
  416. data/golden/simple_math/expected/nast.txt +33 -0
  417. data/golden/simple_math/expected/schema_javascript.mjs +33 -0
  418. data/golden/simple_math/expected/schema_ruby.rb +59 -0
  419. data/golden/simple_math/expected/snast.txt +33 -0
  420. data/golden/simple_math/expected.json +1 -0
  421. data/golden/simple_math/input.json +4 -0
  422. data/golden/simple_math/schema.kumi +2 -1
  423. data/golden/streaming_basics/expected/ast.txt +64 -0
  424. data/golden/streaming_basics/expected/input_plan.txt +8 -0
  425. data/golden/streaming_basics/expected/lir_00_unoptimized.txt +73 -0
  426. data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +73 -0
  427. data/golden/streaming_basics/expected/lir_02_inlined.txt +100 -0
  428. data/golden/streaming_basics/expected/lir_03_cse.txt +84 -0
  429. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +84 -0
  430. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +84 -0
  431. data/golden/streaming_basics/expected/lir_06_const_prop.txt +84 -0
  432. data/golden/streaming_basics/expected/nast.txt +48 -0
  433. data/golden/streaming_basics/expected/schema_javascript.mjs +94 -0
  434. data/golden/streaming_basics/expected/schema_ruby.rb +127 -0
  435. data/golden/streaming_basics/expected/snast.txt +48 -0
  436. data/golden/streaming_basics/expected.json +10 -0
  437. data/golden/streaming_basics/input.json +8 -0
  438. data/golden/streaming_basics/schema.kumi +24 -0
  439. data/golden/tuples/expected/ast.txt +48 -0
  440. data/golden/tuples/expected/input_plan.txt +1 -0
  441. data/golden/tuples/expected/lir_00_unoptimized.txt +40 -0
  442. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +40 -0
  443. data/golden/tuples/expected/lir_02_inlined.txt +48 -0
  444. data/golden/tuples/expected/lir_03_cse.txt +48 -0
  445. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +48 -0
  446. data/golden/tuples/expected/lir_04_loop_invcm.txt +48 -0
  447. data/golden/tuples/expected/lir_06_const_prop.txt +48 -0
  448. data/golden/tuples/expected/nast.txt +42 -0
  449. data/golden/tuples/expected/schema_javascript.mjs +51 -0
  450. data/golden/tuples/expected/schema_ruby.rb +77 -0
  451. data/golden/tuples/expected/snast.txt +42 -0
  452. data/golden/tuples/expected.json +7 -0
  453. data/golden/tuples/input.json +3 -0
  454. data/golden/tuples/schema.kumi +11 -0
  455. data/golden/tuples_and_arrays/expected/ast.txt +44 -0
  456. data/golden/tuples_and_arrays/expected/input_plan.txt +7 -0
  457. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +41 -0
  458. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +41 -0
  459. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +62 -0
  460. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +51 -0
  461. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +51 -0
  462. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +51 -0
  463. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +51 -0
  464. data/golden/tuples_and_arrays/expected/nast.txt +28 -0
  465. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +58 -0
  466. data/golden/tuples_and_arrays/expected/schema_ruby.rb +88 -0
  467. data/golden/tuples_and_arrays/expected/snast.txt +28 -0
  468. data/golden/tuples_and_arrays/expected.json +18 -0
  469. data/golden/tuples_and_arrays/input.json +7 -0
  470. data/golden/tuples_and_arrays/schema.kumi +38 -0
  471. data/golden/with_constants/expected/ast.txt +28 -0
  472. data/golden/with_constants/expected/input_plan.txt +2 -0
  473. data/golden/with_constants/expected/lir_00_unoptimized.txt +17 -0
  474. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +17 -0
  475. data/golden/with_constants/expected/lir_02_inlined.txt +17 -0
  476. data/golden/with_constants/expected/lir_03_cse.txt +17 -0
  477. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +17 -0
  478. data/golden/with_constants/expected/lir_04_loop_invcm.txt +17 -0
  479. data/golden/with_constants/expected/lir_06_const_prop.txt +17 -0
  480. data/golden/with_constants/expected/nast.txt +21 -0
  481. data/golden/with_constants/expected/schema_javascript.mjs +18 -0
  482. data/golden/with_constants/expected/schema_ruby.rb +44 -0
  483. data/golden/with_constants/expected/snast.txt +15 -0
  484. data/golden/with_constants/schema.kumi +10 -0
  485. data/lib/kumi/analyzer.rb +76 -24
  486. data/lib/kumi/configuration.rb +60 -0
  487. data/lib/kumi/core/analyzer/binder.rb +121 -0
  488. data/lib/kumi/core/analyzer/checkpoint.rb +15 -9
  489. data/lib/kumi/core/analyzer/constant_evaluator.rb +32 -37
  490. data/lib/kumi/core/analyzer/constant_folding_helpers.rb +55 -0
  491. data/lib/kumi/core/analyzer/debug.rb +14 -16
  492. data/lib/kumi/core/analyzer/fn_aliases.rb +46 -0
  493. data/lib/kumi/core/analyzer/folder.rb +94 -0
  494. data/lib/kumi/core/analyzer/macro_expander.rb +69 -0
  495. data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +130 -0
  496. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +71 -0
  497. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +181 -0
  498. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +317 -0
  499. data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +75 -0
  500. data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +103 -0
  501. data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +27 -0
  502. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +321 -0
  503. data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +85 -0
  504. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +111 -0
  505. data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +32 -0
  506. data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +33 -0
  507. data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +220 -0
  508. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +5 -6
  509. data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +7 -3
  510. data/lib/kumi/core/analyzer/passes/input_collector.rb +74 -122
  511. data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +43 -0
  512. data/lib/kumi/core/analyzer/passes/ir_dependency_pass.rb +1 -1
  513. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +1 -1
  514. data/lib/kumi/core/analyzer/passes/join_reduce_planning_pass.rb +21 -23
  515. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +84 -0
  516. data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +93 -0
  517. data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +115 -0
  518. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +274 -0
  519. data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +198 -0
  520. data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +30 -0
  521. data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +121 -0
  522. data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +156 -0
  523. data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +148 -0
  524. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +407 -0
  525. data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +243 -0
  526. data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +83 -0
  527. data/lib/kumi/core/analyzer/passes/load_input_cse.rb +17 -16
  528. data/lib/kumi/core/analyzer/passes/lower_to_ir_pass.rb +4 -2
  529. data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +197 -0
  530. data/lib/kumi/core/analyzer/passes/name_indexer.rb +4 -1
  531. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +237 -0
  532. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +156 -0
  533. data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +38 -0
  534. data/lib/kumi/core/analyzer/passes/pass_base.rb +30 -4
  535. data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +93 -0
  536. data/lib/kumi/core/analyzer/passes/scope_resolution_pass.rb +33 -30
  537. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -26
  538. data/lib/kumi/core/analyzer/passes/snast_pass.rb +229 -0
  539. data/lib/kumi/core/analyzer/passes/toposorter.rb +1 -0
  540. data/lib/kumi/core/analyzer/passes/type_checker.rb +13 -0
  541. data/lib/kumi/core/analyzer/passes/type_inferencer_pass.rb +14 -16
  542. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +2 -1
  543. data/lib/kumi/core/analyzer/plans.rb +12 -0
  544. data/lib/kumi/core/analyzer/state_serde.rb +4 -4
  545. data/lib/kumi/core/analyzer/structs/access_plan.rb +2 -2
  546. data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +59 -0
  547. data/lib/kumi/core/compiler/access_codegen.rb +1 -1
  548. data/lib/kumi/core/compiler/access_emit/base.rb +9 -5
  549. data/lib/kumi/core/compiler/access_emit/each_indexed.rb +10 -3
  550. data/lib/kumi/core/compiler/access_emit/materialize.rb +12 -5
  551. data/lib/kumi/core/compiler/access_emit/ravel.rb +10 -3
  552. data/lib/kumi/core/compiler/access_emit/read.rb +4 -1
  553. data/lib/kumi/core/compiler/access_planner.rb +42 -4
  554. data/lib/kumi/core/compiler/access_planner_v2.rb +164 -0
  555. data/lib/kumi/core/explain.rb +18 -11
  556. data/lib/kumi/core/functions/loader.rb +47 -0
  557. data/lib/kumi/core/functions/model.rb +10 -0
  558. data/lib/kumi/core/functions/type_rules.rb +108 -0
  559. data/lib/kumi/core/ir/execution_engine/interpreter.rb +1 -1
  560. data/lib/kumi/core/ir/execution_engine/profiler.rb +107 -97
  561. data/lib/kumi/core/ir.rb +6 -2
  562. data/lib/kumi/core/irv2/builder.rb +48 -0
  563. data/lib/kumi/core/irv2/declaration.rb +28 -0
  564. data/lib/kumi/core/irv2/module.rb +108 -0
  565. data/lib/kumi/core/irv2/value.rb +28 -0
  566. data/lib/kumi/core/lir/analyze.rb +64 -0
  567. data/lib/kumi/core/lir/build.rb +363 -0
  568. data/lib/kumi/core/lir/emit.rb +62 -0
  569. data/lib/kumi/core/lir/structs/instruction.rb +44 -0
  570. data/lib/kumi/core/lir/structs/literal.rb +14 -0
  571. data/lib/kumi/core/lir/structs/stamp.rb +13 -0
  572. data/lib/kumi/core/lir/support/error.rb +9 -0
  573. data/lib/kumi/core/lir/support/ids.rb +34 -0
  574. data/lib/kumi/core/lir/validate.rb +74 -0
  575. data/lib/kumi/core/lir.rb +34 -0
  576. data/lib/kumi/core/nast.rb +216 -0
  577. data/lib/kumi/core/ruby_parser/dsl.rb +2 -2
  578. data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +1 -1
  579. data/lib/kumi/core/ruby_parser/expression_converter.rb +10 -0
  580. data/lib/kumi/core/ruby_parser/input_builder.rb +16 -17
  581. data/lib/kumi/core/ruby_parser/schema_builder.rb +36 -10
  582. data/lib/kumi/core/ruby_parser/sugar.rb +64 -0
  583. data/lib/kumi/core/types/builder.rb +2 -2
  584. data/lib/kumi/core/types/normalizer.rb +2 -0
  585. data/lib/kumi/core/types/validator.rb +10 -3
  586. data/lib/kumi/core/types.rb +7 -0
  587. data/lib/kumi/dev/codegen.rb +194 -0
  588. data/lib/kumi/dev/golden/generator.rb +105 -0
  589. data/lib/kumi/dev/golden/reporter.rb +160 -0
  590. data/lib/kumi/dev/golden/representation.rb +45 -0
  591. data/lib/kumi/dev/golden/result.rb +98 -0
  592. data/lib/kumi/dev/golden/runtime_test.rb +93 -0
  593. data/lib/kumi/dev/golden/suite.rb +131 -0
  594. data/lib/kumi/dev/golden/verifier.rb +76 -0
  595. data/lib/kumi/dev/golden.rb +75 -0
  596. data/lib/kumi/dev/ir.rb +4 -4
  597. data/lib/kumi/dev/parse.rb +1 -1
  598. data/lib/kumi/dev/pretty_printer.rb +229 -0
  599. data/lib/kumi/dev/printer/irv2_formatter.rb +163 -0
  600. data/lib/kumi/dev/printer/width_aware_json.rb +44 -0
  601. data/lib/kumi/dev/profile_aggregator.rb +36 -38
  602. data/lib/kumi/dev/profile_runner.rb +19 -23
  603. data/lib/kumi/dev/runner.rb +12 -22
  604. data/lib/kumi/dev/support/kumi_runner.mjs +39 -0
  605. data/lib/kumi/dev.rb +3 -3
  606. data/lib/kumi/frontends/ruby.rb +12 -12
  607. data/lib/kumi/frontends/text.rb +26 -21
  608. data/lib/kumi/frontends.rb +6 -8
  609. data/lib/kumi/kernel_registry.rb +59 -0
  610. data/lib/kumi/pack/builder.rb +229 -0
  611. data/lib/kumi/pack.rb +15 -0
  612. data/lib/kumi/registry_v2/loader.rb +81 -0
  613. data/lib/kumi/registry_v2.rb +118 -0
  614. data/lib/kumi/schema.rb +83 -43
  615. data/lib/kumi/support/diff.rb +3 -2
  616. data/lib/kumi/support/ir_render.rb +1 -1
  617. data/lib/kumi/support/lir_printer.rb +143 -0
  618. data/lib/kumi/support/nast_printer.rb +93 -0
  619. data/lib/kumi/support/s_expression_printer.rb +5 -4
  620. data/lib/kumi/support/snast_printer.rb +111 -0
  621. data/lib/kumi/syntax/call_expression.rb +1 -1
  622. data/lib/kumi/syntax/input_declaration.rb +2 -2
  623. data/lib/kumi/syntax/node.rb +4 -12
  624. data/lib/kumi/syntax/root.rb +10 -0
  625. data/lib/kumi/syntax/trait_declaration.rb +1 -0
  626. data/lib/kumi/syntax/value_declaration.rb +1 -0
  627. data/lib/kumi/version.rb +1 -1
  628. data/lib/kumi.rb +46 -4
  629. metadata +571 -54
  630. data/docs/AST.md +0 -133
  631. data/docs/DSL.md +0 -154
  632. data/docs/FUNCTIONS.md +0 -176
  633. data/docs/VECTOR_SEMANTICS.md +0 -286
  634. data/docs/compiler_design_principles.md +0 -86
  635. data/docs/dev/analyzer-debug.md +0 -52
  636. data/docs/dev/parse-command.md +0 -64
  637. data/docs/dev/vm-profiling.md +0 -95
  638. data/docs/development/README.md +0 -120
  639. data/docs/development/error-reporting.md +0 -361
  640. data/docs/features/README.md +0 -58
  641. data/docs/features/analysis-type-inference.md +0 -42
  642. data/docs/features/analysis-unsat-detection.md +0 -71
  643. data/docs/features/hierarchical-broadcasting.md +0 -415
  644. data/docs/features/input-declaration-system.md +0 -58
  645. data/docs/features/performance.md +0 -14
  646. data/docs/features/s-expression-printer.md +0 -77
  647. data/docs/schema_metadata/broadcasts.md +0 -53
  648. data/docs/schema_metadata/cascades.md +0 -45
  649. data/docs/schema_metadata/declarations.md +0 -54
  650. data/docs/schema_metadata/dependencies.md +0 -57
  651. data/docs/schema_metadata/evaluation_order.md +0 -29
  652. data/docs/schema_metadata/examples.md +0 -95
  653. data/docs/schema_metadata/inferred_types.md +0 -46
  654. data/docs/schema_metadata/inputs.md +0 -86
  655. data/docs/schema_metadata.md +0 -108
  656. data/golden/mixed_nesting/schema.kumi +0 -42
  657. data/lib/kumi/core/function_registry/collection_functions.rb +0 -298
  658. data/lib/kumi/core/function_registry/comparison_functions.rb +0 -33
  659. data/lib/kumi/core/function_registry/conditional_functions.rb +0 -48
  660. data/lib/kumi/core/function_registry/function_builder.rb +0 -184
  661. data/lib/kumi/core/function_registry/logical_functions.rb +0 -214
  662. data/lib/kumi/core/function_registry/math_functions.rb +0 -74
  663. data/lib/kumi/core/function_registry/stat_functions.rb +0 -156
  664. data/lib/kumi/core/function_registry/string_functions.rb +0 -57
  665. data/lib/kumi/core/function_registry/type_functions.rb +0 -53
  666. data/lib/kumi/core/function_registry.rb +0 -176
  667. data/lib/kumi/registry.rb +0 -32
  668. data/lib/kumi/runtime/executable.rb +0 -135
  669. data/lib/kumi/runtime/run.rb +0 -105
  670. data/performance_results.txt +0 -63
  671. data/scripts/analyze_broadcast_methods.rb +0 -68
  672. data/scripts/analyze_cascade_methods.rb +0 -74
  673. data/scripts/check_broadcasting_coverage.rb +0 -51
  674. data/scripts/find_dead_code.rb +0 -114
  675. data/scripts/generate_function_docs.rb +0 -71
  676. data/scripts/test_mixed_nesting_performance.rb +0 -206
@@ -0,0 +1,25 @@
1
+ schema do
2
+ input do
3
+ array :depts do
4
+ hash :dept do
5
+ array :teams do
6
+ hash :team do
7
+ integer :headcount
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ # elementwise check stays at team scope
15
+ trait :big_team, input.depts.dept.teams.team.headcount > 10
16
+
17
+ # 1) department totals: must drop :teams only
18
+ value :dept_total, fn(:sum, input.depts.dept.teams.team.headcount)
19
+
20
+ # 2) company total: must drop :teams then :depts
21
+ value :company_total, fn(:sum, fn(:sum, input.depts.dept.teams.team.headcount))
22
+
23
+ # 3) masked reduction: sum only headcount from big teams
24
+ value :dept_total_masked, fn(:sum_if, input.depts.dept.teams.team.headcount, big_team)
25
+ end
@@ -0,0 +1,54 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :numbers :array
4
+ [
5
+ (InputDeclaration :num :hash
6
+ [
7
+ (InputDeclaration :value :integer)
8
+ ]
9
+ )
10
+ ]
11
+ )
12
+ (InputDeclaration :scalar_val :integer)
13
+ (InputDeclaration :matrix :array
14
+ [
15
+ (InputDeclaration :m :hash
16
+ [
17
+ (InputDeclaration :row :array
18
+ [
19
+ (InputDeclaration :r :hash
20
+ [
21
+ (InputDeclaration :cell :float)
22
+ ]
23
+ )
24
+ ]
25
+ )
26
+ ]
27
+ )
28
+ ]
29
+ )
30
+ ]
31
+ values: [
32
+ (ValueDeclaration :constant
33
+ (Literal 42)
34
+ )
35
+ (ValueDeclaration :sum_numbers
36
+ (CallExpression :sum
37
+ (InputElementReference numbers.num.value)
38
+ )
39
+ )
40
+ (ValueDeclaration :matrix_sums
41
+ (CallExpression :sum
42
+ (InputElementReference matrix.m.row.r.cell)
43
+ )
44
+ )
45
+ (ValueDeclaration :mixed_array
46
+ (ArrayExpression
47
+ (InputReference :scalar_val)
48
+ (DeclarationReference :sum_numbers)
49
+ (InputElementReference matrix.m.row.r.cell)
50
+ )
51
+ )
52
+ ]
53
+ traits: []
54
+ )
@@ -0,0 +1,15 @@
1
+ numbers: array (array) access_mode=element
2
+ └─> num: element_access
3
+ num: hash (hash)
4
+ └─> value: property_access
5
+ value: integer
6
+ scalar_val: integer
7
+ matrix: array (array) access_mode=element
8
+ └─> m: element_access
9
+ m: hash (hash)
10
+ └─> row: property_access → array_loop
11
+ row: array (array) access_mode=element
12
+ └─> r: element_access
13
+ r: hash (hash)
14
+ └─> cell: property_access
15
+ cell: float
@@ -0,0 +1,42 @@
1
+ (LIR
2
+ (Declaration sum_numbers
3
+ %acc_1 = decl_acc :: integer
4
+ %t2 = load_input "numbers" :: array
5
+ loop numbers id=L1 in %t2 as el=%numbers_el_3, idx=%numbers_i_4
6
+ %t5 = load_field numbers_el_3["value"] :: integer
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: integer
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: integer
10
+ yield %t6
11
+ )
12
+ (Declaration matrix_sums
13
+ %t7 = load_input "matrix" :: array
14
+ loop matrix id=L2 in %t7 as el=%matrix_el_8, idx=%matrix_i_9
15
+ %acc_10 = decl_acc :: float
16
+ %t11 = load_field matrix_el_8["row"] :: any
17
+ loop row id=L3 in %t11 as el=%row_el_12, idx=%row_i_13
18
+ %t14 = load_field row_el_12["cell"] :: float
19
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: float
20
+ end_loop
21
+ %t15 = acc_load %acc_10 :: float
22
+ yield %t15
23
+ end_loop
24
+ )
25
+ (Declaration mixed_array
26
+ %t16 = load_input "matrix" :: array
27
+ loop matrix id=L4 in %t16 as el=%matrix_el_17, idx=%matrix_i_18
28
+ %t19 = load_field matrix_el_17["row"] :: any
29
+ loop row id=L5 in %t19 as el=%row_el_20, idx=%row_i_21
30
+ %t22 = load_input "scalar_val" :: integer
31
+ %t23 = load_decl sum_numbers :: integer
32
+ %t24 = load_field row_el_20["cell"] :: float
33
+ %t25 = make_tuple(%t22, %t23, %t24) :: tuple<integer, integer, float>
34
+ yield %t25
35
+ end_loop
36
+ end_loop
37
+ )
38
+ (Declaration constant
39
+ %t26 = const 42 :: integer
40
+ yield %t26
41
+ )
42
+ )
@@ -0,0 +1,42 @@
1
+ (LIR
2
+ (Declaration sum_numbers
3
+ %acc_1 = decl_acc :: integer
4
+ %t2 = load_input "numbers" :: array
5
+ loop numbers id=L1 in %t2 as el=%numbers_el_3, idx=%numbers_i_4
6
+ %t5 = load_field numbers_el_3["value"] :: integer
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: integer
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: integer
10
+ yield %t6
11
+ )
12
+ (Declaration matrix_sums
13
+ %t7 = load_input "matrix" :: array
14
+ loop matrix id=L2 in %t7 as el=%matrix_el_8, idx=%matrix_i_9
15
+ %acc_10 = decl_acc :: float
16
+ %t11 = load_field matrix_el_8["row"] :: any
17
+ loop row id=L3 in %t11 as el=%row_el_12, idx=%row_i_13
18
+ %t14 = load_field row_el_12["cell"] :: float
19
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: float
20
+ end_loop
21
+ %t15 = acc_load %acc_10 :: float
22
+ yield %t15
23
+ end_loop
24
+ )
25
+ (Declaration mixed_array
26
+ %t16 = load_input "matrix" :: array
27
+ %t23 = load_decl sum_numbers :: integer
28
+ loop matrix id=L4 in %t16 as el=%matrix_el_17, idx=%matrix_i_18
29
+ %t19 = load_field matrix_el_17["row"] :: any
30
+ loop row id=L5 in %t19 as el=%row_el_20, idx=%row_i_21
31
+ %t22 = load_input "scalar_val" :: integer
32
+ %t24 = load_field row_el_20["cell"] :: float
33
+ %t25 = make_tuple(%t22, %t23, %t24) :: tuple<integer, integer, float>
34
+ yield %t25
35
+ end_loop
36
+ end_loop
37
+ )
38
+ (Declaration constant
39
+ %t26 = const 42 :: integer
40
+ yield %t26
41
+ )
42
+ )
@@ -0,0 +1,48 @@
1
+ (LIR
2
+ (Declaration sum_numbers
3
+ %acc_1 = decl_acc :: integer
4
+ %t2 = load_input "numbers" :: array
5
+ loop numbers id=L1 in %t2 as el=%numbers_el_3, idx=%numbers_i_4
6
+ %t5 = load_field numbers_el_3["value"] :: integer
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: integer
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: integer
10
+ yield %t6
11
+ )
12
+ (Declaration matrix_sums
13
+ %t7 = load_input "matrix" :: array
14
+ loop matrix id=L2 in %t7 as el=%matrix_el_8, idx=%matrix_i_9
15
+ %acc_10 = decl_acc :: float
16
+ %t11 = load_field matrix_el_8["row"] :: any
17
+ loop row id=L3 in %t11 as el=%row_el_12, idx=%row_i_13
18
+ %t14 = load_field row_el_12["cell"] :: float
19
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: float
20
+ end_loop
21
+ %t15 = acc_load %acc_10 :: float
22
+ yield %t15
23
+ end_loop
24
+ )
25
+ (Declaration mixed_array
26
+ %t16 = load_input "matrix" :: array
27
+ %acc28 = decl_acc :: integer
28
+ %t29 = load_input "numbers" :: array
29
+ loop numbers id=L6 in %t29 as el=%numbers_el_3, idx=%numbers_i_4
30
+ %t30 = load_field numbers_el_3["value"] :: integer
31
+ %acc28 = acc_add agg.sum(%acc28, %t30) :: integer
32
+ end_loop
33
+ %t31 = acc_load %acc28 :: integer
34
+ loop matrix id=L4 in %t16 as el=%matrix_el_17, idx=%matrix_i_18
35
+ %t19 = load_field matrix_el_17["row"] :: any
36
+ loop row id=L5 in %t19 as el=%row_el_20, idx=%row_i_21
37
+ %t22 = load_input "scalar_val" :: integer
38
+ %t24 = load_field row_el_20["cell"] :: float
39
+ %t25 = make_tuple(%t22, %t31, %t24) :: tuple<integer, integer, float>
40
+ yield %t25
41
+ end_loop
42
+ end_loop
43
+ )
44
+ (Declaration constant
45
+ %t26 = const 42 :: integer
46
+ yield %t26
47
+ )
48
+ )
@@ -0,0 +1,48 @@
1
+ (LIR
2
+ (Declaration sum_numbers
3
+ %acc_1 = decl_acc :: integer
4
+ %t2 = load_input "numbers" :: array
5
+ loop numbers id=L1 in %t2 as el=%numbers_el_3, idx=%numbers_i_4
6
+ %t5 = load_field numbers_el_3["value"] :: integer
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: integer
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: integer
10
+ yield %t6
11
+ )
12
+ (Declaration matrix_sums
13
+ %t7 = load_input "matrix" :: array
14
+ loop matrix id=L2 in %t7 as el=%matrix_el_8, idx=%matrix_i_9
15
+ %acc_10 = decl_acc :: float
16
+ %t11 = load_field matrix_el_8["row"] :: any
17
+ loop row id=L3 in %t11 as el=%row_el_12, idx=%row_i_13
18
+ %t14 = load_field row_el_12["cell"] :: float
19
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: float
20
+ end_loop
21
+ %t15 = acc_load %acc_10 :: float
22
+ yield %t15
23
+ end_loop
24
+ )
25
+ (Declaration mixed_array
26
+ %t16 = load_input "matrix" :: array
27
+ %acc28 = decl_acc :: integer
28
+ %t29 = load_input "numbers" :: array
29
+ loop numbers id=L6 in %t29 as el=%numbers_el_3, idx=%numbers_i_4
30
+ %t30 = load_field numbers_el_3["value"] :: integer
31
+ %acc28 = acc_add agg.sum(%acc28, %t30) :: integer
32
+ end_loop
33
+ %t31 = acc_load %acc28 :: integer
34
+ loop matrix id=L4 in %t16 as el=%matrix_el_17, idx=%matrix_i_18
35
+ %t19 = load_field matrix_el_17["row"] :: any
36
+ loop row id=L5 in %t19 as el=%row_el_20, idx=%row_i_21
37
+ %t22 = load_input "scalar_val" :: integer
38
+ %t24 = load_field row_el_20["cell"] :: float
39
+ %t25 = make_tuple(%t22, %t31, %t24) :: tuple<integer, integer, float>
40
+ yield %t25
41
+ end_loop
42
+ end_loop
43
+ )
44
+ (Declaration constant
45
+ %t26 = const 42 :: integer
46
+ yield %t26
47
+ )
48
+ )
@@ -0,0 +1,48 @@
1
+ (LIR
2
+ (Declaration sum_numbers
3
+ %acc_1 = decl_acc :: integer
4
+ %t2 = load_input "numbers" :: array
5
+ loop numbers id=L1 in %t2 as el=%numbers_el_3, idx=%numbers_i_4
6
+ %t5 = load_field numbers_el_3["value"] :: integer
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: integer
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: integer
10
+ yield %t6
11
+ )
12
+ (Declaration matrix_sums
13
+ %t7 = load_input "matrix" :: array
14
+ loop matrix id=L2 in %t7 as el=%matrix_el_8, idx=%matrix_i_9
15
+ %acc_10 = decl_acc :: float
16
+ %t11 = load_field matrix_el_8["row"] :: any
17
+ loop row id=L3 in %t11 as el=%row_el_12, idx=%row_i_13
18
+ %t14 = load_field row_el_12["cell"] :: float
19
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: float
20
+ end_loop
21
+ %t15 = acc_load %acc_10 :: float
22
+ yield %t15
23
+ end_loop
24
+ )
25
+ (Declaration mixed_array
26
+ %t16 = load_input "matrix" :: array
27
+ %acc28 = decl_acc :: integer
28
+ %t29 = load_input "numbers" :: array
29
+ loop numbers id=L6 in %t29 as el=%numbers_el_3, idx=%numbers_i_4
30
+ %t30 = load_field numbers_el_3["value"] :: integer
31
+ %acc28 = acc_add agg.sum(%acc28, %t30) :: integer
32
+ end_loop
33
+ %t31 = acc_load %acc28 :: integer
34
+ loop matrix id=L4 in %t16 as el=%matrix_el_17, idx=%matrix_i_18
35
+ %t19 = load_field matrix_el_17["row"] :: any
36
+ loop row id=L5 in %t19 as el=%row_el_20, idx=%row_i_21
37
+ %t22 = load_input "scalar_val" :: integer
38
+ %t24 = load_field row_el_20["cell"] :: float
39
+ %t25 = make_tuple(%t22, %t31, %t24) :: tuple<integer, integer, float>
40
+ yield %t25
41
+ end_loop
42
+ end_loop
43
+ )
44
+ (Declaration constant
45
+ %t26 = const 42 :: integer
46
+ yield %t26
47
+ )
48
+ )
@@ -0,0 +1,48 @@
1
+ (LIR
2
+ (Declaration sum_numbers
3
+ %acc_1 = decl_acc :: integer
4
+ %t2 = load_input "numbers" :: array
5
+ loop numbers id=L1 in %t2 as el=%numbers_el_3, idx=%numbers_i_4
6
+ %t5 = load_field numbers_el_3["value"] :: integer
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: integer
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: integer
10
+ yield %t6
11
+ )
12
+ (Declaration matrix_sums
13
+ %t7 = load_input "matrix" :: array
14
+ loop matrix id=L2 in %t7 as el=%matrix_el_8, idx=%matrix_i_9
15
+ %acc_10 = decl_acc :: float
16
+ %t11 = load_field matrix_el_8["row"] :: any
17
+ loop row id=L3 in %t11 as el=%row_el_12, idx=%row_i_13
18
+ %t14 = load_field row_el_12["cell"] :: float
19
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: float
20
+ end_loop
21
+ %t15 = acc_load %acc_10 :: float
22
+ yield %t15
23
+ end_loop
24
+ )
25
+ (Declaration mixed_array
26
+ %t16 = load_input "matrix" :: array
27
+ %acc28 = decl_acc :: integer
28
+ %t29 = load_input "numbers" :: array
29
+ loop numbers id=L6 in %t29 as el=%numbers_el_3, idx=%numbers_i_4
30
+ %t30 = load_field numbers_el_3["value"] :: integer
31
+ %acc28 = acc_add agg.sum(%acc28, %t30) :: integer
32
+ end_loop
33
+ %t31 = acc_load %acc28 :: integer
34
+ %t22 = load_input "scalar_val" :: integer
35
+ loop matrix id=L4 in %t16 as el=%matrix_el_17, idx=%matrix_i_18
36
+ %t19 = load_field matrix_el_17["row"] :: any
37
+ loop row id=L5 in %t19 as el=%row_el_20, idx=%row_i_21
38
+ %t24 = load_field row_el_20["cell"] :: float
39
+ %t25 = make_tuple(%t22, %t31, %t24) :: tuple<integer, integer, float>
40
+ yield %t25
41
+ end_loop
42
+ end_loop
43
+ )
44
+ (Declaration constant
45
+ %t26 = const 42 :: integer
46
+ yield %t26
47
+ )
48
+ )
@@ -0,0 +1,48 @@
1
+ (LIR
2
+ (Declaration sum_numbers
3
+ %acc_1 = decl_acc :: integer
4
+ %t2 = load_input "numbers" :: array
5
+ loop numbers id=L1 in %t2 as el=%numbers_el_3, idx=%numbers_i_4
6
+ %t5 = load_field numbers_el_3["value"] :: integer
7
+ %acc_1 = acc_add agg.sum(%acc_1, %t5) :: integer
8
+ end_loop
9
+ %t6 = acc_load %acc_1 :: integer
10
+ yield %t6
11
+ )
12
+ (Declaration matrix_sums
13
+ %t7 = load_input "matrix" :: array
14
+ loop matrix id=L2 in %t7 as el=%matrix_el_8, idx=%matrix_i_9
15
+ %acc_10 = decl_acc :: float
16
+ %t11 = load_field matrix_el_8["row"] :: any
17
+ loop row id=L3 in %t11 as el=%row_el_12, idx=%row_i_13
18
+ %t14 = load_field row_el_12["cell"] :: float
19
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: float
20
+ end_loop
21
+ %t15 = acc_load %acc_10 :: float
22
+ yield %t15
23
+ end_loop
24
+ )
25
+ (Declaration mixed_array
26
+ %t16 = load_input "matrix" :: array
27
+ %acc28 = decl_acc :: integer
28
+ %t29 = load_input "numbers" :: array
29
+ loop numbers id=L6 in %t29 as el=%numbers_el_3, idx=%numbers_i_4
30
+ %t30 = load_field numbers_el_3["value"] :: integer
31
+ %acc28 = acc_add agg.sum(%acc28, %t30) :: integer
32
+ end_loop
33
+ %t31 = acc_load %acc28 :: integer
34
+ %t22 = load_input "scalar_val" :: integer
35
+ loop matrix id=L4 in %t16 as el=%matrix_el_17, idx=%matrix_i_18
36
+ %t19 = load_field matrix_el_17["row"] :: any
37
+ loop row id=L5 in %t19 as el=%row_el_20, idx=%row_i_21
38
+ %t24 = load_field row_el_20["cell"] :: float
39
+ %t25 = make_tuple(%t22, %t31, %t24) :: tuple<integer, integer, float>
40
+ yield %t25
41
+ end_loop
42
+ end_loop
43
+ )
44
+ (Declaration constant
45
+ %t26 = const 42 :: integer
46
+ yield %t26
47
+ )
48
+ )
@@ -0,0 +1,22 @@
1
+ (NAST
2
+ (VALUE sum_numbers
3
+ (Call :"agg.sum"
4
+ (InputRef [:numbers, :num, :value])
5
+ )
6
+ )
7
+ (VALUE matrix_sums
8
+ (Call :"agg.sum"
9
+ (InputRef [:matrix, :m, :row, :r, :cell])
10
+ )
11
+ )
12
+ (VALUE mixed_array
13
+ (Tuple
14
+ (InputRef [:scalar_val])
15
+ (Ref sum_numbers)
16
+ (InputRef [:matrix, :m, :row, :r, :cell])
17
+ )
18
+ )
19
+ (VALUE constant
20
+ (Const 42)
21
+ )
22
+ )
@@ -0,0 +1,53 @@
1
+ export function _sum_numbers(input) {
2
+ let acc_1 = 0;
3
+ let t2 = input["numbers"];
4
+ t2.forEach((numbers_el_3, numbers_i_4) => {
5
+ let t5 = numbers_el_3["value"];
6
+ acc_1 += t5;
7
+ });
8
+ return acc_1;
9
+ }
10
+
11
+ export function _matrix_sums(input) {
12
+ let out = [];
13
+ let t7 = input["matrix"];
14
+ t7.forEach((matrix_el_8, matrix_i_9) => {
15
+ let acc_10 = 0;
16
+ let t11 = matrix_el_8["row"];
17
+ t11.forEach((row_el_12, row_i_13) => {
18
+ let t14 = row_el_12["cell"];
19
+ acc_10 += t14;
20
+ });
21
+ out.push(acc_10);
22
+ });
23
+ return out;
24
+ }
25
+
26
+ export function _mixed_array(input) {
27
+ let out = [];
28
+ let t16 = input["matrix"];
29
+ let acc28 = 0;
30
+ let t29 = input["numbers"];
31
+ t29.forEach((numbers_el_3, numbers_i_4) => {
32
+ let t30 = numbers_el_3["value"];
33
+ acc28 += t30;
34
+ });
35
+ let t22 = input["scalar_val"];
36
+ t16.forEach((matrix_el_17, matrix_i_18) => {
37
+ let out_1 = [];
38
+ let t19 = matrix_el_17["row"];
39
+ t19.forEach((row_el_20, row_i_21) => {
40
+ let t24 = row_el_20["cell"];
41
+ let t25 = [t22, acc28, t24];
42
+ out_1.push(t25);
43
+ });
44
+ out.push(out_1);
45
+ });
46
+ return out;
47
+ }
48
+
49
+ export function _constant(input) {
50
+ const t26 = 42;
51
+ return t26;
52
+ }
53
+
@@ -0,0 +1,84 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_6956147434af4c2cdea2b50d3a8b5f46f84443101a3d62ab070150885747ccd1
3
+ def self.from(input_data = nil)
4
+ instance = Object.new
5
+ instance.extend(self)
6
+ instance.instance_variable_set(:@input, input_data)
7
+ instance
8
+ end
9
+
10
+ def self.__kumi_executable__
11
+ instance = Object.new
12
+ instance.extend(self)
13
+ instance
14
+ end
15
+
16
+ def update(input_data)
17
+ @input = @input.merge(input_data)
18
+ self
19
+ end
20
+
21
+ def [](name)
22
+ case name
23
+ when :sum_numbers then _sum_numbers
24
+ when :matrix_sums then _matrix_sums
25
+ when :mixed_array then _mixed_array
26
+ when :constant then _constant
27
+ else raise KeyError, "Unknown declaration"
28
+ end
29
+ end
30
+
31
+ def _sum_numbers(input = @input)
32
+ acc_1 = 0
33
+ t2 = input["numbers"] || input[:numbers]
34
+ t2.each_with_index do |numbers_el_3, numbers_i_4|
35
+ t5 = numbers_el_3["value"] || numbers_el_3[:value]
36
+ acc_1 += t5
37
+ end
38
+ acc_1
39
+ end
40
+
41
+ def _matrix_sums(input = @input)
42
+ out = []
43
+ t7 = input["matrix"] || input[:matrix]
44
+ t7.each_with_index do |matrix_el_8, matrix_i_9|
45
+ acc_10 = 0
46
+ t11 = matrix_el_8["row"] || matrix_el_8[:row]
47
+ t11.each_with_index do |row_el_12, row_i_13|
48
+ t14 = row_el_12["cell"] || row_el_12[:cell]
49
+ acc_10 += t14
50
+ end
51
+ t15 = acc_10
52
+ out << t15
53
+ end
54
+ out
55
+ end
56
+
57
+ def _mixed_array(input = @input)
58
+ out = []
59
+ t16 = input["matrix"] || input[:matrix]
60
+ acc28 = 0
61
+ t29 = input["numbers"] || input[:numbers]
62
+ t29.each_with_index do |numbers_el_3, numbers_i_4|
63
+ t30 = numbers_el_3["value"] || numbers_el_3[:value]
64
+ acc28 += t30
65
+ end
66
+ t31 = acc28
67
+ t22 = input["scalar_val"] || input[:scalar_val]
68
+ t16.each_with_index do |matrix_el_17, matrix_i_18|
69
+ out_1 = []
70
+ t19 = matrix_el_17["row"] || matrix_el_17[:row]
71
+ t19.each_with_index do |row_el_20, row_i_21|
72
+ t24 = row_el_20["cell"] || row_el_20[:cell]
73
+ t25 = [t22, t31, t24]
74
+ out_1 << t25
75
+ end
76
+ out << out_1
77
+ end
78
+ out
79
+ end
80
+
81
+ def _constant(input = @input)
82
+ 42
83
+ end
84
+ end
@@ -0,0 +1,22 @@
1
+ (SNAST
2
+ (VALUE sum_numbers
3
+ (Reduce :agg.sum over [numbers]
4
+ (InputRef numbers.num.value key_chain=[]) :: [numbers] -> integer
5
+ ) :: [] -> integer
6
+ ) :: [] -> integer
7
+ (VALUE matrix_sums
8
+ (Reduce :agg.sum over [row]
9
+ (InputRef matrix.m.row.r.cell key_chain=[]) :: [matrix, row] -> float
10
+ ) :: [matrix] -> float
11
+ ) :: [matrix] -> float
12
+ (VALUE mixed_array
13
+ (Tuple
14
+ (InputRef scalar_val key_chain=[]) :: [] -> integer
15
+ (Ref sum_numbers) :: [] -> integer
16
+ (InputRef matrix.m.row.r.cell key_chain=[]) :: [matrix, row] -> float
17
+ ) :: [matrix, row] -> tuple<integer, integer, float>
18
+ ) :: [matrix, row] -> tuple<integer, integer, float>
19
+ (VALUE constant
20
+ (Const 42) :: [] -> integer
21
+ ) :: [] -> integer
22
+ )
@@ -0,0 +1,6 @@
1
+ {
2
+ "constant": 42,
3
+ "sum_numbers": 60,
4
+ "matrix_sums": [4.0, 8.0],
5
+ "mixed_array": [[[100, 60.0, 1.5], [100, 60.0, 2.5]], [[100, 60.0, 3.5], [100, 60.0, 4.5]]]
6
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "numbers": [
3
+ {"value": 10},
4
+ {"value": 20},
5
+ {"value": 30}
6
+ ],
7
+ "scalar_val": 100,
8
+ "matrix": [
9
+ {
10
+ "row": [
11
+ {"cell": 1.5},
12
+ {"cell": 2.5}
13
+ ]
14
+ },
15
+ {
16
+ "row": [
17
+ {"cell": 3.5},
18
+ {"cell": 4.5}
19
+ ]
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,35 @@
1
+ schema do
2
+ input do
3
+ array :numbers do
4
+ hash :num do
5
+ integer :value
6
+ end
7
+ end
8
+ integer :scalar_val
9
+ array :matrix do
10
+ hash :m do
11
+ array :row do
12
+ hash :r do
13
+ float :cell
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ # Scalar (rank 0)
21
+ value :constant, 42
22
+
23
+ # 1D array (rank 1)
24
+ value :sum_numbers, fn(:sum, input.numbers.num.value)
25
+
26
+ # 2D operation (rank 2)
27
+ value :matrix_sums, fn(:sum, input.matrix.m.row.r.cell)
28
+
29
+ # Mixed array with different dimensional elements
30
+ value :mixed_array, [
31
+ input.scalar_val, # scalar (rank 0 broadcast to rank 2)
32
+ sum_numbers, # reduced to rank 0, broadcasted to rank 2
33
+ input.matrix.m.row.r.cell # scalar at rank 2
34
+ ]
35
+ end