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,262 @@
1
+ (LIR
2
+ (Declaration shift_cols_right_zero
3
+ %t1 = load_input "rows" :: array
4
+ %t6 = Length %t1 :: integer
5
+ %t12 = const 1 :: integer
6
+ %t14 = const 0 :: integer
7
+ loop rows id=L1 in %t1 as el=%rows_el_2, idx=%rows_i_3
8
+ %t7 = call core.mod(%rows_i_3, %t6) :: integer
9
+ %t8 = call core.add(%t7, %t6) :: integer
10
+ %t9 = call core.mod(%t8, %t6) :: integer
11
+ %t10 = Gather %t1, %t9 :: any
12
+ %t11 = Length %t10 :: integer
13
+ %t19 = call core.sub(%t11, %t12) :: integer
14
+ loop col id=L2 in %rows_el_2 as el=%col_el_4, idx=%col_i_5
15
+ %t13 = call core.sub(%col_i_5, %t12) :: integer
16
+ %t15 = call core.gte(%t13, %t14) :: boolean
17
+ %t16 = call core.lt(%t13, %t11) :: boolean
18
+ %t17 = call core.and(%t15, %t16) :: boolean
19
+ %t21 = call core.clamp(%t13, %t14, %t19) :: integer
20
+ %t22 = Gather %t10, %t21 :: integer
21
+ %t24 = select %t17, %t22, %t14 :: integer
22
+ yield %t24
23
+ end_loop
24
+ end_loop
25
+ )
26
+ (Declaration shift_cols_right_clamp
27
+ %t25 = load_input "rows" :: array
28
+ %t30 = Length %t25 :: integer
29
+ %t36 = const 1 :: integer
30
+ %t40 = const 0 :: integer
31
+ loop rows id=L3 in %t25 as el=%rows_el_26, idx=%rows_i_27
32
+ %t31 = call core.mod(%rows_i_27, %t30) :: integer
33
+ %t32 = call core.add(%t31, %t30) :: integer
34
+ %t33 = call core.mod(%t32, %t30) :: integer
35
+ %t34 = Gather %t25, %t33 :: any
36
+ %t35 = Length %t34 :: integer
37
+ %t39 = call core.sub(%t35, %t36) :: integer
38
+ loop col id=L4 in %rows_el_26 as el=%col_el_28, idx=%col_i_29
39
+ %t37 = call core.sub(%col_i_29, %t36) :: integer
40
+ %t41 = call core.clamp(%t37, %t40, %t39) :: integer
41
+ %t42 = Gather %t34, %t41 :: integer
42
+ yield %t42
43
+ end_loop
44
+ end_loop
45
+ )
46
+ (Declaration shift_cols_right_wrap
47
+ %t43 = load_input "rows" :: array
48
+ %t48 = Length %t43 :: integer
49
+ %t54 = const 1 :: integer
50
+ loop rows id=L5 in %t43 as el=%rows_el_44, idx=%rows_i_45
51
+ %t49 = call core.mod(%rows_i_45, %t48) :: integer
52
+ %t50 = call core.add(%t49, %t48) :: integer
53
+ %t51 = call core.mod(%t50, %t48) :: integer
54
+ %t52 = Gather %t43, %t51 :: any
55
+ %t53 = Length %t52 :: integer
56
+ loop col id=L6 in %rows_el_44 as el=%col_el_46, idx=%col_i_47
57
+ %t55 = call core.sub(%col_i_47, %t54) :: integer
58
+ %t56 = call core.mod(%t55, %t53) :: integer
59
+ %t57 = call core.add(%t56, %t53) :: integer
60
+ %t58 = call core.mod(%t57, %t53) :: integer
61
+ %t59 = Gather %t52, %t58 :: integer
62
+ yield %t59
63
+ end_loop
64
+ end_loop
65
+ )
66
+ (Declaration shift_cols_left_zero
67
+ %t60 = load_input "rows" :: array
68
+ %t65 = Length %t60 :: integer
69
+ %t71 = const -1 :: integer
70
+ %t73 = const 0 :: integer
71
+ %t77 = const 1 :: integer
72
+ loop rows id=L7 in %t60 as el=%rows_el_61, idx=%rows_i_62
73
+ %t66 = call core.mod(%rows_i_62, %t65) :: integer
74
+ %t67 = call core.add(%t66, %t65) :: integer
75
+ %t68 = call core.mod(%t67, %t65) :: integer
76
+ %t69 = Gather %t60, %t68 :: any
77
+ %t70 = Length %t69 :: integer
78
+ %t78 = call core.sub(%t70, %t77) :: integer
79
+ loop col id=L8 in %rows_el_61 as el=%col_el_63, idx=%col_i_64
80
+ %t72 = call core.sub(%col_i_64, %t71) :: integer
81
+ %t74 = call core.gte(%t72, %t73) :: boolean
82
+ %t75 = call core.lt(%t72, %t70) :: boolean
83
+ %t76 = call core.and(%t74, %t75) :: boolean
84
+ %t80 = call core.clamp(%t72, %t73, %t78) :: integer
85
+ %t81 = Gather %t69, %t80 :: integer
86
+ %t83 = select %t76, %t81, %t73 :: integer
87
+ yield %t83
88
+ end_loop
89
+ end_loop
90
+ )
91
+ (Declaration shift_cols_left_clamp
92
+ %t84 = load_input "rows" :: array
93
+ %t89 = Length %t84 :: integer
94
+ %t95 = const -1 :: integer
95
+ %t97 = const 1 :: integer
96
+ %t99 = const 0 :: integer
97
+ loop rows id=L9 in %t84 as el=%rows_el_85, idx=%rows_i_86
98
+ %t90 = call core.mod(%rows_i_86, %t89) :: integer
99
+ %t91 = call core.add(%t90, %t89) :: integer
100
+ %t92 = call core.mod(%t91, %t89) :: integer
101
+ %t93 = Gather %t84, %t92 :: any
102
+ %t94 = Length %t93 :: integer
103
+ %t98 = call core.sub(%t94, %t97) :: integer
104
+ loop col id=L10 in %rows_el_85 as el=%col_el_87, idx=%col_i_88
105
+ %t96 = call core.sub(%col_i_88, %t95) :: integer
106
+ %t100 = call core.clamp(%t96, %t99, %t98) :: integer
107
+ %t101 = Gather %t93, %t100 :: integer
108
+ yield %t101
109
+ end_loop
110
+ end_loop
111
+ )
112
+ (Declaration shift_cols_left_wrap
113
+ %t102 = load_input "rows" :: array
114
+ %t107 = Length %t102 :: integer
115
+ %t113 = const -1 :: integer
116
+ loop rows id=L11 in %t102 as el=%rows_el_103, idx=%rows_i_104
117
+ %t108 = call core.mod(%rows_i_104, %t107) :: integer
118
+ %t109 = call core.add(%t108, %t107) :: integer
119
+ %t110 = call core.mod(%t109, %t107) :: integer
120
+ %t111 = Gather %t102, %t110 :: any
121
+ %t112 = Length %t111 :: integer
122
+ loop col id=L12 in %rows_el_103 as el=%col_el_105, idx=%col_i_106
123
+ %t114 = call core.sub(%col_i_106, %t113) :: integer
124
+ %t115 = call core.mod(%t114, %t112) :: integer
125
+ %t116 = call core.add(%t115, %t112) :: integer
126
+ %t117 = call core.mod(%t116, %t112) :: integer
127
+ %t118 = Gather %t111, %t117 :: integer
128
+ yield %t118
129
+ end_loop
130
+ end_loop
131
+ )
132
+ (Declaration shift_rows_down_zero
133
+ %t119 = load_input "rows" :: array
134
+ %t124 = Length %t119 :: integer
135
+ %t125 = const 1 :: integer
136
+ %t127 = const 0 :: integer
137
+ %t132 = call core.sub(%t124, %t125) :: integer
138
+ loop rows id=L13 in %t119 as el=%rows_el_120, idx=%rows_i_121
139
+ %t126 = call core.sub(%rows_i_121, %t125) :: integer
140
+ %t128 = call core.gte(%t126, %t127) :: boolean
141
+ %t129 = call core.lt(%t126, %t124) :: boolean
142
+ %t134 = call core.clamp(%t126, %t127, %t132) :: integer
143
+ %t130 = call core.and(%t128, %t129) :: boolean
144
+ %t135 = Gather %t119, %t134 :: any
145
+ %t136 = Length %t135 :: integer
146
+ loop col id=L14 in %rows_el_120 as el=%col_el_122, idx=%col_i_123
147
+ %t137 = call core.mod(%col_i_123, %t136) :: integer
148
+ %t138 = call core.add(%t137, %t136) :: integer
149
+ %t139 = call core.mod(%t138, %t136) :: integer
150
+ %t140 = Gather %t135, %t139 :: integer
151
+ %t142 = select %t130, %t140, %t127 :: integer
152
+ yield %t142
153
+ end_loop
154
+ end_loop
155
+ )
156
+ (Declaration shift_rows_down_clamp
157
+ %t143 = load_input "rows" :: array
158
+ %t148 = Length %t143 :: integer
159
+ %t149 = const 1 :: integer
160
+ %t153 = const 0 :: integer
161
+ %t152 = call core.sub(%t148, %t149) :: integer
162
+ loop rows id=L15 in %t143 as el=%rows_el_144, idx=%rows_i_145
163
+ %t150 = call core.sub(%rows_i_145, %t149) :: integer
164
+ %t154 = call core.clamp(%t150, %t153, %t152) :: integer
165
+ %t155 = Gather %t143, %t154 :: any
166
+ %t156 = Length %t155 :: integer
167
+ loop col id=L16 in %rows_el_144 as el=%col_el_146, idx=%col_i_147
168
+ %t157 = call core.mod(%col_i_147, %t156) :: integer
169
+ %t158 = call core.add(%t157, %t156) :: integer
170
+ %t159 = call core.mod(%t158, %t156) :: integer
171
+ %t160 = Gather %t155, %t159 :: integer
172
+ yield %t160
173
+ end_loop
174
+ end_loop
175
+ )
176
+ (Declaration shift_rows_down_wrap
177
+ %t161 = load_input "rows" :: array
178
+ %t166 = Length %t161 :: integer
179
+ %t167 = const 1 :: integer
180
+ loop rows id=L17 in %t161 as el=%rows_el_162, idx=%rows_i_163
181
+ %t168 = call core.sub(%rows_i_163, %t167) :: integer
182
+ %t169 = call core.mod(%t168, %t166) :: integer
183
+ %t170 = call core.add(%t169, %t166) :: integer
184
+ %t171 = call core.mod(%t170, %t166) :: integer
185
+ %t172 = Gather %t161, %t171 :: any
186
+ %t173 = Length %t172 :: integer
187
+ loop col id=L18 in %rows_el_162 as el=%col_el_164, idx=%col_i_165
188
+ %t174 = call core.mod(%col_i_165, %t173) :: integer
189
+ %t175 = call core.add(%t174, %t173) :: integer
190
+ %t176 = call core.mod(%t175, %t173) :: integer
191
+ %t177 = Gather %t172, %t176 :: integer
192
+ yield %t177
193
+ end_loop
194
+ end_loop
195
+ )
196
+ (Declaration shift_rows_up_zero
197
+ %t178 = load_input "rows" :: array
198
+ %t183 = Length %t178 :: integer
199
+ %t184 = const -1 :: integer
200
+ %t186 = const 0 :: integer
201
+ %t190 = const 1 :: integer
202
+ %t191 = call core.sub(%t183, %t190) :: integer
203
+ loop rows id=L19 in %t178 as el=%rows_el_179, idx=%rows_i_180
204
+ %t185 = call core.sub(%rows_i_180, %t184) :: integer
205
+ %t187 = call core.gte(%t185, %t186) :: boolean
206
+ %t188 = call core.lt(%t185, %t183) :: boolean
207
+ %t193 = call core.clamp(%t185, %t186, %t191) :: integer
208
+ %t189 = call core.and(%t187, %t188) :: boolean
209
+ %t194 = Gather %t178, %t193 :: any
210
+ %t195 = Length %t194 :: integer
211
+ loop col id=L20 in %rows_el_179 as el=%col_el_181, idx=%col_i_182
212
+ %t196 = call core.mod(%col_i_182, %t195) :: integer
213
+ %t197 = call core.add(%t196, %t195) :: integer
214
+ %t198 = call core.mod(%t197, %t195) :: integer
215
+ %t199 = Gather %t194, %t198 :: integer
216
+ %t201 = select %t189, %t199, %t186 :: integer
217
+ yield %t201
218
+ end_loop
219
+ end_loop
220
+ )
221
+ (Declaration shift_rows_up_clamp
222
+ %t202 = load_input "rows" :: array
223
+ %t207 = Length %t202 :: integer
224
+ %t208 = const -1 :: integer
225
+ %t210 = const 1 :: integer
226
+ %t212 = const 0 :: integer
227
+ %t211 = call core.sub(%t207, %t210) :: integer
228
+ loop rows id=L21 in %t202 as el=%rows_el_203, idx=%rows_i_204
229
+ %t209 = call core.sub(%rows_i_204, %t208) :: integer
230
+ %t213 = call core.clamp(%t209, %t212, %t211) :: integer
231
+ %t214 = Gather %t202, %t213 :: any
232
+ %t215 = Length %t214 :: integer
233
+ loop col id=L22 in %rows_el_203 as el=%col_el_205, idx=%col_i_206
234
+ %t216 = call core.mod(%col_i_206, %t215) :: integer
235
+ %t217 = call core.add(%t216, %t215) :: integer
236
+ %t218 = call core.mod(%t217, %t215) :: integer
237
+ %t219 = Gather %t214, %t218 :: integer
238
+ yield %t219
239
+ end_loop
240
+ end_loop
241
+ )
242
+ (Declaration shift_rows_up_wrap
243
+ %t220 = load_input "rows" :: array
244
+ %t225 = Length %t220 :: integer
245
+ %t226 = const -1 :: integer
246
+ loop rows id=L23 in %t220 as el=%rows_el_221, idx=%rows_i_222
247
+ %t227 = call core.sub(%rows_i_222, %t226) :: integer
248
+ %t228 = call core.mod(%t227, %t225) :: integer
249
+ %t229 = call core.add(%t228, %t225) :: integer
250
+ %t230 = call core.mod(%t229, %t225) :: integer
251
+ %t231 = Gather %t220, %t230 :: any
252
+ %t232 = Length %t231 :: integer
253
+ loop col id=L24 in %rows_el_221 as el=%col_el_223, idx=%col_i_224
254
+ %t233 = call core.mod(%col_i_224, %t232) :: integer
255
+ %t234 = call core.add(%t233, %t232) :: integer
256
+ %t235 = call core.mod(%t234, %t232) :: integer
257
+ %t236 = Gather %t231, %t235 :: integer
258
+ yield %t236
259
+ end_loop
260
+ end_loop
261
+ )
262
+ )
@@ -0,0 +1,262 @@
1
+ (LIR
2
+ (Declaration shift_cols_right_zero
3
+ %t1 = load_input "rows" :: array
4
+ %t6 = Length %t1 :: integer
5
+ %t12 = const 1 :: integer
6
+ %t14 = const 0 :: integer
7
+ loop rows id=L1 in %t1 as el=%rows_el_2, idx=%rows_i_3
8
+ %t7 = call core.mod(%rows_i_3, %t6) :: integer
9
+ %t8 = call core.add(%t7, %t6) :: integer
10
+ %t9 = call core.mod(%t8, %t6) :: integer
11
+ %t10 = Gather %t1, %t9 :: any
12
+ %t11 = Length %t10 :: integer
13
+ %t19 = call core.sub(%t11, %t12) :: integer
14
+ loop col id=L2 in %rows_el_2 as el=%col_el_4, idx=%col_i_5
15
+ %t13 = call core.sub(%col_i_5, %t12) :: integer
16
+ %t15 = call core.gte(%t13, %t14) :: boolean
17
+ %t16 = call core.lt(%t13, %t11) :: boolean
18
+ %t17 = call core.and(%t15, %t16) :: boolean
19
+ %t21 = call core.clamp(%t13, %t14, %t19) :: integer
20
+ %t22 = Gather %t10, %t21 :: integer
21
+ %t24 = select %t17, %t22, %t14 :: integer
22
+ yield %t24
23
+ end_loop
24
+ end_loop
25
+ )
26
+ (Declaration shift_cols_right_clamp
27
+ %t25 = load_input "rows" :: array
28
+ %t30 = Length %t25 :: integer
29
+ %t36 = const 1 :: integer
30
+ %t40 = const 0 :: integer
31
+ loop rows id=L3 in %t25 as el=%rows_el_26, idx=%rows_i_27
32
+ %t31 = call core.mod(%rows_i_27, %t30) :: integer
33
+ %t32 = call core.add(%t31, %t30) :: integer
34
+ %t33 = call core.mod(%t32, %t30) :: integer
35
+ %t34 = Gather %t25, %t33 :: any
36
+ %t35 = Length %t34 :: integer
37
+ %t39 = call core.sub(%t35, %t36) :: integer
38
+ loop col id=L4 in %rows_el_26 as el=%col_el_28, idx=%col_i_29
39
+ %t37 = call core.sub(%col_i_29, %t36) :: integer
40
+ %t41 = call core.clamp(%t37, %t40, %t39) :: integer
41
+ %t42 = Gather %t34, %t41 :: integer
42
+ yield %t42
43
+ end_loop
44
+ end_loop
45
+ )
46
+ (Declaration shift_cols_right_wrap
47
+ %t43 = load_input "rows" :: array
48
+ %t48 = Length %t43 :: integer
49
+ %t54 = const 1 :: integer
50
+ loop rows id=L5 in %t43 as el=%rows_el_44, idx=%rows_i_45
51
+ %t49 = call core.mod(%rows_i_45, %t48) :: integer
52
+ %t50 = call core.add(%t49, %t48) :: integer
53
+ %t51 = call core.mod(%t50, %t48) :: integer
54
+ %t52 = Gather %t43, %t51 :: any
55
+ %t53 = Length %t52 :: integer
56
+ loop col id=L6 in %rows_el_44 as el=%col_el_46, idx=%col_i_47
57
+ %t55 = call core.sub(%col_i_47, %t54) :: integer
58
+ %t56 = call core.mod(%t55, %t53) :: integer
59
+ %t57 = call core.add(%t56, %t53) :: integer
60
+ %t58 = call core.mod(%t57, %t53) :: integer
61
+ %t59 = Gather %t52, %t58 :: integer
62
+ yield %t59
63
+ end_loop
64
+ end_loop
65
+ )
66
+ (Declaration shift_cols_left_zero
67
+ %t60 = load_input "rows" :: array
68
+ %t65 = Length %t60 :: integer
69
+ %t71 = const -1 :: integer
70
+ %t73 = const 0 :: integer
71
+ %t77 = const 1 :: integer
72
+ loop rows id=L7 in %t60 as el=%rows_el_61, idx=%rows_i_62
73
+ %t66 = call core.mod(%rows_i_62, %t65) :: integer
74
+ %t67 = call core.add(%t66, %t65) :: integer
75
+ %t68 = call core.mod(%t67, %t65) :: integer
76
+ %t69 = Gather %t60, %t68 :: any
77
+ %t70 = Length %t69 :: integer
78
+ %t78 = call core.sub(%t70, %t77) :: integer
79
+ loop col id=L8 in %rows_el_61 as el=%col_el_63, idx=%col_i_64
80
+ %t72 = call core.sub(%col_i_64, %t71) :: integer
81
+ %t74 = call core.gte(%t72, %t73) :: boolean
82
+ %t75 = call core.lt(%t72, %t70) :: boolean
83
+ %t76 = call core.and(%t74, %t75) :: boolean
84
+ %t80 = call core.clamp(%t72, %t73, %t78) :: integer
85
+ %t81 = Gather %t69, %t80 :: integer
86
+ %t83 = select %t76, %t81, %t73 :: integer
87
+ yield %t83
88
+ end_loop
89
+ end_loop
90
+ )
91
+ (Declaration shift_cols_left_clamp
92
+ %t84 = load_input "rows" :: array
93
+ %t89 = Length %t84 :: integer
94
+ %t95 = const -1 :: integer
95
+ %t97 = const 1 :: integer
96
+ %t99 = const 0 :: integer
97
+ loop rows id=L9 in %t84 as el=%rows_el_85, idx=%rows_i_86
98
+ %t90 = call core.mod(%rows_i_86, %t89) :: integer
99
+ %t91 = call core.add(%t90, %t89) :: integer
100
+ %t92 = call core.mod(%t91, %t89) :: integer
101
+ %t93 = Gather %t84, %t92 :: any
102
+ %t94 = Length %t93 :: integer
103
+ %t98 = call core.sub(%t94, %t97) :: integer
104
+ loop col id=L10 in %rows_el_85 as el=%col_el_87, idx=%col_i_88
105
+ %t96 = call core.sub(%col_i_88, %t95) :: integer
106
+ %t100 = call core.clamp(%t96, %t99, %t98) :: integer
107
+ %t101 = Gather %t93, %t100 :: integer
108
+ yield %t101
109
+ end_loop
110
+ end_loop
111
+ )
112
+ (Declaration shift_cols_left_wrap
113
+ %t102 = load_input "rows" :: array
114
+ %t107 = Length %t102 :: integer
115
+ %t113 = const -1 :: integer
116
+ loop rows id=L11 in %t102 as el=%rows_el_103, idx=%rows_i_104
117
+ %t108 = call core.mod(%rows_i_104, %t107) :: integer
118
+ %t109 = call core.add(%t108, %t107) :: integer
119
+ %t110 = call core.mod(%t109, %t107) :: integer
120
+ %t111 = Gather %t102, %t110 :: any
121
+ %t112 = Length %t111 :: integer
122
+ loop col id=L12 in %rows_el_103 as el=%col_el_105, idx=%col_i_106
123
+ %t114 = call core.sub(%col_i_106, %t113) :: integer
124
+ %t115 = call core.mod(%t114, %t112) :: integer
125
+ %t116 = call core.add(%t115, %t112) :: integer
126
+ %t117 = call core.mod(%t116, %t112) :: integer
127
+ %t118 = Gather %t111, %t117 :: integer
128
+ yield %t118
129
+ end_loop
130
+ end_loop
131
+ )
132
+ (Declaration shift_rows_down_zero
133
+ %t119 = load_input "rows" :: array
134
+ %t124 = Length %t119 :: integer
135
+ %t125 = const 1 :: integer
136
+ %t127 = const 0 :: integer
137
+ %t132 = call core.sub(%t124, %t125) :: integer
138
+ loop rows id=L13 in %t119 as el=%rows_el_120, idx=%rows_i_121
139
+ %t126 = call core.sub(%rows_i_121, %t125) :: integer
140
+ %t128 = call core.gte(%t126, %t127) :: boolean
141
+ %t129 = call core.lt(%t126, %t124) :: boolean
142
+ %t134 = call core.clamp(%t126, %t127, %t132) :: integer
143
+ %t130 = call core.and(%t128, %t129) :: boolean
144
+ %t135 = Gather %t119, %t134 :: any
145
+ %t136 = Length %t135 :: integer
146
+ loop col id=L14 in %rows_el_120 as el=%col_el_122, idx=%col_i_123
147
+ %t137 = call core.mod(%col_i_123, %t136) :: integer
148
+ %t138 = call core.add(%t137, %t136) :: integer
149
+ %t139 = call core.mod(%t138, %t136) :: integer
150
+ %t140 = Gather %t135, %t139 :: integer
151
+ %t142 = select %t130, %t140, %t127 :: integer
152
+ yield %t142
153
+ end_loop
154
+ end_loop
155
+ )
156
+ (Declaration shift_rows_down_clamp
157
+ %t143 = load_input "rows" :: array
158
+ %t148 = Length %t143 :: integer
159
+ %t149 = const 1 :: integer
160
+ %t153 = const 0 :: integer
161
+ %t152 = call core.sub(%t148, %t149) :: integer
162
+ loop rows id=L15 in %t143 as el=%rows_el_144, idx=%rows_i_145
163
+ %t150 = call core.sub(%rows_i_145, %t149) :: integer
164
+ %t154 = call core.clamp(%t150, %t153, %t152) :: integer
165
+ %t155 = Gather %t143, %t154 :: any
166
+ %t156 = Length %t155 :: integer
167
+ loop col id=L16 in %rows_el_144 as el=%col_el_146, idx=%col_i_147
168
+ %t157 = call core.mod(%col_i_147, %t156) :: integer
169
+ %t158 = call core.add(%t157, %t156) :: integer
170
+ %t159 = call core.mod(%t158, %t156) :: integer
171
+ %t160 = Gather %t155, %t159 :: integer
172
+ yield %t160
173
+ end_loop
174
+ end_loop
175
+ )
176
+ (Declaration shift_rows_down_wrap
177
+ %t161 = load_input "rows" :: array
178
+ %t166 = Length %t161 :: integer
179
+ %t167 = const 1 :: integer
180
+ loop rows id=L17 in %t161 as el=%rows_el_162, idx=%rows_i_163
181
+ %t168 = call core.sub(%rows_i_163, %t167) :: integer
182
+ %t169 = call core.mod(%t168, %t166) :: integer
183
+ %t170 = call core.add(%t169, %t166) :: integer
184
+ %t171 = call core.mod(%t170, %t166) :: integer
185
+ %t172 = Gather %t161, %t171 :: any
186
+ %t173 = Length %t172 :: integer
187
+ loop col id=L18 in %rows_el_162 as el=%col_el_164, idx=%col_i_165
188
+ %t174 = call core.mod(%col_i_165, %t173) :: integer
189
+ %t175 = call core.add(%t174, %t173) :: integer
190
+ %t176 = call core.mod(%t175, %t173) :: integer
191
+ %t177 = Gather %t172, %t176 :: integer
192
+ yield %t177
193
+ end_loop
194
+ end_loop
195
+ )
196
+ (Declaration shift_rows_up_zero
197
+ %t178 = load_input "rows" :: array
198
+ %t183 = Length %t178 :: integer
199
+ %t184 = const -1 :: integer
200
+ %t186 = const 0 :: integer
201
+ %t190 = const 1 :: integer
202
+ %t191 = call core.sub(%t183, %t190) :: integer
203
+ loop rows id=L19 in %t178 as el=%rows_el_179, idx=%rows_i_180
204
+ %t185 = call core.sub(%rows_i_180, %t184) :: integer
205
+ %t187 = call core.gte(%t185, %t186) :: boolean
206
+ %t188 = call core.lt(%t185, %t183) :: boolean
207
+ %t193 = call core.clamp(%t185, %t186, %t191) :: integer
208
+ %t189 = call core.and(%t187, %t188) :: boolean
209
+ %t194 = Gather %t178, %t193 :: any
210
+ %t195 = Length %t194 :: integer
211
+ loop col id=L20 in %rows_el_179 as el=%col_el_181, idx=%col_i_182
212
+ %t196 = call core.mod(%col_i_182, %t195) :: integer
213
+ %t197 = call core.add(%t196, %t195) :: integer
214
+ %t198 = call core.mod(%t197, %t195) :: integer
215
+ %t199 = Gather %t194, %t198 :: integer
216
+ %t201 = select %t189, %t199, %t186 :: integer
217
+ yield %t201
218
+ end_loop
219
+ end_loop
220
+ )
221
+ (Declaration shift_rows_up_clamp
222
+ %t202 = load_input "rows" :: array
223
+ %t207 = Length %t202 :: integer
224
+ %t208 = const -1 :: integer
225
+ %t210 = const 1 :: integer
226
+ %t212 = const 0 :: integer
227
+ %t211 = call core.sub(%t207, %t210) :: integer
228
+ loop rows id=L21 in %t202 as el=%rows_el_203, idx=%rows_i_204
229
+ %t209 = call core.sub(%rows_i_204, %t208) :: integer
230
+ %t213 = call core.clamp(%t209, %t212, %t211) :: integer
231
+ %t214 = Gather %t202, %t213 :: any
232
+ %t215 = Length %t214 :: integer
233
+ loop col id=L22 in %rows_el_203 as el=%col_el_205, idx=%col_i_206
234
+ %t216 = call core.mod(%col_i_206, %t215) :: integer
235
+ %t217 = call core.add(%t216, %t215) :: integer
236
+ %t218 = call core.mod(%t217, %t215) :: integer
237
+ %t219 = Gather %t214, %t218 :: integer
238
+ yield %t219
239
+ end_loop
240
+ end_loop
241
+ )
242
+ (Declaration shift_rows_up_wrap
243
+ %t220 = load_input "rows" :: array
244
+ %t225 = Length %t220 :: integer
245
+ %t226 = const -1 :: integer
246
+ loop rows id=L23 in %t220 as el=%rows_el_221, idx=%rows_i_222
247
+ %t227 = call core.sub(%rows_i_222, %t226) :: integer
248
+ %t228 = call core.mod(%t227, %t225) :: integer
249
+ %t229 = call core.add(%t228, %t225) :: integer
250
+ %t230 = call core.mod(%t229, %t225) :: integer
251
+ %t231 = Gather %t220, %t230 :: any
252
+ %t232 = Length %t231 :: integer
253
+ loop col id=L24 in %rows_el_221 as el=%col_el_223, idx=%col_i_224
254
+ %t233 = call core.mod(%col_i_224, %t232) :: integer
255
+ %t234 = call core.add(%t233, %t232) :: integer
256
+ %t235 = call core.mod(%t234, %t232) :: integer
257
+ %t236 = Gather %t231, %t235 :: integer
258
+ yield %t236
259
+ end_loop
260
+ end_loop
261
+ )
262
+ )
@@ -0,0 +1,74 @@
1
+ (NAST
2
+ (VALUE shift_cols_right_zero
3
+ (Call :shift
4
+ (InputRef [:rows, :col, :v])
5
+ (Const 1)
6
+ )
7
+ )
8
+ (VALUE shift_cols_right_clamp
9
+ (Call :shift
10
+ (InputRef [:rows, :col, :v])
11
+ (Const 1)
12
+ )
13
+ )
14
+ (VALUE shift_cols_right_wrap
15
+ (Call :shift
16
+ (InputRef [:rows, :col, :v])
17
+ (Const 1)
18
+ )
19
+ )
20
+ (VALUE shift_cols_left_zero
21
+ (Call :shift
22
+ (InputRef [:rows, :col, :v])
23
+ (Const -1)
24
+ )
25
+ )
26
+ (VALUE shift_cols_left_clamp
27
+ (Call :shift
28
+ (InputRef [:rows, :col, :v])
29
+ (Const -1)
30
+ )
31
+ )
32
+ (VALUE shift_cols_left_wrap
33
+ (Call :shift
34
+ (InputRef [:rows, :col, :v])
35
+ (Const -1)
36
+ )
37
+ )
38
+ (VALUE shift_rows_down_zero
39
+ (Call :shift
40
+ (InputRef [:rows, :col, :v])
41
+ (Const 1)
42
+ )
43
+ )
44
+ (VALUE shift_rows_down_clamp
45
+ (Call :shift
46
+ (InputRef [:rows, :col, :v])
47
+ (Const 1)
48
+ )
49
+ )
50
+ (VALUE shift_rows_down_wrap
51
+ (Call :shift
52
+ (InputRef [:rows, :col, :v])
53
+ (Const 1)
54
+ )
55
+ )
56
+ (VALUE shift_rows_up_zero
57
+ (Call :shift
58
+ (InputRef [:rows, :col, :v])
59
+ (Const -1)
60
+ )
61
+ )
62
+ (VALUE shift_rows_up_clamp
63
+ (Call :shift
64
+ (InputRef [:rows, :col, :v])
65
+ (Const -1)
66
+ )
67
+ )
68
+ (VALUE shift_rows_up_wrap
69
+ (Call :shift
70
+ (InputRef [:rows, :col, :v])
71
+ (Const -1)
72
+ )
73
+ )
74
+ )