kumi 0.0.17 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +28 -0
  5. data/CLAUDE.md +26 -139
  6. data/README.md +143 -372
  7. data/data/functions/agg/boolean.yaml +14 -0
  8. data/data/functions/agg/numeric.yaml +80 -0
  9. data/data/functions/agg/string.yaml +8 -0
  10. data/data/functions/core/arithmetic.yaml +50 -0
  11. data/data/functions/core/boolean.yaml +18 -0
  12. data/data/functions/core/comparison.yaml +42 -0
  13. data/data/functions/core/constructor.yaml +32 -0
  14. data/data/functions/core/select.yaml +7 -0
  15. data/data/functions/core/stencil.yaml +21 -0
  16. data/data/functions/core/string.yaml +19 -0
  17. data/data/kernels/javascript/agg/boolean.yaml +12 -0
  18. data/data/kernels/javascript/agg/numeric.yaml +27 -0
  19. data/data/kernels/javascript/agg/string.yaml +5 -0
  20. data/data/kernels/javascript/core/arithmetic.yaml +32 -0
  21. data/data/kernels/javascript/core/boolean.yaml +12 -0
  22. data/data/kernels/javascript/core/comparison.yaml +24 -0
  23. data/data/kernels/javascript/core/constructor.yaml +15 -0
  24. data/data/kernels/javascript/core/select.yaml +7 -0
  25. data/data/kernels/javascript/core/string.yaml +12 -0
  26. data/data/kernels/ruby/agg/boolean.yaml +18 -0
  27. data/data/kernels/ruby/agg/numeric.yaml +29 -0
  28. data/data/kernels/ruby/agg/string.yaml +5 -0
  29. data/data/kernels/ruby/core/arithmetic.yaml +38 -0
  30. data/data/kernels/ruby/core/boolean.yaml +15 -0
  31. data/data/kernels/ruby/core/comparison.yaml +30 -0
  32. data/data/kernels/ruby/core/constructor.yaml +17 -0
  33. data/data/kernels/ruby/core/select.yaml +4 -0
  34. data/data/kernels/ruby/core/string.yaml +15 -0
  35. data/debug_ordering.rb +52 -0
  36. data/docs/FORM_SCHEMA.md +85 -0
  37. data/docs/OUTPUT_SCHEMA.md +69 -0
  38. data/docs/SYNTAX.md +626 -373
  39. data/golden/array_element/expected/ast.txt +21 -0
  40. data/golden/array_element/expected/input_plan.txt +5 -0
  41. data/golden/array_element/expected/lir_00_unoptimized.txt +13 -0
  42. data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +13 -0
  43. data/golden/array_element/expected/lir_02_inlined.txt +13 -0
  44. data/golden/array_element/expected/lir_03_cse.txt +13 -0
  45. data/golden/array_element/expected/lir_04_1_loop_fusion.txt +13 -0
  46. data/golden/array_element/expected/lir_04_loop_invcm.txt +13 -0
  47. data/golden/array_element/expected/lir_06_const_prop.txt +13 -0
  48. data/golden/array_element/expected/nast.txt +7 -0
  49. data/golden/array_element/expected/schema_javascript.mjs +13 -0
  50. data/golden/array_element/expected/schema_ruby.rb +41 -0
  51. data/golden/array_element/expected/snast.txt +7 -0
  52. data/golden/array_element/expected.json +5 -0
  53. data/golden/array_element/input.json +9 -0
  54. data/golden/array_element/schema.kumi +11 -0
  55. data/golden/array_index/expected/ast.txt +59 -0
  56. data/golden/array_index/expected/input_plan.txt +5 -0
  57. data/golden/array_index/expected/lir_00_unoptimized.txt +41 -0
  58. data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +41 -0
  59. data/golden/array_index/expected/lir_02_inlined.txt +42 -0
  60. data/golden/array_index/expected/lir_03_cse.txt +40 -0
  61. data/golden/array_index/expected/lir_04_1_loop_fusion.txt +40 -0
  62. data/golden/array_index/expected/lir_04_loop_invcm.txt +40 -0
  63. data/golden/array_index/expected/lir_06_const_prop.txt +40 -0
  64. data/golden/array_index/expected/nast.txt +33 -0
  65. data/golden/array_index/expected/schema_javascript.mjs +46 -0
  66. data/golden/array_index/expected/schema_ruby.rb +75 -0
  67. data/golden/array_index/expected/snast.txt +33 -0
  68. data/golden/array_index/expected.json +5 -0
  69. data/golden/array_index/input.json +1 -0
  70. data/golden/array_index/schema.kumi +19 -0
  71. data/golden/array_operations/expected/ast.txt +50 -0
  72. data/golden/array_operations/expected/input_plan.txt +10 -0
  73. data/golden/array_operations/expected/lir_00_unoptimized.txt +47 -0
  74. data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +47 -0
  75. data/golden/array_operations/expected/lir_02_inlined.txt +47 -0
  76. data/golden/array_operations/expected/lir_03_cse.txt +47 -0
  77. data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +47 -0
  78. data/golden/array_operations/expected/lir_04_loop_invcm.txt +47 -0
  79. data/golden/array_operations/expected/lir_06_const_prop.txt +47 -0
  80. data/golden/array_operations/expected/nast.txt +32 -0
  81. data/golden/array_operations/expected/schema_javascript.mjs +60 -0
  82. data/golden/array_operations/expected/schema_ruby.rb +91 -0
  83. data/golden/array_operations/expected/snast.txt +32 -0
  84. data/golden/array_operations/expected.json +27 -0
  85. data/golden/array_operations/input.json +8 -0
  86. data/golden/array_operations/schema.kumi +12 -10
  87. data/golden/cascade_logic/expected/ast.txt +37 -0
  88. data/golden/cascade_logic/expected/input_plan.txt +2 -0
  89. data/golden/cascade_logic/expected/lir_00_unoptimized.txt +29 -0
  90. data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +29 -0
  91. data/golden/cascade_logic/expected/lir_02_inlined.txt +37 -0
  92. data/golden/cascade_logic/expected/lir_03_cse.txt +30 -0
  93. data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +30 -0
  94. data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +30 -0
  95. data/golden/cascade_logic/expected/lir_06_const_prop.txt +30 -0
  96. data/golden/cascade_logic/expected/nast.txt +32 -0
  97. data/golden/cascade_logic/expected/schema_javascript.mjs +31 -0
  98. data/golden/cascade_logic/expected/schema_ruby.rb +57 -0
  99. data/golden/cascade_logic/expected/snast.txt +32 -0
  100. data/golden/cascade_logic/expected.json +5 -0
  101. data/golden/cascade_logic/input.json +4 -0
  102. data/golden/cascade_logic/schema.kumi +1 -3
  103. data/golden/chained_fusion/expected/ast.txt +57 -0
  104. data/golden/chained_fusion/expected/input_plan.txt +13 -0
  105. data/golden/chained_fusion/expected/lir_00_unoptimized.txt +76 -0
  106. data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +76 -0
  107. data/golden/chained_fusion/expected/lir_02_inlined.txt +114 -0
  108. data/golden/chained_fusion/expected/lir_03_cse.txt +97 -0
  109. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +99 -0
  110. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +97 -0
  111. data/golden/chained_fusion/expected/lir_06_const_prop.txt +97 -0
  112. data/golden/chained_fusion/expected/nast.txt +55 -0
  113. data/golden/chained_fusion/expected/schema_javascript.mjs +116 -0
  114. data/golden/chained_fusion/expected/schema_ruby.rb +149 -0
  115. data/golden/chained_fusion/expected/snast.txt +55 -0
  116. data/golden/chained_fusion/expected.json +45 -0
  117. data/golden/chained_fusion/input.json +51 -0
  118. data/golden/chained_fusion/schema.kumi +52 -0
  119. data/golden/element_arrays/expected/ast.txt +55 -0
  120. data/golden/element_arrays/expected/input_plan.txt +7 -0
  121. data/golden/element_arrays/expected/lir_00_unoptimized.txt +81 -0
  122. data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +81 -0
  123. data/golden/element_arrays/expected/lir_02_inlined.txt +85 -0
  124. data/golden/element_arrays/expected/lir_03_cse.txt +83 -0
  125. data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +83 -0
  126. data/golden/element_arrays/expected/lir_04_loop_invcm.txt +83 -0
  127. data/golden/element_arrays/expected/lir_06_const_prop.txt +83 -0
  128. data/golden/element_arrays/expected/nast.txt +42 -0
  129. data/golden/element_arrays/expected/schema_javascript.mjs +106 -0
  130. data/golden/element_arrays/expected/schema_ruby.rb +141 -0
  131. data/golden/element_arrays/expected/snast.txt +42 -0
  132. data/golden/element_arrays/expected.json +55 -0
  133. data/golden/element_arrays/input.json +12 -0
  134. data/golden/element_arrays/schema.kumi +21 -0
  135. data/golden/empty_and_null_inputs/expected/ast.txt +42 -0
  136. data/golden/empty_and_null_inputs/expected/input_plan.txt +12 -0
  137. data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +31 -0
  138. data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +31 -0
  139. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +51 -0
  140. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +49 -0
  141. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +49 -0
  142. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +49 -0
  143. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +49 -0
  144. data/golden/empty_and_null_inputs/expected/nast.txt +18 -0
  145. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +47 -0
  146. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +79 -0
  147. data/golden/empty_and_null_inputs/expected/snast.txt +18 -0
  148. data/golden/empty_and_null_inputs/expected.json +8 -0
  149. data/golden/empty_and_null_inputs/input.json +16 -0
  150. data/golden/empty_and_null_inputs/schema.kumi +30 -0
  151. data/golden/game_of_life/expected/ast.txt +118 -0
  152. data/golden/game_of_life/expected/input_plan.txt +5 -0
  153. data/golden/game_of_life/expected/lir_00_unoptimized.txt +343 -0
  154. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +343 -0
  155. data/golden/game_of_life/expected/lir_02_inlined.txt +1918 -0
  156. data/golden/game_of_life/expected/lir_03_cse.txt +766 -0
  157. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +766 -0
  158. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +766 -0
  159. data/golden/game_of_life/expected/lir_06_const_prop.txt +766 -0
  160. data/golden/game_of_life/expected/nast.txt +104 -0
  161. data/golden/game_of_life/expected/schema_javascript.mjs +98 -0
  162. data/golden/game_of_life/expected/schema_ruby.rb +125 -0
  163. data/golden/game_of_life/expected/snast.txt +104 -0
  164. data/golden/game_of_life/expected.json +3 -0
  165. data/golden/game_of_life/input.json +8 -0
  166. data/golden/game_of_life/schema.kumi +33 -0
  167. data/golden/hash_keys/expected/ast.txt +29 -0
  168. data/golden/hash_keys/expected/input_plan.txt +2 -0
  169. data/golden/hash_keys/expected/lir_00_unoptimized.txt +18 -0
  170. data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +18 -0
  171. data/golden/hash_keys/expected/lir_02_inlined.txt +18 -0
  172. data/golden/hash_keys/expected/lir_03_cse.txt +18 -0
  173. data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +18 -0
  174. data/golden/hash_keys/expected/lir_04_loop_invcm.txt +18 -0
  175. data/golden/hash_keys/expected/lir_06_const_prop.txt +18 -0
  176. data/golden/hash_keys/expected/nast.txt +46 -0
  177. data/golden/hash_keys/expected/schema_javascript.mjs +34 -0
  178. data/golden/hash_keys/expected/schema_ruby.rb +61 -0
  179. data/golden/hash_keys/expected/snast.txt +46 -0
  180. data/golden/hash_keys/expected.json +20 -0
  181. data/golden/hash_keys/input.json +4 -0
  182. data/golden/hash_keys/schema.kumi +14 -0
  183. data/golden/hash_value/expected/ast.txt +37 -0
  184. data/golden/hash_value/expected/input_plan.txt +7 -0
  185. data/golden/hash_value/expected/lir_00_unoptimized.txt +30 -0
  186. data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +30 -0
  187. data/golden/hash_value/expected/lir_02_inlined.txt +36 -0
  188. data/golden/hash_value/expected/lir_03_cse.txt +33 -0
  189. data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +33 -0
  190. data/golden/hash_value/expected/lir_04_loop_invcm.txt +33 -0
  191. data/golden/hash_value/expected/lir_06_const_prop.txt +33 -0
  192. data/golden/hash_value/expected/nast.txt +25 -0
  193. data/golden/hash_value/expected/schema_javascript.mjs +46 -0
  194. data/golden/hash_value/expected/schema_ruby.rb +75 -0
  195. data/golden/hash_value/expected/snast.txt +25 -0
  196. data/golden/hash_value/expected.json +19 -0
  197. data/golden/hash_value/input.json +12 -0
  198. data/golden/hash_value/schema.kumi +19 -0
  199. data/golden/hierarchical_complex/expected/ast.txt +85 -0
  200. data/golden/hierarchical_complex/expected/input_plan.txt +23 -0
  201. data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +87 -0
  202. data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +87 -0
  203. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +115 -0
  204. data/golden/hierarchical_complex/expected/lir_03_cse.txt +89 -0
  205. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +89 -0
  206. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +89 -0
  207. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +89 -0
  208. data/golden/hierarchical_complex/expected/nast.txt +49 -0
  209. data/golden/hierarchical_complex/expected/schema_javascript.mjs +121 -0
  210. data/golden/hierarchical_complex/expected/schema_ruby.rb +151 -0
  211. data/golden/hierarchical_complex/expected/snast.txt +49 -0
  212. data/golden/hierarchical_complex/expected.json +34 -0
  213. data/golden/hierarchical_complex/input.json +26 -0
  214. data/golden/hierarchical_complex/schema.kumi +38 -0
  215. data/golden/input_reference/expected/ast.txt +46 -0
  216. data/golden/input_reference/expected/input_plan.txt +15 -0
  217. data/golden/input_reference/expected/lir_00_unoptimized.txt +39 -0
  218. data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +39 -0
  219. data/golden/input_reference/expected/lir_02_inlined.txt +39 -0
  220. data/golden/input_reference/expected/lir_03_cse.txt +39 -0
  221. data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +39 -0
  222. data/golden/input_reference/expected/lir_04_loop_invcm.txt +39 -0
  223. data/golden/input_reference/expected/lir_06_const_prop.txt +39 -0
  224. data/golden/input_reference/expected/nast.txt +21 -0
  225. data/golden/input_reference/expected/schema_javascript.mjs +45 -0
  226. data/golden/input_reference/expected/schema_ruby.rb +74 -0
  227. data/golden/input_reference/expected/snast.txt +21 -0
  228. data/golden/input_reference/expected.json +7 -0
  229. data/golden/input_reference/input.json +11 -0
  230. data/golden/input_reference/schema.kumi +22 -0
  231. data/golden/interleaved_fusion/expected/ast.txt +51 -0
  232. data/golden/interleaved_fusion/expected/input_plan.txt +13 -0
  233. data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +53 -0
  234. data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +53 -0
  235. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +89 -0
  236. data/golden/interleaved_fusion/expected/lir_03_cse.txt +77 -0
  237. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +77 -0
  238. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +77 -0
  239. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +77 -0
  240. data/golden/interleaved_fusion/expected/nast.txt +41 -0
  241. data/golden/interleaved_fusion/expected/schema_javascript.mjs +86 -0
  242. data/golden/interleaved_fusion/expected/schema_ruby.rb +122 -0
  243. data/golden/interleaved_fusion/expected/snast.txt +41 -0
  244. data/golden/interleaved_fusion/expected.json +37 -0
  245. data/golden/interleaved_fusion/input.json +26 -0
  246. data/golden/interleaved_fusion/schema.kumi +57 -0
  247. data/golden/let_inline/expected/ast.txt +33 -0
  248. data/golden/let_inline/expected/input_plan.txt +2 -0
  249. data/golden/let_inline/expected/lir_00_unoptimized.txt +26 -0
  250. data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +26 -0
  251. data/golden/let_inline/expected/lir_02_inlined.txt +36 -0
  252. data/golden/let_inline/expected/lir_03_cse.txt +30 -0
  253. data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +30 -0
  254. data/golden/let_inline/expected/lir_04_loop_invcm.txt +30 -0
  255. data/golden/let_inline/expected/lir_06_const_prop.txt +30 -0
  256. data/golden/let_inline/expected/nast.txt +26 -0
  257. data/golden/let_inline/expected/schema_javascript.mjs +11 -0
  258. data/golden/let_inline/expected/schema_ruby.rb +37 -0
  259. data/golden/let_inline/expected/snast.txt +26 -0
  260. data/golden/let_inline/expected.json +1 -0
  261. data/golden/let_inline/input.json +1 -0
  262. data/golden/let_inline/schema.kumi +11 -0
  263. data/golden/loop_fusion/expected/ast.txt +44 -0
  264. data/golden/loop_fusion/expected/input_plan.txt +13 -0
  265. data/golden/loop_fusion/expected/lir_00_unoptimized.txt +43 -0
  266. data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +43 -0
  267. data/golden/loop_fusion/expected/lir_02_inlined.txt +62 -0
  268. data/golden/loop_fusion/expected/lir_03_cse.txt +57 -0
  269. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +57 -0
  270. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +57 -0
  271. data/golden/loop_fusion/expected/lir_06_const_prop.txt +57 -0
  272. data/golden/loop_fusion/expected/nast.txt +32 -0
  273. data/golden/loop_fusion/expected/schema_javascript.mjs +64 -0
  274. data/golden/loop_fusion/expected/schema_ruby.rb +97 -0
  275. data/golden/loop_fusion/expected/snast.txt +32 -0
  276. data/golden/loop_fusion/expected.json +30 -0
  277. data/golden/loop_fusion/input.json +28 -0
  278. data/golden/loop_fusion/schema.kumi +32 -0
  279. data/golden/min_reduce_scope/expected/ast.txt +49 -0
  280. data/golden/min_reduce_scope/expected/input_plan.txt +9 -0
  281. data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +59 -0
  282. data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +59 -0
  283. data/golden/min_reduce_scope/expected/lir_02_inlined.txt +63 -0
  284. data/golden/min_reduce_scope/expected/lir_03_cse.txt +60 -0
  285. data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +60 -0
  286. data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +60 -0
  287. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +60 -0
  288. data/golden/min_reduce_scope/expected/nast.txt +29 -0
  289. data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -0
  290. data/golden/min_reduce_scope/expected/schema_ruby.rb +99 -0
  291. data/golden/min_reduce_scope/expected/snast.txt +29 -0
  292. data/golden/min_reduce_scope/expected.json +9 -0
  293. data/golden/min_reduce_scope/input.json +18 -0
  294. data/golden/min_reduce_scope/schema.kumi +25 -0
  295. data/golden/mixed_dimensions/expected/ast.txt +54 -0
  296. data/golden/mixed_dimensions/expected/input_plan.txt +15 -0
  297. data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +42 -0
  298. data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +42 -0
  299. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +48 -0
  300. data/golden/mixed_dimensions/expected/lir_03_cse.txt +48 -0
  301. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +48 -0
  302. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +48 -0
  303. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +48 -0
  304. data/golden/mixed_dimensions/expected/nast.txt +22 -0
  305. data/golden/mixed_dimensions/expected/schema_javascript.mjs +53 -0
  306. data/golden/mixed_dimensions/expected/schema_ruby.rb +84 -0
  307. data/golden/mixed_dimensions/expected/snast.txt +22 -0
  308. data/golden/mixed_dimensions/expected.json +6 -0
  309. data/golden/mixed_dimensions/input.json +22 -0
  310. data/golden/mixed_dimensions/schema.kumi +35 -0
  311. data/golden/multirank_hoisting/expected/ast.txt +72 -0
  312. data/golden/multirank_hoisting/expected/input_plan.txt +18 -0
  313. data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +75 -0
  314. data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +75 -0
  315. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +126 -0
  316. data/golden/multirank_hoisting/expected/lir_03_cse.txt +109 -0
  317. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +109 -0
  318. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +109 -0
  319. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +109 -0
  320. data/golden/multirank_hoisting/expected/nast.txt +39 -0
  321. data/golden/multirank_hoisting/expected/schema_javascript.mjs +128 -0
  322. data/golden/multirank_hoisting/expected/schema_ruby.rb +162 -0
  323. data/golden/multirank_hoisting/expected/snast.txt +39 -0
  324. data/golden/multirank_hoisting/expected.json +15 -0
  325. data/golden/multirank_hoisting/input.json +19 -0
  326. data/golden/multirank_hoisting/schema.kumi +38 -0
  327. data/golden/nested_hash/expected/ast.txt +22 -0
  328. data/golden/nested_hash/expected/input_plan.txt +5 -0
  329. data/golden/nested_hash/expected/lir_00_unoptimized.txt +10 -0
  330. data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +10 -0
  331. data/golden/nested_hash/expected/lir_02_inlined.txt +10 -0
  332. data/golden/nested_hash/expected/lir_03_cse.txt +10 -0
  333. data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +10 -0
  334. data/golden/nested_hash/expected/lir_04_loop_invcm.txt +10 -0
  335. data/golden/nested_hash/expected/lir_06_const_prop.txt +10 -0
  336. data/golden/nested_hash/expected/nast.txt +8 -0
  337. data/golden/nested_hash/expected/schema_javascript.mjs +9 -0
  338. data/golden/nested_hash/expected/schema_ruby.rb +35 -0
  339. data/golden/nested_hash/expected/snast.txt +8 -0
  340. data/golden/nested_hash/expected.json +3 -0
  341. data/golden/nested_hash/input.json +7 -0
  342. data/golden/nested_hash/schema.kumi +11 -0
  343. data/golden/reduction_broadcast/expected/ast.txt +49 -0
  344. data/golden/reduction_broadcast/expected/input_plan.txt +13 -0
  345. data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +49 -0
  346. data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +49 -0
  347. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +80 -0
  348. data/golden/reduction_broadcast/expected/lir_03_cse.txt +68 -0
  349. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +68 -0
  350. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +68 -0
  351. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +68 -0
  352. data/golden/reduction_broadcast/expected/nast.txt +24 -0
  353. data/golden/reduction_broadcast/expected/schema_javascript.mjs +74 -0
  354. data/golden/reduction_broadcast/expected/schema_ruby.rb +110 -0
  355. data/golden/reduction_broadcast/expected/snast.txt +24 -0
  356. data/golden/reduction_broadcast/expected.json +25 -0
  357. data/golden/reduction_broadcast/input.json +19 -0
  358. data/golden/reduction_broadcast/schema.kumi +34 -0
  359. data/golden/roll/expected/ast.txt +36 -0
  360. data/golden/roll/expected/input_plan.txt +3 -0
  361. data/golden/roll/expected/lir_00_unoptimized.txt +56 -0
  362. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +56 -0
  363. data/golden/roll/expected/lir_02_inlined.txt +56 -0
  364. data/golden/roll/expected/lir_03_cse.txt +55 -0
  365. data/golden/roll/expected/lir_04_1_loop_fusion.txt +55 -0
  366. data/golden/roll/expected/lir_04_loop_invcm.txt +55 -0
  367. data/golden/roll/expected/lir_06_const_prop.txt +55 -0
  368. data/golden/roll/expected/nast.txt +26 -0
  369. data/golden/roll/expected/schema_javascript.mjs +65 -0
  370. data/golden/roll/expected/schema_ruby.rb +95 -0
  371. data/golden/roll/expected/snast.txt +26 -0
  372. data/golden/roll/expected.json +6 -0
  373. data/golden/roll/input.json +1 -0
  374. data/golden/roll/schema.kumi +13 -0
  375. data/golden/shift/expected/ast.txt +48 -0
  376. data/golden/shift/expected/input_plan.txt +3 -0
  377. data/golden/shift/expected/lir_00_unoptimized.txt +96 -0
  378. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +96 -0
  379. data/golden/shift/expected/lir_02_inlined.txt +96 -0
  380. data/golden/shift/expected/lir_03_cse.txt +90 -0
  381. data/golden/shift/expected/lir_04_1_loop_fusion.txt +90 -0
  382. data/golden/shift/expected/lir_04_loop_invcm.txt +90 -0
  383. data/golden/shift/expected/lir_06_const_prop.txt +90 -0
  384. data/golden/shift/expected/nast.txt +38 -0
  385. data/golden/shift/expected/schema_javascript.mjs +106 -0
  386. data/golden/shift/expected/schema_ruby.rb +138 -0
  387. data/golden/shift/expected/snast.txt +38 -0
  388. data/golden/shift/expected.json +8 -0
  389. data/golden/shift/input.json +1 -0
  390. data/golden/shift/schema.kumi +15 -0
  391. data/golden/shift_2d/expected/ast.txt +88 -0
  392. data/golden/shift_2d/expected/input_plan.txt +5 -0
  393. data/golden/shift_2d/expected/lir_00_unoptimized.txt +274 -0
  394. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +274 -0
  395. data/golden/shift_2d/expected/lir_02_inlined.txt +274 -0
  396. data/golden/shift_2d/expected/lir_03_cse.txt +262 -0
  397. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +262 -0
  398. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +262 -0
  399. data/golden/shift_2d/expected/lir_06_const_prop.txt +262 -0
  400. data/golden/shift_2d/expected/nast.txt +74 -0
  401. data/golden/shift_2d/expected/schema_javascript.mjs +320 -0
  402. data/golden/shift_2d/expected/schema_ruby.rb +358 -0
  403. data/golden/shift_2d/expected/snast.txt +74 -0
  404. data/golden/shift_2d/expected.json +15 -0
  405. data/golden/shift_2d/input.json +14 -0
  406. data/golden/shift_2d/schema.kumi +25 -0
  407. data/golden/simple_math/expected/ast.txt +40 -0
  408. data/golden/simple_math/expected/input_plan.txt +2 -0
  409. data/golden/simple_math/expected/lir_00_unoptimized.txt +31 -0
  410. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +31 -0
  411. data/golden/simple_math/expected/lir_02_inlined.txt +31 -0
  412. data/golden/simple_math/expected/lir_03_cse.txt +31 -0
  413. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +31 -0
  414. data/golden/simple_math/expected/lir_04_loop_invcm.txt +31 -0
  415. data/golden/simple_math/expected/lir_06_const_prop.txt +31 -0
  416. data/golden/simple_math/expected/nast.txt +33 -0
  417. data/golden/simple_math/expected/schema_javascript.mjs +33 -0
  418. data/golden/simple_math/expected/schema_ruby.rb +59 -0
  419. data/golden/simple_math/expected/snast.txt +33 -0
  420. data/golden/simple_math/expected.json +1 -0
  421. data/golden/simple_math/input.json +4 -0
  422. data/golden/simple_math/schema.kumi +2 -1
  423. data/golden/streaming_basics/expected/ast.txt +64 -0
  424. data/golden/streaming_basics/expected/input_plan.txt +8 -0
  425. data/golden/streaming_basics/expected/lir_00_unoptimized.txt +73 -0
  426. data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +73 -0
  427. data/golden/streaming_basics/expected/lir_02_inlined.txt +100 -0
  428. data/golden/streaming_basics/expected/lir_03_cse.txt +84 -0
  429. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +84 -0
  430. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +84 -0
  431. data/golden/streaming_basics/expected/lir_06_const_prop.txt +84 -0
  432. data/golden/streaming_basics/expected/nast.txt +48 -0
  433. data/golden/streaming_basics/expected/schema_javascript.mjs +94 -0
  434. data/golden/streaming_basics/expected/schema_ruby.rb +127 -0
  435. data/golden/streaming_basics/expected/snast.txt +48 -0
  436. data/golden/streaming_basics/expected.json +10 -0
  437. data/golden/streaming_basics/input.json +8 -0
  438. data/golden/streaming_basics/schema.kumi +24 -0
  439. data/golden/tuples/expected/ast.txt +48 -0
  440. data/golden/tuples/expected/input_plan.txt +1 -0
  441. data/golden/tuples/expected/lir_00_unoptimized.txt +40 -0
  442. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +40 -0
  443. data/golden/tuples/expected/lir_02_inlined.txt +48 -0
  444. data/golden/tuples/expected/lir_03_cse.txt +48 -0
  445. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +48 -0
  446. data/golden/tuples/expected/lir_04_loop_invcm.txt +48 -0
  447. data/golden/tuples/expected/lir_06_const_prop.txt +48 -0
  448. data/golden/tuples/expected/nast.txt +42 -0
  449. data/golden/tuples/expected/schema_javascript.mjs +51 -0
  450. data/golden/tuples/expected/schema_ruby.rb +77 -0
  451. data/golden/tuples/expected/snast.txt +42 -0
  452. data/golden/tuples/expected.json +7 -0
  453. data/golden/tuples/input.json +3 -0
  454. data/golden/tuples/schema.kumi +11 -0
  455. data/golden/tuples_and_arrays/expected/ast.txt +44 -0
  456. data/golden/tuples_and_arrays/expected/input_plan.txt +7 -0
  457. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +41 -0
  458. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +41 -0
  459. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +62 -0
  460. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +51 -0
  461. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +51 -0
  462. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +51 -0
  463. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +51 -0
  464. data/golden/tuples_and_arrays/expected/nast.txt +28 -0
  465. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +58 -0
  466. data/golden/tuples_and_arrays/expected/schema_ruby.rb +88 -0
  467. data/golden/tuples_and_arrays/expected/snast.txt +28 -0
  468. data/golden/tuples_and_arrays/expected.json +18 -0
  469. data/golden/tuples_and_arrays/input.json +7 -0
  470. data/golden/tuples_and_arrays/schema.kumi +38 -0
  471. data/golden/with_constants/expected/ast.txt +28 -0
  472. data/golden/with_constants/expected/input_plan.txt +2 -0
  473. data/golden/with_constants/expected/lir_00_unoptimized.txt +17 -0
  474. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +17 -0
  475. data/golden/with_constants/expected/lir_02_inlined.txt +17 -0
  476. data/golden/with_constants/expected/lir_03_cse.txt +17 -0
  477. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +17 -0
  478. data/golden/with_constants/expected/lir_04_loop_invcm.txt +17 -0
  479. data/golden/with_constants/expected/lir_06_const_prop.txt +17 -0
  480. data/golden/with_constants/expected/nast.txt +21 -0
  481. data/golden/with_constants/expected/schema_javascript.mjs +18 -0
  482. data/golden/with_constants/expected/schema_ruby.rb +44 -0
  483. data/golden/with_constants/expected/snast.txt +15 -0
  484. data/golden/with_constants/schema.kumi +10 -0
  485. data/lib/kumi/analyzer.rb +76 -24
  486. data/lib/kumi/configuration.rb +60 -0
  487. data/lib/kumi/core/analyzer/binder.rb +121 -0
  488. data/lib/kumi/core/analyzer/checkpoint.rb +15 -9
  489. data/lib/kumi/core/analyzer/constant_evaluator.rb +32 -37
  490. data/lib/kumi/core/analyzer/constant_folding_helpers.rb +55 -0
  491. data/lib/kumi/core/analyzer/debug.rb +14 -16
  492. data/lib/kumi/core/analyzer/fn_aliases.rb +46 -0
  493. data/lib/kumi/core/analyzer/folder.rb +94 -0
  494. data/lib/kumi/core/analyzer/macro_expander.rb +69 -0
  495. data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +130 -0
  496. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +71 -0
  497. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +181 -0
  498. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +317 -0
  499. data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +75 -0
  500. data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +103 -0
  501. data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +27 -0
  502. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +321 -0
  503. data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +85 -0
  504. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +111 -0
  505. data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +32 -0
  506. data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +33 -0
  507. data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +220 -0
  508. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +5 -6
  509. data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +7 -3
  510. data/lib/kumi/core/analyzer/passes/input_collector.rb +74 -122
  511. data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +43 -0
  512. data/lib/kumi/core/analyzer/passes/ir_dependency_pass.rb +1 -1
  513. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +1 -1
  514. data/lib/kumi/core/analyzer/passes/join_reduce_planning_pass.rb +21 -23
  515. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +84 -0
  516. data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +93 -0
  517. data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +115 -0
  518. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +274 -0
  519. data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +198 -0
  520. data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +30 -0
  521. data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +121 -0
  522. data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +156 -0
  523. data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +148 -0
  524. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +407 -0
  525. data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +243 -0
  526. data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +83 -0
  527. data/lib/kumi/core/analyzer/passes/load_input_cse.rb +17 -16
  528. data/lib/kumi/core/analyzer/passes/lower_to_ir_pass.rb +4 -2
  529. data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +197 -0
  530. data/lib/kumi/core/analyzer/passes/name_indexer.rb +4 -1
  531. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +237 -0
  532. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +156 -0
  533. data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +38 -0
  534. data/lib/kumi/core/analyzer/passes/pass_base.rb +30 -4
  535. data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +93 -0
  536. data/lib/kumi/core/analyzer/passes/scope_resolution_pass.rb +33 -30
  537. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -26
  538. data/lib/kumi/core/analyzer/passes/snast_pass.rb +229 -0
  539. data/lib/kumi/core/analyzer/passes/toposorter.rb +1 -0
  540. data/lib/kumi/core/analyzer/passes/type_checker.rb +13 -0
  541. data/lib/kumi/core/analyzer/passes/type_inferencer_pass.rb +14 -16
  542. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +2 -1
  543. data/lib/kumi/core/analyzer/plans.rb +12 -0
  544. data/lib/kumi/core/analyzer/state_serde.rb +4 -4
  545. data/lib/kumi/core/analyzer/structs/access_plan.rb +2 -2
  546. data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +59 -0
  547. data/lib/kumi/core/compiler/access_codegen.rb +1 -1
  548. data/lib/kumi/core/compiler/access_emit/base.rb +9 -5
  549. data/lib/kumi/core/compiler/access_emit/each_indexed.rb +10 -3
  550. data/lib/kumi/core/compiler/access_emit/materialize.rb +12 -5
  551. data/lib/kumi/core/compiler/access_emit/ravel.rb +10 -3
  552. data/lib/kumi/core/compiler/access_emit/read.rb +4 -1
  553. data/lib/kumi/core/compiler/access_planner.rb +42 -4
  554. data/lib/kumi/core/compiler/access_planner_v2.rb +164 -0
  555. data/lib/kumi/core/explain.rb +18 -11
  556. data/lib/kumi/core/functions/loader.rb +47 -0
  557. data/lib/kumi/core/functions/model.rb +10 -0
  558. data/lib/kumi/core/functions/type_rules.rb +108 -0
  559. data/lib/kumi/core/ir/execution_engine/interpreter.rb +1 -1
  560. data/lib/kumi/core/ir/execution_engine/profiler.rb +107 -97
  561. data/lib/kumi/core/ir.rb +6 -2
  562. data/lib/kumi/core/irv2/builder.rb +48 -0
  563. data/lib/kumi/core/irv2/declaration.rb +28 -0
  564. data/lib/kumi/core/irv2/module.rb +108 -0
  565. data/lib/kumi/core/irv2/value.rb +28 -0
  566. data/lib/kumi/core/lir/analyze.rb +64 -0
  567. data/lib/kumi/core/lir/build.rb +363 -0
  568. data/lib/kumi/core/lir/emit.rb +62 -0
  569. data/lib/kumi/core/lir/structs/instruction.rb +44 -0
  570. data/lib/kumi/core/lir/structs/literal.rb +14 -0
  571. data/lib/kumi/core/lir/structs/stamp.rb +13 -0
  572. data/lib/kumi/core/lir/support/error.rb +9 -0
  573. data/lib/kumi/core/lir/support/ids.rb +34 -0
  574. data/lib/kumi/core/lir/validate.rb +74 -0
  575. data/lib/kumi/core/lir.rb +34 -0
  576. data/lib/kumi/core/nast.rb +216 -0
  577. data/lib/kumi/core/ruby_parser/dsl.rb +2 -2
  578. data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +1 -1
  579. data/lib/kumi/core/ruby_parser/expression_converter.rb +10 -0
  580. data/lib/kumi/core/ruby_parser/input_builder.rb +16 -17
  581. data/lib/kumi/core/ruby_parser/schema_builder.rb +36 -10
  582. data/lib/kumi/core/ruby_parser/sugar.rb +64 -0
  583. data/lib/kumi/core/types/builder.rb +2 -2
  584. data/lib/kumi/core/types/normalizer.rb +2 -0
  585. data/lib/kumi/core/types/validator.rb +10 -3
  586. data/lib/kumi/core/types.rb +7 -0
  587. data/lib/kumi/dev/codegen.rb +194 -0
  588. data/lib/kumi/dev/golden/generator.rb +105 -0
  589. data/lib/kumi/dev/golden/reporter.rb +160 -0
  590. data/lib/kumi/dev/golden/representation.rb +45 -0
  591. data/lib/kumi/dev/golden/result.rb +98 -0
  592. data/lib/kumi/dev/golden/runtime_test.rb +93 -0
  593. data/lib/kumi/dev/golden/suite.rb +131 -0
  594. data/lib/kumi/dev/golden/verifier.rb +76 -0
  595. data/lib/kumi/dev/golden.rb +75 -0
  596. data/lib/kumi/dev/ir.rb +4 -4
  597. data/lib/kumi/dev/parse.rb +1 -1
  598. data/lib/kumi/dev/pretty_printer.rb +229 -0
  599. data/lib/kumi/dev/printer/irv2_formatter.rb +163 -0
  600. data/lib/kumi/dev/printer/width_aware_json.rb +44 -0
  601. data/lib/kumi/dev/profile_aggregator.rb +36 -38
  602. data/lib/kumi/dev/profile_runner.rb +19 -23
  603. data/lib/kumi/dev/runner.rb +12 -22
  604. data/lib/kumi/dev/support/kumi_runner.mjs +39 -0
  605. data/lib/kumi/dev.rb +3 -3
  606. data/lib/kumi/frontends/ruby.rb +12 -12
  607. data/lib/kumi/frontends/text.rb +26 -21
  608. data/lib/kumi/frontends.rb +6 -8
  609. data/lib/kumi/kernel_registry.rb +59 -0
  610. data/lib/kumi/pack/builder.rb +229 -0
  611. data/lib/kumi/pack.rb +15 -0
  612. data/lib/kumi/registry_v2/loader.rb +81 -0
  613. data/lib/kumi/registry_v2.rb +118 -0
  614. data/lib/kumi/schema.rb +83 -43
  615. data/lib/kumi/support/diff.rb +3 -2
  616. data/lib/kumi/support/ir_render.rb +1 -1
  617. data/lib/kumi/support/lir_printer.rb +143 -0
  618. data/lib/kumi/support/nast_printer.rb +93 -0
  619. data/lib/kumi/support/s_expression_printer.rb +5 -4
  620. data/lib/kumi/support/snast_printer.rb +111 -0
  621. data/lib/kumi/syntax/call_expression.rb +1 -1
  622. data/lib/kumi/syntax/input_declaration.rb +2 -2
  623. data/lib/kumi/syntax/node.rb +4 -12
  624. data/lib/kumi/syntax/root.rb +10 -0
  625. data/lib/kumi/syntax/trait_declaration.rb +1 -0
  626. data/lib/kumi/syntax/value_declaration.rb +1 -0
  627. data/lib/kumi/version.rb +1 -1
  628. data/lib/kumi.rb +47 -5
  629. metadata +571 -54
  630. data/docs/AST.md +0 -133
  631. data/docs/DSL.md +0 -154
  632. data/docs/FUNCTIONS.md +0 -176
  633. data/docs/VECTOR_SEMANTICS.md +0 -286
  634. data/docs/compiler_design_principles.md +0 -86
  635. data/docs/dev/analyzer-debug.md +0 -52
  636. data/docs/dev/parse-command.md +0 -64
  637. data/docs/dev/vm-profiling.md +0 -95
  638. data/docs/development/README.md +0 -120
  639. data/docs/development/error-reporting.md +0 -361
  640. data/docs/features/README.md +0 -58
  641. data/docs/features/analysis-type-inference.md +0 -42
  642. data/docs/features/analysis-unsat-detection.md +0 -71
  643. data/docs/features/hierarchical-broadcasting.md +0 -415
  644. data/docs/features/input-declaration-system.md +0 -58
  645. data/docs/features/performance.md +0 -14
  646. data/docs/features/s-expression-printer.md +0 -77
  647. data/docs/schema_metadata/broadcasts.md +0 -53
  648. data/docs/schema_metadata/cascades.md +0 -45
  649. data/docs/schema_metadata/declarations.md +0 -54
  650. data/docs/schema_metadata/dependencies.md +0 -57
  651. data/docs/schema_metadata/evaluation_order.md +0 -29
  652. data/docs/schema_metadata/examples.md +0 -95
  653. data/docs/schema_metadata/inferred_types.md +0 -46
  654. data/docs/schema_metadata/inputs.md +0 -86
  655. data/docs/schema_metadata.md +0 -108
  656. data/golden/mixed_nesting/schema.kumi +0 -42
  657. data/lib/kumi/core/function_registry/collection_functions.rb +0 -298
  658. data/lib/kumi/core/function_registry/comparison_functions.rb +0 -33
  659. data/lib/kumi/core/function_registry/conditional_functions.rb +0 -48
  660. data/lib/kumi/core/function_registry/function_builder.rb +0 -184
  661. data/lib/kumi/core/function_registry/logical_functions.rb +0 -214
  662. data/lib/kumi/core/function_registry/math_functions.rb +0 -74
  663. data/lib/kumi/core/function_registry/stat_functions.rb +0 -156
  664. data/lib/kumi/core/function_registry/string_functions.rb +0 -57
  665. data/lib/kumi/core/function_registry/type_functions.rb +0 -53
  666. data/lib/kumi/core/function_registry.rb +0 -176
  667. data/lib/kumi/registry.rb +0 -32
  668. data/lib/kumi/runtime/executable.rb +0 -135
  669. data/lib/kumi/runtime/run.rb +0 -105
  670. data/performance_results.txt +0 -63
  671. data/scripts/analyze_broadcast_methods.rb +0 -68
  672. data/scripts/analyze_cascade_methods.rb +0 -74
  673. data/scripts/check_broadcasting_coverage.rb +0 -51
  674. data/scripts/find_dead_code.rb +0 -114
  675. data/scripts/generate_function_docs.rb +0 -71
  676. data/scripts/test_mixed_nesting_performance.rb +0 -206
