kumi 0.0.18 → 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 +25 -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
+ loop rows id=L1 in %t1 as el=%rows_el_2, idx=%rows_i_3
5
+ loop col id=L2 in %rows_el_2 as el=%col_el_4, idx=%col_i_5
6
+ %t6 = Length %t1 :: integer
7
+ %t7 = call core.mod(%rows_i_3, %t6) :: integer
8
+ %t8 = call core.add(%t7, %t6) :: integer
9
+ %t9 = call core.mod(%t8, %t6) :: integer
10
+ %t10 = Gather %t1, %t9 :: any
11
+ %t11 = Length %t10 :: integer
12
+ %t12 = const 1 :: integer
13
+ %t13 = call core.sub(%col_i_5, %t12) :: integer
14
+ %t14 = const 0 :: integer
15
+ %t15 = call core.gte(%t13, %t14) :: boolean
16
+ %t16 = call core.lt(%t13, %t11) :: boolean
17
+ %t17 = call core.and(%t15, %t16) :: boolean
18
+ %t19 = call core.sub(%t11, %t12) :: integer
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
+ loop rows id=L3 in %t25 as el=%rows_el_26, idx=%rows_i_27
29
+ loop col id=L4 in %rows_el_26 as el=%col_el_28, idx=%col_i_29
30
+ %t30 = Length %t25 :: integer
31
+ %t31 = call core.mod(%rows_i_27, %t30) :: integer
32
+ %t32 = call core.add(%t31, %t30) :: integer
33
+ %t33 = call core.mod(%t32, %t30) :: integer
34
+ %t34 = Gather %t25, %t33 :: any
35
+ %t35 = Length %t34 :: integer
36
+ %t36 = const 1 :: integer
37
+ %t37 = call core.sub(%col_i_29, %t36) :: integer
38
+ %t39 = call core.sub(%t35, %t36) :: integer
39
+ %t40 = const 0 :: 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
+ loop rows id=L5 in %t43 as el=%rows_el_44, idx=%rows_i_45
49
+ loop col id=L6 in %rows_el_44 as el=%col_el_46, idx=%col_i_47
50
+ %t48 = Length %t43 :: integer
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
+ %t54 = const 1 :: integer
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
+ loop rows id=L7 in %t60 as el=%rows_el_61, idx=%rows_i_62
69
+ loop col id=L8 in %rows_el_61 as el=%col_el_63, idx=%col_i_64
70
+ %t65 = Length %t60 :: integer
71
+ %t66 = call core.mod(%rows_i_62, %t65) :: integer
72
+ %t67 = call core.add(%t66, %t65) :: integer
73
+ %t68 = call core.mod(%t67, %t65) :: integer
74
+ %t69 = Gather %t60, %t68 :: any
75
+ %t70 = Length %t69 :: integer
76
+ %t71 = const -1 :: integer
77
+ %t72 = call core.sub(%col_i_64, %t71) :: integer
78
+ %t73 = const 0 :: integer
79
+ %t74 = call core.gte(%t72, %t73) :: boolean
80
+ %t75 = call core.lt(%t72, %t70) :: boolean
81
+ %t76 = call core.and(%t74, %t75) :: boolean
82
+ %t77 = const 1 :: integer
83
+ %t78 = call core.sub(%t70, %t77) :: integer
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
+ loop rows id=L9 in %t84 as el=%rows_el_85, idx=%rows_i_86
94
+ loop col id=L10 in %rows_el_85 as el=%col_el_87, idx=%col_i_88
95
+ %t89 = Length %t84 :: integer
96
+ %t90 = call core.mod(%rows_i_86, %t89) :: integer
97
+ %t91 = call core.add(%t90, %t89) :: integer
98
+ %t92 = call core.mod(%t91, %t89) :: integer
99
+ %t93 = Gather %t84, %t92 :: any
100
+ %t94 = Length %t93 :: integer
101
+ %t95 = const -1 :: integer
102
+ %t96 = call core.sub(%col_i_88, %t95) :: integer
103
+ %t97 = const 1 :: integer
104
+ %t98 = call core.sub(%t94, %t97) :: integer
105
+ %t99 = const 0 :: 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
+ loop rows id=L11 in %t102 as el=%rows_el_103, idx=%rows_i_104
115
+ loop col id=L12 in %rows_el_103 as el=%col_el_105, idx=%col_i_106
116
+ %t107 = Length %t102 :: integer
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
+ %t113 = const -1 :: integer
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
+ loop rows id=L13 in %t119 as el=%rows_el_120, idx=%rows_i_121
135
+ loop col id=L14 in %rows_el_120 as el=%col_el_122, idx=%col_i_123
136
+ %t124 = Length %t119 :: integer
137
+ %t125 = const 1 :: integer
138
+ %t126 = call core.sub(%rows_i_121, %t125) :: integer
139
+ %t127 = const 0 :: integer
140
+ %t128 = call core.gte(%t126, %t127) :: boolean
141
+ %t129 = call core.lt(%t126, %t124) :: boolean
142
+ %t130 = call core.and(%t128, %t129) :: boolean
143
+ %t132 = call core.sub(%t124, %t125) :: integer
144
+ %t134 = call core.clamp(%t126, %t127, %t132) :: integer
145
+ %t135 = Gather %t119, %t134 :: any
146
+ %t136 = Length %t135 :: integer
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
+ loop rows id=L15 in %t143 as el=%rows_el_144, idx=%rows_i_145
159
+ loop col id=L16 in %rows_el_144 as el=%col_el_146, idx=%col_i_147
160
+ %t148 = Length %t143 :: integer
161
+ %t149 = const 1 :: integer
162
+ %t150 = call core.sub(%rows_i_145, %t149) :: integer
163
+ %t152 = call core.sub(%t148, %t149) :: integer
164
+ %t153 = const 0 :: integer
165
+ %t154 = call core.clamp(%t150, %t153, %t152) :: integer
166
+ %t155 = Gather %t143, %t154 :: any
167
+ %t156 = Length %t155 :: integer
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
+ loop rows id=L17 in %t161 as el=%rows_el_162, idx=%rows_i_163
179
+ loop col id=L18 in %rows_el_162 as el=%col_el_164, idx=%col_i_165
180
+ %t166 = Length %t161 :: integer
181
+ %t167 = const 1 :: integer
182
+ %t168 = call core.sub(%rows_i_163, %t167) :: integer
183
+ %t169 = call core.mod(%t168, %t166) :: integer
184
+ %t170 = call core.add(%t169, %t166) :: integer
185
+ %t171 = call core.mod(%t170, %t166) :: integer
186
+ %t172 = Gather %t161, %t171 :: any
187
+ %t173 = Length %t172 :: integer
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
+ loop rows id=L19 in %t178 as el=%rows_el_179, idx=%rows_i_180
199
+ loop col id=L20 in %rows_el_179 as el=%col_el_181, idx=%col_i_182
200
+ %t183 = Length %t178 :: integer
201
+ %t184 = const -1 :: integer
202
+ %t185 = call core.sub(%rows_i_180, %t184) :: integer
203
+ %t186 = const 0 :: integer
204
+ %t187 = call core.gte(%t185, %t186) :: boolean
205
+ %t188 = call core.lt(%t185, %t183) :: boolean
206
+ %t189 = call core.and(%t187, %t188) :: boolean
207
+ %t190 = const 1 :: integer
208
+ %t191 = call core.sub(%t183, %t190) :: integer
209
+ %t193 = call core.clamp(%t185, %t186, %t191) :: integer
210
+ %t194 = Gather %t178, %t193 :: any
211
+ %t195 = Length %t194 :: integer
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
+ loop rows id=L21 in %t202 as el=%rows_el_203, idx=%rows_i_204
224
+ loop col id=L22 in %rows_el_203 as el=%col_el_205, idx=%col_i_206
225
+ %t207 = Length %t202 :: integer
226
+ %t208 = const -1 :: integer
227
+ %t209 = call core.sub(%rows_i_204, %t208) :: integer
228
+ %t210 = const 1 :: integer
229
+ %t211 = call core.sub(%t207, %t210) :: integer
230
+ %t212 = const 0 :: integer
231
+ %t213 = call core.clamp(%t209, %t212, %t211) :: integer
232
+ %t214 = Gather %t202, %t213 :: any
233
+ %t215 = Length %t214 :: integer
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
+ loop rows id=L23 in %t220 as el=%rows_el_221, idx=%rows_i_222
245
+ loop col id=L24 in %rows_el_221 as el=%col_el_223, idx=%col_i_224
246
+ %t225 = Length %t220 :: integer
247
+ %t226 = const -1 :: integer
248
+ %t227 = call core.sub(%rows_i_222, %t226) :: integer
249
+ %t228 = call core.mod(%t227, %t225) :: integer
250
+ %t229 = call core.add(%t228, %t225) :: integer
251
+ %t230 = call core.mod(%t229, %t225) :: integer
252
+ %t231 = Gather %t220, %t230 :: any
253
+ %t232 = Length %t231 :: integer
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
+ loop rows id=L1 in %t1 as el=%rows_el_2, idx=%rows_i_3
5
+ loop col id=L2 in %rows_el_2 as el=%col_el_4, idx=%col_i_5
6
+ %t6 = Length %t1 :: integer
7
+ %t7 = call core.mod(%rows_i_3, %t6) :: integer
8
+ %t8 = call core.add(%t7, %t6) :: integer
9
+ %t9 = call core.mod(%t8, %t6) :: integer
10
+ %t10 = Gather %t1, %t9 :: any
11
+ %t11 = Length %t10 :: integer
12
+ %t12 = const 1 :: integer
13
+ %t13 = call core.sub(%col_i_5, %t12) :: integer
14
+ %t14 = const 0 :: integer
15
+ %t15 = call core.gte(%t13, %t14) :: boolean
16
+ %t16 = call core.lt(%t13, %t11) :: boolean
17
+ %t17 = call core.and(%t15, %t16) :: boolean
18
+ %t19 = call core.sub(%t11, %t12) :: integer
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
+ loop rows id=L3 in %t25 as el=%rows_el_26, idx=%rows_i_27
29
+ loop col id=L4 in %rows_el_26 as el=%col_el_28, idx=%col_i_29
30
+ %t30 = Length %t25 :: integer
31
+ %t31 = call core.mod(%rows_i_27, %t30) :: integer
32
+ %t32 = call core.add(%t31, %t30) :: integer
33
+ %t33 = call core.mod(%t32, %t30) :: integer
34
+ %t34 = Gather %t25, %t33 :: any
35
+ %t35 = Length %t34 :: integer
36
+ %t36 = const 1 :: integer
37
+ %t37 = call core.sub(%col_i_29, %t36) :: integer
38
+ %t39 = call core.sub(%t35, %t36) :: integer
39
+ %t40 = const 0 :: 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
+ loop rows id=L5 in %t43 as el=%rows_el_44, idx=%rows_i_45
49
+ loop col id=L6 in %rows_el_44 as el=%col_el_46, idx=%col_i_47
50
+ %t48 = Length %t43 :: integer
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
+ %t54 = const 1 :: integer
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
+ loop rows id=L7 in %t60 as el=%rows_el_61, idx=%rows_i_62
69
+ loop col id=L8 in %rows_el_61 as el=%col_el_63, idx=%col_i_64
70
+ %t65 = Length %t60 :: integer
71
+ %t66 = call core.mod(%rows_i_62, %t65) :: integer
72
+ %t67 = call core.add(%t66, %t65) :: integer
73
+ %t68 = call core.mod(%t67, %t65) :: integer
74
+ %t69 = Gather %t60, %t68 :: any
75
+ %t70 = Length %t69 :: integer
76
+ %t71 = const -1 :: integer
77
+ %t72 = call core.sub(%col_i_64, %t71) :: integer
78
+ %t73 = const 0 :: integer
79
+ %t74 = call core.gte(%t72, %t73) :: boolean
80
+ %t75 = call core.lt(%t72, %t70) :: boolean
81
+ %t76 = call core.and(%t74, %t75) :: boolean
82
+ %t77 = const 1 :: integer
83
+ %t78 = call core.sub(%t70, %t77) :: integer
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
+ loop rows id=L9 in %t84 as el=%rows_el_85, idx=%rows_i_86
94
+ loop col id=L10 in %rows_el_85 as el=%col_el_87, idx=%col_i_88
95
+ %t89 = Length %t84 :: integer
96
+ %t90 = call core.mod(%rows_i_86, %t89) :: integer
97
+ %t91 = call core.add(%t90, %t89) :: integer
98
+ %t92 = call core.mod(%t91, %t89) :: integer
99
+ %t93 = Gather %t84, %t92 :: any
100
+ %t94 = Length %t93 :: integer
101
+ %t95 = const -1 :: integer
102
+ %t96 = call core.sub(%col_i_88, %t95) :: integer
103
+ %t97 = const 1 :: integer
104
+ %t98 = call core.sub(%t94, %t97) :: integer
105
+ %t99 = const 0 :: 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
+ loop rows id=L11 in %t102 as el=%rows_el_103, idx=%rows_i_104
115
+ loop col id=L12 in %rows_el_103 as el=%col_el_105, idx=%col_i_106
116
+ %t107 = Length %t102 :: integer
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
+ %t113 = const -1 :: integer
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
+ loop rows id=L13 in %t119 as el=%rows_el_120, idx=%rows_i_121
135
+ loop col id=L14 in %rows_el_120 as el=%col_el_122, idx=%col_i_123
136
+ %t124 = Length %t119 :: integer
137
+ %t125 = const 1 :: integer
138
+ %t126 = call core.sub(%rows_i_121, %t125) :: integer
139
+ %t127 = const 0 :: integer
140
+ %t128 = call core.gte(%t126, %t127) :: boolean
141
+ %t129 = call core.lt(%t126, %t124) :: boolean
142
+ %t130 = call core.and(%t128, %t129) :: boolean
143
+ %t132 = call core.sub(%t124, %t125) :: integer
144
+ %t134 = call core.clamp(%t126, %t127, %t132) :: integer
145
+ %t135 = Gather %t119, %t134 :: any
146
+ %t136 = Length %t135 :: integer
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
+ loop rows id=L15 in %t143 as el=%rows_el_144, idx=%rows_i_145
159
+ loop col id=L16 in %rows_el_144 as el=%col_el_146, idx=%col_i_147
160
+ %t148 = Length %t143 :: integer
161
+ %t149 = const 1 :: integer
162
+ %t150 = call core.sub(%rows_i_145, %t149) :: integer
163
+ %t152 = call core.sub(%t148, %t149) :: integer
164
+ %t153 = const 0 :: integer
165
+ %t154 = call core.clamp(%t150, %t153, %t152) :: integer
166
+ %t155 = Gather %t143, %t154 :: any
167
+ %t156 = Length %t155 :: integer
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
+ loop rows id=L17 in %t161 as el=%rows_el_162, idx=%rows_i_163
179
+ loop col id=L18 in %rows_el_162 as el=%col_el_164, idx=%col_i_165
180
+ %t166 = Length %t161 :: integer
181
+ %t167 = const 1 :: integer
182
+ %t168 = call core.sub(%rows_i_163, %t167) :: integer
183
+ %t169 = call core.mod(%t168, %t166) :: integer
184
+ %t170 = call core.add(%t169, %t166) :: integer
185
+ %t171 = call core.mod(%t170, %t166) :: integer
186
+ %t172 = Gather %t161, %t171 :: any
187
+ %t173 = Length %t172 :: integer
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
+ loop rows id=L19 in %t178 as el=%rows_el_179, idx=%rows_i_180
199
+ loop col id=L20 in %rows_el_179 as el=%col_el_181, idx=%col_i_182
200
+ %t183 = Length %t178 :: integer
201
+ %t184 = const -1 :: integer
202
+ %t185 = call core.sub(%rows_i_180, %t184) :: integer
203
+ %t186 = const 0 :: integer
204
+ %t187 = call core.gte(%t185, %t186) :: boolean
205
+ %t188 = call core.lt(%t185, %t183) :: boolean
206
+ %t189 = call core.and(%t187, %t188) :: boolean
207
+ %t190 = const 1 :: integer
208
+ %t191 = call core.sub(%t183, %t190) :: integer
209
+ %t193 = call core.clamp(%t185, %t186, %t191) :: integer
210
+ %t194 = Gather %t178, %t193 :: any
211
+ %t195 = Length %t194 :: integer
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
+ loop rows id=L21 in %t202 as el=%rows_el_203, idx=%rows_i_204
224
+ loop col id=L22 in %rows_el_203 as el=%col_el_205, idx=%col_i_206
225
+ %t207 = Length %t202 :: integer
226
+ %t208 = const -1 :: integer
227
+ %t209 = call core.sub(%rows_i_204, %t208) :: integer
228
+ %t210 = const 1 :: integer
229
+ %t211 = call core.sub(%t207, %t210) :: integer
230
+ %t212 = const 0 :: integer
231
+ %t213 = call core.clamp(%t209, %t212, %t211) :: integer
232
+ %t214 = Gather %t202, %t213 :: any
233
+ %t215 = Length %t214 :: integer
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
+ loop rows id=L23 in %t220 as el=%rows_el_221, idx=%rows_i_222
245
+ loop col id=L24 in %rows_el_221 as el=%col_el_223, idx=%col_i_224
246
+ %t225 = Length %t220 :: integer
247
+ %t226 = const -1 :: integer
248
+ %t227 = call core.sub(%rows_i_222, %t226) :: integer
249
+ %t228 = call core.mod(%t227, %t225) :: integer
250
+ %t229 = call core.add(%t228, %t225) :: integer
251
+ %t230 = call core.mod(%t229, %t225) :: integer
252
+ %t231 = Gather %t220, %t230 :: any
253
+ %t232 = Length %t231 :: integer
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
+ )