kumi 0.0.18 → 0.0.20

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