kumi 0.0.17 → 0.0.19

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