kumi 0.0.18 → 0.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +4 -1
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +25 -0
  5. data/CLAUDE.md +26 -139
  6. data/README.md +143 -372
  7. data/data/functions/agg/boolean.yaml +14 -0
  8. data/data/functions/agg/numeric.yaml +80 -0
  9. data/data/functions/agg/string.yaml +8 -0
  10. data/data/functions/core/arithmetic.yaml +50 -0
  11. data/data/functions/core/boolean.yaml +18 -0
  12. data/data/functions/core/comparison.yaml +42 -0
  13. data/data/functions/core/constructor.yaml +32 -0
  14. data/data/functions/core/select.yaml +7 -0
  15. data/data/functions/core/stencil.yaml +21 -0
  16. data/data/functions/core/string.yaml +19 -0
  17. data/data/kernels/javascript/agg/boolean.yaml +12 -0
  18. data/data/kernels/javascript/agg/numeric.yaml +27 -0
  19. data/data/kernels/javascript/agg/string.yaml +5 -0
  20. data/data/kernels/javascript/core/arithmetic.yaml +32 -0
  21. data/data/kernels/javascript/core/boolean.yaml +12 -0
  22. data/data/kernels/javascript/core/comparison.yaml +24 -0
  23. data/data/kernels/javascript/core/constructor.yaml +15 -0
  24. data/data/kernels/javascript/core/select.yaml +7 -0
  25. data/data/kernels/javascript/core/string.yaml +12 -0
  26. data/data/kernels/ruby/agg/boolean.yaml +18 -0
  27. data/data/kernels/ruby/agg/numeric.yaml +29 -0
  28. data/data/kernels/ruby/agg/string.yaml +5 -0
  29. data/data/kernels/ruby/core/arithmetic.yaml +38 -0
  30. data/data/kernels/ruby/core/boolean.yaml +15 -0
  31. data/data/kernels/ruby/core/comparison.yaml +30 -0
  32. data/data/kernels/ruby/core/constructor.yaml +17 -0
  33. data/data/kernels/ruby/core/select.yaml +4 -0
  34. data/data/kernels/ruby/core/string.yaml +15 -0
  35. data/debug_ordering.rb +52 -0
  36. data/docs/FORM_SCHEMA.md +85 -0
  37. data/docs/OUTPUT_SCHEMA.md +69 -0
  38. data/docs/SYNTAX.md +626 -373
  39. data/golden/array_element/expected/ast.txt +21 -0
  40. data/golden/array_element/expected/input_plan.txt +5 -0
  41. data/golden/array_element/expected/lir_00_unoptimized.txt +13 -0
  42. data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +13 -0
  43. data/golden/array_element/expected/lir_02_inlined.txt +13 -0
  44. data/golden/array_element/expected/lir_03_cse.txt +13 -0
  45. data/golden/array_element/expected/lir_04_1_loop_fusion.txt +13 -0
  46. data/golden/array_element/expected/lir_04_loop_invcm.txt +13 -0
  47. data/golden/array_element/expected/lir_06_const_prop.txt +13 -0
  48. data/golden/array_element/expected/nast.txt +7 -0
  49. data/golden/array_element/expected/schema_javascript.mjs +13 -0
  50. data/golden/array_element/expected/schema_ruby.rb +41 -0
  51. data/golden/array_element/expected/snast.txt +7 -0
  52. data/golden/array_element/expected.json +5 -0
  53. data/golden/array_element/input.json +9 -0
  54. data/golden/array_element/schema.kumi +11 -0
  55. data/golden/array_index/expected/ast.txt +59 -0
  56. data/golden/array_index/expected/input_plan.txt +5 -0
  57. data/golden/array_index/expected/lir_00_unoptimized.txt +41 -0
  58. data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +41 -0
  59. data/golden/array_index/expected/lir_02_inlined.txt +42 -0
  60. data/golden/array_index/expected/lir_03_cse.txt +40 -0
  61. data/golden/array_index/expected/lir_04_1_loop_fusion.txt +40 -0
  62. data/golden/array_index/expected/lir_04_loop_invcm.txt +40 -0
  63. data/golden/array_index/expected/lir_06_const_prop.txt +40 -0
  64. data/golden/array_index/expected/nast.txt +33 -0
  65. data/golden/array_index/expected/schema_javascript.mjs +46 -0
  66. data/golden/array_index/expected/schema_ruby.rb +75 -0
  67. data/golden/array_index/expected/snast.txt +33 -0
  68. data/golden/array_index/expected.json +5 -0
  69. data/golden/array_index/input.json +1 -0
  70. data/golden/array_index/schema.kumi +19 -0
  71. data/golden/array_operations/expected/ast.txt +50 -0
  72. data/golden/array_operations/expected/input_plan.txt +10 -0
  73. data/golden/array_operations/expected/lir_00_unoptimized.txt +47 -0
  74. data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +47 -0
  75. data/golden/array_operations/expected/lir_02_inlined.txt +47 -0
  76. data/golden/array_operations/expected/lir_03_cse.txt +47 -0
  77. data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +47 -0
  78. data/golden/array_operations/expected/lir_04_loop_invcm.txt +47 -0
  79. data/golden/array_operations/expected/lir_06_const_prop.txt +47 -0
  80. data/golden/array_operations/expected/nast.txt +32 -0
  81. data/golden/array_operations/expected/schema_javascript.mjs +60 -0
  82. data/golden/array_operations/expected/schema_ruby.rb +91 -0
  83. data/golden/array_operations/expected/snast.txt +32 -0
  84. data/golden/array_operations/expected.json +27 -0
  85. data/golden/array_operations/input.json +8 -0
  86. data/golden/array_operations/schema.kumi +12 -10
  87. data/golden/cascade_logic/expected/ast.txt +37 -0
  88. data/golden/cascade_logic/expected/input_plan.txt +2 -0
  89. data/golden/cascade_logic/expected/lir_00_unoptimized.txt +29 -0
  90. data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +29 -0
  91. data/golden/cascade_logic/expected/lir_02_inlined.txt +37 -0
  92. data/golden/cascade_logic/expected/lir_03_cse.txt +30 -0
  93. data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +30 -0
  94. data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +30 -0
  95. data/golden/cascade_logic/expected/lir_06_const_prop.txt +30 -0
  96. data/golden/cascade_logic/expected/nast.txt +32 -0
  97. data/golden/cascade_logic/expected/schema_javascript.mjs +31 -0
  98. data/golden/cascade_logic/expected/schema_ruby.rb +57 -0
  99. data/golden/cascade_logic/expected/snast.txt +32 -0
  100. data/golden/cascade_logic/expected.json +5 -0
  101. data/golden/cascade_logic/input.json +4 -0
  102. data/golden/cascade_logic/schema.kumi +1 -3
  103. data/golden/chained_fusion/expected/ast.txt +57 -0
  104. data/golden/chained_fusion/expected/input_plan.txt +13 -0
  105. data/golden/chained_fusion/expected/lir_00_unoptimized.txt +76 -0
  106. data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +76 -0
  107. data/golden/chained_fusion/expected/lir_02_inlined.txt +114 -0
  108. data/golden/chained_fusion/expected/lir_03_cse.txt +97 -0
  109. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +99 -0
  110. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +97 -0
  111. data/golden/chained_fusion/expected/lir_06_const_prop.txt +97 -0
  112. data/golden/chained_fusion/expected/nast.txt +55 -0
  113. data/golden/chained_fusion/expected/schema_javascript.mjs +116 -0
  114. data/golden/chained_fusion/expected/schema_ruby.rb +149 -0
  115. data/golden/chained_fusion/expected/snast.txt +55 -0
  116. data/golden/chained_fusion/expected.json +45 -0
  117. data/golden/chained_fusion/input.json +51 -0
  118. data/golden/chained_fusion/schema.kumi +52 -0
  119. data/golden/element_arrays/expected/ast.txt +55 -0
  120. data/golden/element_arrays/expected/input_plan.txt +7 -0
  121. data/golden/element_arrays/expected/lir_00_unoptimized.txt +81 -0
  122. data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +81 -0
  123. data/golden/element_arrays/expected/lir_02_inlined.txt +85 -0
  124. data/golden/element_arrays/expected/lir_03_cse.txt +83 -0
  125. data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +83 -0
  126. data/golden/element_arrays/expected/lir_04_loop_invcm.txt +83 -0
  127. data/golden/element_arrays/expected/lir_06_const_prop.txt +83 -0
  128. data/golden/element_arrays/expected/nast.txt +42 -0
  129. data/golden/element_arrays/expected/schema_javascript.mjs +106 -0
  130. data/golden/element_arrays/expected/schema_ruby.rb +141 -0
  131. data/golden/element_arrays/expected/snast.txt +42 -0
  132. data/golden/element_arrays/expected.json +55 -0
  133. data/golden/element_arrays/input.json +12 -0
  134. data/golden/element_arrays/schema.kumi +21 -0
  135. data/golden/empty_and_null_inputs/expected/ast.txt +42 -0
  136. data/golden/empty_and_null_inputs/expected/input_plan.txt +12 -0
  137. data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +31 -0
  138. data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +31 -0
  139. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +51 -0
  140. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +49 -0
  141. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +49 -0
  142. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +49 -0
  143. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +49 -0
  144. data/golden/empty_and_null_inputs/expected/nast.txt +18 -0
  145. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +47 -0
  146. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +79 -0
  147. data/golden/empty_and_null_inputs/expected/snast.txt +18 -0
  148. data/golden/empty_and_null_inputs/expected.json +8 -0
  149. data/golden/empty_and_null_inputs/input.json +16 -0
  150. data/golden/empty_and_null_inputs/schema.kumi +30 -0
  151. data/golden/game_of_life/expected/ast.txt +118 -0
  152. data/golden/game_of_life/expected/input_plan.txt +5 -0
  153. data/golden/game_of_life/expected/lir_00_unoptimized.txt +343 -0
  154. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +343 -0
  155. data/golden/game_of_life/expected/lir_02_inlined.txt +1918 -0
  156. data/golden/game_of_life/expected/lir_03_cse.txt +766 -0
  157. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +766 -0
  158. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +766 -0
  159. data/golden/game_of_life/expected/lir_06_const_prop.txt +766 -0
  160. data/golden/game_of_life/expected/nast.txt +104 -0
  161. data/golden/game_of_life/expected/schema_javascript.mjs +98 -0
  162. data/golden/game_of_life/expected/schema_ruby.rb +125 -0
  163. data/golden/game_of_life/expected/snast.txt +104 -0
  164. data/golden/game_of_life/expected.json +3 -0
  165. data/golden/game_of_life/input.json +8 -0
  166. data/golden/game_of_life/schema.kumi +33 -0
  167. data/golden/hash_keys/expected/ast.txt +29 -0
  168. data/golden/hash_keys/expected/input_plan.txt +2 -0
  169. data/golden/hash_keys/expected/lir_00_unoptimized.txt +18 -0
  170. data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +18 -0
  171. data/golden/hash_keys/expected/lir_02_inlined.txt +18 -0
  172. data/golden/hash_keys/expected/lir_03_cse.txt +18 -0
  173. data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +18 -0
  174. data/golden/hash_keys/expected/lir_04_loop_invcm.txt +18 -0
  175. data/golden/hash_keys/expected/lir_06_const_prop.txt +18 -0
  176. data/golden/hash_keys/expected/nast.txt +46 -0
  177. data/golden/hash_keys/expected/schema_javascript.mjs +34 -0
  178. data/golden/hash_keys/expected/schema_ruby.rb +61 -0
  179. data/golden/hash_keys/expected/snast.txt +46 -0
  180. data/golden/hash_keys/expected.json +20 -0
  181. data/golden/hash_keys/input.json +4 -0
  182. data/golden/hash_keys/schema.kumi +14 -0
  183. data/golden/hash_value/expected/ast.txt +37 -0
  184. data/golden/hash_value/expected/input_plan.txt +7 -0
  185. data/golden/hash_value/expected/lir_00_unoptimized.txt +30 -0
  186. data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +30 -0
  187. data/golden/hash_value/expected/lir_02_inlined.txt +36 -0
  188. data/golden/hash_value/expected/lir_03_cse.txt +33 -0
  189. data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +33 -0
  190. data/golden/hash_value/expected/lir_04_loop_invcm.txt +33 -0
  191. data/golden/hash_value/expected/lir_06_const_prop.txt +33 -0
  192. data/golden/hash_value/expected/nast.txt +25 -0
  193. data/golden/hash_value/expected/schema_javascript.mjs +46 -0
  194. data/golden/hash_value/expected/schema_ruby.rb +75 -0
  195. data/golden/hash_value/expected/snast.txt +25 -0
  196. data/golden/hash_value/expected.json +19 -0
  197. data/golden/hash_value/input.json +12 -0
  198. data/golden/hash_value/schema.kumi +19 -0
  199. data/golden/hierarchical_complex/expected/ast.txt +85 -0
  200. data/golden/hierarchical_complex/expected/input_plan.txt +23 -0
  201. data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +87 -0
  202. data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +87 -0
  203. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +115 -0
  204. data/golden/hierarchical_complex/expected/lir_03_cse.txt +89 -0
  205. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +89 -0
  206. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +89 -0
  207. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +89 -0
  208. data/golden/hierarchical_complex/expected/nast.txt +49 -0
  209. data/golden/hierarchical_complex/expected/schema_javascript.mjs +121 -0
  210. data/golden/hierarchical_complex/expected/schema_ruby.rb +151 -0
  211. data/golden/hierarchical_complex/expected/snast.txt +49 -0
  212. data/golden/hierarchical_complex/expected.json +34 -0
  213. data/golden/hierarchical_complex/input.json +26 -0
  214. data/golden/hierarchical_complex/schema.kumi +38 -0
  215. data/golden/input_reference/expected/ast.txt +46 -0
  216. data/golden/input_reference/expected/input_plan.txt +15 -0
  217. data/golden/input_reference/expected/lir_00_unoptimized.txt +39 -0
  218. data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +39 -0
  219. data/golden/input_reference/expected/lir_02_inlined.txt +39 -0
  220. data/golden/input_reference/expected/lir_03_cse.txt +39 -0
  221. data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +39 -0
  222. data/golden/input_reference/expected/lir_04_loop_invcm.txt +39 -0
  223. data/golden/input_reference/expected/lir_06_const_prop.txt +39 -0
  224. data/golden/input_reference/expected/nast.txt +21 -0
  225. data/golden/input_reference/expected/schema_javascript.mjs +45 -0
  226. data/golden/input_reference/expected/schema_ruby.rb +74 -0
  227. data/golden/input_reference/expected/snast.txt +21 -0
  228. data/golden/input_reference/expected.json +7 -0
  229. data/golden/input_reference/input.json +11 -0
  230. data/golden/input_reference/schema.kumi +22 -0
  231. data/golden/interleaved_fusion/expected/ast.txt +51 -0
  232. data/golden/interleaved_fusion/expected/input_plan.txt +13 -0
  233. data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +53 -0
  234. data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +53 -0
  235. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +89 -0
  236. data/golden/interleaved_fusion/expected/lir_03_cse.txt +77 -0
  237. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +77 -0
  238. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +77 -0
  239. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +77 -0
  240. data/golden/interleaved_fusion/expected/nast.txt +41 -0
  241. data/golden/interleaved_fusion/expected/schema_javascript.mjs +86 -0
  242. data/golden/interleaved_fusion/expected/schema_ruby.rb +122 -0
  243. data/golden/interleaved_fusion/expected/snast.txt +41 -0
  244. data/golden/interleaved_fusion/expected.json +37 -0
  245. data/golden/interleaved_fusion/input.json +26 -0
  246. data/golden/interleaved_fusion/schema.kumi +57 -0
  247. data/golden/let_inline/expected/ast.txt +33 -0
  248. data/golden/let_inline/expected/input_plan.txt +2 -0
  249. data/golden/let_inline/expected/lir_00_unoptimized.txt +26 -0
  250. data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +26 -0
  251. data/golden/let_inline/expected/lir_02_inlined.txt +36 -0
  252. data/golden/let_inline/expected/lir_03_cse.txt +30 -0
  253. data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +30 -0
  254. data/golden/let_inline/expected/lir_04_loop_invcm.txt +30 -0
  255. data/golden/let_inline/expected/lir_06_const_prop.txt +30 -0
  256. data/golden/let_inline/expected/nast.txt +26 -0
  257. data/golden/let_inline/expected/schema_javascript.mjs +11 -0
  258. data/golden/let_inline/expected/schema_ruby.rb +37 -0
  259. data/golden/let_inline/expected/snast.txt +26 -0
  260. data/golden/let_inline/expected.json +1 -0
  261. data/golden/let_inline/input.json +1 -0
  262. data/golden/let_inline/schema.kumi +11 -0
  263. data/golden/loop_fusion/expected/ast.txt +44 -0
  264. data/golden/loop_fusion/expected/input_plan.txt +13 -0
  265. data/golden/loop_fusion/expected/lir_00_unoptimized.txt +43 -0
  266. data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +43 -0
  267. data/golden/loop_fusion/expected/lir_02_inlined.txt +62 -0
  268. data/golden/loop_fusion/expected/lir_03_cse.txt +57 -0
  269. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +57 -0
  270. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +57 -0
  271. data/golden/loop_fusion/expected/lir_06_const_prop.txt +57 -0
  272. data/golden/loop_fusion/expected/nast.txt +32 -0
  273. data/golden/loop_fusion/expected/schema_javascript.mjs +64 -0
  274. data/golden/loop_fusion/expected/schema_ruby.rb +97 -0
  275. data/golden/loop_fusion/expected/snast.txt +32 -0
  276. data/golden/loop_fusion/expected.json +30 -0
  277. data/golden/loop_fusion/input.json +28 -0
  278. data/golden/loop_fusion/schema.kumi +32 -0
  279. data/golden/min_reduce_scope/expected/ast.txt +49 -0
  280. data/golden/min_reduce_scope/expected/input_plan.txt +9 -0
  281. data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +59 -0
  282. data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +59 -0
  283. data/golden/min_reduce_scope/expected/lir_02_inlined.txt +63 -0
  284. data/golden/min_reduce_scope/expected/lir_03_cse.txt +60 -0
  285. data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +60 -0
  286. data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +60 -0
  287. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +60 -0
  288. data/golden/min_reduce_scope/expected/nast.txt +29 -0
  289. data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -0
  290. data/golden/min_reduce_scope/expected/schema_ruby.rb +99 -0
  291. data/golden/min_reduce_scope/expected/snast.txt +29 -0
  292. data/golden/min_reduce_scope/expected.json +9 -0
  293. data/golden/min_reduce_scope/input.json +18 -0
  294. data/golden/min_reduce_scope/schema.kumi +25 -0
  295. data/golden/mixed_dimensions/expected/ast.txt +54 -0
  296. data/golden/mixed_dimensions/expected/input_plan.txt +15 -0
  297. data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +42 -0
  298. data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +42 -0
  299. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +48 -0
  300. data/golden/mixed_dimensions/expected/lir_03_cse.txt +48 -0
  301. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +48 -0
  302. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +48 -0
  303. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +48 -0
  304. data/golden/mixed_dimensions/expected/nast.txt +22 -0
  305. data/golden/mixed_dimensions/expected/schema_javascript.mjs +53 -0
  306. data/golden/mixed_dimensions/expected/schema_ruby.rb +84 -0
  307. data/golden/mixed_dimensions/expected/snast.txt +22 -0
  308. data/golden/mixed_dimensions/expected.json +6 -0
  309. data/golden/mixed_dimensions/input.json +22 -0
  310. data/golden/mixed_dimensions/schema.kumi +35 -0
  311. data/golden/multirank_hoisting/expected/ast.txt +72 -0
  312. data/golden/multirank_hoisting/expected/input_plan.txt +18 -0
  313. data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +75 -0
  314. data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +75 -0
  315. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +126 -0
  316. data/golden/multirank_hoisting/expected/lir_03_cse.txt +109 -0
  317. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +109 -0
  318. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +109 -0
  319. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +109 -0
  320. data/golden/multirank_hoisting/expected/nast.txt +39 -0
  321. data/golden/multirank_hoisting/expected/schema_javascript.mjs +128 -0
  322. data/golden/multirank_hoisting/expected/schema_ruby.rb +162 -0
  323. data/golden/multirank_hoisting/expected/snast.txt +39 -0
  324. data/golden/multirank_hoisting/expected.json +15 -0
  325. data/golden/multirank_hoisting/input.json +19 -0
  326. data/golden/multirank_hoisting/schema.kumi +38 -0
  327. data/golden/nested_hash/expected/ast.txt +22 -0
  328. data/golden/nested_hash/expected/input_plan.txt +5 -0
  329. data/golden/nested_hash/expected/lir_00_unoptimized.txt +10 -0
  330. data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +10 -0
  331. data/golden/nested_hash/expected/lir_02_inlined.txt +10 -0
  332. data/golden/nested_hash/expected/lir_03_cse.txt +10 -0
  333. data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +10 -0
  334. data/golden/nested_hash/expected/lir_04_loop_invcm.txt +10 -0
  335. data/golden/nested_hash/expected/lir_06_const_prop.txt +10 -0
  336. data/golden/nested_hash/expected/nast.txt +8 -0
  337. data/golden/nested_hash/expected/schema_javascript.mjs +9 -0
  338. data/golden/nested_hash/expected/schema_ruby.rb +35 -0
  339. data/golden/nested_hash/expected/snast.txt +8 -0
  340. data/golden/nested_hash/expected.json +3 -0
  341. data/golden/nested_hash/input.json +7 -0
  342. data/golden/nested_hash/schema.kumi +11 -0
  343. data/golden/reduction_broadcast/expected/ast.txt +49 -0
  344. data/golden/reduction_broadcast/expected/input_plan.txt +13 -0
  345. data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +49 -0
  346. data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +49 -0
  347. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +80 -0
  348. data/golden/reduction_broadcast/expected/lir_03_cse.txt +68 -0
  349. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +68 -0
  350. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +68 -0
  351. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +68 -0
  352. data/golden/reduction_broadcast/expected/nast.txt +24 -0
  353. data/golden/reduction_broadcast/expected/schema_javascript.mjs +74 -0
  354. data/golden/reduction_broadcast/expected/schema_ruby.rb +110 -0
  355. data/golden/reduction_broadcast/expected/snast.txt +24 -0
  356. data/golden/reduction_broadcast/expected.json +25 -0
  357. data/golden/reduction_broadcast/input.json +19 -0
  358. data/golden/reduction_broadcast/schema.kumi +34 -0
  359. data/golden/roll/expected/ast.txt +36 -0
  360. data/golden/roll/expected/input_plan.txt +3 -0
  361. data/golden/roll/expected/lir_00_unoptimized.txt +56 -0
  362. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +56 -0
  363. data/golden/roll/expected/lir_02_inlined.txt +56 -0
  364. data/golden/roll/expected/lir_03_cse.txt +55 -0
  365. data/golden/roll/expected/lir_04_1_loop_fusion.txt +55 -0
  366. data/golden/roll/expected/lir_04_loop_invcm.txt +55 -0
  367. data/golden/roll/expected/lir_06_const_prop.txt +55 -0
  368. data/golden/roll/expected/nast.txt +26 -0
  369. data/golden/roll/expected/schema_javascript.mjs +65 -0
  370. data/golden/roll/expected/schema_ruby.rb +95 -0
  371. data/golden/roll/expected/snast.txt +26 -0
  372. data/golden/roll/expected.json +6 -0
  373. data/golden/roll/input.json +1 -0
  374. data/golden/roll/schema.kumi +13 -0
  375. data/golden/shift/expected/ast.txt +48 -0
  376. data/golden/shift/expected/input_plan.txt +3 -0
  377. data/golden/shift/expected/lir_00_unoptimized.txt +96 -0
  378. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +96 -0
  379. data/golden/shift/expected/lir_02_inlined.txt +96 -0
  380. data/golden/shift/expected/lir_03_cse.txt +90 -0
  381. data/golden/shift/expected/lir_04_1_loop_fusion.txt +90 -0
  382. data/golden/shift/expected/lir_04_loop_invcm.txt +90 -0
  383. data/golden/shift/expected/lir_06_const_prop.txt +90 -0
  384. data/golden/shift/expected/nast.txt +38 -0
  385. data/golden/shift/expected/schema_javascript.mjs +106 -0
  386. data/golden/shift/expected/schema_ruby.rb +138 -0
  387. data/golden/shift/expected/snast.txt +38 -0
  388. data/golden/shift/expected.json +8 -0
  389. data/golden/shift/input.json +1 -0
  390. data/golden/shift/schema.kumi +15 -0
  391. data/golden/shift_2d/expected/ast.txt +88 -0
  392. data/golden/shift_2d/expected/input_plan.txt +5 -0
  393. data/golden/shift_2d/expected/lir_00_unoptimized.txt +274 -0
  394. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +274 -0
  395. data/golden/shift_2d/expected/lir_02_inlined.txt +274 -0
  396. data/golden/shift_2d/expected/lir_03_cse.txt +262 -0
  397. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +262 -0
  398. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +262 -0
  399. data/golden/shift_2d/expected/lir_06_const_prop.txt +262 -0
  400. data/golden/shift_2d/expected/nast.txt +74 -0
  401. data/golden/shift_2d/expected/schema_javascript.mjs +320 -0
  402. data/golden/shift_2d/expected/schema_ruby.rb +358 -0
  403. data/golden/shift_2d/expected/snast.txt +74 -0
  404. data/golden/shift_2d/expected.json +15 -0
  405. data/golden/shift_2d/input.json +14 -0
  406. data/golden/shift_2d/schema.kumi +25 -0
  407. data/golden/simple_math/expected/ast.txt +40 -0
  408. data/golden/simple_math/expected/input_plan.txt +2 -0
  409. data/golden/simple_math/expected/lir_00_unoptimized.txt +31 -0
  410. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +31 -0
  411. data/golden/simple_math/expected/lir_02_inlined.txt +31 -0
  412. data/golden/simple_math/expected/lir_03_cse.txt +31 -0
  413. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +31 -0
  414. data/golden/simple_math/expected/lir_04_loop_invcm.txt +31 -0
  415. data/golden/simple_math/expected/lir_06_const_prop.txt +31 -0
  416. data/golden/simple_math/expected/nast.txt +33 -0
  417. data/golden/simple_math/expected/schema_javascript.mjs +33 -0
  418. data/golden/simple_math/expected/schema_ruby.rb +59 -0
  419. data/golden/simple_math/expected/snast.txt +33 -0
  420. data/golden/simple_math/expected.json +1 -0
  421. data/golden/simple_math/input.json +4 -0
  422. data/golden/simple_math/schema.kumi +2 -1
  423. data/golden/streaming_basics/expected/ast.txt +64 -0
  424. data/golden/streaming_basics/expected/input_plan.txt +8 -0
  425. data/golden/streaming_basics/expected/lir_00_unoptimized.txt +73 -0
  426. data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +73 -0
  427. data/golden/streaming_basics/expected/lir_02_inlined.txt +100 -0
  428. data/golden/streaming_basics/expected/lir_03_cse.txt +84 -0
  429. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +84 -0
  430. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +84 -0
  431. data/golden/streaming_basics/expected/lir_06_const_prop.txt +84 -0
  432. data/golden/streaming_basics/expected/nast.txt +48 -0
  433. data/golden/streaming_basics/expected/schema_javascript.mjs +94 -0
  434. data/golden/streaming_basics/expected/schema_ruby.rb +127 -0
  435. data/golden/streaming_basics/expected/snast.txt +48 -0
  436. data/golden/streaming_basics/expected.json +10 -0
  437. data/golden/streaming_basics/input.json +8 -0
  438. data/golden/streaming_basics/schema.kumi +24 -0
  439. data/golden/tuples/expected/ast.txt +48 -0
  440. data/golden/tuples/expected/input_plan.txt +1 -0
  441. data/golden/tuples/expected/lir_00_unoptimized.txt +40 -0
  442. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +40 -0
  443. data/golden/tuples/expected/lir_02_inlined.txt +48 -0
  444. data/golden/tuples/expected/lir_03_cse.txt +48 -0
  445. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +48 -0
  446. data/golden/tuples/expected/lir_04_loop_invcm.txt +48 -0
  447. data/golden/tuples/expected/lir_06_const_prop.txt +48 -0
  448. data/golden/tuples/expected/nast.txt +42 -0
  449. data/golden/tuples/expected/schema_javascript.mjs +51 -0
  450. data/golden/tuples/expected/schema_ruby.rb +77 -0
  451. data/golden/tuples/expected/snast.txt +42 -0
  452. data/golden/tuples/expected.json +7 -0
  453. data/golden/tuples/input.json +3 -0
  454. data/golden/tuples/schema.kumi +11 -0
  455. data/golden/tuples_and_arrays/expected/ast.txt +44 -0
  456. data/golden/tuples_and_arrays/expected/input_plan.txt +7 -0
  457. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +41 -0
  458. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +41 -0
  459. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +62 -0
  460. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +51 -0
  461. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +51 -0
  462. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +51 -0
  463. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +51 -0
  464. data/golden/tuples_and_arrays/expected/nast.txt +28 -0
  465. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +58 -0
  466. data/golden/tuples_and_arrays/expected/schema_ruby.rb +88 -0
  467. data/golden/tuples_and_arrays/expected/snast.txt +28 -0
  468. data/golden/tuples_and_arrays/expected.json +18 -0
  469. data/golden/tuples_and_arrays/input.json +7 -0
  470. data/golden/tuples_and_arrays/schema.kumi +38 -0
  471. data/golden/with_constants/expected/ast.txt +28 -0
  472. data/golden/with_constants/expected/input_plan.txt +2 -0
  473. data/golden/with_constants/expected/lir_00_unoptimized.txt +17 -0
  474. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +17 -0
  475. data/golden/with_constants/expected/lir_02_inlined.txt +17 -0
  476. data/golden/with_constants/expected/lir_03_cse.txt +17 -0
  477. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +17 -0
  478. data/golden/with_constants/expected/lir_04_loop_invcm.txt +17 -0
  479. data/golden/with_constants/expected/lir_06_const_prop.txt +17 -0
  480. data/golden/with_constants/expected/nast.txt +21 -0
  481. data/golden/with_constants/expected/schema_javascript.mjs +18 -0
  482. data/golden/with_constants/expected/schema_ruby.rb +44 -0
  483. data/golden/with_constants/expected/snast.txt +15 -0
  484. data/golden/with_constants/schema.kumi +10 -0
  485. data/lib/kumi/analyzer.rb +76 -24
  486. data/lib/kumi/configuration.rb +60 -0
  487. data/lib/kumi/core/analyzer/binder.rb +121 -0
  488. data/lib/kumi/core/analyzer/checkpoint.rb +15 -9
  489. data/lib/kumi/core/analyzer/constant_evaluator.rb +32 -37
  490. data/lib/kumi/core/analyzer/constant_folding_helpers.rb +55 -0
  491. data/lib/kumi/core/analyzer/debug.rb +14 -16
  492. data/lib/kumi/core/analyzer/fn_aliases.rb +46 -0
  493. data/lib/kumi/core/analyzer/folder.rb +94 -0
  494. data/lib/kumi/core/analyzer/macro_expander.rb +69 -0
  495. data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +130 -0
  496. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +71 -0
  497. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +181 -0
  498. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +317 -0
  499. data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +75 -0
  500. data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +103 -0
  501. data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +27 -0
  502. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +321 -0
  503. data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +85 -0
  504. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +111 -0
  505. data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +32 -0
  506. data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +33 -0
  507. data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +220 -0
  508. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +5 -6
  509. data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +7 -3
  510. data/lib/kumi/core/analyzer/passes/input_collector.rb +74 -122
  511. data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +43 -0
  512. data/lib/kumi/core/analyzer/passes/ir_dependency_pass.rb +1 -1
  513. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +1 -1
  514. data/lib/kumi/core/analyzer/passes/join_reduce_planning_pass.rb +21 -23
  515. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +84 -0
  516. data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +93 -0
  517. data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +115 -0
  518. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +274 -0
  519. data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +198 -0
  520. data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +30 -0
  521. data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +121 -0
  522. data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +156 -0
  523. data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +148 -0
  524. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +407 -0
  525. data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +243 -0
  526. data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +83 -0
  527. data/lib/kumi/core/analyzer/passes/load_input_cse.rb +17 -16
  528. data/lib/kumi/core/analyzer/passes/lower_to_ir_pass.rb +4 -2
  529. data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +197 -0
  530. data/lib/kumi/core/analyzer/passes/name_indexer.rb +4 -1
  531. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +237 -0
  532. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +156 -0
  533. data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +38 -0
  534. data/lib/kumi/core/analyzer/passes/pass_base.rb +30 -4
  535. data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +93 -0
  536. data/lib/kumi/core/analyzer/passes/scope_resolution_pass.rb +33 -30
  537. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -26
  538. data/lib/kumi/core/analyzer/passes/snast_pass.rb +229 -0
  539. data/lib/kumi/core/analyzer/passes/toposorter.rb +1 -0
  540. data/lib/kumi/core/analyzer/passes/type_checker.rb +13 -0
  541. data/lib/kumi/core/analyzer/passes/type_inferencer_pass.rb +14 -16
  542. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +2 -1
  543. data/lib/kumi/core/analyzer/plans.rb +12 -0
  544. data/lib/kumi/core/analyzer/state_serde.rb +4 -4
  545. data/lib/kumi/core/analyzer/structs/access_plan.rb +2 -2
  546. data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +59 -0
  547. data/lib/kumi/core/compiler/access_codegen.rb +1 -1
  548. data/lib/kumi/core/compiler/access_emit/base.rb +9 -5
  549. data/lib/kumi/core/compiler/access_emit/each_indexed.rb +10 -3
  550. data/lib/kumi/core/compiler/access_emit/materialize.rb +12 -5
  551. data/lib/kumi/core/compiler/access_emit/ravel.rb +10 -3
  552. data/lib/kumi/core/compiler/access_emit/read.rb +4 -1
  553. data/lib/kumi/core/compiler/access_planner.rb +42 -4
  554. data/lib/kumi/core/compiler/access_planner_v2.rb +164 -0
  555. data/lib/kumi/core/explain.rb +18 -11
  556. data/lib/kumi/core/functions/loader.rb +47 -0
  557. data/lib/kumi/core/functions/model.rb +10 -0
  558. data/lib/kumi/core/functions/type_rules.rb +108 -0
  559. data/lib/kumi/core/ir/execution_engine/interpreter.rb +1 -1
  560. data/lib/kumi/core/ir/execution_engine/profiler.rb +107 -97
  561. data/lib/kumi/core/ir.rb +6 -2
  562. data/lib/kumi/core/irv2/builder.rb +48 -0
  563. data/lib/kumi/core/irv2/declaration.rb +28 -0
  564. data/lib/kumi/core/irv2/module.rb +108 -0
  565. data/lib/kumi/core/irv2/value.rb +28 -0
  566. data/lib/kumi/core/lir/analyze.rb +64 -0
  567. data/lib/kumi/core/lir/build.rb +363 -0
  568. data/lib/kumi/core/lir/emit.rb +62 -0
  569. data/lib/kumi/core/lir/structs/instruction.rb +44 -0
  570. data/lib/kumi/core/lir/structs/literal.rb +14 -0
  571. data/lib/kumi/core/lir/structs/stamp.rb +13 -0
  572. data/lib/kumi/core/lir/support/error.rb +9 -0
  573. data/lib/kumi/core/lir/support/ids.rb +34 -0
  574. data/lib/kumi/core/lir/validate.rb +74 -0
  575. data/lib/kumi/core/lir.rb +34 -0
  576. data/lib/kumi/core/nast.rb +216 -0
  577. data/lib/kumi/core/ruby_parser/dsl.rb +2 -2
  578. data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +1 -1
  579. data/lib/kumi/core/ruby_parser/expression_converter.rb +10 -0
  580. data/lib/kumi/core/ruby_parser/input_builder.rb +16 -17
  581. data/lib/kumi/core/ruby_parser/schema_builder.rb +36 -10
  582. data/lib/kumi/core/ruby_parser/sugar.rb +64 -0
  583. data/lib/kumi/core/types/builder.rb +2 -2
  584. data/lib/kumi/core/types/normalizer.rb +2 -0
  585. data/lib/kumi/core/types/validator.rb +10 -3
  586. data/lib/kumi/core/types.rb +7 -0
  587. data/lib/kumi/dev/codegen.rb +194 -0
  588. data/lib/kumi/dev/golden/generator.rb +105 -0
  589. data/lib/kumi/dev/golden/reporter.rb +160 -0
  590. data/lib/kumi/dev/golden/representation.rb +45 -0
  591. data/lib/kumi/dev/golden/result.rb +98 -0
  592. data/lib/kumi/dev/golden/runtime_test.rb +93 -0
  593. data/lib/kumi/dev/golden/suite.rb +131 -0
  594. data/lib/kumi/dev/golden/verifier.rb +76 -0
  595. data/lib/kumi/dev/golden.rb +75 -0
  596. data/lib/kumi/dev/ir.rb +4 -4
  597. data/lib/kumi/dev/parse.rb +1 -1
  598. data/lib/kumi/dev/pretty_printer.rb +229 -0
  599. data/lib/kumi/dev/printer/irv2_formatter.rb +163 -0
  600. data/lib/kumi/dev/printer/width_aware_json.rb +44 -0
  601. data/lib/kumi/dev/profile_aggregator.rb +36 -38
  602. data/lib/kumi/dev/profile_runner.rb +19 -23
  603. data/lib/kumi/dev/runner.rb +12 -22
  604. data/lib/kumi/dev/support/kumi_runner.mjs +39 -0
  605. data/lib/kumi/dev.rb +3 -3
  606. data/lib/kumi/frontends/ruby.rb +12 -12
  607. data/lib/kumi/frontends/text.rb +26 -21
  608. data/lib/kumi/frontends.rb +6 -8
  609. data/lib/kumi/kernel_registry.rb +59 -0
  610. data/lib/kumi/pack/builder.rb +229 -0
  611. data/lib/kumi/pack.rb +15 -0
  612. data/lib/kumi/registry_v2/loader.rb +81 -0
  613. data/lib/kumi/registry_v2.rb +118 -0
  614. data/lib/kumi/schema.rb +83 -43
  615. data/lib/kumi/support/diff.rb +3 -2
  616. data/lib/kumi/support/ir_render.rb +1 -1
  617. data/lib/kumi/support/lir_printer.rb +143 -0
  618. data/lib/kumi/support/nast_printer.rb +93 -0
  619. data/lib/kumi/support/s_expression_printer.rb +5 -4
  620. data/lib/kumi/support/snast_printer.rb +111 -0
  621. data/lib/kumi/syntax/call_expression.rb +1 -1
  622. data/lib/kumi/syntax/input_declaration.rb +2 -2
  623. data/lib/kumi/syntax/node.rb +4 -12
  624. data/lib/kumi/syntax/root.rb +10 -0
  625. data/lib/kumi/syntax/trait_declaration.rb +1 -0
  626. data/lib/kumi/syntax/value_declaration.rb +1 -0
  627. data/lib/kumi/version.rb +1 -1
  628. data/lib/kumi.rb +47 -5
  629. metadata +571 -54
  630. data/docs/AST.md +0 -133
  631. data/docs/DSL.md +0 -154
  632. data/docs/FUNCTIONS.md +0 -176
  633. data/docs/VECTOR_SEMANTICS.md +0 -286
  634. data/docs/compiler_design_principles.md +0 -86
  635. data/docs/dev/analyzer-debug.md +0 -52
  636. data/docs/dev/parse-command.md +0 -64
  637. data/docs/dev/vm-profiling.md +0 -95
  638. data/docs/development/README.md +0 -120
  639. data/docs/development/error-reporting.md +0 -361
  640. data/docs/features/README.md +0 -58
  641. data/docs/features/analysis-type-inference.md +0 -42
  642. data/docs/features/analysis-unsat-detection.md +0 -71
  643. data/docs/features/hierarchical-broadcasting.md +0 -415
  644. data/docs/features/input-declaration-system.md +0 -58
  645. data/docs/features/performance.md +0 -14
  646. data/docs/features/s-expression-printer.md +0 -77
  647. data/docs/schema_metadata/broadcasts.md +0 -53
  648. data/docs/schema_metadata/cascades.md +0 -45
  649. data/docs/schema_metadata/declarations.md +0 -54
  650. data/docs/schema_metadata/dependencies.md +0 -57
  651. data/docs/schema_metadata/evaluation_order.md +0 -29
  652. data/docs/schema_metadata/examples.md +0 -95
  653. data/docs/schema_metadata/inferred_types.md +0 -46
  654. data/docs/schema_metadata/inputs.md +0 -86
  655. data/docs/schema_metadata.md +0 -108
  656. data/golden/mixed_nesting/schema.kumi +0 -42
  657. data/lib/kumi/core/function_registry/collection_functions.rb +0 -298
  658. data/lib/kumi/core/function_registry/comparison_functions.rb +0 -33
  659. data/lib/kumi/core/function_registry/conditional_functions.rb +0 -48
  660. data/lib/kumi/core/function_registry/function_builder.rb +0 -184
  661. data/lib/kumi/core/function_registry/logical_functions.rb +0 -214
  662. data/lib/kumi/core/function_registry/math_functions.rb +0 -74
  663. data/lib/kumi/core/function_registry/stat_functions.rb +0 -156
  664. data/lib/kumi/core/function_registry/string_functions.rb +0 -57
  665. data/lib/kumi/core/function_registry/type_functions.rb +0 -53
  666. data/lib/kumi/core/function_registry.rb +0 -176
  667. data/lib/kumi/registry.rb +0 -32
  668. data/lib/kumi/runtime/executable.rb +0 -135
  669. data/lib/kumi/runtime/run.rb +0 -105
  670. data/performance_results.txt +0 -63
  671. data/scripts/analyze_broadcast_methods.rb +0 -68
  672. data/scripts/analyze_cascade_methods.rb +0 -74
  673. data/scripts/check_broadcasting_coverage.rb +0 -51
  674. data/scripts/find_dead_code.rb +0 -114
  675. data/scripts/generate_function_docs.rb +0 -71
  676. data/scripts/test_mixed_nesting_performance.rb +0 -206
