kumi 0.0.17 → 0.0.19

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 +28 -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 +47 -5
  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,106 @@
1
+ export function _cube(input) {
2
+ let t1 = input["cube"];
3
+ return t1;
4
+ }
5
+
6
+ export function _layer(input) {
7
+ let out = [];
8
+ let t2 = input["cube"];
9
+ t2.forEach((cube_el_3, cube_i_4) => {
10
+ out.push(cube_el_3);
11
+ });
12
+ return out;
13
+ }
14
+
15
+ export function _row(input) {
16
+ let out = [];
17
+ let t5 = input["cube"];
18
+ t5.forEach((cube_el_6, cube_i_7) => {
19
+ let out_1 = [];
20
+ cube_el_6.forEach((layer_el_8, layer_i_9) => {
21
+ out_1.push(layer_el_8);
22
+ });
23
+ out.push(out_1);
24
+ });
25
+ return out;
26
+ }
27
+
28
+ export function _cell(input) {
29
+ let out = [];
30
+ let t10 = input["cube"];
31
+ t10.forEach((cube_el_11, cube_i_12) => {
32
+ let out_1 = [];
33
+ cube_el_11.forEach((layer_el_13, layer_i_14) => {
34
+ let out_2 = [];
35
+ layer_el_13.forEach((row_el_15, row_i_16) => {
36
+ out_2.push(row_el_15);
37
+ });
38
+ out_1.push(out_2);
39
+ });
40
+ out.push(out_1);
41
+ });
42
+ return out;
43
+ }
44
+
45
+ export function _cell_over_limit(input) {
46
+ let out = [];
47
+ let t17 = input["cube"];
48
+ const t24 = 100;
49
+ t17.forEach((cube_el_18, cube_i_19) => {
50
+ let out_1 = [];
51
+ cube_el_18.forEach((layer_el_20, layer_i_21) => {
52
+ let out_2 = [];
53
+ layer_el_20.forEach((row_el_22, row_i_23) => {
54
+ let t25 = row_el_22 > t24;
55
+ out_2.push(t25);
56
+ });
57
+ out_1.push(out_2);
58
+ });
59
+ out.push(out_1);
60
+ });
61
+ return out;
62
+ }
63
+
64
+ export function _cell_sum(input) {
65
+ let out = [];
66
+ let t26 = input["cube"];
67
+ const t56 = 100;
68
+ const t35 = 0;
69
+ t26.forEach((cube_el_27, cube_i_28) => {
70
+ let out_1 = [];
71
+ cube_el_27.forEach((layer_el_29, layer_i_30) => {
72
+ let acc_31 = 0;
73
+ layer_el_29.forEach((row_el_32, row_i_33) => {
74
+ let t57 = row_el_32 > t56;
75
+ let t36 = t57 ? row_el_32 : t35;
76
+ acc_31 += t36;
77
+ });
78
+ out_1.push(acc_31);
79
+ });
80
+ out.push(out_1);
81
+ });
82
+ return out;
83
+ }
84
+
85
+ export function _count_over_limit(input) {
86
+ let acc_38 = 0;
87
+ let t39 = input["cube"];
88
+ const t59 = 100;
89
+ const t49 = 1;
90
+ const t50 = 0;
91
+ t39.forEach((cube_el_40, cube_i_41) => {
92
+ let acc_42 = 0;
93
+ cube_el_40.forEach((layer_el_43, layer_i_44) => {
94
+ let acc_45 = 0;
95
+ layer_el_43.forEach((row_el_46, row_i_47) => {
96
+ let t60 = row_el_46 > t59;
97
+ let t51 = t60 ? t49 : t50;
98
+ acc_45 += t51;
99
+ });
100
+ acc_42 += acc_45;
101
+ });
102
+ acc_38 += acc_42;
103
+ });
104
+ return acc_38;
105
+ }
106
+
@@ -0,0 +1,141 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_95ba78dae41111df66252b8589633cd101a5db4a581ac86815334d8152861f2f
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 :cube then _cube
24
+ when :layer then _layer
25
+ when :row then _row
26
+ when :cell then _cell
27
+ when :cell_over_limit then _cell_over_limit
28
+ when :cell_sum then _cell_sum
29
+ when :count_over_limit then _count_over_limit
30
+ else raise KeyError, "Unknown declaration"
31
+ end
32
+ end
33
+
34
+ def _cube(input = @input)
35
+ input["cube"] || input[:cube]
36
+ end
37
+
38
+ def _layer(input = @input)
39
+ out = []
40
+ t2 = input["cube"] || input[:cube]
41
+ t2.each_with_index do |cube_el_3, cube_i_4|
42
+ out << cube_el_3
43
+ end
44
+ out
45
+ end
46
+
47
+ def _row(input = @input)
48
+ out = []
49
+ t5 = input["cube"] || input[:cube]
50
+ t5.each_with_index do |cube_el_6, cube_i_7|
51
+ out_1 = []
52
+ cube_el_6.each_with_index do |layer_el_8, layer_i_9|
53
+ out_1 << layer_el_8
54
+ end
55
+ out << out_1
56
+ end
57
+ out
58
+ end
59
+
60
+ def _cell(input = @input)
61
+ out = []
62
+ t10 = input["cube"] || input[:cube]
63
+ t10.each_with_index do |cube_el_11, cube_i_12|
64
+ out_1 = []
65
+ cube_el_11.each_with_index do |layer_el_13, layer_i_14|
66
+ out_2 = []
67
+ layer_el_13.each_with_index do |row_el_15, row_i_16|
68
+ out_2 << row_el_15
69
+ end
70
+ out_1 << out_2
71
+ end
72
+ out << out_1
73
+ end
74
+ out
75
+ end
76
+
77
+ def _cell_over_limit(input = @input)
78
+ out = []
79
+ t17 = input["cube"] || input[:cube]
80
+ t24 = 100
81
+ t17.each_with_index do |cube_el_18, cube_i_19|
82
+ out_1 = []
83
+ cube_el_18.each_with_index do |layer_el_20, layer_i_21|
84
+ out_2 = []
85
+ layer_el_20.each_with_index do |row_el_22, row_i_23|
86
+ t25 = row_el_22 > t24
87
+ out_2 << t25
88
+ end
89
+ out_1 << out_2
90
+ end
91
+ out << out_1
92
+ end
93
+ out
94
+ end
95
+
96
+ def _cell_sum(input = @input)
97
+ out = []
98
+ t26 = input["cube"] || input[:cube]
99
+ t56 = 100
100
+ t35 = 0
101
+ t26.each_with_index do |cube_el_27, cube_i_28|
102
+ out_1 = []
103
+ cube_el_27.each_with_index do |layer_el_29, layer_i_30|
104
+ acc_31 = 0
105
+ layer_el_29.each_with_index do |row_el_32, row_i_33|
106
+ t57 = row_el_32 > t56
107
+ t36 = t57 ? row_el_32 : t35
108
+ acc_31 += t36
109
+ end
110
+ t37 = acc_31
111
+ out_1 << t37
112
+ end
113
+ out << out_1
114
+ end
115
+ out
116
+ end
117
+
118
+ def _count_over_limit(input = @input)
119
+ acc_38 = 0
120
+ t39 = input["cube"] || input[:cube]
121
+ t59 = 100
122
+ t49 = 1
123
+ t50 = 0
124
+ t39.each_with_index do |cube_el_40, cube_i_41|
125
+ acc_42 = 0
126
+ cube_el_40.each_with_index do |layer_el_43, layer_i_44|
127
+ acc_45 = 0
128
+ layer_el_43.each_with_index do |row_el_46, row_i_47|
129
+ t60 = row_el_46 > t59
130
+ t51 = t60 ? t49 : t50
131
+ acc_45 += t51
132
+ end
133
+ t52 = acc_45
134
+ acc_42 += t52
135
+ end
136
+ t53 = acc_42
137
+ acc_38 += t53
138
+ end
139
+ acc_38
140
+ end
141
+ end
@@ -0,0 +1,42 @@
1
+ (SNAST
2
+ (VALUE cube
3
+ (InputRef cube key_chain=[]) :: [] -> array
4
+ ) :: [] -> array
5
+ (VALUE layer
6
+ (InputRef cube.layer key_chain=[]) :: [cube] -> array
7
+ ) :: [cube] -> array
8
+ (VALUE row
9
+ (InputRef cube.layer.row key_chain=[]) :: [cube, layer] -> array
10
+ ) :: [cube, layer] -> array
11
+ (VALUE cell
12
+ (InputRef cube.layer.row.cell key_chain=[]) :: [cube, layer, row] -> integer
13
+ ) :: [cube, layer, row] -> integer
14
+ (TRAIT cell_over_limit
15
+ (Call :core.gt
16
+ (InputRef cube.layer.row.cell key_chain=[]) :: [cube, layer, row] -> integer
17
+ (Const 100) :: [] -> integer
18
+ ) :: [cube, layer, row] -> boolean
19
+ ) :: [cube, layer, row] -> boolean
20
+ (VALUE cell_sum
21
+ (Reduce :agg.sum over [row]
22
+ (Select
23
+ (Ref cell_over_limit) :: [cube, layer, row] -> boolean
24
+ (InputRef cube.layer.row.cell key_chain=[]) :: [cube, layer, row] -> integer
25
+ (Const 0) :: [] -> integer
26
+ ) :: [cube, layer, row] -> integer
27
+ ) :: [cube, layer] -> integer
28
+ ) :: [cube, layer] -> integer
29
+ (VALUE count_over_limit
30
+ (Reduce :agg.sum over [cube]
31
+ (Reduce :agg.sum over [layer]
32
+ (Reduce :agg.sum over [row]
33
+ (Select
34
+ (Ref cell_over_limit) :: [cube, layer, row] -> boolean
35
+ (Const 1) :: [] -> integer
36
+ (Const 0) :: [] -> integer
37
+ ) :: [cube, layer, row] -> integer
38
+ ) :: [cube, layer] -> integer
39
+ ) :: [cube] -> integer
40
+ ) :: [] -> integer
41
+ ) :: [] -> integer
42
+ )
@@ -0,0 +1,55 @@
1
+ {
2
+ "cube": [
3
+ [
4
+ [10, 20, 150],
5
+ [30, 40, 50]
6
+ ],
7
+ [
8
+ [60, 200, 80],
9
+ [90, 100, 110]
10
+ ]
11
+ ],
12
+ "layer": [
13
+ [
14
+ [10, 20, 150],
15
+ [30, 40, 50]
16
+ ],
17
+ [
18
+ [60, 200, 80],
19
+ [90, 100, 110]
20
+ ]
21
+ ],
22
+ "row": [
23
+ [
24
+ [10, 20, 150],
25
+ [30, 40, 50]
26
+ ],
27
+ [
28
+ [60, 200, 80],
29
+ [90, 100, 110]
30
+ ]
31
+ ],
32
+ "cell": [
33
+ [
34
+ [10, 20, 150],
35
+ [30, 40, 50]
36
+ ],
37
+ [
38
+ [60, 200, 80],
39
+ [90, 100, 110]
40
+ ]
41
+ ],
42
+ "cell_over_limit": [
43
+ [
44
+ [false, false, true],
45
+ [false, false, false]
46
+ ],
47
+ [
48
+ [false, true, false],
49
+ [false, false, true]
50
+ ]
51
+ ],
52
+ "cell_sum": [[150, 0],
53
+ [200, 110]],
54
+ "count_over_limit": 3
55
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "cube": [
3
+ [
4
+ [10, 20, 150],
5
+ [30, 40, 50]
6
+ ],
7
+ [
8
+ [60, 200, 80],
9
+ [90, 100, 110]
10
+ ]
11
+ ]
12
+ }
@@ -0,0 +1,21 @@
1
+ schema do
2
+ input do
3
+ array :cube do
4
+ array :layer do
5
+ array :row do
6
+ integer :cell
7
+ end
8
+ end
9
+ end
10
+ end
11
+
12
+ value :cube, input.cube
13
+ value :layer, input.cube.layer
14
+ value :row, input.cube.layer.row
15
+ value :cell, input.cube.layer.row.cell
16
+
17
+ trait :cell_over_limit, input.cube.layer.row.cell > 100
18
+
19
+ value :cell_sum, fn(:sum_if, input.cube.layer.row.cell, cell_over_limit)
20
+ value :count_over_limit, fn(:sum, fn(:sum, fn(:sum_if, 1, cell_over_limit)))
21
+ end
@@ -0,0 +1,42 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :regions :array
4
+ [
5
+ (InputDeclaration :region :hash
6
+ [
7
+ (InputDeclaration :name :string)
8
+ (InputDeclaration :sales :array
9
+ [
10
+ (InputDeclaration :sale :hash
11
+ [
12
+ (InputDeclaration :amount :integer)
13
+ ]
14
+ )
15
+ ]
16
+ )
17
+ ]
18
+ )
19
+ ]
20
+ )
21
+ (InputDeclaration :adjustment :integer)
22
+ ]
23
+ values: [
24
+ (ValueDeclaration :regional_sales
25
+ (CallExpression :sum
26
+ (InputElementReference regions.region.sales.sale.amount)
27
+ )
28
+ )
29
+ (ValueDeclaration :total_sales
30
+ (CallExpression :sum
31
+ (DeclarationReference :regional_sales)
32
+ )
33
+ )
34
+ (ValueDeclaration :adjusted_total
35
+ (CallExpression :add
36
+ (DeclarationReference :total_sales)
37
+ (InputReference :adjustment)
38
+ )
39
+ )
40
+ ]
41
+ traits: []
42
+ )
@@ -0,0 +1,12 @@
1
+ regions: array (array) access_mode=element
2
+ └─> region: element_access
3
+ region: hash (hash)
4
+ └─> name: property_access
5
+ └─> sales: property_access → array_loop
6
+ name: string
7
+ sales: array (array) access_mode=element
8
+ └─> sale: element_access
9
+ sale: hash (hash)
10
+ └─> amount: property_access
11
+ amount: integer
12
+ adjustment: integer
@@ -0,0 +1,31 @@
1
+ (LIR
2
+ (Declaration regional_sales
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %acc_4 = decl_acc :: integer
6
+ %t5 = load_field regions_el_2["sales"] :: any
7
+ loop sales id=L2 in %t5 as el=%sales_el_6, idx=%sales_i_7
8
+ %t8 = load_field sales_el_6["amount"] :: integer
9
+ %acc_4 = acc_add agg.sum(%acc_4, %t8) :: integer
10
+ end_loop
11
+ %t9 = acc_load %acc_4 :: integer
12
+ yield %t9
13
+ end_loop
14
+ )
15
+ (Declaration total_sales
16
+ %acc_10 = decl_acc :: integer
17
+ %t11 = load_input "regions" :: array
18
+ loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
19
+ %t14 = load_decl regional_sales axes=[regions] :: integer
20
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: integer
21
+ end_loop
22
+ %t15 = acc_load %acc_10 :: integer
23
+ yield %t15
24
+ )
25
+ (Declaration adjusted_total
26
+ %t16 = load_decl total_sales :: integer
27
+ %t17 = load_input "adjustment" :: integer
28
+ %t18 = call core.add(%t16, %t17) :: integer
29
+ yield %t18
30
+ )
31
+ )
@@ -0,0 +1,31 @@
1
+ (LIR
2
+ (Declaration regional_sales
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %acc_4 = decl_acc :: integer
6
+ %t5 = load_field regions_el_2["sales"] :: any
7
+ loop sales id=L2 in %t5 as el=%sales_el_6, idx=%sales_i_7
8
+ %t8 = load_field sales_el_6["amount"] :: integer
9
+ %acc_4 = acc_add agg.sum(%acc_4, %t8) :: integer
10
+ end_loop
11
+ %t9 = acc_load %acc_4 :: integer
12
+ yield %t9
13
+ end_loop
14
+ )
15
+ (Declaration total_sales
16
+ %acc_10 = decl_acc :: integer
17
+ %t11 = load_input "regions" :: array
18
+ loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
19
+ %t14 = load_decl regional_sales axes=[regions] :: integer
20
+ %acc_10 = acc_add agg.sum(%acc_10, %t14) :: integer
21
+ end_loop
22
+ %t15 = acc_load %acc_10 :: integer
23
+ yield %t15
24
+ )
25
+ (Declaration adjusted_total
26
+ %t16 = load_decl total_sales :: integer
27
+ %t17 = load_input "adjustment" :: integer
28
+ %t18 = call core.add(%t16, %t17) :: integer
29
+ yield %t18
30
+ )
31
+ )
@@ -0,0 +1,51 @@
1
+ (LIR
2
+ (Declaration regional_sales
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %acc_4 = decl_acc :: integer
6
+ %t5 = load_field regions_el_2["sales"] :: any
7
+ loop sales id=L2 in %t5 as el=%sales_el_6, idx=%sales_i_7
8
+ %t8 = load_field sales_el_6["amount"] :: integer
9
+ %acc_4 = acc_add agg.sum(%acc_4, %t8) :: integer
10
+ end_loop
11
+ %t9 = acc_load %acc_4 :: integer
12
+ yield %t9
13
+ end_loop
14
+ )
15
+ (Declaration total_sales
16
+ %acc_10 = decl_acc :: integer
17
+ %t11 = load_input "regions" :: array
18
+ loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
19
+ %t19 = load_input "regions" :: array
20
+ %acc21 = decl_acc :: integer
21
+ %t22 = load_field regions_el_12["sales"] :: any
22
+ loop sales id=L4 in %t22 as el=%sales_el_6, idx=%sales_i_7
23
+ %t23 = load_field sales_el_6["amount"] :: integer
24
+ %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
25
+ end_loop
26
+ %t24 = acc_load %acc21 :: integer
27
+ %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
28
+ end_loop
29
+ %t15 = acc_load %acc_10 :: integer
30
+ yield %t15
31
+ )
32
+ (Declaration adjusted_total
33
+ %acc26 = decl_acc :: integer
34
+ %t27 = load_input "regions" :: array
35
+ loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
36
+ %t30 = load_input "regions" :: array
37
+ %acc32 = decl_acc :: integer
38
+ %t33 = load_field regions_el_12["sales"] :: any
39
+ loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
40
+ %t34 = load_field sales_el_6["amount"] :: integer
41
+ %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
42
+ end_loop
43
+ %t35 = acc_load %acc32 :: integer
44
+ %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
45
+ end_loop
46
+ %t29 = acc_load %acc26 :: integer
47
+ %t17 = load_input "adjustment" :: integer
48
+ %t18 = call core.add(%t29, %t17) :: integer
49
+ yield %t18
50
+ )
51
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration regional_sales
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %acc_4 = decl_acc :: integer
6
+ %t5 = load_field regions_el_2["sales"] :: any
7
+ loop sales id=L2 in %t5 as el=%sales_el_6, idx=%sales_i_7
8
+ %t8 = load_field sales_el_6["amount"] :: integer
9
+ %acc_4 = acc_add agg.sum(%acc_4, %t8) :: integer
10
+ end_loop
11
+ %t9 = acc_load %acc_4 :: integer
12
+ yield %t9
13
+ end_loop
14
+ )
15
+ (Declaration total_sales
16
+ %acc_10 = decl_acc :: integer
17
+ %t11 = load_input "regions" :: array
18
+ loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
19
+ %acc21 = decl_acc :: integer
20
+ %t22 = load_field regions_el_12["sales"] :: any
21
+ loop sales id=L4 in %t22 as el=%sales_el_6, idx=%sales_i_7
22
+ %t23 = load_field sales_el_6["amount"] :: integer
23
+ %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
24
+ end_loop
25
+ %t24 = acc_load %acc21 :: integer
26
+ %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
27
+ end_loop
28
+ %t15 = acc_load %acc_10 :: integer
29
+ yield %t15
30
+ )
31
+ (Declaration adjusted_total
32
+ %acc26 = decl_acc :: integer
33
+ %t27 = load_input "regions" :: array
34
+ loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
35
+ %acc32 = decl_acc :: integer
36
+ %t33 = load_field regions_el_12["sales"] :: any
37
+ loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
38
+ %t34 = load_field sales_el_6["amount"] :: integer
39
+ %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
40
+ end_loop
41
+ %t35 = acc_load %acc32 :: integer
42
+ %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
43
+ end_loop
44
+ %t29 = acc_load %acc26 :: integer
45
+ %t17 = load_input "adjustment" :: integer
46
+ %t18 = call core.add(%t29, %t17) :: integer
47
+ yield %t18
48
+ )
49
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration regional_sales
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %acc_4 = decl_acc :: integer
6
+ %t5 = load_field regions_el_2["sales"] :: any
7
+ loop sales id=L2 in %t5 as el=%sales_el_6, idx=%sales_i_7
8
+ %t8 = load_field sales_el_6["amount"] :: integer
9
+ %acc_4 = acc_add agg.sum(%acc_4, %t8) :: integer
10
+ end_loop
11
+ %t9 = acc_load %acc_4 :: integer
12
+ yield %t9
13
+ end_loop
14
+ )
15
+ (Declaration total_sales
16
+ %acc_10 = decl_acc :: integer
17
+ %t11 = load_input "regions" :: array
18
+ loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
19
+ %acc21 = decl_acc :: integer
20
+ %t22 = load_field regions_el_12["sales"] :: any
21
+ loop sales id=L4 in %t22 as el=%sales_el_6, idx=%sales_i_7
22
+ %t23 = load_field sales_el_6["amount"] :: integer
23
+ %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
24
+ end_loop
25
+ %t24 = acc_load %acc21 :: integer
26
+ %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
27
+ end_loop
28
+ %t15 = acc_load %acc_10 :: integer
29
+ yield %t15
30
+ )
31
+ (Declaration adjusted_total
32
+ %acc26 = decl_acc :: integer
33
+ %t27 = load_input "regions" :: array
34
+ loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
35
+ %acc32 = decl_acc :: integer
36
+ %t33 = load_field regions_el_12["sales"] :: any
37
+ loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
38
+ %t34 = load_field sales_el_6["amount"] :: integer
39
+ %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
40
+ end_loop
41
+ %t35 = acc_load %acc32 :: integer
42
+ %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
43
+ end_loop
44
+ %t29 = acc_load %acc26 :: integer
45
+ %t17 = load_input "adjustment" :: integer
46
+ %t18 = call core.add(%t29, %t17) :: integer
47
+ yield %t18
48
+ )
49
+ )
@@ -0,0 +1,49 @@
1
+ (LIR
2
+ (Declaration regional_sales
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %acc_4 = decl_acc :: integer
6
+ %t5 = load_field regions_el_2["sales"] :: any
7
+ loop sales id=L2 in %t5 as el=%sales_el_6, idx=%sales_i_7
8
+ %t8 = load_field sales_el_6["amount"] :: integer
9
+ %acc_4 = acc_add agg.sum(%acc_4, %t8) :: integer
10
+ end_loop
11
+ %t9 = acc_load %acc_4 :: integer
12
+ yield %t9
13
+ end_loop
14
+ )
15
+ (Declaration total_sales
16
+ %acc_10 = decl_acc :: integer
17
+ %t11 = load_input "regions" :: array
18
+ loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
19
+ %acc21 = decl_acc :: integer
20
+ %t22 = load_field regions_el_12["sales"] :: any
21
+ loop sales id=L4 in %t22 as el=%sales_el_6, idx=%sales_i_7
22
+ %t23 = load_field sales_el_6["amount"] :: integer
23
+ %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
24
+ end_loop
25
+ %t24 = acc_load %acc21 :: integer
26
+ %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
27
+ end_loop
28
+ %t15 = acc_load %acc_10 :: integer
29
+ yield %t15
30
+ )
31
+ (Declaration adjusted_total
32
+ %acc26 = decl_acc :: integer
33
+ %t27 = load_input "regions" :: array
34
+ loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
35
+ %acc32 = decl_acc :: integer
36
+ %t33 = load_field regions_el_12["sales"] :: any
37
+ loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
38
+ %t34 = load_field sales_el_6["amount"] :: integer
39
+ %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
40
+ end_loop
41
+ %t35 = acc_load %acc32 :: integer
42
+ %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
43
+ end_loop
44
+ %t29 = acc_load %acc26 :: integer
45
+ %t17 = load_input "adjustment" :: integer
46
+ %t18 = call core.add(%t29, %t17) :: integer
47
+ yield %t18
48
+ )
49
+ )