kumi 0.0.18 → 0.0.19

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