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,72 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :batch :array
4
+ [
5
+ (InputDeclaration :b :hash
6
+ [
7
+ (InputDeclaration :mean :float)
8
+ (InputDeclaration :row :array
9
+ [
10
+ (InputDeclaration :r :hash
11
+ [
12
+ (InputDeclaration :scale :float)
13
+ (InputDeclaration :col :array
14
+ [
15
+ (InputDeclaration :c :hash
16
+ [
17
+ (InputDeclaration :val :float)
18
+ ]
19
+ )
20
+ ]
21
+ )
22
+ ]
23
+ )
24
+ ]
25
+ )
26
+ ]
27
+ )
28
+ ]
29
+ )
30
+ (InputDeclaration :global_offset :float)
31
+ ]
32
+ values: [
33
+ (ValueDeclaration :global_offset_plus
34
+ (CallExpression :add
35
+ (InputReference :global_offset)
36
+ (Literal 1.0)
37
+ )
38
+ )
39
+ (ValueDeclaration :batch_bias
40
+ (CallExpression :add
41
+ (InputElementReference batch.b.mean)
42
+ (DeclarationReference :global_offset_plus)
43
+ )
44
+ )
45
+ (ValueDeclaration :row_scale2
46
+ (CallExpression :multiply
47
+ (InputElementReference batch.b.row.r.scale)
48
+ (Literal 2.0)
49
+ )
50
+ )
51
+ (ValueDeclaration :elem_affine
52
+ (CallExpression :add
53
+ (CallExpression :multiply
54
+ (InputElementReference batch.b.row.r.col.c.val)
55
+ (DeclarationReference :row_scale2)
56
+ )
57
+ (DeclarationReference :batch_bias)
58
+ )
59
+ )
60
+ (ValueDeclaration :row_sum_affine
61
+ (CallExpression :sum
62
+ (DeclarationReference :elem_affine)
63
+ )
64
+ )
65
+ (ValueDeclaration :batch_total_affine
66
+ (CallExpression :sum
67
+ (DeclarationReference :row_sum_affine)
68
+ )
69
+ )
70
+ ]
71
+ traits: []
72
+ )
@@ -0,0 +1,18 @@
1
+ batch: array (array) access_mode=element
2
+ └─> b: element_access
3
+ b: hash (hash)
4
+ └─> mean: property_access
5
+ └─> row: property_access → array_loop
6
+ mean: float
7
+ row: array (array) access_mode=element
8
+ └─> r: element_access
9
+ r: hash (hash)
10
+ └─> scale: property_access
11
+ └─> col: property_access → array_loop
12
+ scale: float
13
+ col: array (array) access_mode=element
14
+ └─> c: element_access
15
+ c: hash (hash)
16
+ └─> val: property_access
17
+ val: float
18
+ global_offset: float
@@ -0,0 +1,75 @@
1
+ (LIR
2
+ (Declaration global_offset_plus
3
+ %t1 = load_input "global_offset" :: float
4
+ %t2 = const 1.0 :: float
5
+ %t3 = call core.add(%t1, %t2) :: float
6
+ yield %t3
7
+ )
8
+ (Declaration batch_bias
9
+ %t4 = load_input "batch" :: array
10
+ loop batch id=L1 in %t4 as el=%batch_el_5, idx=%batch_i_6
11
+ %t7 = load_field batch_el_5["mean"] :: float
12
+ %t8 = load_decl global_offset_plus :: float
13
+ %t9 = call core.add(%t7, %t8) :: float
14
+ yield %t9
15
+ end_loop
16
+ )
17
+ (Declaration row_scale2
18
+ %t10 = load_input "batch" :: array
19
+ loop batch id=L2 in %t10 as el=%batch_el_11, idx=%batch_i_12
20
+ %t13 = load_field batch_el_11["row"] :: any
21
+ loop row id=L3 in %t13 as el=%row_el_14, idx=%row_i_15
22
+ %t16 = load_field row_el_14["scale"] :: float
23
+ %t17 = const 2.0 :: float
24
+ %t18 = call core.mul(%t16, %t17) :: float
25
+ yield %t18
26
+ end_loop
27
+ end_loop
28
+ )
29
+ (Declaration elem_affine
30
+ %t19 = load_input "batch" :: array
31
+ loop batch id=L4 in %t19 as el=%batch_el_20, idx=%batch_i_21
32
+ %t22 = load_field batch_el_20["row"] :: any
33
+ loop row id=L5 in %t22 as el=%row_el_23, idx=%row_i_24
34
+ %t25 = load_field row_el_23["col"] :: any
35
+ loop col id=L6 in %t25 as el=%col_el_26, idx=%col_i_27
36
+ %t28 = load_field col_el_26["val"] :: float
37
+ %t29 = load_decl row_scale2 axes=[batch, row] :: float
38
+ %t30 = call core.mul(%t28, %t29) :: float
39
+ %t31 = load_decl batch_bias axes=[batch] :: float
40
+ %t32 = call core.add(%t30, %t31) :: float
41
+ yield %t32
42
+ end_loop
43
+ end_loop
44
+ end_loop
45
+ )
46
+ (Declaration row_sum_affine
47
+ %t33 = load_input "batch" :: array
48
+ loop batch id=L7 in %t33 as el=%batch_el_34, idx=%batch_i_35
49
+ %t36 = load_field batch_el_34["row"] :: any
50
+ loop row id=L8 in %t36 as el=%row_el_37, idx=%row_i_38
51
+ %acc_39 = decl_acc :: float
52
+ %t40 = load_field row_el_37["col"] :: any
53
+ loop col id=L9 in %t40 as el=%col_el_41, idx=%col_i_42
54
+ %t43 = load_decl elem_affine axes=[batch, row, col] :: float
55
+ %acc_39 = acc_add agg.sum(%acc_39, %t43) :: float
56
+ end_loop
57
+ %t44 = acc_load %acc_39 :: float
58
+ yield %t44
59
+ end_loop
60
+ end_loop
61
+ )
62
+ (Declaration batch_total_affine
63
+ %t45 = load_input "batch" :: array
64
+ loop batch id=L10 in %t45 as el=%batch_el_46, idx=%batch_i_47
65
+ %acc_48 = decl_acc :: float
66
+ %t49 = load_field batch_el_46["row"] :: any
67
+ loop row id=L11 in %t49 as el=%row_el_50, idx=%row_i_51
68
+ %t52 = load_decl row_sum_affine axes=[batch, row] :: float
69
+ %acc_48 = acc_add agg.sum(%acc_48, %t52) :: float
70
+ end_loop
71
+ %t53 = acc_load %acc_48 :: float
72
+ yield %t53
73
+ end_loop
74
+ )
75
+ )
@@ -0,0 +1,75 @@
1
+ (LIR
2
+ (Declaration global_offset_plus
3
+ %t1 = load_input "global_offset" :: float
4
+ %t2 = const 1.0 :: float
5
+ %t3 = call core.add(%t1, %t2) :: float
6
+ yield %t3
7
+ )
8
+ (Declaration batch_bias
9
+ %t4 = load_input "batch" :: array
10
+ %t8 = load_decl global_offset_plus :: float
11
+ loop batch id=L1 in %t4 as el=%batch_el_5, idx=%batch_i_6
12
+ %t7 = load_field batch_el_5["mean"] :: float
13
+ %t9 = call core.add(%t7, %t8) :: float
14
+ yield %t9
15
+ end_loop
16
+ )
17
+ (Declaration row_scale2
18
+ %t10 = load_input "batch" :: array
19
+ loop batch id=L2 in %t10 as el=%batch_el_11, idx=%batch_i_12
20
+ %t13 = load_field batch_el_11["row"] :: any
21
+ loop row id=L3 in %t13 as el=%row_el_14, idx=%row_i_15
22
+ %t16 = load_field row_el_14["scale"] :: float
23
+ %t17 = const 2.0 :: float
24
+ %t18 = call core.mul(%t16, %t17) :: float
25
+ yield %t18
26
+ end_loop
27
+ end_loop
28
+ )
29
+ (Declaration elem_affine
30
+ %t19 = load_input "batch" :: array
31
+ loop batch id=L4 in %t19 as el=%batch_el_20, idx=%batch_i_21
32
+ %t22 = load_field batch_el_20["row"] :: any
33
+ loop row id=L5 in %t22 as el=%row_el_23, idx=%row_i_24
34
+ %t25 = load_field row_el_23["col"] :: any
35
+ loop col id=L6 in %t25 as el=%col_el_26, idx=%col_i_27
36
+ %t28 = load_field col_el_26["val"] :: float
37
+ %t29 = load_decl row_scale2 axes=[batch, row] :: float
38
+ %t30 = call core.mul(%t28, %t29) :: float
39
+ %t31 = load_decl batch_bias axes=[batch] :: float
40
+ %t32 = call core.add(%t30, %t31) :: float
41
+ yield %t32
42
+ end_loop
43
+ end_loop
44
+ end_loop
45
+ )
46
+ (Declaration row_sum_affine
47
+ %t33 = load_input "batch" :: array
48
+ loop batch id=L7 in %t33 as el=%batch_el_34, idx=%batch_i_35
49
+ %t36 = load_field batch_el_34["row"] :: any
50
+ loop row id=L8 in %t36 as el=%row_el_37, idx=%row_i_38
51
+ %acc_39 = decl_acc :: float
52
+ %t40 = load_field row_el_37["col"] :: any
53
+ loop col id=L9 in %t40 as el=%col_el_41, idx=%col_i_42
54
+ %t43 = load_decl elem_affine axes=[batch, row, col] :: float
55
+ %acc_39 = acc_add agg.sum(%acc_39, %t43) :: float
56
+ end_loop
57
+ %t44 = acc_load %acc_39 :: float
58
+ yield %t44
59
+ end_loop
60
+ end_loop
61
+ )
62
+ (Declaration batch_total_affine
63
+ %t45 = load_input "batch" :: array
64
+ loop batch id=L10 in %t45 as el=%batch_el_46, idx=%batch_i_47
65
+ %acc_48 = decl_acc :: float
66
+ %t49 = load_field batch_el_46["row"] :: any
67
+ loop row id=L11 in %t49 as el=%row_el_50, idx=%row_i_51
68
+ %t52 = load_decl row_sum_affine axes=[batch, row] :: float
69
+ %acc_48 = acc_add agg.sum(%acc_48, %t52) :: float
70
+ end_loop
71
+ %t53 = acc_load %acc_48 :: float
72
+ yield %t53
73
+ end_loop
74
+ )
75
+ )
@@ -0,0 +1,126 @@
1
+ (LIR
2
+ (Declaration global_offset_plus
3
+ %t1 = load_input "global_offset" :: float
4
+ %t2 = const 1.0 :: float
5
+ %t3 = call core.add(%t1, %t2) :: float
6
+ yield %t3
7
+ )
8
+ (Declaration batch_bias
9
+ %t4 = load_input "batch" :: array
10
+ %t54 = load_input "global_offset" :: float
11
+ %t55 = const 1.0 :: float
12
+ %t56 = call core.add(%t54, %t55) :: float
13
+ loop batch id=L1 in %t4 as el=%batch_el_5, idx=%batch_i_6
14
+ %t7 = load_field batch_el_5["mean"] :: float
15
+ %t9 = call core.add(%t7, %t56) :: float
16
+ yield %t9
17
+ end_loop
18
+ )
19
+ (Declaration row_scale2
20
+ %t10 = load_input "batch" :: array
21
+ loop batch id=L2 in %t10 as el=%batch_el_11, idx=%batch_i_12
22
+ %t13 = load_field batch_el_11["row"] :: any
23
+ loop row id=L3 in %t13 as el=%row_el_14, idx=%row_i_15
24
+ %t16 = load_field row_el_14["scale"] :: float
25
+ %t17 = const 2.0 :: float
26
+ %t18 = call core.mul(%t16, %t17) :: float
27
+ yield %t18
28
+ end_loop
29
+ end_loop
30
+ )
31
+ (Declaration elem_affine
32
+ %t19 = load_input "batch" :: array
33
+ loop batch id=L4 in %t19 as el=%batch_el_20, idx=%batch_i_21
34
+ %t22 = load_field batch_el_20["row"] :: any
35
+ %t81 = load_input "global_offset" :: float
36
+ %t82 = const 1.0 :: float
37
+ %t83 = call core.add(%t81, %t82) :: float
38
+ loop row id=L5 in %t22 as el=%row_el_23, idx=%row_i_24
39
+ %t25 = load_field row_el_23["col"] :: any
40
+ %t57 = load_input "batch" :: array
41
+ %t58 = load_field batch_el_20["row"] :: any
42
+ %t59 = load_field row_el_23["scale"] :: float
43
+ %t60 = const 2.0 :: float
44
+ %t61 = call core.mul(%t59, %t60) :: float
45
+ %t62 = load_input "batch" :: array
46
+ %t64 = load_field batch_el_20["mean"] :: float
47
+ %t65 = call core.add(%t64, %t83) :: float
48
+ loop col id=L6 in %t25 as el=%col_el_26, idx=%col_i_27
49
+ %t28 = load_field col_el_26["val"] :: float
50
+ %t30 = call core.mul(%t28, %t61) :: float
51
+ %t32 = call core.add(%t30, %t65) :: float
52
+ yield %t32
53
+ end_loop
54
+ end_loop
55
+ end_loop
56
+ )
57
+ (Declaration row_sum_affine
58
+ %t33 = load_input "batch" :: array
59
+ loop batch id=L7 in %t33 as el=%batch_el_34, idx=%batch_i_35
60
+ %t36 = load_field batch_el_34["row"] :: any
61
+ loop row id=L8 in %t36 as el=%row_el_37, idx=%row_i_38
62
+ %acc_39 = decl_acc :: float
63
+ %t40 = load_field row_el_37["col"] :: any
64
+ %t84 = load_input "batch" :: array
65
+ %t85 = load_field batch_el_34["row"] :: any
66
+ %t86 = load_field row_el_37["scale"] :: float
67
+ %t87 = const 2.0 :: float
68
+ %t88 = call core.mul(%t86, %t87) :: float
69
+ %t89 = load_input "batch" :: array
70
+ %t90 = load_input "global_offset" :: float
71
+ %t91 = const 1.0 :: float
72
+ %t92 = call core.add(%t90, %t91) :: float
73
+ %t93 = load_field batch_el_34["mean"] :: float
74
+ %t94 = call core.add(%t93, %t92) :: float
75
+ loop col id=L9 in %t40 as el=%col_el_41, idx=%col_i_42
76
+ %t66 = load_input "batch" :: array
77
+ %t67 = load_field batch_el_34["row"] :: any
78
+ %t68 = load_field row_el_37["col"] :: any
79
+ %t69 = load_field col_el_41["val"] :: float
80
+ %t71 = call core.mul(%t69, %t88) :: float
81
+ %t73 = call core.add(%t71, %t94) :: float
82
+ %acc_39 = acc_add agg.sum(%acc_39, %t73) :: float
83
+ end_loop
84
+ %t44 = acc_load %acc_39 :: float
85
+ yield %t44
86
+ end_loop
87
+ end_loop
88
+ )
89
+ (Declaration batch_total_affine
90
+ %t45 = load_input "batch" :: array
91
+ loop batch id=L10 in %t45 as el=%batch_el_46, idx=%batch_i_47
92
+ %acc_48 = decl_acc :: float
93
+ %t49 = load_field batch_el_46["row"] :: any
94
+ loop row id=L11 in %t49 as el=%row_el_50, idx=%row_i_51
95
+ %t74 = load_input "batch" :: array
96
+ %t75 = load_field batch_el_46["row"] :: any
97
+ %acc77 = decl_acc :: float
98
+ %t78 = load_field row_el_50["col"] :: any
99
+ %t110 = load_input "global_offset" :: float
100
+ %t111 = const 1.0 :: float
101
+ %t112 = call core.add(%t110, %t111) :: float
102
+ loop col id=L12 in %t78 as el=%col_el_41, idx=%col_i_42
103
+ %t95 = load_input "batch" :: array
104
+ %t96 = load_field batch_el_46["row"] :: any
105
+ %t97 = load_field row_el_50["col"] :: any
106
+ %t98 = load_input "batch" :: array
107
+ %t99 = load_field batch_el_46["row"] :: any
108
+ %t100 = load_field row_el_50["scale"] :: float
109
+ %t101 = const 2.0 :: float
110
+ %t102 = call core.mul(%t100, %t101) :: float
111
+ %t103 = load_input "batch" :: array
112
+ %t105 = load_field batch_el_46["mean"] :: float
113
+ %t106 = call core.add(%t105, %t112) :: float
114
+ %t107 = load_field col_el_41["val"] :: float
115
+ %t108 = call core.mul(%t107, %t102) :: float
116
+ %t109 = call core.add(%t108, %t106) :: float
117
+ %acc77 = acc_add agg.sum(%acc77, %t109) :: float
118
+ end_loop
119
+ %t80 = acc_load %acc77 :: float
120
+ %acc_48 = acc_add agg.sum(%acc_48, %t80) :: float
121
+ end_loop
122
+ %t53 = acc_load %acc_48 :: float
123
+ yield %t53
124
+ end_loop
125
+ )
126
+ )
@@ -0,0 +1,109 @@
1
+ (LIR
2
+ (Declaration global_offset_plus
3
+ %t1 = load_input "global_offset" :: float
4
+ %t2 = const 1.0 :: float
5
+ %t3 = call core.add(%t1, %t2) :: float
6
+ yield %t3
7
+ )
8
+ (Declaration batch_bias
9
+ %t4 = load_input "batch" :: array
10
+ %t54 = load_input "global_offset" :: float
11
+ %t55 = const 1.0 :: float
12
+ %t56 = call core.add(%t54, %t55) :: float
13
+ loop batch id=L1 in %t4 as el=%batch_el_5, idx=%batch_i_6
14
+ %t7 = load_field batch_el_5["mean"] :: float
15
+ %t9 = call core.add(%t7, %t56) :: float
16
+ yield %t9
17
+ end_loop
18
+ )
19
+ (Declaration row_scale2
20
+ %t10 = load_input "batch" :: array
21
+ loop batch id=L2 in %t10 as el=%batch_el_11, idx=%batch_i_12
22
+ %t13 = load_field batch_el_11["row"] :: any
23
+ loop row id=L3 in %t13 as el=%row_el_14, idx=%row_i_15
24
+ %t16 = load_field row_el_14["scale"] :: float
25
+ %t17 = const 2.0 :: float
26
+ %t18 = call core.mul(%t16, %t17) :: float
27
+ yield %t18
28
+ end_loop
29
+ end_loop
30
+ )
31
+ (Declaration elem_affine
32
+ %t19 = load_input "batch" :: array
33
+ loop batch id=L4 in %t19 as el=%batch_el_20, idx=%batch_i_21
34
+ %t22 = load_field batch_el_20["row"] :: any
35
+ %t81 = load_input "global_offset" :: float
36
+ %t82 = const 1.0 :: float
37
+ %t83 = call core.add(%t81, %t82) :: float
38
+ loop row id=L5 in %t22 as el=%row_el_23, idx=%row_i_24
39
+ %t25 = load_field row_el_23["col"] :: any
40
+ %t59 = load_field row_el_23["scale"] :: float
41
+ %t60 = const 2.0 :: float
42
+ %t61 = call core.mul(%t59, %t60) :: float
43
+ %t64 = load_field batch_el_20["mean"] :: float
44
+ %t65 = call core.add(%t64, %t83) :: float
45
+ loop col id=L6 in %t25 as el=%col_el_26, idx=%col_i_27
46
+ %t28 = load_field col_el_26["val"] :: float
47
+ %t30 = call core.mul(%t28, %t61) :: float
48
+ %t32 = call core.add(%t30, %t65) :: float
49
+ yield %t32
50
+ end_loop
51
+ end_loop
52
+ end_loop
53
+ )
54
+ (Declaration row_sum_affine
55
+ %t33 = load_input "batch" :: array
56
+ loop batch id=L7 in %t33 as el=%batch_el_34, idx=%batch_i_35
57
+ %t36 = load_field batch_el_34["row"] :: any
58
+ loop row id=L8 in %t36 as el=%row_el_37, idx=%row_i_38
59
+ %acc_39 = decl_acc :: float
60
+ %t40 = load_field row_el_37["col"] :: any
61
+ %t86 = load_field row_el_37["scale"] :: float
62
+ %t87 = const 2.0 :: float
63
+ %t88 = call core.mul(%t86, %t87) :: float
64
+ %t90 = load_input "global_offset" :: float
65
+ %t91 = const 1.0 :: float
66
+ %t92 = call core.add(%t90, %t91) :: float
67
+ %t93 = load_field batch_el_34["mean"] :: float
68
+ %t94 = call core.add(%t93, %t92) :: float
69
+ loop col id=L9 in %t40 as el=%col_el_41, idx=%col_i_42
70
+ %t69 = load_field col_el_41["val"] :: float
71
+ %t71 = call core.mul(%t69, %t88) :: float
72
+ %t73 = call core.add(%t71, %t94) :: float
73
+ %acc_39 = acc_add agg.sum(%acc_39, %t73) :: float
74
+ end_loop
75
+ %t44 = acc_load %acc_39 :: float
76
+ yield %t44
77
+ end_loop
78
+ end_loop
79
+ )
80
+ (Declaration batch_total_affine
81
+ %t45 = load_input "batch" :: array
82
+ loop batch id=L10 in %t45 as el=%batch_el_46, idx=%batch_i_47
83
+ %acc_48 = decl_acc :: float
84
+ %t49 = load_field batch_el_46["row"] :: any
85
+ loop row id=L11 in %t49 as el=%row_el_50, idx=%row_i_51
86
+ %acc77 = decl_acc :: float
87
+ %t78 = load_field row_el_50["col"] :: any
88
+ %t110 = load_input "global_offset" :: float
89
+ %t111 = const 1.0 :: float
90
+ %t112 = call core.add(%t110, %t111) :: float
91
+ loop col id=L12 in %t78 as el=%col_el_41, idx=%col_i_42
92
+ %t100 = load_field row_el_50["scale"] :: float
93
+ %t101 = const 2.0 :: float
94
+ %t102 = call core.mul(%t100, %t101) :: float
95
+ %t105 = load_field batch_el_46["mean"] :: float
96
+ %t106 = call core.add(%t105, %t112) :: float
97
+ %t107 = load_field col_el_41["val"] :: float
98
+ %t108 = call core.mul(%t107, %t102) :: float
99
+ %t109 = call core.add(%t108, %t106) :: float
100
+ %acc77 = acc_add agg.sum(%acc77, %t109) :: float
101
+ end_loop
102
+ %t80 = acc_load %acc77 :: float
103
+ %acc_48 = acc_add agg.sum(%acc_48, %t80) :: float
104
+ end_loop
105
+ %t53 = acc_load %acc_48 :: float
106
+ yield %t53
107
+ end_loop
108
+ )
109
+ )
@@ -0,0 +1,109 @@
1
+ (LIR
2
+ (Declaration global_offset_plus
3
+ %t1 = load_input "global_offset" :: float
4
+ %t2 = const 1.0 :: float
5
+ %t3 = call core.add(%t1, %t2) :: float
6
+ yield %t3
7
+ )
8
+ (Declaration batch_bias
9
+ %t4 = load_input "batch" :: array
10
+ %t54 = load_input "global_offset" :: float
11
+ %t55 = const 1.0 :: float
12
+ %t56 = call core.add(%t54, %t55) :: float
13
+ loop batch id=L1 in %t4 as el=%batch_el_5, idx=%batch_i_6
14
+ %t7 = load_field batch_el_5["mean"] :: float
15
+ %t9 = call core.add(%t7, %t56) :: float
16
+ yield %t9
17
+ end_loop
18
+ )
19
+ (Declaration row_scale2
20
+ %t10 = load_input "batch" :: array
21
+ loop batch id=L2 in %t10 as el=%batch_el_11, idx=%batch_i_12
22
+ %t13 = load_field batch_el_11["row"] :: any
23
+ loop row id=L3 in %t13 as el=%row_el_14, idx=%row_i_15
24
+ %t16 = load_field row_el_14["scale"] :: float
25
+ %t17 = const 2.0 :: float
26
+ %t18 = call core.mul(%t16, %t17) :: float
27
+ yield %t18
28
+ end_loop
29
+ end_loop
30
+ )
31
+ (Declaration elem_affine
32
+ %t19 = load_input "batch" :: array
33
+ loop batch id=L4 in %t19 as el=%batch_el_20, idx=%batch_i_21
34
+ %t22 = load_field batch_el_20["row"] :: any
35
+ %t81 = load_input "global_offset" :: float
36
+ %t82 = const 1.0 :: float
37
+ %t83 = call core.add(%t81, %t82) :: float
38
+ loop row id=L5 in %t22 as el=%row_el_23, idx=%row_i_24
39
+ %t25 = load_field row_el_23["col"] :: any
40
+ %t59 = load_field row_el_23["scale"] :: float
41
+ %t60 = const 2.0 :: float
42
+ %t61 = call core.mul(%t59, %t60) :: float
43
+ %t64 = load_field batch_el_20["mean"] :: float
44
+ %t65 = call core.add(%t64, %t83) :: float
45
+ loop col id=L6 in %t25 as el=%col_el_26, idx=%col_i_27
46
+ %t28 = load_field col_el_26["val"] :: float
47
+ %t30 = call core.mul(%t28, %t61) :: float
48
+ %t32 = call core.add(%t30, %t65) :: float
49
+ yield %t32
50
+ end_loop
51
+ end_loop
52
+ end_loop
53
+ )
54
+ (Declaration row_sum_affine
55
+ %t33 = load_input "batch" :: array
56
+ loop batch id=L7 in %t33 as el=%batch_el_34, idx=%batch_i_35
57
+ %t36 = load_field batch_el_34["row"] :: any
58
+ loop row id=L8 in %t36 as el=%row_el_37, idx=%row_i_38
59
+ %acc_39 = decl_acc :: float
60
+ %t40 = load_field row_el_37["col"] :: any
61
+ %t86 = load_field row_el_37["scale"] :: float
62
+ %t87 = const 2.0 :: float
63
+ %t88 = call core.mul(%t86, %t87) :: float
64
+ %t90 = load_input "global_offset" :: float
65
+ %t91 = const 1.0 :: float
66
+ %t92 = call core.add(%t90, %t91) :: float
67
+ %t93 = load_field batch_el_34["mean"] :: float
68
+ %t94 = call core.add(%t93, %t92) :: float
69
+ loop col id=L9 in %t40 as el=%col_el_41, idx=%col_i_42
70
+ %t69 = load_field col_el_41["val"] :: float
71
+ %t71 = call core.mul(%t69, %t88) :: float
72
+ %t73 = call core.add(%t71, %t94) :: float
73
+ %acc_39 = acc_add agg.sum(%acc_39, %t73) :: float
74
+ end_loop
75
+ %t44 = acc_load %acc_39 :: float
76
+ yield %t44
77
+ end_loop
78
+ end_loop
79
+ )
80
+ (Declaration batch_total_affine
81
+ %t45 = load_input "batch" :: array
82
+ loop batch id=L10 in %t45 as el=%batch_el_46, idx=%batch_i_47
83
+ %acc_48 = decl_acc :: float
84
+ %t49 = load_field batch_el_46["row"] :: any
85
+ loop row id=L11 in %t49 as el=%row_el_50, idx=%row_i_51
86
+ %acc77 = decl_acc :: float
87
+ %t78 = load_field row_el_50["col"] :: any
88
+ %t110 = load_input "global_offset" :: float
89
+ %t111 = const 1.0 :: float
90
+ %t112 = call core.add(%t110, %t111) :: float
91
+ loop col id=L12 in %t78 as el=%col_el_41, idx=%col_i_42
92
+ %t100 = load_field row_el_50["scale"] :: float
93
+ %t101 = const 2.0 :: float
94
+ %t102 = call core.mul(%t100, %t101) :: float
95
+ %t105 = load_field batch_el_46["mean"] :: float
96
+ %t106 = call core.add(%t105, %t112) :: float
97
+ %t107 = load_field col_el_41["val"] :: float
98
+ %t108 = call core.mul(%t107, %t102) :: float
99
+ %t109 = call core.add(%t108, %t106) :: float
100
+ %acc77 = acc_add agg.sum(%acc77, %t109) :: float
101
+ end_loop
102
+ %t80 = acc_load %acc77 :: float
103
+ %acc_48 = acc_add agg.sum(%acc_48, %t80) :: float
104
+ end_loop
105
+ %t53 = acc_load %acc_48 :: float
106
+ yield %t53
107
+ end_loop
108
+ )
109
+ )