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,42 @@
1
+ (NAST
2
+ (VALUE tuple
3
+ (Tuple
4
+ (Const 1)
5
+ (Const 2)
6
+ (Const 3)
7
+ (InputRef [:x])
8
+ )
9
+ )
10
+ (VALUE max_1
11
+ (Call :"agg.max"
12
+ (Ref tuple)
13
+ )
14
+ )
15
+ (VALUE max_2
16
+ (Call :"agg.max"
17
+ (Tuple
18
+ (Const 1)
19
+ (Const 2)
20
+ (Const 3)
21
+ (InputRef [:x])
22
+ (Const 1000)
23
+ )
24
+ )
25
+ )
26
+ (VALUE min_1
27
+ (Call :"agg.min"
28
+ (Ref tuple)
29
+ )
30
+ )
31
+ (VALUE min_2
32
+ (Call :"agg.min"
33
+ (Tuple
34
+ (Const 1)
35
+ (Const 2)
36
+ (Const 3)
37
+ (InputRef [:x])
38
+ (Const -100)
39
+ )
40
+ )
41
+ )
42
+ )
@@ -0,0 +1,51 @@
1
+ export function _tuple(input) {
2
+ const t1 = 1;
3
+ const t2 = 2;
4
+ const t3 = 3;
5
+ let t4 = input["x"];
6
+ let t5 = [t1, t2, t3, t4];
7
+ return t5;
8
+ }
9
+
10
+ export function _max_1(input) {
11
+ const t24 = 1;
12
+ const t25 = 2;
13
+ const t26 = 3;
14
+ let t27 = input["x"];
15
+ let t28 = [t24, t25, t26, t27];
16
+ let t7 = Math.max(...t28);
17
+ return t7;
18
+ }
19
+
20
+ export function _max_2(input) {
21
+ const t8 = 1;
22
+ const t9 = 2;
23
+ const t10 = 3;
24
+ let t11 = input["x"];
25
+ const t12 = 1000;
26
+ let t13 = [t8, t9, t10, t11, t12];
27
+ let t14 = Math.max(...t13);
28
+ return t14;
29
+ }
30
+
31
+ export function _min_1(input) {
32
+ const t29 = 1;
33
+ const t30 = 2;
34
+ const t31 = 3;
35
+ let t32 = input["x"];
36
+ let t33 = [t29, t30, t31, t32];
37
+ let t16 = Math.min(...t33);
38
+ return t16;
39
+ }
40
+
41
+ export function _min_2(input) {
42
+ const t17 = 1;
43
+ const t18 = 2;
44
+ const t19 = 3;
45
+ let t20 = input["x"];
46
+ const t21 = -100;
47
+ let t22 = [t17, t18, t19, t20, t21];
48
+ let t23 = Math.min(...t22);
49
+ return t23;
50
+ }
51
+
@@ -0,0 +1,77 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_08e1c30dee487d18ab2e33d19b5a722c9e1e991382f6db6419350dfcbd03cb93
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 :tuple then _tuple
24
+ when :max_1 then _max_1
25
+ when :max_2 then _max_2
26
+ when :min_1 then _min_1
27
+ when :min_2 then _min_2
28
+ else raise KeyError, "Unknown declaration"
29
+ end
30
+ end
31
+
32
+ def _tuple(input = @input)
33
+ t1 = 1
34
+ t2 = 2
35
+ t3 = 3
36
+ t4 = input["x"] || input[:x]
37
+ [t1, t2, t3, t4]
38
+ end
39
+
40
+ def _max_1(input = @input)
41
+ t24 = 1
42
+ t25 = 2
43
+ t26 = 3
44
+ t27 = input["x"] || input[:x]
45
+ t28 = [t24, t25, t26, t27]
46
+ t28.max
47
+ end
48
+
49
+ def _max_2(input = @input)
50
+ t8 = 1
51
+ t9 = 2
52
+ t10 = 3
53
+ t11 = input["x"] || input[:x]
54
+ t12 = 1000
55
+ t13 = [t8, t9, t10, t11, t12]
56
+ t13.max
57
+ end
58
+
59
+ def _min_1(input = @input)
60
+ t29 = 1
61
+ t30 = 2
62
+ t31 = 3
63
+ t32 = input["x"] || input[:x]
64
+ t33 = [t29, t30, t31, t32]
65
+ t33.min
66
+ end
67
+
68
+ def _min_2(input = @input)
69
+ t17 = 1
70
+ t18 = 2
71
+ t19 = 3
72
+ t20 = input["x"] || input[:x]
73
+ t21 = -100
74
+ t22 = [t17, t18, t19, t20, t21]
75
+ t22.min
76
+ end
77
+ end
@@ -0,0 +1,42 @@
1
+ (SNAST
2
+ (VALUE tuple
3
+ (Tuple
4
+ (Const 1) :: [] -> integer
5
+ (Const 2) :: [] -> integer
6
+ (Const 3) :: [] -> integer
7
+ (InputRef x key_chain=[]) :: [] -> integer
8
+ ) :: [] -> tuple<integer>
9
+ ) :: [] -> tuple<integer>
10
+ (VALUE max_1
11
+ (Fold :agg.max
12
+ (Ref tuple) :: [] -> tuple<integer>
13
+ ) :: [] -> integer
14
+ ) :: [] -> integer
15
+ (VALUE max_2
16
+ (Fold :agg.max
17
+ (Tuple
18
+ (Const 1) :: [] -> integer
19
+ (Const 2) :: [] -> integer
20
+ (Const 3) :: [] -> integer
21
+ (InputRef x key_chain=[]) :: [] -> integer
22
+ (Const 1000) :: [] -> integer
23
+ ) :: [] -> tuple<integer>
24
+ ) :: [] -> integer
25
+ ) :: [] -> integer
26
+ (VALUE min_1
27
+ (Fold :agg.min
28
+ (Ref tuple) :: [] -> tuple<integer>
29
+ ) :: [] -> integer
30
+ ) :: [] -> integer
31
+ (VALUE min_2
32
+ (Fold :agg.min
33
+ (Tuple
34
+ (Const 1) :: [] -> integer
35
+ (Const 2) :: [] -> integer
36
+ (Const 3) :: [] -> integer
37
+ (InputRef x key_chain=[]) :: [] -> integer
38
+ (Const -100) :: [] -> integer
39
+ ) :: [] -> tuple<integer>
40
+ ) :: [] -> integer
41
+ ) :: [] -> integer
42
+ )
@@ -0,0 +1,7 @@
1
+ {
2
+ "tuple": [1,2,3,100],
3
+ "max_1": 100,
4
+ "max_2": 1000,
5
+ "min_1": 1,
6
+ "min_2": -100
7
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "x": 100
3
+ }
@@ -0,0 +1,11 @@
1
+ schema do
2
+ input do
3
+ integer :x
4
+ end
5
+
6
+ value :tuple, [1, 2, 3, input.x]
7
+ value :max_1, fn(:max, tuple)
8
+ value :max_2, fn(:max, [1, 2, 3, input.x, 1000])
9
+ value :min_1, fn(:min, tuple)
10
+ value :min_2, fn(:min, [1, 2, 3, input.x, -100])
11
+ end
@@ -0,0 +1,44 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :points :array
4
+ [
5
+ (InputDeclaration :point :hash
6
+ [
7
+ (InputDeclaration :x :integer)
8
+ (InputDeclaration :y :integer)
9
+ ]
10
+ )
11
+ ]
12
+ )
13
+ ]
14
+ values: [
15
+ (ValueDeclaration :selected_value
16
+ (CallExpression :select
17
+ (DeclarationReference :x_is_large)
18
+ (InputElementReference points.point.x)
19
+ (InputElementReference points.point.y)
20
+ )
21
+ )
22
+ (ValueDeclaration :final_value_per_point
23
+ (CallExpression :max
24
+ (ArrayExpression
25
+ (DeclarationReference :selected_value)
26
+ (InputElementReference points.point.x)
27
+ )
28
+ )
29
+ )
30
+ (ValueDeclaration :grand_total
31
+ (CallExpression :sum
32
+ (DeclarationReference :final_value_per_point)
33
+ )
34
+ )
35
+ ]
36
+ traits: [
37
+ (TraitDeclaration :x_is_large
38
+ (CallExpression :>
39
+ (InputElementReference points.point.x)
40
+ (Literal 100)
41
+ )
42
+ )
43
+ ]
44
+ )
@@ -0,0 +1,7 @@
1
+ points: array (array) access_mode=element
2
+ └─> point: element_access
3
+ point: hash (hash)
4
+ └─> x: property_access
5
+ └─> y: property_access
6
+ x: integer
7
+ y: integer
@@ -0,0 +1,41 @@
1
+ (LIR
2
+ (Declaration x_is_large
3
+ %t1 = load_input "points" :: array
4
+ loop points id=L1 in %t1 as el=%points_el_2, idx=%points_i_3
5
+ %t4 = load_field points_el_2["x"] :: integer
6
+ %t5 = const 100 :: integer
7
+ %t6 = call core.gt(%t4, %t5) :: boolean
8
+ yield %t6
9
+ end_loop
10
+ )
11
+ (Declaration selected_value
12
+ %t7 = load_input "points" :: array
13
+ loop points id=L2 in %t7 as el=%points_el_8, idx=%points_i_9
14
+ %t10 = load_decl x_is_large axes=[points] :: boolean
15
+ %t11 = load_field points_el_8["x"] :: integer
16
+ %t12 = load_field points_el_8["y"] :: integer
17
+ %t13 = select %t10, %t11, %t12 :: integer
18
+ yield %t13
19
+ end_loop
20
+ )
21
+ (Declaration final_value_per_point
22
+ %t14 = load_input "points" :: array
23
+ loop points id=L3 in %t14 as el=%points_el_15, idx=%points_i_16
24
+ %t17 = load_decl selected_value axes=[points] :: integer
25
+ %t18 = load_field points_el_15["x"] :: integer
26
+ %t19 = make_tuple(%t17, %t18) :: tuple<integer>
27
+ %t20 = Fold %t19 fn="agg.max" :: integer
28
+ yield %t20
29
+ end_loop
30
+ )
31
+ (Declaration grand_total
32
+ %acc_21 = decl_acc :: integer
33
+ %t22 = load_input "points" :: array
34
+ loop points id=L4 in %t22 as el=%points_el_23, idx=%points_i_24
35
+ %t25 = load_decl final_value_per_point axes=[points] :: integer
36
+ %acc_21 = acc_add agg.sum(%acc_21, %t25) :: integer
37
+ end_loop
38
+ %t26 = acc_load %acc_21 :: integer
39
+ yield %t26
40
+ )
41
+ )
@@ -0,0 +1,41 @@
1
+ (LIR
2
+ (Declaration x_is_large
3
+ %t1 = load_input "points" :: array
4
+ loop points id=L1 in %t1 as el=%points_el_2, idx=%points_i_3
5
+ %t4 = load_field points_el_2["x"] :: integer
6
+ %t5 = const 100 :: integer
7
+ %t6 = call core.gt(%t4, %t5) :: boolean
8
+ yield %t6
9
+ end_loop
10
+ )
11
+ (Declaration selected_value
12
+ %t7 = load_input "points" :: array
13
+ loop points id=L2 in %t7 as el=%points_el_8, idx=%points_i_9
14
+ %t10 = load_decl x_is_large axes=[points] :: boolean
15
+ %t11 = load_field points_el_8["x"] :: integer
16
+ %t12 = load_field points_el_8["y"] :: integer
17
+ %t13 = select %t10, %t11, %t12 :: integer
18
+ yield %t13
19
+ end_loop
20
+ )
21
+ (Declaration final_value_per_point
22
+ %t14 = load_input "points" :: array
23
+ loop points id=L3 in %t14 as el=%points_el_15, idx=%points_i_16
24
+ %t17 = load_decl selected_value axes=[points] :: integer
25
+ %t18 = load_field points_el_15["x"] :: integer
26
+ %t19 = make_tuple(%t17, %t18) :: tuple<integer>
27
+ %t20 = Fold %t19 fn="agg.max" :: integer
28
+ yield %t20
29
+ end_loop
30
+ )
31
+ (Declaration grand_total
32
+ %acc_21 = decl_acc :: integer
33
+ %t22 = load_input "points" :: array
34
+ loop points id=L4 in %t22 as el=%points_el_23, idx=%points_i_24
35
+ %t25 = load_decl final_value_per_point axes=[points] :: integer
36
+ %acc_21 = acc_add agg.sum(%acc_21, %t25) :: integer
37
+ end_loop
38
+ %t26 = acc_load %acc_21 :: integer
39
+ yield %t26
40
+ )
41
+ )
@@ -0,0 +1,62 @@
1
+ (LIR
2
+ (Declaration x_is_large
3
+ %t1 = load_input "points" :: array
4
+ loop points id=L1 in %t1 as el=%points_el_2, idx=%points_i_3
5
+ %t4 = load_field points_el_2["x"] :: integer
6
+ %t5 = const 100 :: integer
7
+ %t6 = call core.gt(%t4, %t5) :: boolean
8
+ yield %t6
9
+ end_loop
10
+ )
11
+ (Declaration selected_value
12
+ %t7 = load_input "points" :: array
13
+ loop points id=L2 in %t7 as el=%points_el_8, idx=%points_i_9
14
+ %t27 = load_input "points" :: array
15
+ %t28 = load_field points_el_8["x"] :: integer
16
+ %t29 = const 100 :: integer
17
+ %t30 = call core.gt(%t28, %t29) :: boolean
18
+ %t11 = load_field points_el_8["x"] :: integer
19
+ %t12 = load_field points_el_8["y"] :: integer
20
+ %t13 = select %t30, %t11, %t12 :: integer
21
+ yield %t13
22
+ end_loop
23
+ )
24
+ (Declaration final_value_per_point
25
+ %t14 = load_input "points" :: array
26
+ loop points id=L3 in %t14 as el=%points_el_15, idx=%points_i_16
27
+ %t31 = load_input "points" :: array
28
+ %t41 = load_input "points" :: array
29
+ %t42 = load_field points_el_15["x"] :: integer
30
+ %t43 = const 100 :: integer
31
+ %t44 = call core.gt(%t42, %t43) :: boolean
32
+ %t33 = load_field points_el_15["x"] :: integer
33
+ %t34 = load_field points_el_15["y"] :: integer
34
+ %t35 = select %t44, %t33, %t34 :: integer
35
+ %t18 = load_field points_el_15["x"] :: integer
36
+ %t19 = make_tuple(%t35, %t18) :: tuple<integer>
37
+ %t20 = Fold %t19 fn="agg.max" :: integer
38
+ yield %t20
39
+ end_loop
40
+ )
41
+ (Declaration grand_total
42
+ %acc_21 = decl_acc :: integer
43
+ %t22 = load_input "points" :: array
44
+ loop points id=L4 in %t22 as el=%points_el_23, idx=%points_i_24
45
+ %t36 = load_input "points" :: array
46
+ %t45 = load_input "points" :: array
47
+ %t46 = load_input "points" :: array
48
+ %t47 = load_field points_el_23["x"] :: integer
49
+ %t48 = const 100 :: integer
50
+ %t49 = call core.gt(%t47, %t48) :: boolean
51
+ %t50 = load_field points_el_23["x"] :: integer
52
+ %t51 = load_field points_el_23["y"] :: integer
53
+ %t52 = select %t49, %t50, %t51 :: integer
54
+ %t38 = load_field points_el_23["x"] :: integer
55
+ %t39 = make_tuple(%t52, %t38) :: tuple<integer>
56
+ %t40 = Fold %t39 fn="agg.max" :: integer
57
+ %acc_21 = acc_add agg.sum(%acc_21, %t40) :: integer
58
+ end_loop
59
+ %t26 = acc_load %acc_21 :: integer
60
+ yield %t26
61
+ )
62
+ )
@@ -0,0 +1,51 @@
1
+ (LIR
2
+ (Declaration x_is_large
3
+ %t1 = load_input "points" :: array
4
+ loop points id=L1 in %t1 as el=%points_el_2, idx=%points_i_3
5
+ %t4 = load_field points_el_2["x"] :: integer
6
+ %t5 = const 100 :: integer
7
+ %t6 = call core.gt(%t4, %t5) :: boolean
8
+ yield %t6
9
+ end_loop
10
+ )
11
+ (Declaration selected_value
12
+ %t7 = load_input "points" :: array
13
+ loop points id=L2 in %t7 as el=%points_el_8, idx=%points_i_9
14
+ %t28 = load_field points_el_8["x"] :: integer
15
+ %t29 = const 100 :: integer
16
+ %t12 = load_field points_el_8["y"] :: integer
17
+ %t30 = call core.gt(%t28, %t29) :: boolean
18
+ %t13 = select %t30, %t28, %t12 :: integer
19
+ yield %t13
20
+ end_loop
21
+ )
22
+ (Declaration final_value_per_point
23
+ %t14 = load_input "points" :: array
24
+ loop points id=L3 in %t14 as el=%points_el_15, idx=%points_i_16
25
+ %t42 = load_field points_el_15["x"] :: integer
26
+ %t43 = const 100 :: integer
27
+ %t34 = load_field points_el_15["y"] :: integer
28
+ %t44 = call core.gt(%t42, %t43) :: boolean
29
+ %t35 = select %t44, %t42, %t34 :: integer
30
+ %t19 = make_tuple(%t35, %t42) :: tuple<integer>
31
+ %t20 = Fold %t19 fn="agg.max" :: integer
32
+ yield %t20
33
+ end_loop
34
+ )
35
+ (Declaration grand_total
36
+ %acc_21 = decl_acc :: integer
37
+ %t22 = load_input "points" :: array
38
+ loop points id=L4 in %t22 as el=%points_el_23, idx=%points_i_24
39
+ %t47 = load_field points_el_23["x"] :: integer
40
+ %t48 = const 100 :: integer
41
+ %t51 = load_field points_el_23["y"] :: integer
42
+ %t49 = call core.gt(%t47, %t48) :: boolean
43
+ %t52 = select %t49, %t47, %t51 :: integer
44
+ %t39 = make_tuple(%t52, %t47) :: tuple<integer>
45
+ %t40 = Fold %t39 fn="agg.max" :: integer
46
+ %acc_21 = acc_add agg.sum(%acc_21, %t40) :: integer
47
+ end_loop
48
+ %t26 = acc_load %acc_21 :: integer
49
+ yield %t26
50
+ )
51
+ )
@@ -0,0 +1,51 @@
1
+ (LIR
2
+ (Declaration x_is_large
3
+ %t1 = load_input "points" :: array
4
+ loop points id=L1 in %t1 as el=%points_el_2, idx=%points_i_3
5
+ %t4 = load_field points_el_2["x"] :: integer
6
+ %t5 = const 100 :: integer
7
+ %t6 = call core.gt(%t4, %t5) :: boolean
8
+ yield %t6
9
+ end_loop
10
+ )
11
+ (Declaration selected_value
12
+ %t7 = load_input "points" :: array
13
+ loop points id=L2 in %t7 as el=%points_el_8, idx=%points_i_9
14
+ %t28 = load_field points_el_8["x"] :: integer
15
+ %t29 = const 100 :: integer
16
+ %t12 = load_field points_el_8["y"] :: integer
17
+ %t30 = call core.gt(%t28, %t29) :: boolean
18
+ %t13 = select %t30, %t28, %t12 :: integer
19
+ yield %t13
20
+ end_loop
21
+ )
22
+ (Declaration final_value_per_point
23
+ %t14 = load_input "points" :: array
24
+ loop points id=L3 in %t14 as el=%points_el_15, idx=%points_i_16
25
+ %t42 = load_field points_el_15["x"] :: integer
26
+ %t43 = const 100 :: integer
27
+ %t34 = load_field points_el_15["y"] :: integer
28
+ %t44 = call core.gt(%t42, %t43) :: boolean
29
+ %t35 = select %t44, %t42, %t34 :: integer
30
+ %t19 = make_tuple(%t35, %t42) :: tuple<integer>
31
+ %t20 = Fold %t19 fn="agg.max" :: integer
32
+ yield %t20
33
+ end_loop
34
+ )
35
+ (Declaration grand_total
36
+ %acc_21 = decl_acc :: integer
37
+ %t22 = load_input "points" :: array
38
+ loop points id=L4 in %t22 as el=%points_el_23, idx=%points_i_24
39
+ %t47 = load_field points_el_23["x"] :: integer
40
+ %t48 = const 100 :: integer
41
+ %t51 = load_field points_el_23["y"] :: integer
42
+ %t49 = call core.gt(%t47, %t48) :: boolean
43
+ %t52 = select %t49, %t47, %t51 :: integer
44
+ %t39 = make_tuple(%t52, %t47) :: tuple<integer>
45
+ %t40 = Fold %t39 fn="agg.max" :: integer
46
+ %acc_21 = acc_add agg.sum(%acc_21, %t40) :: integer
47
+ end_loop
48
+ %t26 = acc_load %acc_21 :: integer
49
+ yield %t26
50
+ )
51
+ )
@@ -0,0 +1,51 @@
1
+ (LIR
2
+ (Declaration x_is_large
3
+ %t1 = load_input "points" :: array
4
+ %t5 = const 100 :: integer
5
+ loop points id=L1 in %t1 as el=%points_el_2, idx=%points_i_3
6
+ %t4 = load_field points_el_2["x"] :: integer
7
+ %t6 = call core.gt(%t4, %t5) :: boolean
8
+ yield %t6
9
+ end_loop
10
+ )
11
+ (Declaration selected_value
12
+ %t7 = load_input "points" :: array
13
+ %t29 = const 100 :: integer
14
+ loop points id=L2 in %t7 as el=%points_el_8, idx=%points_i_9
15
+ %t28 = load_field points_el_8["x"] :: integer
16
+ %t12 = load_field points_el_8["y"] :: integer
17
+ %t30 = call core.gt(%t28, %t29) :: boolean
18
+ %t13 = select %t30, %t28, %t12 :: integer
19
+ yield %t13
20
+ end_loop
21
+ )
22
+ (Declaration final_value_per_point
23
+ %t14 = load_input "points" :: array
24
+ %t43 = const 100 :: integer
25
+ loop points id=L3 in %t14 as el=%points_el_15, idx=%points_i_16
26
+ %t42 = load_field points_el_15["x"] :: integer
27
+ %t34 = load_field points_el_15["y"] :: integer
28
+ %t44 = call core.gt(%t42, %t43) :: boolean
29
+ %t35 = select %t44, %t42, %t34 :: integer
30
+ %t19 = make_tuple(%t35, %t42) :: tuple<integer>
31
+ %t20 = Fold %t19 fn="agg.max" :: integer
32
+ yield %t20
33
+ end_loop
34
+ )
35
+ (Declaration grand_total
36
+ %acc_21 = decl_acc :: integer
37
+ %t22 = load_input "points" :: array
38
+ %t48 = const 100 :: integer
39
+ loop points id=L4 in %t22 as el=%points_el_23, idx=%points_i_24
40
+ %t47 = load_field points_el_23["x"] :: integer
41
+ %t51 = load_field points_el_23["y"] :: integer
42
+ %t49 = call core.gt(%t47, %t48) :: boolean
43
+ %t52 = select %t49, %t47, %t51 :: integer
44
+ %t39 = make_tuple(%t52, %t47) :: tuple<integer>
45
+ %t40 = Fold %t39 fn="agg.max" :: integer
46
+ %acc_21 = acc_add agg.sum(%acc_21, %t40) :: integer
47
+ end_loop
48
+ %t26 = acc_load %acc_21 :: integer
49
+ yield %t26
50
+ )
51
+ )
@@ -0,0 +1,51 @@
1
+ (LIR
2
+ (Declaration x_is_large
3
+ %t1 = load_input "points" :: array
4
+ %t5 = const 100 :: integer
5
+ loop points id=L1 in %t1 as el=%points_el_2, idx=%points_i_3
6
+ %t4 = load_field points_el_2["x"] :: integer
7
+ %t6 = call core.gt(%t4, %t5) :: boolean
8
+ yield %t6
9
+ end_loop
10
+ )
11
+ (Declaration selected_value
12
+ %t7 = load_input "points" :: array
13
+ %t29 = const 100 :: integer
14
+ loop points id=L2 in %t7 as el=%points_el_8, idx=%points_i_9
15
+ %t28 = load_field points_el_8["x"] :: integer
16
+ %t12 = load_field points_el_8["y"] :: integer
17
+ %t30 = call core.gt(%t28, %t29) :: boolean
18
+ %t13 = select %t30, %t28, %t12 :: integer
19
+ yield %t13
20
+ end_loop
21
+ )
22
+ (Declaration final_value_per_point
23
+ %t14 = load_input "points" :: array
24
+ %t43 = const 100 :: integer
25
+ loop points id=L3 in %t14 as el=%points_el_15, idx=%points_i_16
26
+ %t42 = load_field points_el_15["x"] :: integer
27
+ %t34 = load_field points_el_15["y"] :: integer
28
+ %t44 = call core.gt(%t42, %t43) :: boolean
29
+ %t35 = select %t44, %t42, %t34 :: integer
30
+ %t19 = make_tuple(%t35, %t42) :: tuple<integer>
31
+ %t20 = Fold %t19 fn="agg.max" :: integer
32
+ yield %t20
33
+ end_loop
34
+ )
35
+ (Declaration grand_total
36
+ %acc_21 = decl_acc :: integer
37
+ %t22 = load_input "points" :: array
38
+ %t48 = const 100 :: integer
39
+ loop points id=L4 in %t22 as el=%points_el_23, idx=%points_i_24
40
+ %t47 = load_field points_el_23["x"] :: integer
41
+ %t51 = load_field points_el_23["y"] :: integer
42
+ %t49 = call core.gt(%t47, %t48) :: boolean
43
+ %t52 = select %t49, %t47, %t51 :: integer
44
+ %t39 = make_tuple(%t52, %t47) :: tuple<integer>
45
+ %t40 = Fold %t39 fn="agg.max" :: integer
46
+ %acc_21 = acc_add agg.sum(%acc_21, %t40) :: integer
47
+ end_loop
48
+ %t26 = acc_load %acc_21 :: integer
49
+ yield %t26
50
+ )
51
+ )
@@ -0,0 +1,28 @@
1
+ (NAST
2
+ (TRAIT x_is_large
3
+ (Call :"core.gt"
4
+ (InputRef [:points, :point, :x])
5
+ (Const 100)
6
+ )
7
+ )
8
+ (VALUE selected_value
9
+ (Call :__select__
10
+ (Ref x_is_large)
11
+ (InputRef [:points, :point, :x])
12
+ (InputRef [:points, :point, :y])
13
+ )
14
+ )
15
+ (VALUE final_value_per_point
16
+ (Call :"agg.max"
17
+ (Tuple
18
+ (Ref selected_value)
19
+ (InputRef [:points, :point, :x])
20
+ )
21
+ )
22
+ )
23
+ (VALUE grand_total
24
+ (Call :"agg.sum"
25
+ (Ref final_value_per_point)
26
+ )
27
+ )
28
+ )