@@ -0,0 +1,766 @@
1
+ (LIR
2
+ (Declaration a
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
+ yield %col_el_4
7
+ end_loop
8
+ end_loop
9
+ )
10
+ (Declaration n
11
+ %t6 = load_input "rows" :: array
12
+ %t11 = Length %t6 :: integer
13
+ %t12 = const -1 :: integer
14
+ %t14 = const 0 :: integer
15
+ %t18 = const 1 :: integer
16
+ %t19 = call core.sub(%t11, %t18) :: integer
17
+ loop rows id=L3 in %t6 as el=%rows_el_7, idx=%rows_i_8
18
+ %t13 = call core.sub(%rows_i_8, %t12) :: integer
19
+ %t15 = call core.gte(%t13, %t14) :: boolean
20
+ %t16 = call core.lt(%t13, %t11) :: boolean
21
+ %t21 = call core.clamp(%t13, %t14, %t19) :: integer
22
+ %t17 = call core.and(%t15, %t16) :: boolean
23
+ %t22 = Gather %t6, %t21 :: any
24
+ %t23 = Length %t22 :: integer
25
+ loop col id=L4 in %rows_el_7 as el=%col_el_9, idx=%col_i_10
26
+ %t24 = call core.mod(%col_i_10, %t23) :: integer
27
+ %t25 = call core.add(%t24, %t23) :: integer
28
+ %t26 = call core.mod(%t25, %t23) :: integer
29
+ %t27 = Gather %t22, %t26 :: integer
30
+ %t29 = select %t17, %t27, %t14 :: integer
31
+ yield %t29
32
+ end_loop
33
+ end_loop
34
+ )
35
+ (Declaration s
36
+ %t30 = load_input "rows" :: array
37
+ %t35 = Length %t30 :: integer
38
+ %t36 = const 1 :: integer
39
+ %t38 = const 0 :: integer
40
+ %t43 = call core.sub(%t35, %t36) :: integer
41
+ loop rows id=L5 in %t30 as el=%rows_el_31, idx=%rows_i_32
42
+ %t37 = call core.sub(%rows_i_32, %t36) :: integer
43
+ %t39 = call core.gte(%t37, %t38) :: boolean
44
+ %t40 = call core.lt(%t37, %t35) :: boolean
45
+ %t45 = call core.clamp(%t37, %t38, %t43) :: integer
46
+ %t41 = call core.and(%t39, %t40) :: boolean
47
+ %t46 = Gather %t30, %t45 :: any
48
+ %t47 = Length %t46 :: integer
49
+ loop col id=L6 in %rows_el_31 as el=%col_el_33, idx=%col_i_34
50
+ %t48 = call core.mod(%col_i_34, %t47) :: integer
51
+ %t49 = call core.add(%t48, %t47) :: integer
52
+ %t50 = call core.mod(%t49, %t47) :: integer
53
+ %t51 = Gather %t46, %t50 :: integer
54
+ %t53 = select %t41, %t51, %t38 :: integer
55
+ yield %t53
56
+ end_loop
57
+ end_loop
58
+ )
59
+ (Declaration w
60
+ %t54 = load_input "rows" :: array
61
+ %t59 = Length %t54 :: integer
62
+ %t65 = const -1 :: integer
63
+ %t67 = const 0 :: integer
64
+ %t71 = const 1 :: integer
65
+ loop rows id=L7 in %t54 as el=%rows_el_55, idx=%rows_i_56
66
+ %t60 = call core.mod(%rows_i_56, %t59) :: integer
67
+ %t61 = call core.add(%t60, %t59) :: integer
68
+ %t62 = call core.mod(%t61, %t59) :: integer
69
+ %t63 = Gather %t54, %t62 :: any
70
+ %t64 = Length %t63 :: integer
71
+ %t72 = call core.sub(%t64, %t71) :: integer
72
+ loop col id=L8 in %rows_el_55 as el=%col_el_57, idx=%col_i_58
73
+ %t66 = call core.sub(%col_i_58, %t65) :: integer
74
+ %t68 = call core.gte(%t66, %t67) :: boolean
75
+ %t69 = call core.lt(%t66, %t64) :: boolean
76
+ %t70 = call core.and(%t68, %t69) :: boolean
77
+ %t74 = call core.clamp(%t66, %t67, %t72) :: integer
78
+ %t75 = Gather %t63, %t74 :: integer
79
+ %t77 = select %t70, %t75, %t67 :: integer
80
+ yield %t77
81
+ end_loop
82
+ end_loop
83
+ )
84
+ (Declaration e
85
+ %t78 = load_input "rows" :: array
86
+ %t83 = Length %t78 :: integer
87
+ %t89 = const 1 :: integer
88
+ %t91 = const 0 :: integer
89
+ loop rows id=L9 in %t78 as el=%rows_el_79, idx=%rows_i_80
90
+ %t84 = call core.mod(%rows_i_80, %t83) :: integer
91
+ %t85 = call core.add(%t84, %t83) :: integer
92
+ %t86 = call core.mod(%t85, %t83) :: integer
93
+ %t87 = Gather %t78, %t86 :: any
94
+ %t88 = Length %t87 :: integer
95
+ %t96 = call core.sub(%t88, %t89) :: integer
96
+ loop col id=L10 in %rows_el_79 as el=%col_el_81, idx=%col_i_82
97
+ %t90 = call core.sub(%col_i_82, %t89) :: integer
98
+ %t92 = call core.gte(%t90, %t91) :: boolean
99
+ %t93 = call core.lt(%t90, %t88) :: boolean
100
+ %t94 = call core.and(%t92, %t93) :: boolean
101
+ %t98 = call core.clamp(%t90, %t91, %t96) :: integer
102
+ %t99 = Gather %t87, %t98 :: integer
103
+ %t101 = select %t94, %t99, %t91 :: integer
104
+ yield %t101
105
+ end_loop
106
+ end_loop
107
+ )
108
+ (Declaration nw
109
+ %t102 = load_input "rows" :: array
110
+ %t107 = Length %t102 :: integer
111
+ %t108 = const -1 :: integer
112
+ %t110 = const 0 :: integer
113
+ %t114 = const 1 :: integer
114
+ %t115 = call core.sub(%t107, %t114) :: integer
115
+ loop rows id=L11 in %t102 as el=%rows_el_103, idx=%rows_i_104
116
+ %t109 = call core.sub(%rows_i_104, %t108) :: integer
117
+ %t111 = call core.gte(%t109, %t110) :: boolean
118
+ %t112 = call core.lt(%t109, %t107) :: boolean
119
+ %t117 = call core.clamp(%t109, %t110, %t115) :: integer
120
+ %t113 = call core.and(%t111, %t112) :: boolean
121
+ %t118 = Gather %t102, %t117 :: any
122
+ %t119 = Length %t118 :: integer
123
+ %t128 = call core.sub(%t119, %t114) :: integer
124
+ loop col id=L12 in %rows_el_103 as el=%col_el_105, idx=%col_i_106
125
+ %t121 = call core.sub(%col_i_106, %t108) :: integer
126
+ %t123 = call core.gte(%t121, %t110) :: boolean
127
+ %t124 = call core.lt(%t121, %t119) :: boolean
128
+ %t125 = call core.and(%t123, %t124) :: boolean
129
+ %t126 = call core.and(%t113, %t125) :: boolean
130
+ %t130 = call core.clamp(%t121, %t110, %t128) :: integer
131
+ %t131 = Gather %t118, %t130 :: integer
132
+ %t133 = select %t126, %t131, %t110 :: integer
133
+ yield %t133
134
+ end_loop
135
+ end_loop
136
+ )
137
+ (Declaration ne
138
+ %t134 = load_input "rows" :: array
139
+ %t139 = Length %t134 :: integer
140
+ %t140 = const -1 :: integer
141
+ %t142 = const 0 :: integer
142
+ %t146 = const 1 :: integer
143
+ %t147 = call core.sub(%t139, %t146) :: integer
144
+ loop rows id=L13 in %t134 as el=%rows_el_135, idx=%rows_i_136
145
+ %t141 = call core.sub(%rows_i_136, %t140) :: integer
146
+ %t143 = call core.gte(%t141, %t142) :: boolean
147
+ %t144 = call core.lt(%t141, %t139) :: boolean
148
+ %t149 = call core.clamp(%t141, %t142, %t147) :: integer
149
+ %t145 = call core.and(%t143, %t144) :: boolean
150
+ %t150 = Gather %t134, %t149 :: any
151
+ %t151 = Length %t150 :: integer
152
+ %t160 = call core.sub(%t151, %t146) :: integer
153
+ loop col id=L14 in %rows_el_135 as el=%col_el_137, idx=%col_i_138
154
+ %t153 = call core.sub(%col_i_138, %t146) :: integer
155
+ %t155 = call core.gte(%t153, %t142) :: boolean
156
+ %t156 = call core.lt(%t153, %t151) :: boolean
157
+ %t157 = call core.and(%t155, %t156) :: boolean
158
+ %t158 = call core.and(%t145, %t157) :: boolean
159
+ %t162 = call core.clamp(%t153, %t142, %t160) :: integer
160
+ %t163 = Gather %t150, %t162 :: integer
161
+ %t165 = select %t158, %t163, %t142 :: integer
162
+ yield %t165
163
+ end_loop
164
+ end_loop
165
+ )
166
+ (Declaration sw
167
+ %t166 = load_input "rows" :: array
168
+ %t171 = Length %t166 :: integer
169
+ %t172 = const 1 :: integer
170
+ %t174 = const 0 :: integer
171
+ %t184 = const -1 :: integer
172
+ %t179 = call core.sub(%t171, %t172) :: integer
173
+ loop rows id=L15 in %t166 as el=%rows_el_167, idx=%rows_i_168
174
+ %t173 = call core.sub(%rows_i_168, %t172) :: integer
175
+ %t175 = call core.gte(%t173, %t174) :: boolean
176
+ %t176 = call core.lt(%t173, %t171) :: boolean
177
+ %t181 = call core.clamp(%t173, %t174, %t179) :: integer
178
+ %t177 = call core.and(%t175, %t176) :: boolean
179
+ %t182 = Gather %t166, %t181 :: any
180
+ %t183 = Length %t182 :: integer
181
+ %t192 = call core.sub(%t183, %t172) :: integer
182
+ loop col id=L16 in %rows_el_167 as el=%col_el_169, idx=%col_i_170
183
+ %t185 = call core.sub(%col_i_170, %t184) :: integer
184
+ %t187 = call core.gte(%t185, %t174) :: boolean
185
+ %t188 = call core.lt(%t185, %t183) :: boolean
186
+ %t189 = call core.and(%t187, %t188) :: boolean
187
+ %t190 = call core.and(%t177, %t189) :: boolean
188
+ %t194 = call core.clamp(%t185, %t174, %t192) :: integer
189
+ %t195 = Gather %t182, %t194 :: integer
190
+ %t197 = select %t190, %t195, %t174 :: integer
191
+ yield %t197
192
+ end_loop
193
+ end_loop
194
+ )
195
+ (Declaration se
196
+ %t198 = load_input "rows" :: array
197
+ %t203 = Length %t198 :: integer
198
+ %t204 = const 1 :: integer
199
+ %t206 = const 0 :: integer
200
+ %t211 = call core.sub(%t203, %t204) :: integer
201
+ loop rows id=L17 in %t198 as el=%rows_el_199, idx=%rows_i_200
202
+ %t205 = call core.sub(%rows_i_200, %t204) :: integer
203
+ %t207 = call core.gte(%t205, %t206) :: boolean
204
+ %t208 = call core.lt(%t205, %t203) :: boolean
205
+ %t213 = call core.clamp(%t205, %t206, %t211) :: integer
206
+ %t209 = call core.and(%t207, %t208) :: boolean
207
+ %t214 = Gather %t198, %t213 :: any
208
+ %t215 = Length %t214 :: integer
209
+ %t224 = call core.sub(%t215, %t204) :: integer
210
+ loop col id=L18 in %rows_el_199 as el=%col_el_201, idx=%col_i_202
211
+ %t217 = call core.sub(%col_i_202, %t204) :: integer
212
+ %t219 = call core.gte(%t217, %t206) :: boolean
213
+ %t220 = call core.lt(%t217, %t215) :: boolean
214
+ %t221 = call core.and(%t219, %t220) :: boolean
215
+ %t222 = call core.and(%t209, %t221) :: boolean
216
+ %t226 = call core.clamp(%t217, %t206, %t224) :: integer
217
+ %t227 = Gather %t214, %t226 :: integer
218
+ %t229 = select %t222, %t227, %t206 :: integer
219
+ yield %t229
220
+ end_loop
221
+ end_loop
222
+ )
223
+ (Declaration neighbors
224
+ %t230 = load_input "rows" :: array
225
+ %t295 = Length %t230 :: integer
226
+ %t296 = const -1 :: integer
227
+ %t298 = const 0 :: integer
228
+ %t302 = const 1 :: integer
229
+ %t303 = call core.sub(%t295, %t302) :: integer
230
+ loop rows id=L19 in %t230 as el=%rows_el_231, idx=%rows_i_232
231
+ %t297 = call core.sub(%rows_i_232, %t296) :: integer
232
+ %t317 = call core.sub(%rows_i_232, %t302) :: integer
233
+ %t336 = call core.mod(%rows_i_232, %t295) :: integer
234
+ %t299 = call core.gte(%t297, %t298) :: boolean
235
+ %t300 = call core.lt(%t297, %t295) :: boolean
236
+ %t305 = call core.clamp(%t297, %t298, %t303) :: integer
237
+ %t319 = call core.gte(%t317, %t298) :: boolean
238
+ %t320 = call core.lt(%t317, %t295) :: boolean
239
+ %t325 = call core.clamp(%t317, %t298, %t303) :: integer
240
+ %t337 = call core.add(%t336, %t295) :: integer
241
+ %t301 = call core.and(%t299, %t300) :: boolean
242
+ %t306 = Gather %t230, %t305 :: any
243
+ %t321 = call core.and(%t319, %t320) :: boolean
244
+ %t326 = Gather %t230, %t325 :: any
245
+ %t338 = call core.mod(%t337, %t295) :: integer
246
+ %t307 = Length %t306 :: integer
247
+ %t327 = Length %t326 :: integer
248
+ %t339 = Gather %t230, %t338 :: any
249
+ %t340 = Length %t339 :: integer
250
+ %t396 = call core.sub(%t307, %t302) :: integer
251
+ %t452 = call core.sub(%t327, %t302) :: integer
252
+ %t348 = call core.sub(%t340, %t302) :: integer
253
+ loop col id=L20 in %rows_el_231 as el=%col_el_233, idx=%col_i_234
254
+ %t308 = call core.mod(%col_i_234, %t307) :: integer
255
+ %t309 = call core.add(%t308, %t307) :: integer
256
+ %t310 = call core.mod(%t309, %t307) :: integer
257
+ %t311 = Gather %t306, %t310 :: integer
258
+ %t313 = select %t301, %t311, %t298 :: integer
259
+ %t328 = call core.mod(%col_i_234, %t327) :: integer
260
+ %t329 = call core.add(%t328, %t327) :: integer
261
+ %t330 = call core.mod(%t329, %t327) :: integer
262
+ %t331 = Gather %t326, %t330 :: integer
263
+ %t333 = select %t321, %t331, %t298 :: integer
264
+ %t342 = call core.sub(%col_i_234, %t296) :: integer
265
+ %t344 = call core.gte(%t342, %t298) :: boolean
266
+ %t345 = call core.lt(%t342, %t340) :: boolean
267
+ %t346 = call core.and(%t344, %t345) :: boolean
268
+ %t350 = call core.clamp(%t342, %t298, %t348) :: integer
269
+ %t351 = Gather %t339, %t350 :: integer
270
+ %t353 = select %t346, %t351, %t298 :: integer
271
+ %t362 = call core.sub(%col_i_234, %t302) :: integer
272
+ %t364 = call core.gte(%t362, %t298) :: boolean
273
+ %t365 = call core.lt(%t362, %t340) :: boolean
274
+ %t366 = call core.and(%t364, %t365) :: boolean
275
+ %t370 = call core.clamp(%t362, %t298, %t348) :: integer
276
+ %t371 = Gather %t339, %t370 :: integer
277
+ %t373 = select %t366, %t371, %t298 :: integer
278
+ %t392 = call core.lt(%t342, %t307) :: boolean
279
+ %t393 = call core.and(%t344, %t392) :: boolean
280
+ %t394 = call core.and(%t301, %t393) :: boolean
281
+ %t398 = call core.clamp(%t342, %t298, %t396) :: integer
282
+ %t399 = Gather %t306, %t398 :: integer
283
+ %t401 = select %t394, %t399, %t298 :: integer
284
+ %t420 = call core.lt(%t362, %t307) :: boolean
285
+ %t421 = call core.and(%t364, %t420) :: boolean
286
+ %t422 = call core.and(%t301, %t421) :: boolean
287
+ %t426 = call core.clamp(%t362, %t298, %t396) :: integer
288
+ %t427 = Gather %t306, %t426 :: integer
289
+ %t429 = select %t422, %t427, %t298 :: integer
290
+ %t448 = call core.lt(%t342, %t327) :: boolean
291
+ %t449 = call core.and(%t344, %t448) :: boolean
292
+ %t450 = call core.and(%t321, %t449) :: boolean
293
+ %t454 = call core.clamp(%t342, %t298, %t452) :: integer
294
+ %t455 = Gather %t326, %t454 :: integer
295
+ %t457 = select %t450, %t455, %t298 :: integer
296
+ %t476 = call core.lt(%t362, %t327) :: boolean
297
+ %t477 = call core.and(%t364, %t476) :: boolean
298
+ %t478 = call core.and(%t321, %t477) :: boolean
299
+ %t482 = call core.clamp(%t362, %t298, %t452) :: integer
300
+ %t483 = Gather %t326, %t482 :: integer
301
+ %t485 = select %t478, %t483, %t298 :: integer
302
+ %t243 = make_tuple(%t313, %t333, %t353, %t373, %t401, %t429, %t457, %t485) :: tuple<integer>
303
+ %t244 = Fold %t243 fn="agg.sum" ::
304
+ yield %t244
305
+ end_loop
306
+ end_loop
307
+ )
308
+ (Declaration alive
309
+ %t245 = load_input "rows" :: array
310
+ %t251 = const 0 :: integer
311
+ loop rows id=L21 in %t245 as el=%rows_el_246, idx=%rows_i_247
312
+ loop col id=L22 in %rows_el_246 as el=%col_el_248, idx=%col_i_249
313
+ %t252 = call core.gt(%col_el_248, %t251) :: boolean
314
+ yield %t252
315
+ end_loop
316
+ end_loop
317
+ )
318
+ (Declaration n3_alive
319
+ %t253 = load_input "rows" :: array
320
+ %t530 = Length %t253 :: integer
321
+ %t531 = const -1 :: integer
322
+ %t533 = const 0 :: integer
323
+ %t537 = const 1 :: integer
324
+ %t259 = const 3 :: integer
325
+ %t538 = call core.sub(%t530, %t537) :: integer
326
+ loop rows id=L23 in %t253 as el=%rows_el_254, idx=%rows_i_255
327
+ %t532 = call core.sub(%rows_i_255, %t531) :: integer
328
+ %t552 = call core.sub(%rows_i_255, %t537) :: integer
329
+ %t571 = call core.mod(%rows_i_255, %t530) :: integer
330
+ %t534 = call core.gte(%t532, %t533) :: boolean
331
+ %t535 = call core.lt(%t532, %t530) :: boolean
332
+ %t540 = call core.clamp(%t532, %t533, %t538) :: integer
333
+ %t554 = call core.gte(%t552, %t533) :: boolean
334
+ %t555 = call core.lt(%t552, %t530) :: boolean
335
+ %t560 = call core.clamp(%t552, %t533, %t538) :: integer
336
+ %t572 = call core.add(%t571, %t530) :: integer
337
+ %t536 = call core.and(%t534, %t535) :: boolean
338
+ %t541 = Gather %t253, %t540 :: any
339
+ %t556 = call core.and(%t554, %t555) :: boolean
340
+ %t561 = Gather %t253, %t560 :: any
341
+ %t573 = call core.mod(%t572, %t530) :: integer
342
+ %t542 = Length %t541 :: integer
343
+ %t562 = Length %t561 :: integer
344
+ %t574 = Gather %t253, %t573 :: any
345
+ %t575 = Length %t574 :: integer
346
+ %t631 = call core.sub(%t542, %t537) :: integer
347
+ %t687 = call core.sub(%t562, %t537) :: integer
348
+ %t583 = call core.sub(%t575, %t537) :: integer
349
+ loop col id=L24 in %rows_el_254 as el=%col_el_256, idx=%col_i_257
350
+ %t543 = call core.mod(%col_i_257, %t542) :: integer
351
+ %t544 = call core.add(%t543, %t542) :: integer
352
+ %t545 = call core.mod(%t544, %t542) :: integer
353
+ %t546 = Gather %t541, %t545 :: integer
354
+ %t548 = select %t536, %t546, %t533 :: integer
355
+ %t563 = call core.mod(%col_i_257, %t562) :: integer
356
+ %t564 = call core.add(%t563, %t562) :: integer
357
+ %t565 = call core.mod(%t564, %t562) :: integer
358
+ %t566 = Gather %t561, %t565 :: integer
359
+ %t568 = select %t556, %t566, %t533 :: integer
360
+ %t577 = call core.sub(%col_i_257, %t531) :: integer
361
+ %t579 = call core.gte(%t577, %t533) :: boolean
362
+ %t580 = call core.lt(%t577, %t575) :: boolean
363
+ %t581 = call core.and(%t579, %t580) :: boolean
364
+ %t585 = call core.clamp(%t577, %t533, %t583) :: integer
365
+ %t586 = Gather %t574, %t585 :: integer
366
+ %t588 = select %t581, %t586, %t533 :: integer
367
+ %t597 = call core.sub(%col_i_257, %t537) :: integer
368
+ %t599 = call core.gte(%t597, %t533) :: boolean
369
+ %t600 = call core.lt(%t597, %t575) :: boolean
370
+ %t601 = call core.and(%t599, %t600) :: boolean
371
+ %t605 = call core.clamp(%t597, %t533, %t583) :: integer
372
+ %t606 = Gather %t574, %t605 :: integer
373
+ %t608 = select %t601, %t606, %t533 :: integer
374
+ %t627 = call core.lt(%t577, %t542) :: boolean
375
+ %t628 = call core.and(%t579, %t627) :: boolean
376
+ %t629 = call core.and(%t536, %t628) :: boolean
377
+ %t633 = call core.clamp(%t577, %t533, %t631) :: integer
378
+ %t634 = Gather %t541, %t633 :: integer
379
+ %t636 = select %t629, %t634, %t533 :: integer
380
+ %t655 = call core.lt(%t597, %t542) :: boolean
381
+ %t656 = call core.and(%t599, %t655) :: boolean
382
+ %t657 = call core.and(%t536, %t656) :: boolean
383
+ %t661 = call core.clamp(%t597, %t533, %t631) :: integer
384
+ %t662 = Gather %t541, %t661 :: integer
385
+ %t664 = select %t657, %t662, %t533 :: integer
386
+ %t683 = call core.lt(%t577, %t562) :: boolean
387
+ %t684 = call core.and(%t579, %t683) :: boolean
388
+ %t685 = call core.and(%t556, %t684) :: boolean
389
+ %t689 = call core.clamp(%t577, %t533, %t687) :: integer
390
+ %t690 = Gather %t561, %t689 :: integer
391
+ %t692 = select %t685, %t690, %t533 :: integer
392
+ %t711 = call core.lt(%t597, %t562) :: boolean
393
+ %t712 = call core.and(%t599, %t711) :: boolean
394
+ %t713 = call core.and(%t556, %t712) :: boolean
395
+ %t717 = call core.clamp(%t597, %t533, %t687) :: integer
396
+ %t718 = Gather %t561, %t717 :: integer
397
+ %t720 = select %t713, %t718, %t533 :: integer
398
+ %t496 = make_tuple(%t548, %t568, %t588, %t608, %t636, %t664, %t692, %t720) :: tuple<integer>
399
+ %t497 = Fold %t496 fn="agg.sum" ::
400
+ %t260 = call core.eq(%t497, %t259) :: boolean
401
+ yield %t260
402
+ end_loop
403
+ end_loop
404
+ )
405
+ (Declaration n2_alive
406
+ %t261 = load_input "rows" :: array
407
+ %t722 = Length %t261 :: integer
408
+ %t723 = const -1 :: integer
409
+ %t725 = const 0 :: integer
410
+ %t729 = const 1 :: integer
411
+ %t267 = const 2 :: integer
412
+ %t730 = call core.sub(%t722, %t729) :: integer
413
+ loop rows id=L25 in %t261 as el=%rows_el_262, idx=%rows_i_263
414
+ %t724 = call core.sub(%rows_i_263, %t723) :: integer
415
+ %t744 = call core.sub(%rows_i_263, %t729) :: integer
416
+ %t763 = call core.mod(%rows_i_263, %t722) :: integer
417
+ %t726 = call core.gte(%t724, %t725) :: boolean
418
+ %t727 = call core.lt(%t724, %t722) :: boolean
419
+ %t732 = call core.clamp(%t724, %t725, %t730) :: integer
420
+ %t746 = call core.gte(%t744, %t725) :: boolean
421
+ %t747 = call core.lt(%t744, %t722) :: boolean
422
+ %t752 = call core.clamp(%t744, %t725, %t730) :: integer
423
+ %t764 = call core.add(%t763, %t722) :: integer
424
+ %t728 = call core.and(%t726, %t727) :: boolean
425
+ %t733 = Gather %t261, %t732 :: any
426
+ %t748 = call core.and(%t746, %t747) :: boolean
427
+ %t753 = Gather %t261, %t752 :: any
428
+ %t765 = call core.mod(%t764, %t722) :: integer
429
+ %t734 = Length %t733 :: integer
430
+ %t754 = Length %t753 :: integer
431
+ %t766 = Gather %t261, %t765 :: any
432
+ %t767 = Length %t766 :: integer
433
+ %t823 = call core.sub(%t734, %t729) :: integer
434
+ %t879 = call core.sub(%t754, %t729) :: integer
435
+ %t775 = call core.sub(%t767, %t729) :: integer
436
+ loop col id=L26 in %rows_el_262 as el=%col_el_264, idx=%col_i_265
437
+ %t735 = call core.mod(%col_i_265, %t734) :: integer
438
+ %t736 = call core.add(%t735, %t734) :: integer
439
+ %t737 = call core.mod(%t736, %t734) :: integer
440
+ %t738 = Gather %t733, %t737 :: integer
441
+ %t740 = select %t728, %t738, %t725 :: integer
442
+ %t755 = call core.mod(%col_i_265, %t754) :: integer
443
+ %t756 = call core.add(%t755, %t754) :: integer
444
+ %t757 = call core.mod(%t756, %t754) :: integer
445
+ %t758 = Gather %t753, %t757 :: integer
446
+ %t760 = select %t748, %t758, %t725 :: integer
447
+ %t769 = call core.sub(%col_i_265, %t723) :: integer
448
+ %t771 = call core.gte(%t769, %t725) :: boolean
449
+ %t772 = call core.lt(%t769, %t767) :: boolean
450
+ %t773 = call core.and(%t771, %t772) :: boolean
451
+ %t777 = call core.clamp(%t769, %t725, %t775) :: integer
452
+ %t778 = Gather %t766, %t777 :: integer
453
+ %t780 = select %t773, %t778, %t725 :: integer
454
+ %t789 = call core.sub(%col_i_265, %t729) :: integer
455
+ %t791 = call core.gte(%t789, %t725) :: boolean
456
+ %t792 = call core.lt(%t789, %t767) :: boolean
457
+ %t793 = call core.and(%t791, %t792) :: boolean
458
+ %t797 = call core.clamp(%t789, %t725, %t775) :: integer
459
+ %t798 = Gather %t766, %t797 :: integer
460
+ %t800 = select %t793, %t798, %t725 :: integer
461
+ %t819 = call core.lt(%t769, %t734) :: boolean
462
+ %t820 = call core.and(%t771, %t819) :: boolean
463
+ %t821 = call core.and(%t728, %t820) :: boolean
464
+ %t825 = call core.clamp(%t769, %t725, %t823) :: integer
465
+ %t826 = Gather %t733, %t825 :: integer
466
+ %t828 = select %t821, %t826, %t725 :: integer
467
+ %t847 = call core.lt(%t789, %t734) :: boolean
468
+ %t848 = call core.and(%t791, %t847) :: boolean
469
+ %t849 = call core.and(%t728, %t848) :: boolean
470
+ %t853 = call core.clamp(%t789, %t725, %t823) :: integer
471
+ %t854 = Gather %t733, %t853 :: integer
472
+ %t856 = select %t849, %t854, %t725 :: integer
473
+ %t875 = call core.lt(%t769, %t754) :: boolean
474
+ %t876 = call core.and(%t771, %t875) :: boolean
475
+ %t877 = call core.and(%t748, %t876) :: boolean
476
+ %t881 = call core.clamp(%t769, %t725, %t879) :: integer
477
+ %t882 = Gather %t753, %t881 :: integer
478
+ %t884 = select %t877, %t882, %t725 :: integer
479
+ %t903 = call core.lt(%t789, %t754) :: boolean
480
+ %t904 = call core.and(%t791, %t903) :: boolean
481
+ %t905 = call core.and(%t748, %t904) :: boolean
482
+ %t909 = call core.clamp(%t789, %t725, %t879) :: integer
483
+ %t910 = Gather %t753, %t909 :: integer
484
+ %t912 = select %t905, %t910, %t725 :: integer
485
+ %t507 = make_tuple(%t740, %t760, %t780, %t800, %t828, %t856, %t884, %t912) :: tuple<integer>
486
+ %t508 = Fold %t507 fn="agg.sum" ::
487
+ %t268 = call core.eq(%t508, %t267) :: boolean
488
+ yield %t268
489
+ end_loop
490
+ end_loop
491
+ )
492
+ (Declaration keep_alive
493
+ %t269 = load_input "rows" :: array
494
+ %t915 = Length %t269 :: integer
495
+ %t916 = const -1 :: integer
496
+ %t918 = const 0 :: integer
497
+ %t922 = const 1 :: integer
498
+ %t511 = const 2 :: integer
499
+ %t923 = call core.sub(%t915, %t922) :: integer
500
+ loop rows id=L27 in %t269 as el=%rows_el_270, idx=%rows_i_271
501
+ %t917 = call core.sub(%rows_i_271, %t916) :: integer
502
+ %t937 = call core.sub(%rows_i_271, %t922) :: integer
503
+ %t956 = call core.mod(%rows_i_271, %t915) :: integer
504
+ %t919 = call core.gte(%t917, %t918) :: boolean
505
+ %t920 = call core.lt(%t917, %t915) :: boolean
506
+ %t925 = call core.clamp(%t917, %t918, %t923) :: integer
507
+ %t939 = call core.gte(%t937, %t918) :: boolean
508
+ %t940 = call core.lt(%t937, %t915) :: boolean
509
+ %t945 = call core.clamp(%t937, %t918, %t923) :: integer
510
+ %t957 = call core.add(%t956, %t915) :: integer
511
+ %t921 = call core.and(%t919, %t920) :: boolean
512
+ %t926 = Gather %t269, %t925 :: any
513
+ %t941 = call core.and(%t939, %t940) :: boolean
514
+ %t946 = Gather %t269, %t945 :: any
515
+ %t958 = call core.mod(%t957, %t915) :: integer
516
+ %t927 = Length %t926 :: integer
517
+ %t947 = Length %t946 :: integer
518
+ %t959 = Gather %t269, %t958 :: any
519
+ %t960 = Length %t959 :: integer
520
+ %t1016 = call core.sub(%t927, %t922) :: integer
521
+ %t1072 = call core.sub(%t947, %t922) :: integer
522
+ %t968 = call core.sub(%t960, %t922) :: integer
523
+ loop col id=L28 in %rows_el_270 as el=%col_el_272, idx=%col_i_273
524
+ %t928 = call core.mod(%col_i_273, %t927) :: integer
525
+ %t929 = call core.add(%t928, %t927) :: integer
526
+ %t930 = call core.mod(%t929, %t927) :: integer
527
+ %t931 = Gather %t926, %t930 :: integer
528
+ %t933 = select %t921, %t931, %t918 :: integer
529
+ %t948 = call core.mod(%col_i_273, %t947) :: integer
530
+ %t949 = call core.add(%t948, %t947) :: integer
531
+ %t950 = call core.mod(%t949, %t947) :: integer
532
+ %t951 = Gather %t946, %t950 :: integer
533
+ %t953 = select %t941, %t951, %t918 :: integer
534
+ %t962 = call core.sub(%col_i_273, %t916) :: integer
535
+ %t964 = call core.gte(%t962, %t918) :: boolean
536
+ %t965 = call core.lt(%t962, %t960) :: boolean
537
+ %t966 = call core.and(%t964, %t965) :: boolean
538
+ %t970 = call core.clamp(%t962, %t918, %t968) :: integer
539
+ %t971 = Gather %t959, %t970 :: integer
540
+ %t973 = select %t966, %t971, %t918 :: integer
541
+ %t982 = call core.sub(%col_i_273, %t922) :: integer
542
+ %t984 = call core.gte(%t982, %t918) :: boolean
543
+ %t985 = call core.lt(%t982, %t960) :: boolean
544
+ %t986 = call core.and(%t984, %t985) :: boolean
545
+ %t990 = call core.clamp(%t982, %t918, %t968) :: integer
546
+ %t991 = Gather %t959, %t990 :: integer
547
+ %t993 = select %t986, %t991, %t918 :: integer
548
+ %t1012 = call core.lt(%t962, %t927) :: boolean
549
+ %t1013 = call core.and(%t964, %t1012) :: boolean
550
+ %t1014 = call core.and(%t921, %t1013) :: boolean
551
+ %t1018 = call core.clamp(%t962, %t918, %t1016) :: integer
552
+ %t1019 = Gather %t926, %t1018 :: integer
553
+ %t1021 = select %t1014, %t1019, %t918 :: integer
554
+ %t1040 = call core.lt(%t982, %t927) :: boolean
555
+ %t1041 = call core.and(%t984, %t1040) :: boolean
556
+ %t1042 = call core.and(%t921, %t1041) :: boolean
557
+ %t1046 = call core.clamp(%t982, %t918, %t1016) :: integer
558
+ %t1047 = Gather %t926, %t1046 :: integer
559
+ %t1049 = select %t1042, %t1047, %t918 :: integer
560
+ %t1068 = call core.lt(%t962, %t947) :: boolean
561
+ %t1069 = call core.and(%t964, %t1068) :: boolean
562
+ %t1070 = call core.and(%t941, %t1069) :: boolean
563
+ %t1074 = call core.clamp(%t962, %t918, %t1072) :: integer
564
+ %t1075 = Gather %t946, %t1074 :: integer
565
+ %t1077 = select %t1070, %t1075, %t918 :: integer
566
+ %t1096 = call core.lt(%t982, %t947) :: boolean
567
+ %t1097 = call core.and(%t984, %t1096) :: boolean
568
+ %t1098 = call core.and(%t941, %t1097) :: boolean
569
+ %t1102 = call core.clamp(%t982, %t918, %t1072) :: integer
570
+ %t1103 = Gather %t946, %t1102 :: integer
571
+ %t1105 = select %t1098, %t1103, %t918 :: integer
572
+ %t1106 = make_tuple(%t933, %t953, %t973, %t993, %t1021, %t1049, %t1077, %t1105) :: tuple<integer>
573
+ %t1107 = Fold %t1106 fn="agg.sum" ::
574
+ %t512 = call core.eq(%t1107, %t511) :: boolean
575
+ %t516 = call core.gt(%col_el_272, %t918) :: boolean
576
+ %t276 = call core.and(%t512, %t516) :: boolean
577
+ yield %t276
578
+ end_loop
579
+ end_loop
580
+ )
581
+ (Declaration next_alive
582
+ %t277 = load_input "rows" :: array
583
+ %t1111 = Length %t277 :: integer
584
+ %t1112 = const -1 :: integer
585
+ %t1114 = const 0 :: integer
586
+ %t1118 = const 1 :: integer
587
+ %t519 = const 3 :: integer
588
+ %t1316 = const 2 :: integer
589
+ %t1119 = call core.sub(%t1111, %t1118) :: integer
590
+ loop rows id=L29 in %t277 as el=%rows_el_278, idx=%rows_i_279
591
+ %t1113 = call core.sub(%rows_i_279, %t1112) :: integer
592
+ %t1133 = call core.sub(%rows_i_279, %t1118) :: integer
593
+ %t1152 = call core.mod(%rows_i_279, %t1111) :: integer
594
+ %t1115 = call core.gte(%t1113, %t1114) :: boolean
595
+ %t1116 = call core.lt(%t1113, %t1111) :: boolean
596
+ %t1121 = call core.clamp(%t1113, %t1114, %t1119) :: integer
597
+ %t1135 = call core.gte(%t1133, %t1114) :: boolean
598
+ %t1136 = call core.lt(%t1133, %t1111) :: boolean
599
+ %t1141 = call core.clamp(%t1133, %t1114, %t1119) :: integer
600
+ %t1153 = call core.add(%t1152, %t1111) :: integer
601
+ %t1117 = call core.and(%t1115, %t1116) :: boolean
602
+ %t1122 = Gather %t277, %t1121 :: any
603
+ %t1137 = call core.and(%t1135, %t1136) :: boolean
604
+ %t1142 = Gather %t277, %t1141 :: any
605
+ %t1154 = call core.mod(%t1153, %t1111) :: integer
606
+ %t1123 = Length %t1122 :: integer
607
+ %t1143 = Length %t1142 :: integer
608
+ %t1155 = Gather %t277, %t1154 :: any
609
+ %t1156 = Length %t1155 :: integer
610
+ %t1212 = call core.sub(%t1123, %t1118) :: integer
611
+ %t1268 = call core.sub(%t1143, %t1118) :: integer
612
+ %t1164 = call core.sub(%t1156, %t1118) :: integer
613
+ loop col id=L30 in %rows_el_278 as el=%col_el_280, idx=%col_i_281
614
+ %t1124 = call core.mod(%col_i_281, %t1123) :: integer
615
+ %t1125 = call core.add(%t1124, %t1123) :: integer
616
+ %t1126 = call core.mod(%t1125, %t1123) :: integer
617
+ %t1127 = Gather %t1122, %t1126 :: integer
618
+ %t1129 = select %t1117, %t1127, %t1114 :: integer
619
+ %t1144 = call core.mod(%col_i_281, %t1143) :: integer
620
+ %t1145 = call core.add(%t1144, %t1143) :: integer
621
+ %t1146 = call core.mod(%t1145, %t1143) :: integer
622
+ %t1147 = Gather %t1142, %t1146 :: integer
623
+ %t1149 = select %t1137, %t1147, %t1114 :: integer
624
+ %t1158 = call core.sub(%col_i_281, %t1112) :: integer
625
+ %t1160 = call core.gte(%t1158, %t1114) :: boolean
626
+ %t1161 = call core.lt(%t1158, %t1156) :: boolean
627
+ %t1162 = call core.and(%t1160, %t1161) :: boolean
628
+ %t1166 = call core.clamp(%t1158, %t1114, %t1164) :: integer
629
+ %t1167 = Gather %t1155, %t1166 :: integer
630
+ %t1169 = select %t1162, %t1167, %t1114 :: integer
631
+ %t1178 = call core.sub(%col_i_281, %t1118) :: integer
632
+ %t1180 = call core.gte(%t1178, %t1114) :: boolean
633
+ %t1181 = call core.lt(%t1178, %t1156) :: boolean
634
+ %t1182 = call core.and(%t1180, %t1181) :: boolean
635
+ %t1186 = call core.clamp(%t1178, %t1114, %t1164) :: integer
636
+ %t1187 = Gather %t1155, %t1186 :: integer
637
+ %t1189 = select %t1182, %t1187, %t1114 :: integer
638
+ %t1208 = call core.lt(%t1158, %t1123) :: boolean
639
+ %t1209 = call core.and(%t1160, %t1208) :: boolean
640
+ %t1210 = call core.and(%t1117, %t1209) :: boolean
641
+ %t1214 = call core.clamp(%t1158, %t1114, %t1212) :: integer
642
+ %t1215 = Gather %t1122, %t1214 :: integer
643
+ %t1217 = select %t1210, %t1215, %t1114 :: integer
644
+ %t1236 = call core.lt(%t1178, %t1123) :: boolean
645
+ %t1237 = call core.and(%t1180, %t1236) :: boolean
646
+ %t1238 = call core.and(%t1117, %t1237) :: boolean
647
+ %t1242 = call core.clamp(%t1178, %t1114, %t1212) :: integer
648
+ %t1243 = Gather %t1122, %t1242 :: integer
649
+ %t1245 = select %t1238, %t1243, %t1114 :: integer
650
+ %t1264 = call core.lt(%t1158, %t1143) :: boolean
651
+ %t1265 = call core.and(%t1160, %t1264) :: boolean
652
+ %t1266 = call core.and(%t1137, %t1265) :: boolean
653
+ %t1270 = call core.clamp(%t1158, %t1114, %t1268) :: integer
654
+ %t1271 = Gather %t1142, %t1270 :: integer
655
+ %t1273 = select %t1266, %t1271, %t1114 :: integer
656
+ %t1292 = call core.lt(%t1178, %t1143) :: boolean
657
+ %t1293 = call core.and(%t1180, %t1292) :: boolean
658
+ %t1294 = call core.and(%t1137, %t1293) :: boolean
659
+ %t1298 = call core.clamp(%t1178, %t1114, %t1268) :: integer
660
+ %t1299 = Gather %t1142, %t1298 :: integer
661
+ %t1301 = select %t1294, %t1299, %t1114 :: integer
662
+ %t1302 = make_tuple(%t1129, %t1149, %t1169, %t1189, %t1217, %t1245, %t1273, %t1301) :: tuple<integer>
663
+ %t1303 = Fold %t1302 fn="agg.sum" ::
664
+ %t520 = call core.eq(%t1303, %t519) :: boolean
665
+ %t1317 = call core.eq(%t1303, %t1316) :: boolean
666
+ %t1321 = call core.gt(%col_el_280, %t1114) :: boolean
667
+ %t524 = call core.and(%t1317, %t1321) :: boolean
668
+ %t284 = call core.or(%t520, %t524) :: boolean
669
+ yield %t284
670
+ end_loop
671
+ end_loop
672
+ )
673
+ (Declaration next_state
674
+ %t285 = load_input "rows" :: array
675
+ %t1539 = Length %t285 :: integer
676
+ %t1540 = const -1 :: integer
677
+ %t1542 = const 0 :: integer
678
+ %t1546 = const 1 :: integer
679
+ %t1334 = const 3 :: integer
680
+ %t1339 = const 2 :: integer
681
+ %t1547 = call core.sub(%t1539, %t1546) :: integer
682
+ loop rows id=L31 in %t285 as el=%rows_el_286, idx=%rows_i_287
683
+ %t1541 = call core.sub(%rows_i_287, %t1540) :: integer
684
+ %t1561 = call core.sub(%rows_i_287, %t1546) :: integer
685
+ %t1580 = call core.mod(%rows_i_287, %t1539) :: integer
686
+ %t1543 = call core.gte(%t1541, %t1542) :: boolean
687
+ %t1544 = call core.lt(%t1541, %t1539) :: boolean
688
+ %t1549 = call core.clamp(%t1541, %t1542, %t1547) :: integer
689
+ %t1563 = call core.gte(%t1561, %t1542) :: boolean
690
+ %t1564 = call core.lt(%t1561, %t1539) :: boolean
691
+ %t1569 = call core.clamp(%t1561, %t1542, %t1547) :: integer
692
+ %t1581 = call core.add(%t1580, %t1539) :: integer
693
+ %t1545 = call core.and(%t1543, %t1544) :: boolean
694
+ %t1550 = Gather %t285, %t1549 :: any
695
+ %t1565 = call core.and(%t1563, %t1564) :: boolean
696
+ %t1570 = Gather %t285, %t1569 :: any
697
+ %t1582 = call core.mod(%t1581, %t1539) :: integer
698
+ %t1551 = Length %t1550 :: integer
699
+ %t1571 = Length %t1570 :: integer
700
+ %t1583 = Gather %t285, %t1582 :: any
701
+ %t1584 = Length %t1583 :: integer
702
+ %t1640 = call core.sub(%t1551, %t1546) :: integer
703
+ %t1696 = call core.sub(%t1571, %t1546) :: integer
704
+ %t1592 = call core.sub(%t1584, %t1546) :: integer
705
+ loop col id=L32 in %rows_el_286 as el=%col_el_288, idx=%col_i_289
706
+ %t1552 = call core.mod(%col_i_289, %t1551) :: integer
707
+ %t1553 = call core.add(%t1552, %t1551) :: integer
708
+ %t1554 = call core.mod(%t1553, %t1551) :: integer
709
+ %t1555 = Gather %t1550, %t1554 :: integer
710
+ %t1557 = select %t1545, %t1555, %t1542 :: integer
711
+ %t1572 = call core.mod(%col_i_289, %t1571) :: integer
712
+ %t1573 = call core.add(%t1572, %t1571) :: integer
713
+ %t1574 = call core.mod(%t1573, %t1571) :: integer
714
+ %t1575 = Gather %t1570, %t1574 :: integer
715
+ %t1577 = select %t1565, %t1575, %t1542 :: integer
716
+ %t1586 = call core.sub(%col_i_289, %t1540) :: integer
717
+ %t1588 = call core.gte(%t1586, %t1542) :: boolean
718
+ %t1589 = call core.lt(%t1586, %t1584) :: boolean
719
+ %t1590 = call core.and(%t1588, %t1589) :: boolean
720
+ %t1594 = call core.clamp(%t1586, %t1542, %t1592) :: integer
721
+ %t1595 = Gather %t1583, %t1594 :: integer
722
+ %t1597 = select %t1590, %t1595, %t1542 :: integer
723
+ %t1606 = call core.sub(%col_i_289, %t1546) :: integer
724
+ %t1608 = call core.gte(%t1606, %t1542) :: boolean
725
+ %t1609 = call core.lt(%t1606, %t1584) :: boolean
726
+ %t1610 = call core.and(%t1608, %t1609) :: boolean
727
+ %t1614 = call core.clamp(%t1606, %t1542, %t1592) :: integer
728
+ %t1615 = Gather %t1583, %t1614 :: integer
729
+ %t1617 = select %t1610, %t1615, %t1542 :: integer
730
+ %t1636 = call core.lt(%t1586, %t1551) :: boolean
731
+ %t1637 = call core.and(%t1588, %t1636) :: boolean
732
+ %t1638 = call core.and(%t1545, %t1637) :: boolean
733
+ %t1642 = call core.clamp(%t1586, %t1542, %t1640) :: integer
734
+ %t1643 = Gather %t1550, %t1642 :: integer
735
+ %t1645 = select %t1638, %t1643, %t1542 :: integer
736
+ %t1664 = call core.lt(%t1606, %t1551) :: boolean
737
+ %t1665 = call core.and(%t1608, %t1664) :: boolean
738
+ %t1666 = call core.and(%t1545, %t1665) :: boolean
739
+ %t1670 = call core.clamp(%t1606, %t1542, %t1640) :: integer
740
+ %t1671 = Gather %t1550, %t1670 :: integer
741
+ %t1673 = select %t1666, %t1671, %t1542 :: integer
742
+ %t1692 = call core.lt(%t1586, %t1571) :: boolean
743
+ %t1693 = call core.and(%t1588, %t1692) :: boolean
744
+ %t1694 = call core.and(%t1565, %t1693) :: boolean
745
+ %t1698 = call core.clamp(%t1586, %t1542, %t1696) :: integer
746
+ %t1699 = Gather %t1570, %t1698 :: integer
747
+ %t1701 = select %t1694, %t1699, %t1542 :: integer
748
+ %t1720 = call core.lt(%t1606, %t1571) :: boolean
749
+ %t1721 = call core.and(%t1608, %t1720) :: boolean
750
+ %t1722 = call core.and(%t1565, %t1721) :: boolean
751
+ %t1726 = call core.clamp(%t1606, %t1542, %t1696) :: integer
752
+ %t1727 = Gather %t1570, %t1726 :: integer
753
+ %t1729 = select %t1722, %t1727, %t1542 :: integer
754
+ %t1332 = make_tuple(%t1557, %t1577, %t1597, %t1617, %t1645, %t1673, %t1701, %t1729) :: tuple<integer>
755
+ %t1333 = Fold %t1332 fn="agg.sum" ::
756
+ %t1335 = call core.eq(%t1333, %t1334) :: boolean
757
+ %t1340 = call core.eq(%t1333, %t1339) :: boolean
758
+ %t1344 = call core.gt(%col_el_288, %t1542) :: boolean
759
+ %t1345 = call core.and(%t1340, %t1344) :: boolean
760
+ %t528 = call core.or(%t1335, %t1345) :: boolean
761
+ %t293 = select %t528, %t1546, %t1542 :: integer
762
+ yield %t293
763
+ end_loop
764
+ end_loop
765
+ )
766
+ )