kumi 0.0.17 → 0.0.19

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