kumi 0.0.18 → 0.0.20

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 +27 -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 +46 -4
  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,343 @@
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
+ loop rows id=L3 in %t6 as el=%rows_el_7, idx=%rows_i_8
13
+ loop col id=L4 in %rows_el_7 as el=%col_el_9, idx=%col_i_10
14
+ %t11 = Length %t6 :: integer
15
+ %t12 = const -1 :: integer
16
+ %t13 = call core.sub(%rows_i_8, %t12) :: integer
17
+ %t14 = const 0 :: integer
18
+ %t15 = call core.gte(%t13, %t14) :: boolean
19
+ %t16 = call core.lt(%t13, %t11) :: boolean
20
+ %t17 = call core.and(%t15, %t16) :: boolean
21
+ %t18 = const 1 :: integer
22
+ %t19 = call core.sub(%t11, %t18) :: integer
23
+ %t20 = const 0 :: integer
24
+ %t21 = call core.clamp(%t13, %t20, %t19) :: integer
25
+ %t22 = Gather %t6, %t21 :: any
26
+ %t23 = Length %t22 :: integer
27
+ %t24 = call core.mod(%col_i_10, %t23) :: integer
28
+ %t25 = call core.add(%t24, %t23) :: integer
29
+ %t26 = call core.mod(%t25, %t23) :: integer
30
+ %t27 = Gather %t22, %t26 :: integer
31
+ %t28 = const 0 :: integer
32
+ %t29 = select %t17, %t27, %t28 :: integer
33
+ yield %t29
34
+ end_loop
35
+ end_loop
36
+ )
37
+ (Declaration s
38
+ %t30 = load_input "rows" :: array
39
+ loop rows id=L5 in %t30 as el=%rows_el_31, idx=%rows_i_32
40
+ loop col id=L6 in %rows_el_31 as el=%col_el_33, idx=%col_i_34
41
+ %t35 = Length %t30 :: integer
42
+ %t36 = const 1 :: integer
43
+ %t37 = call core.sub(%rows_i_32, %t36) :: integer
44
+ %t38 = const 0 :: integer
45
+ %t39 = call core.gte(%t37, %t38) :: boolean
46
+ %t40 = call core.lt(%t37, %t35) :: boolean
47
+ %t41 = call core.and(%t39, %t40) :: boolean
48
+ %t42 = const 1 :: integer
49
+ %t43 = call core.sub(%t35, %t42) :: integer
50
+ %t44 = const 0 :: integer
51
+ %t45 = call core.clamp(%t37, %t44, %t43) :: integer
52
+ %t46 = Gather %t30, %t45 :: any
53
+ %t47 = Length %t46 :: integer
54
+ %t48 = call core.mod(%col_i_34, %t47) :: integer
55
+ %t49 = call core.add(%t48, %t47) :: integer
56
+ %t50 = call core.mod(%t49, %t47) :: integer
57
+ %t51 = Gather %t46, %t50 :: integer
58
+ %t52 = const 0 :: integer
59
+ %t53 = select %t41, %t51, %t52 :: integer
60
+ yield %t53
61
+ end_loop
62
+ end_loop
63
+ )
64
+ (Declaration w
65
+ %t54 = load_input "rows" :: array
66
+ loop rows id=L7 in %t54 as el=%rows_el_55, idx=%rows_i_56
67
+ loop col id=L8 in %rows_el_55 as el=%col_el_57, idx=%col_i_58
68
+ %t59 = Length %t54 :: integer
69
+ %t60 = call core.mod(%rows_i_56, %t59) :: integer
70
+ %t61 = call core.add(%t60, %t59) :: integer
71
+ %t62 = call core.mod(%t61, %t59) :: integer
72
+ %t63 = Gather %t54, %t62 :: any
73
+ %t64 = Length %t63 :: integer
74
+ %t65 = const -1 :: integer
75
+ %t66 = call core.sub(%col_i_58, %t65) :: integer
76
+ %t67 = const 0 :: integer
77
+ %t68 = call core.gte(%t66, %t67) :: boolean
78
+ %t69 = call core.lt(%t66, %t64) :: boolean
79
+ %t70 = call core.and(%t68, %t69) :: boolean
80
+ %t71 = const 1 :: integer
81
+ %t72 = call core.sub(%t64, %t71) :: integer
82
+ %t73 = const 0 :: integer
83
+ %t74 = call core.clamp(%t66, %t73, %t72) :: integer
84
+ %t75 = Gather %t63, %t74 :: integer
85
+ %t76 = const 0 :: integer
86
+ %t77 = select %t70, %t75, %t76 :: integer
87
+ yield %t77
88
+ end_loop
89
+ end_loop
90
+ )
91
+ (Declaration e
92
+ %t78 = load_input "rows" :: array
93
+ loop rows id=L9 in %t78 as el=%rows_el_79, idx=%rows_i_80
94
+ loop col id=L10 in %rows_el_79 as el=%col_el_81, idx=%col_i_82
95
+ %t83 = Length %t78 :: integer
96
+ %t84 = call core.mod(%rows_i_80, %t83) :: integer
97
+ %t85 = call core.add(%t84, %t83) :: integer
98
+ %t86 = call core.mod(%t85, %t83) :: integer
99
+ %t87 = Gather %t78, %t86 :: any
100
+ %t88 = Length %t87 :: integer
101
+ %t89 = const 1 :: integer
102
+ %t90 = call core.sub(%col_i_82, %t89) :: integer
103
+ %t91 = const 0 :: integer
104
+ %t92 = call core.gte(%t90, %t91) :: boolean
105
+ %t93 = call core.lt(%t90, %t88) :: boolean
106
+ %t94 = call core.and(%t92, %t93) :: boolean
107
+ %t95 = const 1 :: integer
108
+ %t96 = call core.sub(%t88, %t95) :: integer
109
+ %t97 = const 0 :: integer
110
+ %t98 = call core.clamp(%t90, %t97, %t96) :: integer
111
+ %t99 = Gather %t87, %t98 :: integer
112
+ %t100 = const 0 :: integer
113
+ %t101 = select %t94, %t99, %t100 :: integer
114
+ yield %t101
115
+ end_loop
116
+ end_loop
117
+ )
118
+ (Declaration nw
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 = const -1 :: integer
124
+ %t109 = call core.sub(%rows_i_104, %t108) :: integer
125
+ %t110 = const 0 :: integer
126
+ %t111 = call core.gte(%t109, %t110) :: boolean
127
+ %t112 = call core.lt(%t109, %t107) :: boolean
128
+ %t113 = call core.and(%t111, %t112) :: boolean
129
+ %t114 = const 1 :: integer
130
+ %t115 = call core.sub(%t107, %t114) :: integer
131
+ %t116 = const 0 :: integer
132
+ %t117 = call core.clamp(%t109, %t116, %t115) :: integer
133
+ %t118 = Gather %t102, %t117 :: any
134
+ %t119 = Length %t118 :: integer
135
+ %t120 = const -1 :: integer
136
+ %t121 = call core.sub(%col_i_106, %t120) :: integer
137
+ %t122 = const 0 :: integer
138
+ %t123 = call core.gte(%t121, %t122) :: boolean
139
+ %t124 = call core.lt(%t121, %t119) :: boolean
140
+ %t125 = call core.and(%t123, %t124) :: boolean
141
+ %t126 = call core.and(%t113, %t125) :: boolean
142
+ %t127 = const 1 :: integer
143
+ %t128 = call core.sub(%t119, %t127) :: integer
144
+ %t129 = const 0 :: integer
145
+ %t130 = call core.clamp(%t121, %t129, %t128) :: integer
146
+ %t131 = Gather %t118, %t130 :: integer
147
+ %t132 = const 0 :: integer
148
+ %t133 = select %t126, %t131, %t132 :: integer
149
+ yield %t133
150
+ end_loop
151
+ end_loop
152
+ )
153
+ (Declaration ne
154
+ %t134 = load_input "rows" :: array
155
+ loop rows id=L13 in %t134 as el=%rows_el_135, idx=%rows_i_136
156
+ loop col id=L14 in %rows_el_135 as el=%col_el_137, idx=%col_i_138
157
+ %t139 = Length %t134 :: integer
158
+ %t140 = const -1 :: integer
159
+ %t141 = call core.sub(%rows_i_136, %t140) :: integer
160
+ %t142 = const 0 :: integer
161
+ %t143 = call core.gte(%t141, %t142) :: boolean
162
+ %t144 = call core.lt(%t141, %t139) :: boolean
163
+ %t145 = call core.and(%t143, %t144) :: boolean
164
+ %t146 = const 1 :: integer
165
+ %t147 = call core.sub(%t139, %t146) :: integer
166
+ %t148 = const 0 :: integer
167
+ %t149 = call core.clamp(%t141, %t148, %t147) :: integer
168
+ %t150 = Gather %t134, %t149 :: any
169
+ %t151 = Length %t150 :: integer
170
+ %t152 = const 1 :: integer
171
+ %t153 = call core.sub(%col_i_138, %t152) :: integer
172
+ %t154 = const 0 :: integer
173
+ %t155 = call core.gte(%t153, %t154) :: boolean
174
+ %t156 = call core.lt(%t153, %t151) :: boolean
175
+ %t157 = call core.and(%t155, %t156) :: boolean
176
+ %t158 = call core.and(%t145, %t157) :: boolean
177
+ %t159 = const 1 :: integer
178
+ %t160 = call core.sub(%t151, %t159) :: integer
179
+ %t161 = const 0 :: integer
180
+ %t162 = call core.clamp(%t153, %t161, %t160) :: integer
181
+ %t163 = Gather %t150, %t162 :: integer
182
+ %t164 = const 0 :: integer
183
+ %t165 = select %t158, %t163, %t164 :: integer
184
+ yield %t165
185
+ end_loop
186
+ end_loop
187
+ )
188
+ (Declaration sw
189
+ %t166 = load_input "rows" :: array
190
+ loop rows id=L15 in %t166 as el=%rows_el_167, idx=%rows_i_168
191
+ loop col id=L16 in %rows_el_167 as el=%col_el_169, idx=%col_i_170
192
+ %t171 = Length %t166 :: integer
193
+ %t172 = const 1 :: integer
194
+ %t173 = call core.sub(%rows_i_168, %t172) :: integer
195
+ %t174 = const 0 :: integer
196
+ %t175 = call core.gte(%t173, %t174) :: boolean
197
+ %t176 = call core.lt(%t173, %t171) :: boolean
198
+ %t177 = call core.and(%t175, %t176) :: boolean
199
+ %t178 = const 1 :: integer
200
+ %t179 = call core.sub(%t171, %t178) :: integer
201
+ %t180 = const 0 :: integer
202
+ %t181 = call core.clamp(%t173, %t180, %t179) :: integer
203
+ %t182 = Gather %t166, %t181 :: any
204
+ %t183 = Length %t182 :: integer
205
+ %t184 = const -1 :: integer
206
+ %t185 = call core.sub(%col_i_170, %t184) :: integer
207
+ %t186 = const 0 :: integer
208
+ %t187 = call core.gte(%t185, %t186) :: boolean
209
+ %t188 = call core.lt(%t185, %t183) :: boolean
210
+ %t189 = call core.and(%t187, %t188) :: boolean
211
+ %t190 = call core.and(%t177, %t189) :: boolean
212
+ %t191 = const 1 :: integer
213
+ %t192 = call core.sub(%t183, %t191) :: integer
214
+ %t193 = const 0 :: integer
215
+ %t194 = call core.clamp(%t185, %t193, %t192) :: integer
216
+ %t195 = Gather %t182, %t194 :: integer
217
+ %t196 = const 0 :: integer
218
+ %t197 = select %t190, %t195, %t196 :: integer
219
+ yield %t197
220
+ end_loop
221
+ end_loop
222
+ )
223
+ (Declaration se
224
+ %t198 = load_input "rows" :: array
225
+ loop rows id=L17 in %t198 as el=%rows_el_199, idx=%rows_i_200
226
+ loop col id=L18 in %rows_el_199 as el=%col_el_201, idx=%col_i_202
227
+ %t203 = Length %t198 :: integer
228
+ %t204 = const 1 :: integer
229
+ %t205 = call core.sub(%rows_i_200, %t204) :: integer
230
+ %t206 = const 0 :: integer
231
+ %t207 = call core.gte(%t205, %t206) :: boolean
232
+ %t208 = call core.lt(%t205, %t203) :: boolean
233
+ %t209 = call core.and(%t207, %t208) :: boolean
234
+ %t210 = const 1 :: integer
235
+ %t211 = call core.sub(%t203, %t210) :: integer
236
+ %t212 = const 0 :: integer
237
+ %t213 = call core.clamp(%t205, %t212, %t211) :: integer
238
+ %t214 = Gather %t198, %t213 :: any
239
+ %t215 = Length %t214 :: integer
240
+ %t216 = const 1 :: integer
241
+ %t217 = call core.sub(%col_i_202, %t216) :: integer
242
+ %t218 = const 0 :: integer
243
+ %t219 = call core.gte(%t217, %t218) :: boolean
244
+ %t220 = call core.lt(%t217, %t215) :: boolean
245
+ %t221 = call core.and(%t219, %t220) :: boolean
246
+ %t222 = call core.and(%t209, %t221) :: boolean
247
+ %t223 = const 1 :: integer
248
+ %t224 = call core.sub(%t215, %t223) :: integer
249
+ %t225 = const 0 :: integer
250
+ %t226 = call core.clamp(%t217, %t225, %t224) :: integer
251
+ %t227 = Gather %t214, %t226 :: integer
252
+ %t228 = const 0 :: integer
253
+ %t229 = select %t222, %t227, %t228 :: integer
254
+ yield %t229
255
+ end_loop
256
+ end_loop
257
+ )
258
+ (Declaration neighbors
259
+ %t230 = load_input "rows" :: array
260
+ loop rows id=L19 in %t230 as el=%rows_el_231, idx=%rows_i_232
261
+ loop col id=L20 in %rows_el_231 as el=%col_el_233, idx=%col_i_234
262
+ %t235 = load_decl n axes=[rows, col] :: integer
263
+ %t236 = load_decl s axes=[rows, col] :: integer
264
+ %t237 = load_decl w axes=[rows, col] :: integer
265
+ %t238 = load_decl e axes=[rows, col] :: integer
266
+ %t239 = load_decl nw axes=[rows, col] :: integer
267
+ %t240 = load_decl ne axes=[rows, col] :: integer
268
+ %t241 = load_decl sw axes=[rows, col] :: integer
269
+ %t242 = load_decl se axes=[rows, col] :: integer
270
+ %t243 = make_tuple(%t235, %t236, %t237, %t238, %t239, %t240, %t241, %t242) :: tuple<integer>
271
+ %t244 = Fold %t243 fn="agg.sum" ::
272
+ yield %t244
273
+ end_loop
274
+ end_loop
275
+ )
276
+ (Declaration alive
277
+ %t245 = load_input "rows" :: array
278
+ loop rows id=L21 in %t245 as el=%rows_el_246, idx=%rows_i_247
279
+ loop col id=L22 in %rows_el_246 as el=%col_el_248, idx=%col_i_249
280
+ %t250 = load_decl a axes=[rows, col] :: integer
281
+ %t251 = const 0 :: integer
282
+ %t252 = call core.gt(%t250, %t251) :: boolean
283
+ yield %t252
284
+ end_loop
285
+ end_loop
286
+ )
287
+ (Declaration n3_alive
288
+ %t253 = load_input "rows" :: array
289
+ loop rows id=L23 in %t253 as el=%rows_el_254, idx=%rows_i_255
290
+ loop col id=L24 in %rows_el_254 as el=%col_el_256, idx=%col_i_257
291
+ %t258 = load_decl neighbors axes=[rows, col] ::
292
+ %t259 = const 3 :: integer
293
+ %t260 = call core.eq(%t258, %t259) :: boolean
294
+ yield %t260
295
+ end_loop
296
+ end_loop
297
+ )
298
+ (Declaration n2_alive
299
+ %t261 = load_input "rows" :: array
300
+ loop rows id=L25 in %t261 as el=%rows_el_262, idx=%rows_i_263
301
+ loop col id=L26 in %rows_el_262 as el=%col_el_264, idx=%col_i_265
302
+ %t266 = load_decl neighbors axes=[rows, col] ::
303
+ %t267 = const 2 :: integer
304
+ %t268 = call core.eq(%t266, %t267) :: boolean
305
+ yield %t268
306
+ end_loop
307
+ end_loop
308
+ )
309
+ (Declaration keep_alive
310
+ %t269 = load_input "rows" :: array
311
+ loop rows id=L27 in %t269 as el=%rows_el_270, idx=%rows_i_271
312
+ loop col id=L28 in %rows_el_270 as el=%col_el_272, idx=%col_i_273
313
+ %t274 = load_decl n2_alive axes=[rows, col] :: boolean
314
+ %t275 = load_decl alive axes=[rows, col] :: boolean
315
+ %t276 = call core.and(%t274, %t275) :: boolean
316
+ yield %t276
317
+ end_loop
318
+ end_loop
319
+ )
320
+ (Declaration next_alive
321
+ %t277 = load_input "rows" :: array
322
+ loop rows id=L29 in %t277 as el=%rows_el_278, idx=%rows_i_279
323
+ loop col id=L30 in %rows_el_278 as el=%col_el_280, idx=%col_i_281
324
+ %t282 = load_decl n3_alive axes=[rows, col] :: boolean
325
+ %t283 = load_decl keep_alive axes=[rows, col] :: boolean
326
+ %t284 = call core.or(%t282, %t283) :: boolean
327
+ yield %t284
328
+ end_loop
329
+ end_loop
330
+ )
331
+ (Declaration next_state
332
+ %t285 = load_input "rows" :: array
333
+ loop rows id=L31 in %t285 as el=%rows_el_286, idx=%rows_i_287
334
+ loop col id=L32 in %rows_el_286 as el=%col_el_288, idx=%col_i_289
335
+ %t290 = load_decl next_alive axes=[rows, col] :: boolean
336
+ %t291 = const 1 :: integer
337
+ %t292 = const 0 :: integer
338
+ %t293 = select %t290, %t291, %t292 :: integer
339
+ yield %t293
340
+ end_loop
341
+ end_loop
342
+ )
343
+ )
@@ -0,0 +1,343 @@
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
+ loop rows id=L3 in %t6 as el=%rows_el_7, idx=%rows_i_8
13
+ loop col id=L4 in %rows_el_7 as el=%col_el_9, idx=%col_i_10
14
+ %t11 = Length %t6 :: integer
15
+ %t12 = const -1 :: integer
16
+ %t13 = call core.sub(%rows_i_8, %t12) :: integer
17
+ %t14 = const 0 :: integer
18
+ %t15 = call core.gte(%t13, %t14) :: boolean
19
+ %t16 = call core.lt(%t13, %t11) :: boolean
20
+ %t17 = call core.and(%t15, %t16) :: boolean
21
+ %t18 = const 1 :: integer
22
+ %t19 = call core.sub(%t11, %t18) :: integer
23
+ %t20 = const 0 :: integer
24
+ %t21 = call core.clamp(%t13, %t20, %t19) :: integer
25
+ %t22 = Gather %t6, %t21 :: any
26
+ %t23 = Length %t22 :: integer
27
+ %t24 = call core.mod(%col_i_10, %t23) :: integer
28
+ %t25 = call core.add(%t24, %t23) :: integer
29
+ %t26 = call core.mod(%t25, %t23) :: integer
30
+ %t27 = Gather %t22, %t26 :: integer
31
+ %t28 = const 0 :: integer
32
+ %t29 = select %t17, %t27, %t28 :: integer
33
+ yield %t29
34
+ end_loop
35
+ end_loop
36
+ )
37
+ (Declaration s
38
+ %t30 = load_input "rows" :: array
39
+ loop rows id=L5 in %t30 as el=%rows_el_31, idx=%rows_i_32
40
+ loop col id=L6 in %rows_el_31 as el=%col_el_33, idx=%col_i_34
41
+ %t35 = Length %t30 :: integer
42
+ %t36 = const 1 :: integer
43
+ %t37 = call core.sub(%rows_i_32, %t36) :: integer
44
+ %t38 = const 0 :: integer
45
+ %t39 = call core.gte(%t37, %t38) :: boolean
46
+ %t40 = call core.lt(%t37, %t35) :: boolean
47
+ %t41 = call core.and(%t39, %t40) :: boolean
48
+ %t42 = const 1 :: integer
49
+ %t43 = call core.sub(%t35, %t42) :: integer
50
+ %t44 = const 0 :: integer
51
+ %t45 = call core.clamp(%t37, %t44, %t43) :: integer
52
+ %t46 = Gather %t30, %t45 :: any
53
+ %t47 = Length %t46 :: integer
54
+ %t48 = call core.mod(%col_i_34, %t47) :: integer
55
+ %t49 = call core.add(%t48, %t47) :: integer
56
+ %t50 = call core.mod(%t49, %t47) :: integer
57
+ %t51 = Gather %t46, %t50 :: integer
58
+ %t52 = const 0 :: integer
59
+ %t53 = select %t41, %t51, %t52 :: integer
60
+ yield %t53
61
+ end_loop
62
+ end_loop
63
+ )
64
+ (Declaration w
65
+ %t54 = load_input "rows" :: array
66
+ loop rows id=L7 in %t54 as el=%rows_el_55, idx=%rows_i_56
67
+ loop col id=L8 in %rows_el_55 as el=%col_el_57, idx=%col_i_58
68
+ %t59 = Length %t54 :: integer
69
+ %t60 = call core.mod(%rows_i_56, %t59) :: integer
70
+ %t61 = call core.add(%t60, %t59) :: integer
71
+ %t62 = call core.mod(%t61, %t59) :: integer
72
+ %t63 = Gather %t54, %t62 :: any
73
+ %t64 = Length %t63 :: integer
74
+ %t65 = const -1 :: integer
75
+ %t66 = call core.sub(%col_i_58, %t65) :: integer
76
+ %t67 = const 0 :: integer
77
+ %t68 = call core.gte(%t66, %t67) :: boolean
78
+ %t69 = call core.lt(%t66, %t64) :: boolean
79
+ %t70 = call core.and(%t68, %t69) :: boolean
80
+ %t71 = const 1 :: integer
81
+ %t72 = call core.sub(%t64, %t71) :: integer
82
+ %t73 = const 0 :: integer
83
+ %t74 = call core.clamp(%t66, %t73, %t72) :: integer
84
+ %t75 = Gather %t63, %t74 :: integer
85
+ %t76 = const 0 :: integer
86
+ %t77 = select %t70, %t75, %t76 :: integer
87
+ yield %t77
88
+ end_loop
89
+ end_loop
90
+ )
91
+ (Declaration e
92
+ %t78 = load_input "rows" :: array
93
+ loop rows id=L9 in %t78 as el=%rows_el_79, idx=%rows_i_80
94
+ loop col id=L10 in %rows_el_79 as el=%col_el_81, idx=%col_i_82
95
+ %t83 = Length %t78 :: integer
96
+ %t84 = call core.mod(%rows_i_80, %t83) :: integer
97
+ %t85 = call core.add(%t84, %t83) :: integer
98
+ %t86 = call core.mod(%t85, %t83) :: integer
99
+ %t87 = Gather %t78, %t86 :: any
100
+ %t88 = Length %t87 :: integer
101
+ %t89 = const 1 :: integer
102
+ %t90 = call core.sub(%col_i_82, %t89) :: integer
103
+ %t91 = const 0 :: integer
104
+ %t92 = call core.gte(%t90, %t91) :: boolean
105
+ %t93 = call core.lt(%t90, %t88) :: boolean
106
+ %t94 = call core.and(%t92, %t93) :: boolean
107
+ %t95 = const 1 :: integer
108
+ %t96 = call core.sub(%t88, %t95) :: integer
109
+ %t97 = const 0 :: integer
110
+ %t98 = call core.clamp(%t90, %t97, %t96) :: integer
111
+ %t99 = Gather %t87, %t98 :: integer
112
+ %t100 = const 0 :: integer
113
+ %t101 = select %t94, %t99, %t100 :: integer
114
+ yield %t101
115
+ end_loop
116
+ end_loop
117
+ )
118
+ (Declaration nw
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 = const -1 :: integer
124
+ %t109 = call core.sub(%rows_i_104, %t108) :: integer
125
+ %t110 = const 0 :: integer
126
+ %t111 = call core.gte(%t109, %t110) :: boolean
127
+ %t112 = call core.lt(%t109, %t107) :: boolean
128
+ %t113 = call core.and(%t111, %t112) :: boolean
129
+ %t114 = const 1 :: integer
130
+ %t115 = call core.sub(%t107, %t114) :: integer
131
+ %t116 = const 0 :: integer
132
+ %t117 = call core.clamp(%t109, %t116, %t115) :: integer
133
+ %t118 = Gather %t102, %t117 :: any
134
+ %t119 = Length %t118 :: integer
135
+ %t120 = const -1 :: integer
136
+ %t121 = call core.sub(%col_i_106, %t120) :: integer
137
+ %t122 = const 0 :: integer
138
+ %t123 = call core.gte(%t121, %t122) :: boolean
139
+ %t124 = call core.lt(%t121, %t119) :: boolean
140
+ %t125 = call core.and(%t123, %t124) :: boolean
141
+ %t126 = call core.and(%t113, %t125) :: boolean
142
+ %t127 = const 1 :: integer
143
+ %t128 = call core.sub(%t119, %t127) :: integer
144
+ %t129 = const 0 :: integer
145
+ %t130 = call core.clamp(%t121, %t129, %t128) :: integer
146
+ %t131 = Gather %t118, %t130 :: integer
147
+ %t132 = const 0 :: integer
148
+ %t133 = select %t126, %t131, %t132 :: integer
149
+ yield %t133
150
+ end_loop
151
+ end_loop
152
+ )
153
+ (Declaration ne
154
+ %t134 = load_input "rows" :: array
155
+ loop rows id=L13 in %t134 as el=%rows_el_135, idx=%rows_i_136
156
+ loop col id=L14 in %rows_el_135 as el=%col_el_137, idx=%col_i_138
157
+ %t139 = Length %t134 :: integer
158
+ %t140 = const -1 :: integer
159
+ %t141 = call core.sub(%rows_i_136, %t140) :: integer
160
+ %t142 = const 0 :: integer
161
+ %t143 = call core.gte(%t141, %t142) :: boolean
162
+ %t144 = call core.lt(%t141, %t139) :: boolean
163
+ %t145 = call core.and(%t143, %t144) :: boolean
164
+ %t146 = const 1 :: integer
165
+ %t147 = call core.sub(%t139, %t146) :: integer
166
+ %t148 = const 0 :: integer
167
+ %t149 = call core.clamp(%t141, %t148, %t147) :: integer
168
+ %t150 = Gather %t134, %t149 :: any
169
+ %t151 = Length %t150 :: integer
170
+ %t152 = const 1 :: integer
171
+ %t153 = call core.sub(%col_i_138, %t152) :: integer
172
+ %t154 = const 0 :: integer
173
+ %t155 = call core.gte(%t153, %t154) :: boolean
174
+ %t156 = call core.lt(%t153, %t151) :: boolean
175
+ %t157 = call core.and(%t155, %t156) :: boolean
176
+ %t158 = call core.and(%t145, %t157) :: boolean
177
+ %t159 = const 1 :: integer
178
+ %t160 = call core.sub(%t151, %t159) :: integer
179
+ %t161 = const 0 :: integer
180
+ %t162 = call core.clamp(%t153, %t161, %t160) :: integer
181
+ %t163 = Gather %t150, %t162 :: integer
182
+ %t164 = const 0 :: integer
183
+ %t165 = select %t158, %t163, %t164 :: integer
184
+ yield %t165
185
+ end_loop
186
+ end_loop
187
+ )
188
+ (Declaration sw
189
+ %t166 = load_input "rows" :: array
190
+ loop rows id=L15 in %t166 as el=%rows_el_167, idx=%rows_i_168
191
+ loop col id=L16 in %rows_el_167 as el=%col_el_169, idx=%col_i_170
192
+ %t171 = Length %t166 :: integer
193
+ %t172 = const 1 :: integer
194
+ %t173 = call core.sub(%rows_i_168, %t172) :: integer
195
+ %t174 = const 0 :: integer
196
+ %t175 = call core.gte(%t173, %t174) :: boolean
197
+ %t176 = call core.lt(%t173, %t171) :: boolean
198
+ %t177 = call core.and(%t175, %t176) :: boolean
199
+ %t178 = const 1 :: integer
200
+ %t179 = call core.sub(%t171, %t178) :: integer
201
+ %t180 = const 0 :: integer
202
+ %t181 = call core.clamp(%t173, %t180, %t179) :: integer
203
+ %t182 = Gather %t166, %t181 :: any
204
+ %t183 = Length %t182 :: integer
205
+ %t184 = const -1 :: integer
206
+ %t185 = call core.sub(%col_i_170, %t184) :: integer
207
+ %t186 = const 0 :: integer
208
+ %t187 = call core.gte(%t185, %t186) :: boolean
209
+ %t188 = call core.lt(%t185, %t183) :: boolean
210
+ %t189 = call core.and(%t187, %t188) :: boolean
211
+ %t190 = call core.and(%t177, %t189) :: boolean
212
+ %t191 = const 1 :: integer
213
+ %t192 = call core.sub(%t183, %t191) :: integer
214
+ %t193 = const 0 :: integer
215
+ %t194 = call core.clamp(%t185, %t193, %t192) :: integer
216
+ %t195 = Gather %t182, %t194 :: integer
217
+ %t196 = const 0 :: integer
218
+ %t197 = select %t190, %t195, %t196 :: integer
219
+ yield %t197
220
+ end_loop
221
+ end_loop
222
+ )
223
+ (Declaration se
224
+ %t198 = load_input "rows" :: array
225
+ loop rows id=L17 in %t198 as el=%rows_el_199, idx=%rows_i_200
226
+ loop col id=L18 in %rows_el_199 as el=%col_el_201, idx=%col_i_202
227
+ %t203 = Length %t198 :: integer
228
+ %t204 = const 1 :: integer
229
+ %t205 = call core.sub(%rows_i_200, %t204) :: integer
230
+ %t206 = const 0 :: integer
231
+ %t207 = call core.gte(%t205, %t206) :: boolean
232
+ %t208 = call core.lt(%t205, %t203) :: boolean
233
+ %t209 = call core.and(%t207, %t208) :: boolean
234
+ %t210 = const 1 :: integer
235
+ %t211 = call core.sub(%t203, %t210) :: integer
236
+ %t212 = const 0 :: integer
237
+ %t213 = call core.clamp(%t205, %t212, %t211) :: integer
238
+ %t214 = Gather %t198, %t213 :: any
239
+ %t215 = Length %t214 :: integer
240
+ %t216 = const 1 :: integer
241
+ %t217 = call core.sub(%col_i_202, %t216) :: integer
242
+ %t218 = const 0 :: integer
243
+ %t219 = call core.gte(%t217, %t218) :: boolean
244
+ %t220 = call core.lt(%t217, %t215) :: boolean
245
+ %t221 = call core.and(%t219, %t220) :: boolean
246
+ %t222 = call core.and(%t209, %t221) :: boolean
247
+ %t223 = const 1 :: integer
248
+ %t224 = call core.sub(%t215, %t223) :: integer
249
+ %t225 = const 0 :: integer
250
+ %t226 = call core.clamp(%t217, %t225, %t224) :: integer
251
+ %t227 = Gather %t214, %t226 :: integer
252
+ %t228 = const 0 :: integer
253
+ %t229 = select %t222, %t227, %t228 :: integer
254
+ yield %t229
255
+ end_loop
256
+ end_loop
257
+ )
258
+ (Declaration neighbors
259
+ %t230 = load_input "rows" :: array
260
+ loop rows id=L19 in %t230 as el=%rows_el_231, idx=%rows_i_232
261
+ loop col id=L20 in %rows_el_231 as el=%col_el_233, idx=%col_i_234
262
+ %t235 = load_decl n axes=[rows, col] :: integer
263
+ %t236 = load_decl s axes=[rows, col] :: integer
264
+ %t237 = load_decl w axes=[rows, col] :: integer
265
+ %t238 = load_decl e axes=[rows, col] :: integer
266
+ %t239 = load_decl nw axes=[rows, col] :: integer
267
+ %t240 = load_decl ne axes=[rows, col] :: integer
268
+ %t241 = load_decl sw axes=[rows, col] :: integer
269
+ %t242 = load_decl se axes=[rows, col] :: integer
270
+ %t243 = make_tuple(%t235, %t236, %t237, %t238, %t239, %t240, %t241, %t242) :: tuple<integer>
271
+ %t244 = Fold %t243 fn="agg.sum" ::
272
+ yield %t244
273
+ end_loop
274
+ end_loop
275
+ )
276
+ (Declaration alive
277
+ %t245 = load_input "rows" :: array
278
+ loop rows id=L21 in %t245 as el=%rows_el_246, idx=%rows_i_247
279
+ loop col id=L22 in %rows_el_246 as el=%col_el_248, idx=%col_i_249
280
+ %t250 = load_decl a axes=[rows, col] :: integer
281
+ %t251 = const 0 :: integer
282
+ %t252 = call core.gt(%t250, %t251) :: boolean
283
+ yield %t252
284
+ end_loop
285
+ end_loop
286
+ )
287
+ (Declaration n3_alive
288
+ %t253 = load_input "rows" :: array
289
+ loop rows id=L23 in %t253 as el=%rows_el_254, idx=%rows_i_255
290
+ loop col id=L24 in %rows_el_254 as el=%col_el_256, idx=%col_i_257
291
+ %t258 = load_decl neighbors axes=[rows, col] ::
292
+ %t259 = const 3 :: integer
293
+ %t260 = call core.eq(%t258, %t259) :: boolean
294
+ yield %t260
295
+ end_loop
296
+ end_loop
297
+ )
298
+ (Declaration n2_alive
299
+ %t261 = load_input "rows" :: array
300
+ loop rows id=L25 in %t261 as el=%rows_el_262, idx=%rows_i_263
301
+ loop col id=L26 in %rows_el_262 as el=%col_el_264, idx=%col_i_265
302
+ %t266 = load_decl neighbors axes=[rows, col] ::
303
+ %t267 = const 2 :: integer
304
+ %t268 = call core.eq(%t266, %t267) :: boolean
305
+ yield %t268
306
+ end_loop
307
+ end_loop
308
+ )
309
+ (Declaration keep_alive
310
+ %t269 = load_input "rows" :: array
311
+ loop rows id=L27 in %t269 as el=%rows_el_270, idx=%rows_i_271
312
+ loop col id=L28 in %rows_el_270 as el=%col_el_272, idx=%col_i_273
313
+ %t274 = load_decl n2_alive axes=[rows, col] :: boolean
314
+ %t275 = load_decl alive axes=[rows, col] :: boolean
315
+ %t276 = call core.and(%t274, %t275) :: boolean
316
+ yield %t276
317
+ end_loop
318
+ end_loop
319
+ )
320
+ (Declaration next_alive
321
+ %t277 = load_input "rows" :: array
322
+ loop rows id=L29 in %t277 as el=%rows_el_278, idx=%rows_i_279
323
+ loop col id=L30 in %rows_el_278 as el=%col_el_280, idx=%col_i_281
324
+ %t282 = load_decl n3_alive axes=[rows, col] :: boolean
325
+ %t283 = load_decl keep_alive axes=[rows, col] :: boolean
326
+ %t284 = call core.or(%t282, %t283) :: boolean
327
+ yield %t284
328
+ end_loop
329
+ end_loop
330
+ )
331
+ (Declaration next_state
332
+ %t285 = load_input "rows" :: array
333
+ loop rows id=L31 in %t285 as el=%rows_el_286, idx=%rows_i_287
334
+ loop col id=L32 in %rows_el_286 as el=%col_el_288, idx=%col_i_289
335
+ %t290 = load_decl next_alive axes=[rows, col] :: boolean
336
+ %t291 = const 1 :: integer
337
+ %t292 = const 0 :: integer
338
+ %t293 = select %t290, %t291, %t292 :: integer
339
+ yield %t293
340
+ end_loop
341
+ end_loop
342
+ )
343
+ )