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,19 @@
1
+ schema do
2
+ input do
3
+ array :users do
4
+ hash :user do
5
+ string :name
6
+ string :state
7
+ end
8
+ end
9
+ end
10
+
11
+ value :users, {
12
+ name: input.users.user.name,
13
+ state: input.users.user.state
14
+ }
15
+
16
+ trait :is_john, input.users.user.name == "John"
17
+
18
+ value :john_user, select(is_john, users, "NOT_JOHN")
19
+ end
@@ -0,0 +1,85 @@
1
+ (Root
2
+ inputs: [
3
+ (InputDeclaration :regions :array
4
+ [
5
+ (InputDeclaration :region :hash
6
+ [
7
+ (InputDeclaration :offices :array
8
+ [
9
+ (InputDeclaration :office :hash
10
+ [
11
+ (InputDeclaration :teams :array
12
+ [
13
+ (InputDeclaration :team :hash
14
+ [
15
+ (InputDeclaration :performance_score :float)
16
+ (InputDeclaration :employees :array
17
+ [
18
+ (InputDeclaration :employee :hash
19
+ [
20
+ (InputDeclaration :salary :float)
21
+ (InputDeclaration :rating :float)
22
+ (InputDeclaration :level :string)
23
+ ]
24
+ )
25
+ ]
26
+ )
27
+ ]
28
+ )
29
+ ]
30
+ )
31
+ ]
32
+ )
33
+ ]
34
+ )
35
+ ]
36
+ )
37
+ ]
38
+ )
39
+ ]
40
+ values: [
41
+ (ValueDeclaration :employee_bonus
42
+ (CascadeExpression
43
+ ((CallExpression :cascade_and
44
+ (DeclarationReference :high_performer)
45
+ (DeclarationReference :senior_level)
46
+ (DeclarationReference :top_team)
47
+ ) (CallExpression :multiply
48
+ (InputElementReference regions.region.offices.office.teams.team.employees.employee.salary)
49
+ (Literal 0.3)
50
+ ))
51
+ ((CallExpression :cascade_and
52
+ (DeclarationReference :high_performer)
53
+ (DeclarationReference :top_team)
54
+ ) (CallExpression :multiply
55
+ (InputElementReference regions.region.offices.office.teams.team.employees.employee.salary)
56
+ (Literal 0.2)
57
+ ))
58
+ ((Literal true) (CallExpression :multiply
59
+ (InputElementReference regions.region.offices.office.teams.team.employees.employee.salary)
60
+ (Literal 0.05)
61
+ ))
62
+ )
63
+ )
64
+ ]
65
+ traits: [
66
+ (TraitDeclaration :high_performer
67
+ (CallExpression :>=
68
+ (InputElementReference regions.region.offices.office.teams.team.employees.employee.rating)
69
+ (Literal 4.5)
70
+ )
71
+ )
72
+ (TraitDeclaration :senior_level
73
+ (CallExpression :==
74
+ (InputElementReference regions.region.offices.office.teams.team.employees.employee.level)
75
+ (Literal "senior")
76
+ )
77
+ )
78
+ (TraitDeclaration :top_team
79
+ (CallExpression :>=
80
+ (InputElementReference regions.region.offices.office.teams.team.performance_score)
81
+ (Literal 0.9)
82
+ )
83
+ )
84
+ ]
85
+ )
@@ -0,0 +1,23 @@
1
+ regions: array (array) access_mode=element
2
+ └─> region: element_access
3
+ region: hash (hash)
4
+ └─> offices: property_access → array_loop
5
+ offices: array (array) access_mode=element
6
+ └─> office: element_access
7
+ office: hash (hash)
8
+ └─> teams: property_access → array_loop
9
+ teams: array (array) access_mode=element
10
+ └─> team: element_access
11
+ team: hash (hash)
12
+ └─> performance_score: property_access
13
+ └─> employees: property_access → array_loop
14
+ performance_score: float
15
+ employees: array (array) access_mode=element
16
+ └─> employee: element_access
17
+ employee: hash (hash)
18
+ └─> salary: property_access
19
+ └─> rating: property_access
20
+ └─> level: property_access
21
+ salary: float
22
+ rating: float
23
+ level: string
@@ -0,0 +1,87 @@
1
+ (LIR
2
+ (Declaration high_performer
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %t4 = load_field regions_el_2["offices"] :: any
6
+ loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
7
+ %t7 = load_field offices_el_5["teams"] :: any
8
+ loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
9
+ %t10 = load_field teams_el_8["employees"] :: any
10
+ loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
11
+ %t13 = load_field employees_el_11["rating"] :: float
12
+ %t14 = const 4.5 :: float
13
+ %t15 = call core.gte(%t13, %t14) :: boolean
14
+ yield %t15
15
+ end_loop
16
+ end_loop
17
+ end_loop
18
+ end_loop
19
+ )
20
+ (Declaration senior_level
21
+ %t16 = load_input "regions" :: array
22
+ loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
23
+ %t19 = load_field regions_el_17["offices"] :: any
24
+ loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
25
+ %t22 = load_field offices_el_20["teams"] :: any
26
+ loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
27
+ %t25 = load_field teams_el_23["employees"] :: any
28
+ loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
29
+ %t28 = load_field employees_el_26["level"] :: string
30
+ %t29 = const "senior" :: string
31
+ %t30 = call core.eq(%t28, %t29) :: boolean
32
+ yield %t30
33
+ end_loop
34
+ end_loop
35
+ end_loop
36
+ end_loop
37
+ )
38
+ (Declaration top_team
39
+ %t31 = load_input "regions" :: array
40
+ loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
41
+ %t34 = load_field regions_el_32["offices"] :: any
42
+ loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
43
+ %t37 = load_field offices_el_35["teams"] :: any
44
+ loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
45
+ %t40 = load_field teams_el_38["performance_score"] :: float
46
+ %t41 = const 0.9 :: float
47
+ %t42 = call core.gte(%t40, %t41) :: boolean
48
+ yield %t42
49
+ end_loop
50
+ end_loop
51
+ end_loop
52
+ )
53
+ (Declaration employee_bonus
54
+ %t43 = load_input "regions" :: array
55
+ loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
56
+ %t46 = load_field regions_el_44["offices"] :: any
57
+ loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
58
+ %t49 = load_field offices_el_47["teams"] :: any
59
+ loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
60
+ %t52 = load_field teams_el_50["employees"] :: any
61
+ loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
62
+ %t55 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
63
+ %t56 = load_decl senior_level axes=[regions, offices, teams, employees] :: boolean
64
+ %t57 = load_decl top_team axes=[regions, offices, teams] :: boolean
65
+ %t58 = call core.and(%t56, %t57) :: boolean
66
+ %t59 = call core.and(%t55, %t58) :: boolean
67
+ %t60 = load_field employees_el_53["salary"] :: float
68
+ %t61 = const 0.3 :: float
69
+ %t62 = call core.mul(%t60, %t61) :: float
70
+ %t63 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
71
+ %t64 = load_decl top_team axes=[regions, offices, teams] :: boolean
72
+ %t65 = call core.and(%t63, %t64) :: boolean
73
+ %t66 = load_field employees_el_53["salary"] :: float
74
+ %t67 = const 0.2 :: float
75
+ %t68 = call core.mul(%t66, %t67) :: float
76
+ %t69 = load_field employees_el_53["salary"] :: float
77
+ %t70 = const 0.05 :: float
78
+ %t71 = call core.mul(%t69, %t70) :: float
79
+ %t72 = select %t65, %t68, %t71 :: float
80
+ %t73 = select %t59, %t62, %t72 :: float
81
+ yield %t73
82
+ end_loop
83
+ end_loop
84
+ end_loop
85
+ end_loop
86
+ )
87
+ )
@@ -0,0 +1,87 @@
1
+ (LIR
2
+ (Declaration high_performer
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %t4 = load_field regions_el_2["offices"] :: any
6
+ loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
7
+ %t7 = load_field offices_el_5["teams"] :: any
8
+ loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
9
+ %t10 = load_field teams_el_8["employees"] :: any
10
+ loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
11
+ %t13 = load_field employees_el_11["rating"] :: float
12
+ %t14 = const 4.5 :: float
13
+ %t15 = call core.gte(%t13, %t14) :: boolean
14
+ yield %t15
15
+ end_loop
16
+ end_loop
17
+ end_loop
18
+ end_loop
19
+ )
20
+ (Declaration senior_level
21
+ %t16 = load_input "regions" :: array
22
+ loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
23
+ %t19 = load_field regions_el_17["offices"] :: any
24
+ loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
25
+ %t22 = load_field offices_el_20["teams"] :: any
26
+ loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
27
+ %t25 = load_field teams_el_23["employees"] :: any
28
+ loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
29
+ %t28 = load_field employees_el_26["level"] :: string
30
+ %t29 = const "senior" :: string
31
+ %t30 = call core.eq(%t28, %t29) :: boolean
32
+ yield %t30
33
+ end_loop
34
+ end_loop
35
+ end_loop
36
+ end_loop
37
+ )
38
+ (Declaration top_team
39
+ %t31 = load_input "regions" :: array
40
+ loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
41
+ %t34 = load_field regions_el_32["offices"] :: any
42
+ loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
43
+ %t37 = load_field offices_el_35["teams"] :: any
44
+ loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
45
+ %t40 = load_field teams_el_38["performance_score"] :: float
46
+ %t41 = const 0.9 :: float
47
+ %t42 = call core.gte(%t40, %t41) :: boolean
48
+ yield %t42
49
+ end_loop
50
+ end_loop
51
+ end_loop
52
+ )
53
+ (Declaration employee_bonus
54
+ %t43 = load_input "regions" :: array
55
+ loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
56
+ %t46 = load_field regions_el_44["offices"] :: any
57
+ loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
58
+ %t49 = load_field offices_el_47["teams"] :: any
59
+ loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
60
+ %t52 = load_field teams_el_50["employees"] :: any
61
+ loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
62
+ %t55 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
63
+ %t56 = load_decl senior_level axes=[regions, offices, teams, employees] :: boolean
64
+ %t57 = load_decl top_team axes=[regions, offices, teams] :: boolean
65
+ %t58 = call core.and(%t56, %t57) :: boolean
66
+ %t59 = call core.and(%t55, %t58) :: boolean
67
+ %t60 = load_field employees_el_53["salary"] :: float
68
+ %t61 = const 0.3 :: float
69
+ %t62 = call core.mul(%t60, %t61) :: float
70
+ %t63 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
71
+ %t64 = load_decl top_team axes=[regions, offices, teams] :: boolean
72
+ %t65 = call core.and(%t63, %t64) :: boolean
73
+ %t66 = load_field employees_el_53["salary"] :: float
74
+ %t67 = const 0.2 :: float
75
+ %t68 = call core.mul(%t66, %t67) :: float
76
+ %t69 = load_field employees_el_53["salary"] :: float
77
+ %t70 = const 0.05 :: float
78
+ %t71 = call core.mul(%t69, %t70) :: float
79
+ %t72 = select %t65, %t68, %t71 :: float
80
+ %t73 = select %t59, %t62, %t72 :: float
81
+ yield %t73
82
+ end_loop
83
+ end_loop
84
+ end_loop
85
+ end_loop
86
+ )
87
+ )
@@ -0,0 +1,115 @@
1
+ (LIR
2
+ (Declaration high_performer
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %t4 = load_field regions_el_2["offices"] :: any
6
+ loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
7
+ %t7 = load_field offices_el_5["teams"] :: any
8
+ loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
9
+ %t10 = load_field teams_el_8["employees"] :: any
10
+ loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
11
+ %t13 = load_field employees_el_11["rating"] :: float
12
+ %t14 = const 4.5 :: float
13
+ %t15 = call core.gte(%t13, %t14) :: boolean
14
+ yield %t15
15
+ end_loop
16
+ end_loop
17
+ end_loop
18
+ end_loop
19
+ )
20
+ (Declaration senior_level
21
+ %t16 = load_input "regions" :: array
22
+ loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
23
+ %t19 = load_field regions_el_17["offices"] :: any
24
+ loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
25
+ %t22 = load_field offices_el_20["teams"] :: any
26
+ loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
27
+ %t25 = load_field teams_el_23["employees"] :: any
28
+ loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
29
+ %t28 = load_field employees_el_26["level"] :: string
30
+ %t29 = const "senior" :: string
31
+ %t30 = call core.eq(%t28, %t29) :: boolean
32
+ yield %t30
33
+ end_loop
34
+ end_loop
35
+ end_loop
36
+ end_loop
37
+ )
38
+ (Declaration top_team
39
+ %t31 = load_input "regions" :: array
40
+ loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
41
+ %t34 = load_field regions_el_32["offices"] :: any
42
+ loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
43
+ %t37 = load_field offices_el_35["teams"] :: any
44
+ loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
45
+ %t40 = load_field teams_el_38["performance_score"] :: float
46
+ %t41 = const 0.9 :: float
47
+ %t42 = call core.gte(%t40, %t41) :: boolean
48
+ yield %t42
49
+ end_loop
50
+ end_loop
51
+ end_loop
52
+ )
53
+ (Declaration employee_bonus
54
+ %t43 = load_input "regions" :: array
55
+ loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
56
+ %t46 = load_field regions_el_44["offices"] :: any
57
+ loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
58
+ %t49 = load_field offices_el_47["teams"] :: any
59
+ loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
60
+ %t52 = load_field teams_el_50["employees"] :: any
61
+ %t88 = load_input "regions" :: array
62
+ %t89 = load_field regions_el_44["offices"] :: any
63
+ %t90 = load_field offices_el_47["teams"] :: any
64
+ %t91 = load_field teams_el_50["performance_score"] :: float
65
+ %t92 = const 0.9 :: float
66
+ %t93 = call core.gte(%t91, %t92) :: boolean
67
+ %t88 = load_input "regions" :: array
68
+ %t89 = load_field regions_el_44["offices"] :: any
69
+ %t90 = load_field offices_el_47["teams"] :: any
70
+ %t91 = load_field teams_el_50["performance_score"] :: float
71
+ %t92 = const 0.9 :: float
72
+ %t93 = call core.gte(%t91, %t92) :: boolean
73
+ loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
74
+ %t74 = load_input "regions" :: array
75
+ %t75 = load_field regions_el_44["offices"] :: any
76
+ %t76 = load_field offices_el_47["teams"] :: any
77
+ %t77 = load_field teams_el_50["employees"] :: any
78
+ %t78 = load_field employees_el_53["rating"] :: float
79
+ %t79 = const 4.5 :: float
80
+ %t80 = call core.gte(%t78, %t79) :: boolean
81
+ %t81 = load_input "regions" :: array
82
+ %t82 = load_field regions_el_44["offices"] :: any
83
+ %t83 = load_field offices_el_47["teams"] :: any
84
+ %t84 = load_field teams_el_50["employees"] :: any
85
+ %t85 = load_field employees_el_53["level"] :: string
86
+ %t86 = const "senior" :: string
87
+ %t87 = call core.eq(%t85, %t86) :: boolean
88
+ %t58 = call core.and(%t87, %t93) :: boolean
89
+ %t59 = call core.and(%t80, %t58) :: boolean
90
+ %t60 = load_field employees_el_53["salary"] :: float
91
+ %t61 = const 0.3 :: float
92
+ %t62 = call core.mul(%t60, %t61) :: float
93
+ %t74 = load_input "regions" :: array
94
+ %t75 = load_field regions_el_44["offices"] :: any
95
+ %t76 = load_field offices_el_47["teams"] :: any
96
+ %t77 = load_field teams_el_50["employees"] :: any
97
+ %t78 = load_field employees_el_53["rating"] :: float
98
+ %t79 = const 4.5 :: float
99
+ %t80 = call core.gte(%t78, %t79) :: boolean
100
+ %t65 = call core.and(%t80, %t93) :: boolean
101
+ %t66 = load_field employees_el_53["salary"] :: float
102
+ %t67 = const 0.2 :: float
103
+ %t68 = call core.mul(%t66, %t67) :: float
104
+ %t69 = load_field employees_el_53["salary"] :: float
105
+ %t70 = const 0.05 :: float
106
+ %t71 = call core.mul(%t69, %t70) :: float
107
+ %t72 = select %t65, %t68, %t71 :: float
108
+ %t73 = select %t59, %t62, %t72 :: float
109
+ yield %t73
110
+ end_loop
111
+ end_loop
112
+ end_loop
113
+ end_loop
114
+ )
115
+ )
@@ -0,0 +1,89 @@
1
+ (LIR
2
+ (Declaration high_performer
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %t4 = load_field regions_el_2["offices"] :: any
6
+ loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
7
+ %t7 = load_field offices_el_5["teams"] :: any
8
+ loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
9
+ %t10 = load_field teams_el_8["employees"] :: any
10
+ loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
11
+ %t13 = load_field employees_el_11["rating"] :: float
12
+ %t14 = const 4.5 :: float
13
+ %t15 = call core.gte(%t13, %t14) :: boolean
14
+ yield %t15
15
+ end_loop
16
+ end_loop
17
+ end_loop
18
+ end_loop
19
+ )
20
+ (Declaration senior_level
21
+ %t16 = load_input "regions" :: array
22
+ loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
23
+ %t19 = load_field regions_el_17["offices"] :: any
24
+ loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
25
+ %t22 = load_field offices_el_20["teams"] :: any
26
+ loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
27
+ %t25 = load_field teams_el_23["employees"] :: any
28
+ loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
29
+ %t28 = load_field employees_el_26["level"] :: string
30
+ %t29 = const "senior" :: string
31
+ %t30 = call core.eq(%t28, %t29) :: boolean
32
+ yield %t30
33
+ end_loop
34
+ end_loop
35
+ end_loop
36
+ end_loop
37
+ )
38
+ (Declaration top_team
39
+ %t31 = load_input "regions" :: array
40
+ loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
41
+ %t34 = load_field regions_el_32["offices"] :: any
42
+ loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
43
+ %t37 = load_field offices_el_35["teams"] :: any
44
+ loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
45
+ %t40 = load_field teams_el_38["performance_score"] :: float
46
+ %t41 = const 0.9 :: float
47
+ %t42 = call core.gte(%t40, %t41) :: boolean
48
+ yield %t42
49
+ end_loop
50
+ end_loop
51
+ end_loop
52
+ )
53
+ (Declaration employee_bonus
54
+ %t43 = load_input "regions" :: array
55
+ loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
56
+ %t46 = load_field regions_el_44["offices"] :: any
57
+ loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
58
+ %t49 = load_field offices_el_47["teams"] :: any
59
+ loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
60
+ %t52 = load_field teams_el_50["employees"] :: any
61
+ %t91 = load_field teams_el_50["performance_score"] :: float
62
+ %t92 = const 0.9 :: float
63
+ %t93 = call core.gte(%t91, %t92) :: boolean
64
+ loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
65
+ %t78 = load_field employees_el_53["rating"] :: float
66
+ %t79 = const 4.5 :: float
67
+ %t80 = call core.gte(%t78, %t79) :: boolean
68
+ %t85 = load_field employees_el_53["level"] :: string
69
+ %t86 = const "senior" :: string
70
+ %t87 = call core.eq(%t85, %t86) :: boolean
71
+ %t58 = call core.and(%t87, %t93) :: boolean
72
+ %t59 = call core.and(%t80, %t58) :: boolean
73
+ %t60 = load_field employees_el_53["salary"] :: float
74
+ %t61 = const 0.3 :: float
75
+ %t62 = call core.mul(%t60, %t61) :: float
76
+ %t65 = call core.and(%t80, %t93) :: boolean
77
+ %t67 = const 0.2 :: float
78
+ %t68 = call core.mul(%t60, %t67) :: float
79
+ %t70 = const 0.05 :: float
80
+ %t71 = call core.mul(%t60, %t70) :: float
81
+ %t72 = select %t65, %t68, %t71 :: float
82
+ %t73 = select %t59, %t62, %t72 :: float
83
+ yield %t73
84
+ end_loop
85
+ end_loop
86
+ end_loop
87
+ end_loop
88
+ )
89
+ )
@@ -0,0 +1,89 @@
1
+ (LIR
2
+ (Declaration high_performer
3
+ %t1 = load_input "regions" :: array
4
+ loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
5
+ %t4 = load_field regions_el_2["offices"] :: any
6
+ loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
7
+ %t7 = load_field offices_el_5["teams"] :: any
8
+ loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
9
+ %t10 = load_field teams_el_8["employees"] :: any
10
+ loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
11
+ %t13 = load_field employees_el_11["rating"] :: float
12
+ %t14 = const 4.5 :: float
13
+ %t15 = call core.gte(%t13, %t14) :: boolean
14
+ yield %t15
15
+ end_loop
16
+ end_loop
17
+ end_loop
18
+ end_loop
19
+ )
20
+ (Declaration senior_level
21
+ %t16 = load_input "regions" :: array
22
+ loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
23
+ %t19 = load_field regions_el_17["offices"] :: any
24
+ loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
25
+ %t22 = load_field offices_el_20["teams"] :: any
26
+ loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
27
+ %t25 = load_field teams_el_23["employees"] :: any
28
+ loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
29
+ %t28 = load_field employees_el_26["level"] :: string
30
+ %t29 = const "senior" :: string
31
+ %t30 = call core.eq(%t28, %t29) :: boolean
32
+ yield %t30
33
+ end_loop
34
+ end_loop
35
+ end_loop
36
+ end_loop
37
+ )
38
+ (Declaration top_team
39
+ %t31 = load_input "regions" :: array
40
+ loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
41
+ %t34 = load_field regions_el_32["offices"] :: any
42
+ loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
43
+ %t37 = load_field offices_el_35["teams"] :: any
44
+ loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
45
+ %t40 = load_field teams_el_38["performance_score"] :: float
46
+ %t41 = const 0.9 :: float
47
+ %t42 = call core.gte(%t40, %t41) :: boolean
48
+ yield %t42
49
+ end_loop
50
+ end_loop
51
+ end_loop
52
+ )
53
+ (Declaration employee_bonus
54
+ %t43 = load_input "regions" :: array
55
+ loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
56
+ %t46 = load_field regions_el_44["offices"] :: any
57
+ loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
58
+ %t49 = load_field offices_el_47["teams"] :: any
59
+ loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
60
+ %t52 = load_field teams_el_50["employees"] :: any
61
+ %t91 = load_field teams_el_50["performance_score"] :: float
62
+ %t92 = const 0.9 :: float
63
+ %t93 = call core.gte(%t91, %t92) :: boolean
64
+ loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
65
+ %t78 = load_field employees_el_53["rating"] :: float
66
+ %t79 = const 4.5 :: float
67
+ %t80 = call core.gte(%t78, %t79) :: boolean
68
+ %t85 = load_field employees_el_53["level"] :: string
69
+ %t86 = const "senior" :: string
70
+ %t87 = call core.eq(%t85, %t86) :: boolean
71
+ %t58 = call core.and(%t87, %t93) :: boolean
72
+ %t59 = call core.and(%t80, %t58) :: boolean
73
+ %t60 = load_field employees_el_53["salary"] :: float
74
+ %t61 = const 0.3 :: float
75
+ %t62 = call core.mul(%t60, %t61) :: float
76
+ %t65 = call core.and(%t80, %t93) :: boolean
77
+ %t67 = const 0.2 :: float
78
+ %t68 = call core.mul(%t60, %t67) :: float
79
+ %t70 = const 0.05 :: float
80
+ %t71 = call core.mul(%t60, %t70) :: float
81
+ %t72 = select %t65, %t68, %t71 :: float
82
+ %t73 = select %t59, %t62, %t72 :: float
83
+ yield %t73
84
+ end_loop
85
+ end_loop
86
+ end_loop
87
+ end_loop
88
+ )
89
+ )