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