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,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,90 @@
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
+ %t7 = const 0 :: integer
8
+ %t6 = call core.sub(%cells_i_3, %t5) :: integer
9
+ %t12 = call core.sub(%t4, %t5) :: integer
10
+ %t8 = call core.gte(%t6, %t7) :: boolean
11
+ %t9 = call core.lt(%t6, %t4) :: boolean
12
+ %t14 = call core.clamp(%t6, %t7, %t12) :: integer
13
+ %t10 = call core.and(%t8, %t9) :: boolean
14
+ %t15 = Gather %t1, %t14 :: integer
15
+ %t17 = select %t10, %t15, %t7 :: integer
16
+ yield %t17
17
+ end_loop
18
+ )
19
+ (Declaration shift_left_zero
20
+ %t18 = load_input "cells" :: array
21
+ loop cells id=L2 in %t18 as el=%cells_el_19, idx=%cells_i_20
22
+ %t21 = Length %t18 :: integer
23
+ %t22 = const -1 :: integer
24
+ %t24 = const 0 :: integer
25
+ %t28 = const 1 :: integer
26
+ %t23 = call core.sub(%cells_i_20, %t22) :: integer
27
+ %t29 = call core.sub(%t21, %t28) :: integer
28
+ %t25 = call core.gte(%t23, %t24) :: boolean
29
+ %t26 = call core.lt(%t23, %t21) :: boolean
30
+ %t31 = call core.clamp(%t23, %t24, %t29) :: integer
31
+ %t27 = call core.and(%t25, %t26) :: boolean
32
+ %t32 = Gather %t18, %t31 :: integer
33
+ %t34 = select %t27, %t32, %t24 :: integer
34
+ yield %t34
35
+ end_loop
36
+ )
37
+ (Declaration shift_right_clamp
38
+ %t35 = load_input "cells" :: array
39
+ loop cells id=L3 in %t35 as el=%cells_el_36, idx=%cells_i_37
40
+ %t38 = Length %t35 :: integer
41
+ %t39 = const 1 :: integer
42
+ %t43 = const 0 :: integer
43
+ %t40 = call core.sub(%cells_i_37, %t39) :: integer
44
+ %t42 = call core.sub(%t38, %t39) :: integer
45
+ %t44 = call core.clamp(%t40, %t43, %t42) :: integer
46
+ %t45 = Gather %t35, %t44 :: integer
47
+ yield %t45
48
+ end_loop
49
+ )
50
+ (Declaration shift_left_clamp
51
+ %t46 = load_input "cells" :: array
52
+ loop cells id=L4 in %t46 as el=%cells_el_47, idx=%cells_i_48
53
+ %t49 = Length %t46 :: integer
54
+ %t50 = const -1 :: integer
55
+ %t52 = const 1 :: integer
56
+ %t54 = const 0 :: integer
57
+ %t51 = call core.sub(%cells_i_48, %t50) :: integer
58
+ %t53 = call core.sub(%t49, %t52) :: integer
59
+ %t55 = call core.clamp(%t51, %t54, %t53) :: integer
60
+ %t56 = Gather %t46, %t55 :: integer
61
+ yield %t56
62
+ end_loop
63
+ )
64
+ (Declaration shift_right_wrap
65
+ %t57 = load_input "cells" :: array
66
+ loop cells id=L5 in %t57 as el=%cells_el_58, idx=%cells_i_59
67
+ %t60 = Length %t57 :: integer
68
+ %t61 = const 1 :: integer
69
+ %t62 = call core.sub(%cells_i_59, %t61) :: integer
70
+ %t63 = call core.mod(%t62, %t60) :: integer
71
+ %t64 = call core.add(%t63, %t60) :: integer
72
+ %t65 = call core.mod(%t64, %t60) :: integer
73
+ %t66 = Gather %t57, %t65 :: integer
74
+ yield %t66
75
+ end_loop
76
+ )
77
+ (Declaration shift_left_wrap
78
+ %t67 = load_input "cells" :: array
79
+ loop cells id=L6 in %t67 as el=%cells_el_68, idx=%cells_i_69
80
+ %t70 = Length %t67 :: integer
81
+ %t71 = const -1 :: integer
82
+ %t72 = call core.sub(%cells_i_69, %t71) :: integer
83
+ %t73 = call core.mod(%t72, %t70) :: integer
84
+ %t74 = call core.add(%t73, %t70) :: integer
85
+ %t75 = call core.mod(%t74, %t70) :: integer
86
+ %t76 = Gather %t67, %t75 :: integer
87
+ yield %t76
88
+ end_loop
89
+ )
90
+ )
@@ -0,0 +1,90 @@
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
+ %t7 = const 0 :: integer
8
+ %t6 = call core.sub(%cells_i_3, %t5) :: integer
9
+ %t12 = call core.sub(%t4, %t5) :: integer
10
+ %t8 = call core.gte(%t6, %t7) :: boolean
11
+ %t9 = call core.lt(%t6, %t4) :: boolean
12
+ %t14 = call core.clamp(%t6, %t7, %t12) :: integer
13
+ %t10 = call core.and(%t8, %t9) :: boolean
14
+ %t15 = Gather %t1, %t14 :: integer
15
+ %t17 = select %t10, %t15, %t7 :: integer
16
+ yield %t17
17
+ end_loop
18
+ )
19
+ (Declaration shift_left_zero
20
+ %t18 = load_input "cells" :: array
21
+ loop cells id=L2 in %t18 as el=%cells_el_19, idx=%cells_i_20
22
+ %t21 = Length %t18 :: integer
23
+ %t22 = const -1 :: integer
24
+ %t24 = const 0 :: integer
25
+ %t28 = const 1 :: integer
26
+ %t23 = call core.sub(%cells_i_20, %t22) :: integer
27
+ %t29 = call core.sub(%t21, %t28) :: integer
28
+ %t25 = call core.gte(%t23, %t24) :: boolean
29
+ %t26 = call core.lt(%t23, %t21) :: boolean
30
+ %t31 = call core.clamp(%t23, %t24, %t29) :: integer
31
+ %t27 = call core.and(%t25, %t26) :: boolean
32
+ %t32 = Gather %t18, %t31 :: integer
33
+ %t34 = select %t27, %t32, %t24 :: integer
34
+ yield %t34
35
+ end_loop
36
+ )
37
+ (Declaration shift_right_clamp
38
+ %t35 = load_input "cells" :: array
39
+ loop cells id=L3 in %t35 as el=%cells_el_36, idx=%cells_i_37
40
+ %t38 = Length %t35 :: integer
41
+ %t39 = const 1 :: integer
42
+ %t43 = const 0 :: integer
43
+ %t40 = call core.sub(%cells_i_37, %t39) :: integer
44
+ %t42 = call core.sub(%t38, %t39) :: integer
45
+ %t44 = call core.clamp(%t40, %t43, %t42) :: integer
46
+ %t45 = Gather %t35, %t44 :: integer
47
+ yield %t45
48
+ end_loop
49
+ )
50
+ (Declaration shift_left_clamp
51
+ %t46 = load_input "cells" :: array
52
+ loop cells id=L4 in %t46 as el=%cells_el_47, idx=%cells_i_48
53
+ %t49 = Length %t46 :: integer
54
+ %t50 = const -1 :: integer
55
+ %t52 = const 1 :: integer
56
+ %t54 = const 0 :: integer
57
+ %t51 = call core.sub(%cells_i_48, %t50) :: integer
58
+ %t53 = call core.sub(%t49, %t52) :: integer
59
+ %t55 = call core.clamp(%t51, %t54, %t53) :: integer
60
+ %t56 = Gather %t46, %t55 :: integer
61
+ yield %t56
62
+ end_loop
63
+ )
64
+ (Declaration shift_right_wrap
65
+ %t57 = load_input "cells" :: array
66
+ loop cells id=L5 in %t57 as el=%cells_el_58, idx=%cells_i_59
67
+ %t60 = Length %t57 :: integer
68
+ %t61 = const 1 :: integer
69
+ %t62 = call core.sub(%cells_i_59, %t61) :: integer
70
+ %t63 = call core.mod(%t62, %t60) :: integer
71
+ %t64 = call core.add(%t63, %t60) :: integer
72
+ %t65 = call core.mod(%t64, %t60) :: integer
73
+ %t66 = Gather %t57, %t65 :: integer
74
+ yield %t66
75
+ end_loop
76
+ )
77
+ (Declaration shift_left_wrap
78
+ %t67 = load_input "cells" :: array
79
+ loop cells id=L6 in %t67 as el=%cells_el_68, idx=%cells_i_69
80
+ %t70 = Length %t67 :: integer
81
+ %t71 = const -1 :: integer
82
+ %t72 = call core.sub(%cells_i_69, %t71) :: integer
83
+ %t73 = call core.mod(%t72, %t70) :: integer
84
+ %t74 = call core.add(%t73, %t70) :: integer
85
+ %t75 = call core.mod(%t74, %t70) :: integer
86
+ %t76 = Gather %t67, %t75 :: integer
87
+ yield %t76
88
+ end_loop
89
+ )
90
+ )
@@ -0,0 +1,90 @@
1
+ (LIR
2
+ (Declaration shift_right_zero
3
+ %t1 = load_input "cells" :: array
4
+ %t4 = Length %t1 :: integer
5
+ %t5 = const 1 :: integer
6
+ %t7 = const 0 :: integer
7
+ %t12 = call core.sub(%t4, %t5) :: integer
8
+ loop cells id=L1 in %t1 as el=%cells_el_2, idx=%cells_i_3
9
+ %t6 = call core.sub(%cells_i_3, %t5) :: integer
10
+ %t8 = call core.gte(%t6, %t7) :: boolean
11
+ %t9 = call core.lt(%t6, %t4) :: boolean
12
+ %t14 = call core.clamp(%t6, %t7, %t12) :: integer
13
+ %t10 = call core.and(%t8, %t9) :: boolean
14
+ %t15 = Gather %t1, %t14 :: integer
15
+ %t17 = select %t10, %t15, %t7 :: integer
16
+ yield %t17
17
+ end_loop
18
+ )
19
+ (Declaration shift_left_zero
20
+ %t18 = load_input "cells" :: array
21
+ %t21 = Length %t18 :: integer
22
+ %t22 = const -1 :: integer
23
+ %t24 = const 0 :: integer
24
+ %t28 = const 1 :: integer
25
+ %t29 = call core.sub(%t21, %t28) :: integer
26
+ loop cells id=L2 in %t18 as el=%cells_el_19, idx=%cells_i_20
27
+ %t23 = call core.sub(%cells_i_20, %t22) :: integer
28
+ %t25 = call core.gte(%t23, %t24) :: boolean
29
+ %t26 = call core.lt(%t23, %t21) :: boolean
30
+ %t31 = call core.clamp(%t23, %t24, %t29) :: integer
31
+ %t27 = call core.and(%t25, %t26) :: boolean
32
+ %t32 = Gather %t18, %t31 :: integer
33
+ %t34 = select %t27, %t32, %t24 :: integer
34
+ yield %t34
35
+ end_loop
36
+ )
37
+ (Declaration shift_right_clamp
38
+ %t35 = load_input "cells" :: array
39
+ %t38 = Length %t35 :: integer
40
+ %t39 = const 1 :: integer
41
+ %t43 = const 0 :: integer
42
+ %t42 = call core.sub(%t38, %t39) :: integer
43
+ loop cells id=L3 in %t35 as el=%cells_el_36, idx=%cells_i_37
44
+ %t40 = call core.sub(%cells_i_37, %t39) :: integer
45
+ %t44 = call core.clamp(%t40, %t43, %t42) :: integer
46
+ %t45 = Gather %t35, %t44 :: integer
47
+ yield %t45
48
+ end_loop
49
+ )
50
+ (Declaration shift_left_clamp
51
+ %t46 = load_input "cells" :: array
52
+ %t49 = Length %t46 :: integer
53
+ %t50 = const -1 :: integer
54
+ %t52 = const 1 :: integer
55
+ %t54 = const 0 :: integer
56
+ %t53 = call core.sub(%t49, %t52) :: integer
57
+ loop cells id=L4 in %t46 as el=%cells_el_47, idx=%cells_i_48
58
+ %t51 = call core.sub(%cells_i_48, %t50) :: integer
59
+ %t55 = call core.clamp(%t51, %t54, %t53) :: integer
60
+ %t56 = Gather %t46, %t55 :: integer
61
+ yield %t56
62
+ end_loop
63
+ )
64
+ (Declaration shift_right_wrap
65
+ %t57 = load_input "cells" :: array
66
+ %t60 = Length %t57 :: integer
67
+ %t61 = const 1 :: integer
68
+ loop cells id=L5 in %t57 as el=%cells_el_58, idx=%cells_i_59
69
+ %t62 = call core.sub(%cells_i_59, %t61) :: integer
70
+ %t63 = call core.mod(%t62, %t60) :: integer
71
+ %t64 = call core.add(%t63, %t60) :: integer
72
+ %t65 = call core.mod(%t64, %t60) :: integer
73
+ %t66 = Gather %t57, %t65 :: integer
74
+ yield %t66
75
+ end_loop
76
+ )
77
+ (Declaration shift_left_wrap
78
+ %t67 = load_input "cells" :: array
79
+ %t70 = Length %t67 :: integer
80
+ %t71 = const -1 :: integer
81
+ loop cells id=L6 in %t67 as el=%cells_el_68, idx=%cells_i_69
82
+ %t72 = call core.sub(%cells_i_69, %t71) :: integer
83
+ %t73 = call core.mod(%t72, %t70) :: integer
84
+ %t74 = call core.add(%t73, %t70) :: integer
85
+ %t75 = call core.mod(%t74, %t70) :: integer
86
+ %t76 = Gather %t67, %t75 :: integer
87
+ yield %t76
88
+ end_loop
89
+ )
90
+ )
@@ -0,0 +1,90 @@
1
+ (LIR
2
+ (Declaration shift_right_zero
3
+ %t1 = load_input "cells" :: array
4
+ %t4 = Length %t1 :: integer
5
+ %t5 = const 1 :: integer
6
+ %t7 = const 0 :: integer
7
+ %t12 = call core.sub(%t4, %t5) :: integer
8
+ loop cells id=L1 in %t1 as el=%cells_el_2, idx=%cells_i_3
9
+ %t6 = call core.sub(%cells_i_3, %t5) :: integer
10
+ %t8 = call core.gte(%t6, %t7) :: boolean
11
+ %t9 = call core.lt(%t6, %t4) :: boolean
12
+ %t14 = call core.clamp(%t6, %t7, %t12) :: integer
13
+ %t10 = call core.and(%t8, %t9) :: boolean
14
+ %t15 = Gather %t1, %t14 :: integer
15
+ %t17 = select %t10, %t15, %t7 :: integer
16
+ yield %t17
17
+ end_loop
18
+ )
19
+ (Declaration shift_left_zero
20
+ %t18 = load_input "cells" :: array
21
+ %t21 = Length %t18 :: integer
22
+ %t22 = const -1 :: integer
23
+ %t24 = const 0 :: integer
24
+ %t28 = const 1 :: integer
25
+ %t29 = call core.sub(%t21, %t28) :: integer
26
+ loop cells id=L2 in %t18 as el=%cells_el_19, idx=%cells_i_20
27
+ %t23 = call core.sub(%cells_i_20, %t22) :: integer
28
+ %t25 = call core.gte(%t23, %t24) :: boolean
29
+ %t26 = call core.lt(%t23, %t21) :: boolean
30
+ %t31 = call core.clamp(%t23, %t24, %t29) :: integer
31
+ %t27 = call core.and(%t25, %t26) :: boolean
32
+ %t32 = Gather %t18, %t31 :: integer
33
+ %t34 = select %t27, %t32, %t24 :: integer
34
+ yield %t34
35
+ end_loop
36
+ )
37
+ (Declaration shift_right_clamp
38
+ %t35 = load_input "cells" :: array
39
+ %t38 = Length %t35 :: integer
40
+ %t39 = const 1 :: integer
41
+ %t43 = const 0 :: integer
42
+ %t42 = call core.sub(%t38, %t39) :: integer
43
+ loop cells id=L3 in %t35 as el=%cells_el_36, idx=%cells_i_37
44
+ %t40 = call core.sub(%cells_i_37, %t39) :: integer
45
+ %t44 = call core.clamp(%t40, %t43, %t42) :: integer
46
+ %t45 = Gather %t35, %t44 :: integer
47
+ yield %t45
48
+ end_loop
49
+ )
50
+ (Declaration shift_left_clamp
51
+ %t46 = load_input "cells" :: array
52
+ %t49 = Length %t46 :: integer
53
+ %t50 = const -1 :: integer
54
+ %t52 = const 1 :: integer
55
+ %t54 = const 0 :: integer
56
+ %t53 = call core.sub(%t49, %t52) :: integer
57
+ loop cells id=L4 in %t46 as el=%cells_el_47, idx=%cells_i_48
58
+ %t51 = call core.sub(%cells_i_48, %t50) :: integer
59
+ %t55 = call core.clamp(%t51, %t54, %t53) :: integer
60
+ %t56 = Gather %t46, %t55 :: integer
61
+ yield %t56
62
+ end_loop
63
+ )
64
+ (Declaration shift_right_wrap
65
+ %t57 = load_input "cells" :: array
66
+ %t60 = Length %t57 :: integer
67
+ %t61 = const 1 :: integer
68
+ loop cells id=L5 in %t57 as el=%cells_el_58, idx=%cells_i_59
69
+ %t62 = call core.sub(%cells_i_59, %t61) :: integer
70
+ %t63 = call core.mod(%t62, %t60) :: integer
71
+ %t64 = call core.add(%t63, %t60) :: integer
72
+ %t65 = call core.mod(%t64, %t60) :: integer
73
+ %t66 = Gather %t57, %t65 :: integer
74
+ yield %t66
75
+ end_loop
76
+ )
77
+ (Declaration shift_left_wrap
78
+ %t67 = load_input "cells" :: array
79
+ %t70 = Length %t67 :: integer
80
+ %t71 = const -1 :: integer
81
+ loop cells id=L6 in %t67 as el=%cells_el_68, idx=%cells_i_69
82
+ %t72 = call core.sub(%cells_i_69, %t71) :: integer
83
+ %t73 = call core.mod(%t72, %t70) :: integer
84
+ %t74 = call core.add(%t73, %t70) :: integer
85
+ %t75 = call core.mod(%t74, %t70) :: integer
86
+ %t76 = Gather %t67, %t75 :: integer
87
+ yield %t76
88
+ end_loop
89
+ )
90
+ )
@@ -0,0 +1,38 @@
1
+ (NAST
2
+ (VALUE shift_right_zero
3
+ (Call :shift
4
+ (InputRef [:cells, :value])
5
+ (Const 1)
6
+ )
7
+ )
8
+ (VALUE shift_left_zero
9
+ (Call :shift
10
+ (InputRef [:cells, :value])
11
+ (Const -1)
12
+ )
13
+ )
14
+ (VALUE shift_right_clamp
15
+ (Call :shift
16
+ (InputRef [:cells, :value])
17
+ (Const 1)
18
+ )
19
+ )
20
+ (VALUE shift_left_clamp
21
+ (Call :shift
22
+ (InputRef [:cells, :value])
23
+ (Const -1)
24
+ )
25
+ )
26
+ (VALUE shift_right_wrap
27
+ (Call :shift
28
+ (InputRef [:cells, :value])
29
+ (Const 1)
30
+ )
31
+ )
32
+ (VALUE shift_left_wrap
33
+ (Call :shift
34
+ (InputRef [:cells, :value])
35
+ (Const -1)
36
+ )
37
+ )
38
+ )
@@ -0,0 +1,106 @@
1
+ export function _shift_right_zero(input) {
2
+ let out = [];
3
+ let t1 = input["cells"];
4
+ let t4 = t1.length;
5
+ const t5 = 1;
6
+ const t7 = 0;
7
+ let t12 = t4 - t5;
8
+ t1.forEach((cells_el_2, cells_i_3) => {
9
+ let t6 = cells_i_3 - t5;
10
+ let t8 = t6 >= t7;
11
+ let t9 = t6 < t4;
12
+ let t14 = Math.min(Math.max(t6, t7), t12);
13
+ let t10 = t8 && t9;
14
+ let t15 = t1[t14];
15
+ let t17 = t10 ? t15 : t7;
16
+ out.push(t17);
17
+ });
18
+ return out;
19
+ }
20
+
21
+ export function _shift_left_zero(input) {
22
+ let out = [];
23
+ let t18 = input["cells"];
24
+ let t21 = t18.length;
25
+ const t22 = -1;
26
+ const t24 = 0;
27
+ const t28 = 1;
28
+ let t29 = t21 - t28;
29
+ t18.forEach((cells_el_19, cells_i_20) => {
30
+ let t23 = cells_i_20 - t22;
31
+ let t25 = t23 >= t24;
32
+ let t26 = t23 < t21;
33
+ let t31 = Math.min(Math.max(t23, t24), t29);
34
+ let t27 = t25 && t26;
35
+ let t32 = t18[t31];
36
+ let t34 = t27 ? t32 : t24;
37
+ out.push(t34);
38
+ });
39
+ return out;
40
+ }
41
+
42
+ export function _shift_right_clamp(input) {
43
+ let out = [];
44
+ let t35 = input["cells"];
45
+ let t38 = t35.length;
46
+ const t39 = 1;
47
+ const t43 = 0;
48
+ let t42 = t38 - t39;
49
+ t35.forEach((cells_el_36, cells_i_37) => {
50
+ let t40 = cells_i_37 - t39;
51
+ let t44 = Math.min(Math.max(t40, t43), t42);
52
+ let t45 = t35[t44];
53
+ out.push(t45);
54
+ });
55
+ return out;
56
+ }
57
+
58
+ export function _shift_left_clamp(input) {
59
+ let out = [];
60
+ let t46 = input["cells"];
61
+ let t49 = t46.length;
62
+ const t50 = -1;
63
+ const t52 = 1;
64
+ const t54 = 0;
65
+ let t53 = t49 - t52;
66
+ t46.forEach((cells_el_47, cells_i_48) => {
67
+ let t51 = cells_i_48 - t50;
68
+ let t55 = Math.min(Math.max(t51, t54), t53);
69
+ let t56 = t46[t55];
70
+ out.push(t56);
71
+ });
72
+ return out;
73
+ }
74
+
75
+ export function _shift_right_wrap(input) {
76
+ let out = [];
77
+ let t57 = input["cells"];
78
+ let t60 = t57.length;
79
+ const t61 = 1;
80
+ t57.forEach((cells_el_58, cells_i_59) => {
81
+ let t62 = cells_i_59 - t61;
82
+ let t63 = ((t62 % t60) + t60) % t60;
83
+ let t64 = t63 + t60;
84
+ let t65 = ((t64 % t60) + t60) % t60;
85
+ let t66 = t57[t65];
86
+ out.push(t66);
87
+ });
88
+ return out;
89
+ }
90
+
91
+ export function _shift_left_wrap(input) {
92
+ let out = [];
93
+ let t67 = input["cells"];
94
+ let t70 = t67.length;
95
+ const t71 = -1;
96
+ t67.forEach((cells_el_68, cells_i_69) => {
97
+ let t72 = cells_i_69 - t71;
98
+ let t73 = ((t72 % t70) + t70) % t70;
99
+ let t74 = t73 + t70;
100
+ let t75 = ((t74 % t70) + t70) % t70;
101
+ let t76 = t67[t75];
102
+ out.push(t76);
103
+ });
104
+ return out;
105
+ }
106
+