kumi 0.0.18 → 0.0.20

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