@@ -0,0 +1,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
+ %t17 = const 2.0 :: float
22
+ loop batch id=L2 in %t10 as el=%batch_el_11, idx=%batch_i_12
23
+ %t13 = load_field batch_el_11["row"] :: any
24
+ loop row id=L3 in %t13 as el=%row_el_14, idx=%row_i_15
25
+ %t16 = load_field row_el_14["scale"] :: 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
+ %t81 = load_input "global_offset" :: float
34
+ %t82 = const 1.0 :: float
35
+ %t60 = const 2.0 :: float
36
+ %t83 = call core.add(%t81, %t82) :: float
37
+ loop batch id=L4 in %t19 as el=%batch_el_20, idx=%batch_i_21
38
+ %t22 = load_field batch_el_20["row"] :: any
39
+ %t64 = load_field batch_el_20["mean"] :: float
40
+ %t65 = call core.add(%t64, %t83) :: float
41
+ loop row id=L5 in %t22 as el=%row_el_23, idx=%row_i_24
42
+ %t25 = load_field row_el_23["col"] :: any
43
+ %t59 = load_field row_el_23["scale"] :: float
44
+ %t61 = call core.mul(%t59, %t60) :: 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
+ %t87 = const 2.0 :: float
57
+ %t90 = load_input "global_offset" :: float
58
+ %t91 = const 1.0 :: float
59
+ %t92 = call core.add(%t90, %t91) :: float
60
+ loop batch id=L7 in %t33 as el=%batch_el_34, idx=%batch_i_35
61
+ %t36 = load_field batch_el_34["row"] :: any
62
+ %t93 = load_field batch_el_34["mean"] :: float
63
+ %t94 = call core.add(%t93, %t92) :: float
64
+ loop row id=L8 in %t36 as el=%row_el_37, idx=%row_i_38
65
+ %acc_39 = decl_acc :: float
66
+ %t40 = load_field row_el_37["col"] :: any
67
+ %t86 = load_field row_el_37["scale"] :: float
68
+ %t88 = call core.mul(%t86, %t87) :: 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
+ %t110 = load_input "global_offset" :: float
83
+ %t111 = const 1.0 :: float
84
+ %t101 = const 2.0 :: float
85
+ %t112 = call core.add(%t110, %t111) :: float
86
+ loop batch id=L10 in %t45 as el=%batch_el_46, idx=%batch_i_47
87
+ %acc_48 = decl_acc :: float
88
+ %t49 = load_field batch_el_46["row"] :: any
89
+ %t105 = load_field batch_el_46["mean"] :: float
90
+ %t106 = call core.add(%t105, %t112) :: float
91
+ loop row id=L11 in %t49 as el=%row_el_50, idx=%row_i_51
92
+ %acc77 = decl_acc :: float
93
+ %t78 = load_field row_el_50["col"] :: any
94
+ %t100 = load_field row_el_50["scale"] :: float
95
+ %t102 = call core.mul(%t100, %t101) :: float
96
+ loop col id=L12 in %t78 as el=%col_el_41, idx=%col_i_42
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
+ %t17 = const 2.0 :: float
22
+ loop batch id=L2 in %t10 as el=%batch_el_11, idx=%batch_i_12
23
+ %t13 = load_field batch_el_11["row"] :: any
24
+ loop row id=L3 in %t13 as el=%row_el_14, idx=%row_i_15
25
+ %t16 = load_field row_el_14["scale"] :: 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
+ %t81 = load_input "global_offset" :: float
34
+ %t82 = const 1.0 :: float
35
+ %t60 = const 2.0 :: float
36
+ %t83 = call core.add(%t81, %t82) :: float
37
+ loop batch id=L4 in %t19 as el=%batch_el_20, idx=%batch_i_21
38
+ %t22 = load_field batch_el_20["row"] :: any
39
+ %t64 = load_field batch_el_20["mean"] :: float
40
+ %t65 = call core.add(%t64, %t83) :: float
41
+ loop row id=L5 in %t22 as el=%row_el_23, idx=%row_i_24
42
+ %t25 = load_field row_el_23["col"] :: any
43
+ %t59 = load_field row_el_23["scale"] :: float
44
+ %t61 = call core.mul(%t59, %t60) :: 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
+ %t87 = const 2.0 :: float
57
+ %t90 = load_input "global_offset" :: float
58
+ %t91 = const 1.0 :: float
59
+ %t92 = call core.add(%t90, %t91) :: float
60
+ loop batch id=L7 in %t33 as el=%batch_el_34, idx=%batch_i_35
61
+ %t36 = load_field batch_el_34["row"] :: any
62
+ %t93 = load_field batch_el_34["mean"] :: float
63
+ %t94 = call core.add(%t93, %t92) :: float
64
+ loop row id=L8 in %t36 as el=%row_el_37, idx=%row_i_38
65
+ %acc_39 = decl_acc :: float
66
+ %t40 = load_field row_el_37["col"] :: any
67
+ %t86 = load_field row_el_37["scale"] :: float
68
+ %t88 = call core.mul(%t86, %t87) :: 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
+ %t110 = load_input "global_offset" :: float
83
+ %t111 = const 1.0 :: float
84
+ %t101 = const 2.0 :: float
85
+ %t112 = call core.add(%t110, %t111) :: float
86
+ loop batch id=L10 in %t45 as el=%batch_el_46, idx=%batch_i_47
87
+ %acc_48 = decl_acc :: float
88
+ %t49 = load_field batch_el_46["row"] :: any
89
+ %t105 = load_field batch_el_46["mean"] :: float
90
+ %t106 = call core.add(%t105, %t112) :: float
91
+ loop row id=L11 in %t49 as el=%row_el_50, idx=%row_i_51
92
+ %acc77 = decl_acc :: float
93
+ %t78 = load_field row_el_50["col"] :: any
94
+ %t100 = load_field row_el_50["scale"] :: float
95
+ %t102 = call core.mul(%t100, %t101) :: float
96
+ loop col id=L12 in %t78 as el=%col_el_41, idx=%col_i_42
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,39 @@
1
+ (NAST
2
+ (VALUE global_offset_plus
3
+ (Call :"core.add"
4
+ (InputRef [:global_offset])
5
+ (Const 1.0)
6
+ )
7
+ )
8
+ (VALUE batch_bias
9
+ (Call :"core.add"
10
+ (InputRef [:batch, :b, :mean])
11
+ (Ref global_offset_plus)
12
+ )
13
+ )
14
+ (VALUE row_scale2
15
+ (Call :"core.mul"
16
+ (InputRef [:batch, :b, :row, :r, :scale])
17
+ (Const 2.0)
18
+ )
19
+ )
20
+ (VALUE elem_affine
21
+ (Call :"core.add"
22
+ (Call :"core.mul"
23
+ (InputRef [:batch, :b, :row, :r, :col, :c, :val])
24
+ (Ref row_scale2)
25
+ )
26
+ (Ref batch_bias)
27
+ )
28
+ )
29
+ (VALUE row_sum_affine
30
+ (Call :"agg.sum"
31
+ (Ref elem_affine)
32
+ )
33
+ )
34
+ (VALUE batch_total_affine
35
+ (Call :"agg.sum"
36
+ (Ref row_sum_affine)
37
+ )
38
+ )
39
+ )
@@ -0,0 +1,128 @@
1
+ export function _global_offset_plus(input) {
2
+ let t1 = input["global_offset"];
3
+ const t2 = 1.0;
4
+ let t3 = t1 + t2;
5
+ return t3;
6
+ }
7
+
8
+ export function _batch_bias(input) {
9
+ let out = [];
10
+ let t4 = input["batch"];
11
+ let t54 = input["global_offset"];
12
+ const t55 = 1.0;
13
+ let t56 = t54 + t55;
14
+ t4.forEach((batch_el_5, batch_i_6) => {
15
+ let t7 = batch_el_5["mean"];
16
+ let t9 = t7 + t56;
17
+ out.push(t9);
18
+ });
19
+ return out;
20
+ }
21
+
22
+ export function _row_scale2(input) {
23
+ let out = [];
24
+ let t10 = input["batch"];
25
+ const t17 = 2.0;
26
+ t10.forEach((batch_el_11, batch_i_12) => {
27
+ let out_1 = [];
28
+ let t13 = batch_el_11["row"];
29
+ t13.forEach((row_el_14, row_i_15) => {
30
+ let t16 = row_el_14["scale"];
31
+ let t18 = t16 * t17;
32
+ out_1.push(t18);
33
+ });
34
+ out.push(out_1);
35
+ });
36
+ return out;
37
+ }
38
+
39
+ export function _elem_affine(input) {
40
+ let out = [];
41
+ let t19 = input["batch"];
42
+ let t81 = input["global_offset"];
43
+ const t82 = 1.0;
44
+ const t60 = 2.0;
45
+ let t83 = t81 + t82;
46
+ t19.forEach((batch_el_20, batch_i_21) => {
47
+ let out_1 = [];
48
+ let t22 = batch_el_20["row"];
49
+ let t64 = batch_el_20["mean"];
50
+ let t65 = t64 + t83;
51
+ t22.forEach((row_el_23, row_i_24) => {
52
+ let out_2 = [];
53
+ let t25 = row_el_23["col"];
54
+ let t59 = row_el_23["scale"];
55
+ let t61 = t59 * t60;
56
+ t25.forEach((col_el_26, col_i_27) => {
57
+ let t28 = col_el_26["val"];
58
+ let t30 = t28 * t61;
59
+ let t32 = t30 + t65;
60
+ out_2.push(t32);
61
+ });
62
+ out_1.push(out_2);
63
+ });
64
+ out.push(out_1);
65
+ });
66
+ return out;
67
+ }
68
+
69
+ export function _row_sum_affine(input) {
70
+ let out = [];
71
+ let t33 = input["batch"];
72
+ const t87 = 2.0;
73
+ let t90 = input["global_offset"];
74
+ const t91 = 1.0;
75
+ let t92 = t90 + t91;
76
+ t33.forEach((batch_el_34, batch_i_35) => {
77
+ let out_1 = [];
78
+ let t36 = batch_el_34["row"];
79
+ let t93 = batch_el_34["mean"];
80
+ let t94 = t93 + t92;
81
+ t36.forEach((row_el_37, row_i_38) => {
82
+ let acc_39 = 0.0;
83
+ let t40 = row_el_37["col"];
84
+ let t86 = row_el_37["scale"];
85
+ let t88 = t86 * t87;
86
+ t40.forEach((col_el_41, col_i_42) => {
87
+ let t69 = col_el_41["val"];
88
+ let t71 = t69 * t88;
89
+ let t73 = t71 + t94;
90
+ acc_39 += t73;
91
+ });
92
+ out_1.push(acc_39);
93
+ });
94
+ out.push(out_1);
95
+ });
96
+ return out;
97
+ }
98
+
99
+ export function _batch_total_affine(input) {
100
+ let out = [];
101
+ let t45 = input["batch"];
102
+ let t110 = input["global_offset"];
103
+ const t111 = 1.0;
104
+ const t101 = 2.0;
105
+ let t112 = t110 + t111;
106
+ t45.forEach((batch_el_46, batch_i_47) => {
107
+ let acc_48 = 0.0;
108
+ let t49 = batch_el_46["row"];
109
+ let t105 = batch_el_46["mean"];
110
+ let t106 = t105 + t112;
111
+ t49.forEach((row_el_50, row_i_51) => {
112
+ let acc77 = 0.0;
113
+ let t78 = row_el_50["col"];
114
+ let t100 = row_el_50["scale"];
115
+ let t102 = t100 * t101;
116
+ t78.forEach((col_el_41, col_i_42) => {
117
+ let t107 = col_el_41["val"];
118
+ let t108 = t107 * t102;
119
+ let t109 = t108 + t106;
120
+ acc77 += t109;
121
+ });
122
+ acc_48 += acc77;
123
+ });
124
+ out.push(acc_48);
125
+ });
126
+ return out;
127
+ }
128
+
@@ -0,0 +1,162 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_871501c6e1786defd4537fee6faface2ada1916adf1b700898c08ee292662c42
3
+ def self.from(input_data = nil)
4
+ instance = Object.new
5
+ instance.extend(self)
6
+ instance.instance_variable_set(:@input, input_data)
7
+ instance
8
+ end
9
+
10
+ def self.__kumi_executable__
11
+ instance = Object.new
12
+ instance.extend(self)
13
+ instance
14
+ end
15
+
16
+ def update(input_data)
17
+ @input = @input.merge(input_data)
18
+ self
19
+ end
20
+
21
+ def [](name)
22
+ case name
23
+ when :global_offset_plus then _global_offset_plus
24
+ when :batch_bias then _batch_bias
25
+ when :row_scale2 then _row_scale2
26
+ when :elem_affine then _elem_affine
27
+ when :row_sum_affine then _row_sum_affine
28
+ when :batch_total_affine then _batch_total_affine
29
+ else raise KeyError, "Unknown declaration"
30
+ end
31
+ end
32
+
33
+ def _global_offset_plus(input = @input)
34
+ t1 = input["global_offset"] || input[:global_offset]
35
+ t2 = 1.0
36
+ t1 + t2
37
+ end
38
+
39
+ def _batch_bias(input = @input)
40
+ out = []
41
+ t4 = input["batch"] || input[:batch]
42
+ t54 = input["global_offset"] || input[:global_offset]
43
+ t55 = 1.0
44
+ t56 = t54 + t55
45
+ t4.each_with_index do |batch_el_5, batch_i_6|
46
+ t7 = batch_el_5["mean"] || batch_el_5[:mean]
47
+ t9 = t7 + t56
48
+ out << t9
49
+ end
50
+ out
51
+ end
52
+
53
+ def _row_scale2(input = @input)
54
+ out = []
55
+ t10 = input["batch"] || input[:batch]
56
+ t17 = 2.0
57
+ t10.each_with_index do |batch_el_11, batch_i_12|
58
+ out_1 = []
59
+ t13 = batch_el_11["row"] || batch_el_11[:row]
60
+ t13.each_with_index do |row_el_14, row_i_15|
61
+ t16 = row_el_14["scale"] || row_el_14[:scale]
62
+ t18 = t16 * t17
63
+ out_1 << t18
64
+ end
65
+ out << out_1
66
+ end
67
+ out
68
+ end
69
+
70
+ def _elem_affine(input = @input)
71
+ out = []
72
+ t19 = input["batch"] || input[:batch]
73
+ t81 = input["global_offset"] || input[:global_offset]
74
+ t82 = 1.0
75
+ t60 = 2.0
76
+ t83 = t81 + t82
77
+ t19.each_with_index do |batch_el_20, batch_i_21|
78
+ out_1 = []
79
+ t22 = batch_el_20["row"] || batch_el_20[:row]
80
+ t64 = batch_el_20["mean"] || batch_el_20[:mean]
81
+ t65 = t64 + t83
82
+ t22.each_with_index do |row_el_23, row_i_24|
83
+ out_2 = []
84
+ t25 = row_el_23["col"] || row_el_23[:col]
85
+ t59 = row_el_23["scale"] || row_el_23[:scale]
86
+ t61 = t59 * t60
87
+ t25.each_with_index do |col_el_26, col_i_27|
88
+ t28 = col_el_26["val"] || col_el_26[:val]
89
+ t30 = t28 * t61
90
+ t32 = t30 + t65
91
+ out_2 << t32
92
+ end
93
+ out_1 << out_2
94
+ end
95
+ out << out_1
96
+ end
97
+ out
98
+ end
99
+
100
+ def _row_sum_affine(input = @input)
101
+ out = []
102
+ t33 = input["batch"] || input[:batch]
103
+ t87 = 2.0
104
+ t90 = input["global_offset"] || input[:global_offset]
105
+ t91 = 1.0
106
+ t92 = t90 + t91
107
+ t33.each_with_index do |batch_el_34, batch_i_35|
108
+ out_1 = []
109
+ t36 = batch_el_34["row"] || batch_el_34[:row]
110
+ t93 = batch_el_34["mean"] || batch_el_34[:mean]
111
+ t94 = t93 + t92
112
+ t36.each_with_index do |row_el_37, row_i_38|
113
+ acc_39 = 0.0
114
+ t40 = row_el_37["col"] || row_el_37[:col]
115
+ t86 = row_el_37["scale"] || row_el_37[:scale]
116
+ t88 = t86 * t87
117
+ t40.each_with_index do |col_el_41, col_i_42|
118
+ t69 = col_el_41["val"] || col_el_41[:val]
119
+ t71 = t69 * t88
120
+ t73 = t71 + t94
121
+ acc_39 += t73
122
+ end
123
+ t44 = acc_39
124
+ out_1 << t44
125
+ end
126
+ out << out_1
127
+ end
128
+ out
129
+ end
130
+
131
+ def _batch_total_affine(input = @input)
132
+ out = []
133
+ t45 = input["batch"] || input[:batch]
134
+ t110 = input["global_offset"] || input[:global_offset]
135
+ t111 = 1.0
136
+ t101 = 2.0
137
+ t112 = t110 + t111
138
+ t45.each_with_index do |batch_el_46, batch_i_47|
139
+ acc_48 = 0.0
140
+ t49 = batch_el_46["row"] || batch_el_46[:row]
141
+ t105 = batch_el_46["mean"] || batch_el_46[:mean]
142
+ t106 = t105 + t112
143
+ t49.each_with_index do |row_el_50, row_i_51|
144
+ acc77 = 0.0
145
+ t78 = row_el_50["col"] || row_el_50[:col]
146
+ t100 = row_el_50["scale"] || row_el_50[:scale]
147
+ t102 = t100 * t101
148
+ t78.each_with_index do |col_el_41, col_i_42|
149
+ t107 = col_el_41["val"] || col_el_41[:val]
150
+ t108 = t107 * t102
151
+ t109 = t108 + t106
152
+ acc77 += t109
153
+ end
154
+ t80 = acc77
155
+ acc_48 += t80
156
+ end
157
+ t53 = acc_48
158
+ out << t53
159
+ end
160
+ out
161
+ end
162
+ end
@@ -0,0 +1,39 @@
1
+ (SNAST
2
+ (VALUE global_offset_plus
3
+ (Call :core.add
4
+ (InputRef global_offset key_chain=[]) :: [] -> float
5
+ (Const 1.0) :: [] -> float
6
+ ) :: [] -> float
7
+ ) :: [] -> float
8
+ (VALUE batch_bias
9
+ (Call :core.add
10
+ (InputRef batch.b.mean key_chain=[]) :: [batch] -> float
11
+ (Ref global_offset_plus) :: [] -> float
12
+ ) :: [batch] -> float
13
+ ) :: [batch] -> float
14
+ (VALUE row_scale2
15
+ (Call :core.mul
16
+ (InputRef batch.b.row.r.scale key_chain=[]) :: [batch, row] -> float
17
+ (Const 2.0) :: [] -> float
18
+ ) :: [batch, row] -> float
19
+ ) :: [batch, row] -> float
20
+ (VALUE elem_affine
21
+ (Call :core.add
22
+ (Call :core.mul
23
+ (InputRef batch.b.row.r.col.c.val key_chain=[]) :: [batch, row, col] -> float
24
+ (Ref row_scale2) :: [batch, row] -> float
25
+ ) :: [batch, row, col] -> float
26
+ (Ref batch_bias) :: [batch] -> float
27
+ ) :: [batch, row, col] -> float
28
+ ) :: [batch, row, col] -> float
29
+ (VALUE row_sum_affine
30
+ (Reduce :agg.sum over [col]
31
+ (Ref elem_affine) :: [batch, row, col] -> float
32
+ ) :: [batch, row] -> float
33
+ ) :: [batch, row] -> float
34
+ (VALUE batch_total_affine
35
+ (Reduce :agg.sum over [row]
36
+ (Ref row_sum_affine) :: [batch, row] -> float
37
+ ) :: [batch] -> float
38
+ ) :: [batch] -> float
39
+ )
@@ -0,0 +1,15 @@
1
+ {
2
+ "global_offset_plus": 1.5,
3
+ "batch_bias": [11.5, 101.5],
4
+ "row_scale2": [[2.0, 1.0], [4.0]],
5
+ "elem_affine": [
6
+ [[13.5, 15.5], [14.5, 15.5, 16.5]],
7
+ [[107.5]]
8
+ ],
9
+ "row_sum_affine": [
10
+ [29.0, 46.5],
11
+ [107.5]
12
+ ],
13
+ "batch_total_affine": [75.5, 107.5]
14
+ }
15
+
@@ -0,0 +1,19 @@
1
+ {
2
+ "batch": [
3
+ {
4
+ "mean": 10.0,
5
+ "row": [
6
+ { "scale": 1.0, "col": [ { "val": 1.0 }, { "val": 2.0 } ] },
7
+ { "scale": 0.5, "col": [ { "val": 3.0 }, { "val": 4.0 }, { "val": 5.0 } ] }
8
+ ]
9
+ },
10
+ {
11
+ "mean": 100.0,
12
+ "row": [
13
+ { "scale": 2.0, "col": [ { "val": 1.5 } ] }
14
+ ]
15
+ }
16
+ ],
17
+ "global_offset": 0.5
18
+ }
19
+
@@ -0,0 +1,38 @@
1
+ schema do
2
+ input do
3
+ array :batch do
4
+ hash :b do
5
+ float :mean
6
+ array :row do
7
+ hash :r do
8
+ float :scale
9
+ array :col do
10
+ hash :c do
11
+ float :val
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ float :global_offset
19
+ end
20
+
21
+ # Depth 0 ([])
22
+ value :global_offset_plus, input.global_offset + 1.0
23
+
24
+ # Depth 1 ([:batch]) — hoisted per batch
25
+ value :batch_bias, input.batch.b.mean + global_offset_plus
26
+
27
+ # Depth 2 ([:batch, :row]) — hoisted per (batch,row)
28
+ value :row_scale2, input.batch.b.row.r.scale * 2.0
29
+
30
+ # Depth 3 ([:batch, :row, :col]) — uses both hoisted values
31
+ value :elem_affine, input.batch.b.row.r.col.c.val * row_scale2 + batch_bias
32
+
33
+ # Reduce col → rank-2 ([:batch, :row])
34
+ value :row_sum_affine, fn(:sum, elem_affine)
35
+
36
+ # Reduce row → rank-1 ([:batch])
37
+ value :batch_total_affine, fn(:sum, row_sum_affine)
38
+ end
@@ -0,0 +1,22 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :x :hash
4
+ [
5
+ (InputDeclaration :y :hash
6
+ [
7
+ (InputDeclaration :z :integer)
8
+ ]
9
+ )
10
+ ]
11
+ )
12
+ ]
13
+ values: [
14
+ (ValueDeclaration :double
15
+ (CallExpression :multiply
16
+ (InputElementReference x.y.z)
17
+ (Literal 2)
18
+ )
19
+ )
20
+ ]
21
+ traits: []
22
+ )
@@ -0,0 +1,5 @@
1
+ x: hash (hash)
2
+ └─> y: property_access
3
+ y: hash (hash)
4
+ └─> z: property_access
5
+ z: integer