kumi 0.0.18 → 0.0.20

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