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,89 @@
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 payroll_tax
16
+ %t10 = load_input "departments" :: array
17
+ loop departments id=L3 in %t10 as el=%departments_el_11, idx=%departments_i_12
18
+ %t38 = load_input "departments" :: array
19
+ %acc40 = decl_acc :: integer
20
+ %t41 = load_field departments_el_11["employees"] :: any
21
+ loop employees id=L7 in %t41 as el=%employees_el_6, idx=%employees_i_7
22
+ %t42 = load_field employees_el_6["salary"] :: integer
23
+ %acc40 = acc_add agg.sum(%acc40, %t42) :: integer
24
+ end_loop
25
+ %t43 = acc_load %acc40 :: integer
26
+ %t14 = const 0.15 :: float
27
+ %t15 = call core.mul(%t43, %t14) :: float
28
+ yield %t15
29
+ end_loop
30
+ )
31
+ (Declaration manager_count
32
+ %t16 = load_input "departments" :: array
33
+ loop departments id=L4 in %t16 as el=%departments_el_17, idx=%departments_i_18
34
+ %acc_19 = decl_acc :: integer
35
+ %t20 = load_field departments_el_17["employees"] :: any
36
+ loop employees id=L5 in %t20 as el=%employees_el_21, idx=%employees_i_22
37
+ %t23 = load_field employees_el_21["role"] :: string
38
+ %t24 = const "manager" :: string
39
+ %t25 = call core.eq(%t23, %t24) :: boolean
40
+ %t26 = const 1 :: integer
41
+ %t27 = const 0 :: integer
42
+ %t28 = select %t25, %t26, %t27 :: integer
43
+ %acc_19 = acc_add agg.sum(%acc_19, %t28) :: integer
44
+ end_loop
45
+ %t29 = acc_load %acc_19 :: integer
46
+ yield %t29
47
+ end_loop
48
+ )
49
+ (Declaration department_summary
50
+ %t30 = load_input "departments" :: array
51
+ loop departments id=L6 in %t30 as el=%departments_el_31, idx=%departments_i_32
52
+ %t33 = load_field departments_el_31["name"] :: string
53
+ %t44 = load_input "departments" :: array
54
+ %acc46 = decl_acc :: integer
55
+ %t47 = load_field departments_el_31["employees"] :: any
56
+ loop employees id=L8 in %t47 as el=%employees_el_6, idx=%employees_i_7
57
+ %t48 = load_field employees_el_6["salary"] :: integer
58
+ %acc46 = acc_add agg.sum(%acc46, %t48) :: integer
59
+ end_loop
60
+ %t49 = acc_load %acc46 :: integer
61
+ %t50 = load_input "departments" :: array
62
+ %t65 = load_input "departments" :: array
63
+ %acc67 = decl_acc :: integer
64
+ %t68 = load_field departments_el_31["employees"] :: any
65
+ loop employees id=L10 in %t68 as el=%employees_el_6, idx=%employees_i_7
66
+ %t69 = load_field employees_el_6["salary"] :: integer
67
+ %acc67 = acc_add agg.sum(%acc67, %t69) :: integer
68
+ end_loop
69
+ %t70 = acc_load %acc67 :: integer
70
+ %t52 = const 0.15 :: float
71
+ %t53 = call core.mul(%t70, %t52) :: float
72
+ %t54 = load_input "departments" :: array
73
+ %acc56 = decl_acc :: integer
74
+ %t57 = load_field departments_el_31["employees"] :: any
75
+ loop employees id=L9 in %t57 as el=%employees_el_21, idx=%employees_i_22
76
+ %t58 = load_field employees_el_21["role"] :: string
77
+ %t59 = const "manager" :: string
78
+ %t60 = call core.eq(%t58, %t59) :: boolean
79
+ %t61 = const 1 :: integer
80
+ %t62 = const 0 :: integer
81
+ %t63 = select %t60, %t61, %t62 :: integer
82
+ %acc56 = acc_add agg.sum(%acc56, %t63) :: integer
83
+ end_loop
84
+ %t64 = acc_load %acc56 :: integer
85
+ %t37 = make_object{name: %t33, payroll: %t49, tax: %t53, managers: %t64} :: object
86
+ yield %t37
87
+ end_loop
88
+ )
89
+ )
@@ -0,0 +1,77 @@
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 payroll_tax
16
+ %t10 = load_input "departments" :: array
17
+ loop departments id=L3 in %t10 as el=%departments_el_11, idx=%departments_i_12
18
+ %acc40 = decl_acc :: integer
19
+ %t41 = load_field departments_el_11["employees"] :: any
20
+ %t14 = const 0.15 :: float
21
+ loop employees id=L7 in %t41 as el=%employees_el_6, idx=%employees_i_7
22
+ %t42 = load_field employees_el_6["salary"] :: integer
23
+ %acc40 = acc_add agg.sum(%acc40, %t42) :: integer
24
+ end_loop
25
+ %t43 = acc_load %acc40 :: integer
26
+ %t15 = call core.mul(%t43, %t14) :: float
27
+ yield %t15
28
+ end_loop
29
+ )
30
+ (Declaration manager_count
31
+ %t16 = load_input "departments" :: array
32
+ loop departments id=L4 in %t16 as el=%departments_el_17, idx=%departments_i_18
33
+ %acc_19 = decl_acc :: integer
34
+ %t20 = load_field departments_el_17["employees"] :: any
35
+ loop employees id=L5 in %t20 as el=%employees_el_21, idx=%employees_i_22
36
+ %t23 = load_field employees_el_21["role"] :: string
37
+ %t24 = const "manager" :: string
38
+ %t25 = call core.eq(%t23, %t24) :: boolean
39
+ %t26 = const 1 :: integer
40
+ %t27 = const 0 :: integer
41
+ %t28 = select %t25, %t26, %t27 :: integer
42
+ %acc_19 = acc_add agg.sum(%acc_19, %t28) :: integer
43
+ end_loop
44
+ %t29 = acc_load %acc_19 :: integer
45
+ yield %t29
46
+ end_loop
47
+ )
48
+ (Declaration department_summary
49
+ %t30 = load_input "departments" :: array
50
+ loop departments id=L6 in %t30 as el=%departments_el_31, idx=%departments_i_32
51
+ %t33 = load_field departments_el_31["name"] :: string
52
+ %acc46 = decl_acc :: integer
53
+ %t47 = load_field departments_el_31["employees"] :: any
54
+ %acc67 = decl_acc :: integer
55
+ %t52 = const 0.15 :: float
56
+ %acc56 = decl_acc :: integer
57
+ loop employees id=L8 in %t47 as el=%employees_el_6, idx=%employees_i_7
58
+ %t48 = load_field employees_el_6["salary"] :: integer
59
+ %acc46 = acc_add agg.sum(%acc46, %t48) :: integer
60
+ %t58 = load_field employees_el_6["role"] :: string
61
+ %t59 = const "manager" :: string
62
+ %t60 = call core.eq(%t58, %t59) :: boolean
63
+ %t61 = const 1 :: integer
64
+ %t62 = const 0 :: integer
65
+ %t63 = select %t60, %t61, %t62 :: integer
66
+ %acc56 = acc_add agg.sum(%acc56, %t63) :: integer
67
+ %acc67 = acc_add agg.sum(%acc67, %t48) :: integer
68
+ end_loop
69
+ %t49 = acc_load %acc46 :: integer
70
+ %t64 = acc_load %acc56 :: integer
71
+ %t70 = acc_load %acc67 :: integer
72
+ %t53 = call core.mul(%t70, %t52) :: float
73
+ %t37 = make_object{name: %t33, payroll: %t49, tax: %t53, managers: %t64} :: object
74
+ yield %t37
75
+ end_loop
76
+ )
77
+ )
@@ -0,0 +1,77 @@
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 payroll_tax
16
+ %t10 = load_input "departments" :: array
17
+ loop departments id=L3 in %t10 as el=%departments_el_11, idx=%departments_i_12
18
+ %acc40 = decl_acc :: integer
19
+ %t41 = load_field departments_el_11["employees"] :: any
20
+ %t14 = const 0.15 :: float
21
+ loop employees id=L7 in %t41 as el=%employees_el_6, idx=%employees_i_7
22
+ %t42 = load_field employees_el_6["salary"] :: integer
23
+ %acc40 = acc_add agg.sum(%acc40, %t42) :: integer
24
+ end_loop
25
+ %t43 = acc_load %acc40 :: integer
26
+ %t15 = call core.mul(%t43, %t14) :: float
27
+ yield %t15
28
+ end_loop
29
+ )
30
+ (Declaration manager_count
31
+ %t16 = load_input "departments" :: array
32
+ loop departments id=L4 in %t16 as el=%departments_el_17, idx=%departments_i_18
33
+ %acc_19 = decl_acc :: integer
34
+ %t20 = load_field departments_el_17["employees"] :: any
35
+ loop employees id=L5 in %t20 as el=%employees_el_21, idx=%employees_i_22
36
+ %t23 = load_field employees_el_21["role"] :: string
37
+ %t24 = const "manager" :: string
38
+ %t25 = call core.eq(%t23, %t24) :: boolean
39
+ %t26 = const 1 :: integer
40
+ %t27 = const 0 :: integer
41
+ %t28 = select %t25, %t26, %t27 :: integer
42
+ %acc_19 = acc_add agg.sum(%acc_19, %t28) :: integer
43
+ end_loop
44
+ %t29 = acc_load %acc_19 :: integer
45
+ yield %t29
46
+ end_loop
47
+ )
48
+ (Declaration department_summary
49
+ %t30 = load_input "departments" :: array
50
+ loop departments id=L6 in %t30 as el=%departments_el_31, idx=%departments_i_32
51
+ %t33 = load_field departments_el_31["name"] :: string
52
+ %acc46 = decl_acc :: integer
53
+ %t47 = load_field departments_el_31["employees"] :: any
54
+ %acc67 = decl_acc :: integer
55
+ %t52 = const 0.15 :: float
56
+ %acc56 = decl_acc :: integer
57
+ loop employees id=L8 in %t47 as el=%employees_el_6, idx=%employees_i_7
58
+ %t48 = load_field employees_el_6["salary"] :: integer
59
+ %acc46 = acc_add agg.sum(%acc46, %t48) :: integer
60
+ %t58 = load_field employees_el_6["role"] :: string
61
+ %t59 = const "manager" :: string
62
+ %t60 = call core.eq(%t58, %t59) :: boolean
63
+ %t61 = const 1 :: integer
64
+ %t62 = const 0 :: integer
65
+ %t63 = select %t60, %t61, %t62 :: integer
66
+ %acc56 = acc_add agg.sum(%acc56, %t63) :: integer
67
+ %acc67 = acc_add agg.sum(%acc67, %t48) :: integer
68
+ end_loop
69
+ %t49 = acc_load %acc46 :: integer
70
+ %t64 = acc_load %acc56 :: integer
71
+ %t70 = acc_load %acc67 :: integer
72
+ %t53 = call core.mul(%t70, %t52) :: float
73
+ %t37 = make_object{name: %t33, payroll: %t49, tax: %t53, managers: %t64} :: object
74
+ yield %t37
75
+ end_loop
76
+ )
77
+ )
@@ -0,0 +1,77 @@
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 payroll_tax
16
+ %t10 = load_input "departments" :: array
17
+ %t14 = const 0.15 :: float
18
+ loop departments id=L3 in %t10 as el=%departments_el_11, idx=%departments_i_12
19
+ %acc40 = decl_acc :: integer
20
+ %t41 = load_field departments_el_11["employees"] :: any
21
+ loop employees id=L7 in %t41 as el=%employees_el_6, idx=%employees_i_7
22
+ %t42 = load_field employees_el_6["salary"] :: integer
23
+ %acc40 = acc_add agg.sum(%acc40, %t42) :: integer
24
+ end_loop
25
+ %t43 = acc_load %acc40 :: integer
26
+ %t15 = call core.mul(%t43, %t14) :: float
27
+ yield %t15
28
+ end_loop
29
+ )
30
+ (Declaration manager_count
31
+ %t16 = load_input "departments" :: array
32
+ %t24 = const "manager" :: string
33
+ %t26 = const 1 :: integer
34
+ %t27 = const 0 :: integer
35
+ loop departments id=L4 in %t16 as el=%departments_el_17, idx=%departments_i_18
36
+ %acc_19 = decl_acc :: integer
37
+ %t20 = load_field departments_el_17["employees"] :: any
38
+ loop employees id=L5 in %t20 as el=%employees_el_21, idx=%employees_i_22
39
+ %t23 = load_field employees_el_21["role"] :: string
40
+ %t25 = call core.eq(%t23, %t24) :: boolean
41
+ %t28 = select %t25, %t26, %t27 :: integer
42
+ %acc_19 = acc_add agg.sum(%acc_19, %t28) :: integer
43
+ end_loop
44
+ %t29 = acc_load %acc_19 :: integer
45
+ yield %t29
46
+ end_loop
47
+ )
48
+ (Declaration department_summary
49
+ %t30 = load_input "departments" :: array
50
+ %t52 = const 0.15 :: float
51
+ %t59 = const "manager" :: string
52
+ %t61 = const 1 :: integer
53
+ %t62 = const 0 :: integer
54
+ loop departments id=L6 in %t30 as el=%departments_el_31, idx=%departments_i_32
55
+ %t33 = load_field departments_el_31["name"] :: string
56
+ %acc46 = decl_acc :: integer
57
+ %t47 = load_field departments_el_31["employees"] :: any
58
+ %acc67 = decl_acc :: integer
59
+ %acc56 = decl_acc :: integer
60
+ loop employees id=L8 in %t47 as el=%employees_el_6, idx=%employees_i_7
61
+ %t48 = load_field employees_el_6["salary"] :: integer
62
+ %acc46 = acc_add agg.sum(%acc46, %t48) :: integer
63
+ %t58 = load_field employees_el_6["role"] :: string
64
+ %t60 = call core.eq(%t58, %t59) :: boolean
65
+ %t63 = select %t60, %t61, %t62 :: integer
66
+ %acc56 = acc_add agg.sum(%acc56, %t63) :: integer
67
+ %acc67 = acc_add agg.sum(%acc67, %t48) :: integer
68
+ end_loop
69
+ %t49 = acc_load %acc46 :: integer
70
+ %t64 = acc_load %acc56 :: integer
71
+ %t70 = acc_load %acc67 :: integer
72
+ %t53 = call core.mul(%t70, %t52) :: float
73
+ %t37 = make_object{name: %t33, payroll: %t49, tax: %t53, managers: %t64} :: object
74
+ yield %t37
75
+ end_loop
76
+ )
77
+ )
@@ -0,0 +1,77 @@
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 payroll_tax
16
+ %t10 = load_input "departments" :: array
17
+ %t14 = const 0.15 :: float
18
+ loop departments id=L3 in %t10 as el=%departments_el_11, idx=%departments_i_12
19
+ %acc40 = decl_acc :: integer
20
+ %t41 = load_field departments_el_11["employees"] :: any
21
+ loop employees id=L7 in %t41 as el=%employees_el_6, idx=%employees_i_7
22
+ %t42 = load_field employees_el_6["salary"] :: integer
23
+ %acc40 = acc_add agg.sum(%acc40, %t42) :: integer
24
+ end_loop
25
+ %t43 = acc_load %acc40 :: integer
26
+ %t15 = call core.mul(%t43, %t14) :: float
27
+ yield %t15
28
+ end_loop
29
+ )
30
+ (Declaration manager_count
31
+ %t16 = load_input "departments" :: array
32
+ %t24 = const "manager" :: string
33
+ %t26 = const 1 :: integer
34
+ %t27 = const 0 :: integer
35
+ loop departments id=L4 in %t16 as el=%departments_el_17, idx=%departments_i_18
36
+ %acc_19 = decl_acc :: integer
37
+ %t20 = load_field departments_el_17["employees"] :: any
38
+ loop employees id=L5 in %t20 as el=%employees_el_21, idx=%employees_i_22
39
+ %t23 = load_field employees_el_21["role"] :: string
40
+ %t25 = call core.eq(%t23, %t24) :: boolean
41
+ %t28 = select %t25, %t26, %t27 :: integer
42
+ %acc_19 = acc_add agg.sum(%acc_19, %t28) :: integer
43
+ end_loop
44
+ %t29 = acc_load %acc_19 :: integer
45
+ yield %t29
46
+ end_loop
47
+ )
48
+ (Declaration department_summary
49
+ %t30 = load_input "departments" :: array
50
+ %t52 = const 0.15 :: float
51
+ %t59 = const "manager" :: string
52
+ %t61 = const 1 :: integer
53
+ %t62 = const 0 :: integer
54
+ loop departments id=L6 in %t30 as el=%departments_el_31, idx=%departments_i_32
55
+ %t33 = load_field departments_el_31["name"] :: string
56
+ %acc46 = decl_acc :: integer
57
+ %t47 = load_field departments_el_31["employees"] :: any
58
+ %acc67 = decl_acc :: integer
59
+ %acc56 = decl_acc :: integer
60
+ loop employees id=L8 in %t47 as el=%employees_el_6, idx=%employees_i_7
61
+ %t48 = load_field employees_el_6["salary"] :: integer
62
+ %acc46 = acc_add agg.sum(%acc46, %t48) :: integer
63
+ %t58 = load_field employees_el_6["role"] :: string
64
+ %t60 = call core.eq(%t58, %t59) :: boolean
65
+ %t63 = select %t60, %t61, %t62 :: integer
66
+ %acc56 = acc_add agg.sum(%acc56, %t63) :: integer
67
+ %acc67 = acc_add agg.sum(%acc67, %t48) :: integer
68
+ end_loop
69
+ %t49 = acc_load %acc46 :: integer
70
+ %t64 = acc_load %acc56 :: integer
71
+ %t70 = acc_load %acc67 :: integer
72
+ %t53 = call core.mul(%t70, %t52) :: float
73
+ %t37 = make_object{name: %t33, payroll: %t49, tax: %t53, managers: %t64} :: object
74
+ yield %t37
75
+ end_loop
76
+ )
77
+ )
@@ -0,0 +1,41 @@
1
+ (NAST
2
+ (VALUE total_payroll
3
+ (Call :"agg.sum"
4
+ (InputRef [:departments, :dept, :employees, :emp, :salary])
5
+ )
6
+ )
7
+ (VALUE payroll_tax
8
+ (Call :"core.mul"
9
+ (Ref total_payroll)
10
+ (Const 0.15)
11
+ )
12
+ )
13
+ (VALUE manager_count
14
+ (Call :sum
15
+ (Call :__select__
16
+ (Call :eq
17
+ (InputRef [:departments, :dept, :employees, :emp, :role])
18
+ (Const "manager")
19
+ )
20
+ (Const 1)
21
+ (Const 0)
22
+ )
23
+ )
24
+ )
25
+ (VALUE department_summary
26
+ (Hash
27
+ (Pair name
28
+ (InputRef [:departments, :dept, :name])
29
+ )
30
+ (Pair payroll
31
+ (Ref total_payroll)
32
+ )
33
+ (Pair tax
34
+ (Ref payroll_tax)
35
+ )
36
+ (Pair managers
37
+ (Ref manager_count)
38
+ )
39
+ )
40
+ )
41
+ )
@@ -0,0 +1,86 @@
1
+ export function _total_payroll(input) {
2
+ let out = [];
3
+ let t1 = input["departments"];
4
+ t1.forEach((departments_el_2, departments_i_3) => {
5
+ let acc_4 = 0;
6
+ let t5 = departments_el_2["employees"];
7
+ t5.forEach((employees_el_6, employees_i_7) => {
8
+ let t8 = employees_el_6["salary"];
9
+ acc_4 += t8;
10
+ });
11
+ out.push(acc_4);
12
+ });
13
+ return out;
14
+ }
15
+
16
+ export function _payroll_tax(input) {
17
+ let out = [];
18
+ let t10 = input["departments"];
19
+ const t14 = 0.15;
20
+ t10.forEach((departments_el_11, departments_i_12) => {
21
+ let acc40 = 0;
22
+ let t41 = departments_el_11["employees"];
23
+ t41.forEach((employees_el_6, employees_i_7) => {
24
+ let t42 = employees_el_6["salary"];
25
+ acc40 += t42;
26
+ });
27
+ let t15 = acc40 * t14;
28
+ out.push(t15);
29
+ });
30
+ return out;
31
+ }
32
+
33
+ export function _manager_count(input) {
34
+ let out = [];
35
+ let t16 = input["departments"];
36
+ const t24 = "manager";
37
+ const t26 = 1;
38
+ const t27 = 0;
39
+ t16.forEach((departments_el_17, departments_i_18) => {
40
+ let acc_19 = 0;
41
+ let t20 = departments_el_17["employees"];
42
+ t20.forEach((employees_el_21, employees_i_22) => {
43
+ let t23 = employees_el_21["role"];
44
+ let t25 = t23 == t24;
45
+ let t28 = t25 ? t26 : t27;
46
+ acc_19 += t28;
47
+ });
48
+ out.push(acc_19);
49
+ });
50
+ return out;
51
+ }
52
+
53
+ export function _department_summary(input) {
54
+ let out = [];
55
+ let t30 = input["departments"];
56
+ const t52 = 0.15;
57
+ const t59 = "manager";
58
+ const t61 = 1;
59
+ const t62 = 0;
60
+ t30.forEach((departments_el_31, departments_i_32) => {
61
+ let t33 = departments_el_31["name"];
62
+ let acc46 = 0;
63
+ let t47 = departments_el_31["employees"];
64
+ let acc67 = 0;
65
+ let acc56 = 0;
66
+ t47.forEach((employees_el_6, employees_i_7) => {
67
+ let t48 = employees_el_6["salary"];
68
+ acc46 += t48;
69
+ let t58 = employees_el_6["role"];
70
+ let t60 = t58 == t59;
71
+ let t63 = t60 ? t61 : t62;
72
+ acc56 += t63;
73
+ acc67 += t48;
74
+ });
75
+ let t53 = acc67 * t52;
76
+ let t37 = {
77
+ "name": t33,
78
+ "payroll": acc46,
79
+ "tax": t53,
80
+ "managers": acc56
81
+ };
82
+ out.push(t37);
83
+ });
84
+ return out;
85
+ }
86
+
@@ -0,0 +1,122 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_1523dc98fbf6f178f956575880c9b428b21c19aa91a7822a35e277983da843a8
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 :total_payroll then _total_payroll
24
+ when :payroll_tax then _payroll_tax
25
+ when :manager_count then _manager_count
26
+ when :department_summary then _department_summary
27
+ else raise KeyError, "Unknown declaration"
28
+ end
29
+ end
30
+
31
+ def _total_payroll(input = @input)
32
+ out = []
33
+ t1 = input["departments"] || input[:departments]
34
+ t1.each_with_index do |departments_el_2, departments_i_3|
35
+ acc_4 = 0
36
+ t5 = departments_el_2["employees"] || departments_el_2[:employees]
37
+ t5.each_with_index do |employees_el_6, employees_i_7|
38
+ t8 = employees_el_6["salary"] || employees_el_6[:salary]
39
+ acc_4 += t8
40
+ end
41
+ t9 = acc_4
42
+ out << t9
43
+ end
44
+ out
45
+ end
46
+
47
+ def _payroll_tax(input = @input)
48
+ out = []
49
+ t10 = input["departments"] || input[:departments]
50
+ t14 = 0.15
51
+ t10.each_with_index do |departments_el_11, departments_i_12|
52
+ acc40 = 0
53
+ t41 = departments_el_11["employees"] || departments_el_11[:employees]
54
+ t41.each_with_index do |employees_el_6, employees_i_7|
55
+ t42 = employees_el_6["salary"] || employees_el_6[:salary]
56
+ acc40 += t42
57
+ end
58
+ t43 = acc40
59
+ t15 = t43 * t14
60
+ out << t15
61
+ end
62
+ out
63
+ end
64
+
65
+ def _manager_count(input = @input)
66
+ out = []
67
+ t16 = input["departments"] || input[:departments]
68
+ t24 = "manager"
69
+ t26 = 1
70
+ t27 = 0
71
+ t16.each_with_index do |departments_el_17, departments_i_18|
72
+ acc_19 = 0
73
+ t20 = departments_el_17["employees"] || departments_el_17[:employees]
74
+ t20.each_with_index do |employees_el_21, employees_i_22|
75
+ t23 = employees_el_21["role"] || employees_el_21[:role]
76
+ t25 = t23 == t24
77
+ t28 = t25 ? t26 : t27
78
+ acc_19 += t28
79
+ end
80
+ t29 = acc_19
81
+ out << t29
82
+ end
83
+ out
84
+ end
85
+
86
+ def _department_summary(input = @input)
87
+ out = []
88
+ t30 = input["departments"] || input[:departments]
89
+ t52 = 0.15
90
+ t59 = "manager"
91
+ t61 = 1
92
+ t62 = 0
93
+ t30.each_with_index do |departments_el_31, departments_i_32|
94
+ t33 = departments_el_31["name"] || departments_el_31[:name]
95
+ acc46 = 0
96
+ t47 = departments_el_31["employees"] || departments_el_31[:employees]
97
+ acc67 = 0
98
+ acc56 = 0
99
+ t47.each_with_index do |employees_el_6, employees_i_7|
100
+ t48 = employees_el_6["salary"] || employees_el_6[:salary]
101
+ acc46 += t48
102
+ t58 = employees_el_6["role"] || employees_el_6[:role]
103
+ t60 = t58 == t59
104
+ t63 = t60 ? t61 : t62
105
+ acc56 += t63
106
+ acc67 += t48
107
+ end
108
+ t49 = acc46
109
+ t64 = acc56
110
+ t70 = acc67
111
+ t53 = t70 * t52
112
+ t37 = {
113
+ "name" => t33,
114
+ "payroll" => t49,
115
+ "tax" => t53,
116
+ "managers" => t64
117
+ }
118
+ out << t37
119
+ end
120
+ out
121
+ end
122
+ end
@@ -0,0 +1,41 @@
1
+ (SNAST
2
+ (VALUE total_payroll
3
+ (Reduce :agg.sum over [employees]
4
+ (InputRef departments.dept.employees.emp.salary key_chain=[]) :: [departments, employees] -> integer
5
+ ) :: [departments] -> integer
6
+ ) :: [departments] -> integer
7
+ (VALUE payroll_tax
8
+ (Call :core.mul
9
+ (Ref total_payroll) :: [departments] -> integer
10
+ (Const 0.15) :: [] -> float
11
+ ) :: [departments] -> float
12
+ ) :: [departments] -> float
13
+ (VALUE manager_count
14
+ (Reduce :agg.sum over [employees]
15
+ (Select
16
+ (Call :core.eq
17
+ (InputRef departments.dept.employees.emp.role key_chain=[]) :: [departments, employees] -> string
18
+ (Const "manager") :: [] -> string
19
+ ) :: [departments, employees] -> boolean
20
+ (Const 1) :: [] -> integer
21
+ (Const 0) :: [] -> integer
22
+ ) :: [departments, employees] -> integer
23
+ ) :: [departments] -> integer
24
+ ) :: [departments] -> integer
25
+ (VALUE department_summary
26
+ (Hash
27
+ (Pair name
28
+ (InputRef departments.dept.name key_chain=[]) :: [departments] -> string
29
+ ) :: [departments] -> pair
30
+ (Pair payroll
31
+ (Ref total_payroll) :: [departments] -> integer
32
+ ) :: [departments] -> pair
33
+ (Pair tax
34
+ (Ref payroll_tax) :: [departments] -> float
35
+ ) :: [departments] -> pair
36
+ (Pair managers
37
+ (Ref manager_count) :: [departments] -> integer
38
+ ) :: [departments] -> pair
39
+ ) :: [departments] -> hash
40
+ ) :: [departments] -> hash
41
+ )