kumi 0.0.37 → 0.1.0

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 (543) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +39 -58
  3. data/.rubocop_todo.yml +931 -0
  4. data/CHANGELOG.md +37 -0
  5. data/README.md +3 -0
  6. data/data/functions/core/arithmetic.yaml +48 -0
  7. data/data/functions/core/conversion.yaml +13 -0
  8. data/data/functions/core/select.yaml +1 -1
  9. data/data/functions/core/stencil.yaml +32 -0
  10. data/data/kernels/javascript/agg/numeric.yaml +1 -0
  11. data/data/kernels/javascript/core/arithmetic.yaml +24 -0
  12. data/data/kernels/javascript/core/coercion.yaml +18 -4
  13. data/data/kernels/ruby/agg/numeric.yaml +2 -1
  14. data/data/kernels/ruby/core/arithmetic.yaml +31 -3
  15. data/data/kernels/ruby/core/coercion.yaml +8 -0
  16. data/docs/CROSS_TARGET_SEMANTICS.md +99 -0
  17. data/docs/FORM_SCHEMA.md +13 -8
  18. data/docs/FUNCTIONS.md +120 -13
  19. data/docs/INPUTS.md +164 -0
  20. data/docs/OUTPUT_SCHEMA.md +12 -8
  21. data/docs/PASSES.md +76 -0
  22. data/docs/PASS_AUDIT.md +179 -0
  23. data/docs/PORTAL.md +39 -0
  24. data/docs/SYNTAX.md +84 -121
  25. data/docs/SYNTAX_NOTES.md +612 -0
  26. data/docs/UNSAT_DETECTION.md +2 -2
  27. data/docs/functions-reference.json +276 -84
  28. data/docs/pairwise-design.md +125 -0
  29. data/docs/superpowers/plans/2026-06-12-pass-conventions-and-dedup.md +1559 -0
  30. data/docs/superpowers/specs/2026-06-12-pass-conventions-and-dedup-design.md +136 -0
  31. data/golden/algebraic_identities/expected/ast.txt +66 -0
  32. data/golden/algebraic_identities/expected/dfir.txt +47 -0
  33. data/golden/algebraic_identities/expected/dfir_optimized.txt +59 -0
  34. data/golden/algebraic_identities/expected/input_plan.txt +7 -0
  35. data/golden/algebraic_identities/expected/loopir.txt +61 -0
  36. data/golden/algebraic_identities/expected/nast.txt +51 -0
  37. data/golden/algebraic_identities/expected/runtime.json +24 -0
  38. data/golden/algebraic_identities/expected/schema_javascript.mjs +89 -0
  39. data/golden/algebraic_identities/expected/schema_ruby.rb +84 -0
  40. data/golden/algebraic_identities/expected/snast.txt +51 -0
  41. data/golden/algebraic_identities/expected/vecir.txt +47 -0
  42. data/golden/algebraic_identities/input.json +6 -0
  43. data/golden/algebraic_identities/schema.kumi +25 -0
  44. data/golden/array_element/expected/loopir.txt +1 -2
  45. data/golden/array_element/expected/runtime.json +5 -0
  46. data/golden/array_element/expected/schema_javascript.mjs +1 -2
  47. data/golden/array_element/expected/schema_ruby.rb +2 -3
  48. data/golden/array_index/expected/runtime.json +54 -0
  49. data/golden/array_index/expected/schema_ruby.rb +1 -1
  50. data/golden/array_operations/{expected.json → expected/runtime.json} +5 -15
  51. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  52. data/golden/cascade_logic/expected/runtime.json +3 -0
  53. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  54. data/golden/cascade_reuse_peephole/expected/ast.txt +193 -0
  55. data/golden/cascade_reuse_peephole/expected/dfir.txt +124 -0
  56. data/golden/cascade_reuse_peephole/expected/dfir_optimized.txt +320 -0
  57. data/golden/cascade_reuse_peephole/expected/input_plan.txt +2 -0
  58. data/golden/cascade_reuse_peephole/expected/loopir.txt +302 -0
  59. data/golden/cascade_reuse_peephole/expected/nast.txt +188 -0
  60. data/golden/cascade_reuse_peephole/expected/runtime.json +8 -0
  61. data/golden/cascade_reuse_peephole/expected/schema_javascript.mjs +335 -0
  62. data/golden/cascade_reuse_peephole/expected/schema_ruby.rb +337 -0
  63. data/golden/cascade_reuse_peephole/expected/snast.txt +188 -0
  64. data/golden/cascade_reuse_peephole/expected/vecir.txt +302 -0
  65. data/golden/cascade_reuse_peephole/input.json +4 -0
  66. data/golden/cascade_reuse_peephole/schema.kumi +31 -0
  67. data/golden/chained_fusion/expected/loopir.txt +5 -13
  68. data/golden/chained_fusion/expected/runtime.json +45 -0
  69. data/golden/chained_fusion/expected/schema_javascript.mjs +5 -13
  70. data/golden/chained_fusion/expected/schema_ruby.rb +6 -14
  71. data/golden/cross_import/expected/ast.txt +21 -0
  72. data/golden/cross_import/expected/dfir.txt +3 -0
  73. data/golden/cross_import/expected/dfir_optimized.txt +8 -0
  74. data/golden/cross_import/expected/input_plan.txt +5 -0
  75. data/golden/cross_import/expected/loopir.txt +14 -0
  76. data/golden/cross_import/expected/nast.txt +7 -0
  77. data/golden/cross_import/expected/runtime.json +10 -0
  78. data/golden/cross_import/expected/schema_javascript.mjs +19 -0
  79. data/golden/cross_import/expected/schema_ruby.rb +19 -0
  80. data/golden/cross_import/expected/snast.txt +7 -0
  81. data/golden/cross_import/expected/vecir.txt +8 -0
  82. data/golden/cross_import/input.json +1 -0
  83. data/golden/cross_import/schema.kumi +15 -0
  84. data/golden/cross_let/expected/ast.txt +62 -0
  85. data/golden/cross_let/expected/dfir.txt +35 -0
  86. data/golden/cross_let/expected/dfir_optimized.txt +51 -0
  87. data/golden/cross_let/expected/input_plan.txt +5 -0
  88. data/golden/cross_let/expected/loopir.txt +100 -0
  89. data/golden/cross_let/expected/nast.txt +46 -0
  90. data/golden/cross_let/expected/runtime.json +61 -0
  91. data/golden/cross_let/expected/schema_javascript.mjs +136 -0
  92. data/golden/cross_let/expected/schema_ruby.rb +123 -0
  93. data/golden/cross_let/expected/snast.txt +46 -0
  94. data/golden/cross_let/expected/vecir.txt +51 -0
  95. data/golden/cross_let/input.json +7 -0
  96. data/golden/cross_let/schema.kumi +25 -0
  97. data/golden/decimal_explicit/expected/dfir.txt +6 -6
  98. data/golden/decimal_explicit/expected/dfir_optimized.txt +6 -6
  99. data/golden/decimal_explicit/expected/loopir.txt +6 -6
  100. data/golden/decimal_explicit/expected/runtime.json +10 -0
  101. data/golden/decimal_explicit/expected/schema_ruby.rb +1 -1
  102. data/golden/decimal_explicit/expected/snast.txt +9 -9
  103. data/golden/decimal_explicit/expected/vecir.txt +6 -6
  104. data/golden/element_arrays/expected/loopir.txt +6 -13
  105. data/golden/element_arrays/expected/runtime.json +117 -0
  106. data/golden/element_arrays/expected/schema_javascript.mjs +7 -14
  107. data/golden/element_arrays/expected/schema_ruby.rb +8 -15
  108. data/golden/empty_and_null_inputs/expected/loopir.txt +4 -9
  109. data/golden/empty_and_null_inputs/expected/runtime.json +8 -0
  110. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +5 -10
  111. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +6 -11
  112. data/golden/example_xpto/expected/runtime.json +4 -0
  113. data/golden/example_xpto/expected/schema_ruby.rb +1 -1
  114. data/golden/function_overload/expected/runtime.json +8 -0
  115. data/golden/function_overload/expected/schema_ruby.rb +1 -1
  116. data/golden/game_of_life/expected/loopir.txt +1 -58
  117. data/golden/game_of_life/expected/runtime.json +418 -0
  118. data/golden/game_of_life/expected/schema_javascript.mjs +1 -58
  119. data/golden/game_of_life/expected/schema_ruby.rb +2 -59
  120. data/golden/hash_keys/expected/runtime.json +20 -0
  121. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  122. data/golden/hash_value/expected/runtime.json +19 -0
  123. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  124. data/golden/hierarchical_complex/expected/loopir.txt +0 -4
  125. data/golden/hierarchical_complex/expected/runtime.json +16 -0
  126. data/golden/hierarchical_complex/expected/schema_javascript.mjs +0 -4
  127. data/golden/hierarchical_complex/expected/schema_ruby.rb +1 -5
  128. data/golden/inline_rename_scope_leak/expected/loopir.txt +1 -5
  129. data/golden/inline_rename_scope_leak/expected/runtime.json +10 -0
  130. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +3 -7
  131. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +4 -8
  132. data/golden/input_reference/expected/dfir.txt +2 -2
  133. data/golden/input_reference/expected/dfir_optimized.txt +2 -2
  134. data/golden/input_reference/expected/loopir.txt +2 -5
  135. data/golden/input_reference/expected/runtime.json +15 -0
  136. data/golden/input_reference/expected/schema_javascript.mjs +3 -6
  137. data/golden/input_reference/expected/schema_ruby.rb +4 -7
  138. data/golden/input_reference/expected/snast.txt +1 -1
  139. data/golden/input_reference/expected/vecir.txt +2 -2
  140. data/golden/interleaved_fusion/expected/loopir.txt +5 -10
  141. data/golden/interleaved_fusion/expected/runtime.json +37 -0
  142. data/golden/interleaved_fusion/expected/schema_javascript.mjs +5 -10
  143. data/golden/interleaved_fusion/expected/schema_ruby.rb +6 -11
  144. data/golden/let_inline/expected/runtime.json +6 -0
  145. data/golden/let_inline/expected/schema_ruby.rb +2 -2
  146. data/golden/loop_fusion/expected/loopir.txt +3 -7
  147. data/golden/loop_fusion/expected/runtime.json +29 -0
  148. data/golden/loop_fusion/expected/schema_javascript.mjs +3 -7
  149. data/golden/loop_fusion/expected/schema_ruby.rb +4 -8
  150. data/golden/min_max_empty_arrays/expected/loopir.txt +5 -12
  151. data/golden/min_max_empty_arrays/expected/runtime.json +16 -0
  152. data/golden/min_max_empty_arrays/expected/schema_javascript.mjs +7 -14
  153. data/golden/min_max_empty_arrays/expected/schema_ruby.rb +10 -17
  154. data/golden/min_reduce_scope/expected/loopir.txt +3 -7
  155. data/golden/min_reduce_scope/expected/runtime.json +11 -0
  156. data/golden/min_reduce_scope/expected/schema_javascript.mjs +4 -8
  157. data/golden/min_reduce_scope/expected/schema_ruby.rb +5 -9
  158. data/golden/mixed_dimensions/expected/loopir.txt +2 -5
  159. data/golden/mixed_dimensions/expected/runtime.json +34 -0
  160. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -6
  161. data/golden/mixed_dimensions/expected/schema_ruby.rb +4 -7
  162. data/golden/mlp_backprop/expected/ast.txt +147 -0
  163. data/golden/mlp_backprop/expected/dfir.txt +99 -0
  164. data/golden/mlp_backprop/expected/dfir_optimized.txt +374 -0
  165. data/golden/mlp_backprop/expected/input_plan.txt +17 -0
  166. data/golden/mlp_backprop/expected/loopir.txt +440 -0
  167. data/golden/mlp_backprop/expected/nast.txt +120 -0
  168. data/golden/mlp_backprop/expected/runtime.json +43 -0
  169. data/golden/mlp_backprop/expected/schema_javascript.mjs +516 -0
  170. data/golden/mlp_backprop/expected/schema_ruby.rb +484 -0
  171. data/golden/mlp_backprop/expected/snast.txt +120 -0
  172. data/golden/mlp_backprop/expected/vecir.txt +374 -0
  173. data/golden/mlp_backprop/input.json +8 -0
  174. data/golden/mlp_backprop/schema.kumi +43 -0
  175. data/golden/multi_loop_reduction/expected/loopir.txt +2 -6
  176. data/golden/multi_loop_reduction/expected/runtime.json +5 -0
  177. data/golden/multi_loop_reduction/expected/schema_javascript.mjs +4 -8
  178. data/golden/multi_loop_reduction/expected/schema_ruby.rb +5 -9
  179. data/golden/multirank_hoisting/expected/loopir.txt +24 -42
  180. data/golden/multirank_hoisting/expected/runtime.json +47 -0
  181. data/golden/multirank_hoisting/expected/schema_javascript.mjs +24 -45
  182. data/golden/multirank_hoisting/expected/schema_ruby.rb +25 -43
  183. data/golden/nested_hash/expected/runtime.json +3 -0
  184. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  185. data/golden/outer_let/expected/ast.txt +106 -0
  186. data/golden/outer_let/expected/dfir.txt +66 -0
  187. data/golden/outer_let/expected/dfir_optimized.txt +145 -0
  188. data/golden/outer_let/expected/input_plan.txt +19 -0
  189. data/golden/outer_let/expected/loopir.txt +166 -0
  190. data/golden/outer_let/expected/nast.txt +78 -0
  191. data/golden/outer_let/expected/runtime.json +89 -0
  192. data/golden/outer_let/expected/schema_javascript.mjs +220 -0
  193. data/golden/outer_let/expected/schema_ruby.rb +201 -0
  194. data/golden/outer_let/expected/snast.txt +78 -0
  195. data/golden/outer_let/expected/vecir.txt +145 -0
  196. data/golden/outer_let/input.json +9 -0
  197. data/golden/outer_let/schema.kumi +32 -0
  198. data/golden/pairwise_cross/expected/ast.txt +62 -0
  199. data/golden/pairwise_cross/expected/dfir.txt +36 -0
  200. data/golden/pairwise_cross/expected/dfir_optimized.txt +50 -0
  201. data/golden/pairwise_cross/expected/input_plan.txt +8 -0
  202. data/golden/pairwise_cross/expected/loopir.txt +84 -0
  203. data/golden/pairwise_cross/expected/nast.txt +46 -0
  204. data/golden/pairwise_cross/expected/runtime.json +80 -0
  205. data/golden/pairwise_cross/expected/schema_javascript.mjs +113 -0
  206. data/golden/pairwise_cross/expected/schema_ruby.rb +104 -0
  207. data/golden/pairwise_cross/expected/snast.txt +46 -0
  208. data/golden/pairwise_cross/expected/vecir.txt +50 -0
  209. data/golden/pairwise_cross/input.json +8 -0
  210. data/golden/pairwise_cross/schema.kumi +18 -0
  211. data/golden/reduction_broadcast/expected/loopir.txt +4 -10
  212. data/golden/reduction_broadcast/expected/runtime.json +14 -0
  213. data/golden/reduction_broadcast/expected/schema_javascript.mjs +4 -10
  214. data/golden/reduction_broadcast/expected/schema_ruby.rb +5 -11
  215. data/golden/roll/expected/loopir.txt +4 -8
  216. data/golden/roll/expected/runtime.json +26 -0
  217. data/golden/roll/expected/schema_javascript.mjs +4 -8
  218. data/golden/roll/expected/schema_ruby.rb +5 -9
  219. data/golden/schema_imports_broadcasting_with_imports/expected/dfir.txt +3 -3
  220. data/golden/schema_imports_broadcasting_with_imports/expected/dfir_optimized.txt +3 -3
  221. data/golden/schema_imports_broadcasting_with_imports/expected/loopir.txt +3 -4
  222. data/golden/schema_imports_broadcasting_with_imports/expected/runtime.json +11 -0
  223. data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +2 -3
  224. data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +3 -4
  225. data/golden/schema_imports_broadcasting_with_imports/expected/snast.txt +5 -5
  226. data/golden/schema_imports_broadcasting_with_imports/expected/vecir.txt +3 -3
  227. data/golden/schema_imports_complex_order_calc/expected/dfir.txt +20 -20
  228. data/golden/schema_imports_complex_order_calc/expected/dfir_optimized.txt +60 -60
  229. data/golden/schema_imports_complex_order_calc/expected/loopir.txt +34 -47
  230. data/golden/schema_imports_complex_order_calc/expected/runtime.json +33 -0
  231. data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +16 -29
  232. data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +17 -30
  233. data/golden/schema_imports_complex_order_calc/expected/snast.txt +26 -26
  234. data/golden/schema_imports_complex_order_calc/expected/vecir.txt +60 -60
  235. data/golden/schema_imports_composed_order/expected/dfir.txt +3 -3
  236. data/golden/schema_imports_composed_order/expected/dfir_optimized.txt +6 -6
  237. data/golden/schema_imports_composed_order/expected/loopir.txt +6 -6
  238. data/golden/schema_imports_composed_order/expected/runtime.json +9 -0
  239. data/golden/schema_imports_composed_order/expected/schema_ruby.rb +1 -1
  240. data/golden/schema_imports_composed_order/expected/snast.txt +5 -5
  241. data/golden/schema_imports_composed_order/expected/vecir.txt +6 -6
  242. data/golden/schema_imports_discount_with_tax/expected/dfir.txt +7 -7
  243. data/golden/schema_imports_discount_with_tax/expected/dfir_optimized.txt +10 -10
  244. data/golden/schema_imports_discount_with_tax/expected/loopir.txt +10 -10
  245. data/golden/schema_imports_discount_with_tax/expected/runtime.json +10 -0
  246. data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +1 -1
  247. data/golden/schema_imports_discount_with_tax/expected/snast.txt +11 -11
  248. data/golden/schema_imports_discount_with_tax/expected/vecir.txt +10 -10
  249. data/golden/schema_imports_line_items/expected/dfir.txt +1 -1
  250. data/golden/schema_imports_line_items/expected/dfir_optimized.txt +3 -3
  251. data/golden/schema_imports_line_items/expected/loopir.txt +3 -6
  252. data/golden/schema_imports_line_items/expected/runtime.json +8 -0
  253. data/golden/schema_imports_line_items/expected/schema_javascript.mjs +4 -7
  254. data/golden/schema_imports_line_items/expected/schema_ruby.rb +5 -8
  255. data/golden/schema_imports_line_items/expected/snast.txt +1 -1
  256. data/golden/schema_imports_line_items/expected/vecir.txt +3 -3
  257. data/golden/schema_imports_multiple/expected/dfir.txt +7 -7
  258. data/golden/schema_imports_multiple/expected/dfir_optimized.txt +13 -13
  259. data/golden/schema_imports_multiple/expected/loopir.txt +13 -13
  260. data/golden/schema_imports_multiple/expected/runtime.json +10 -0
  261. data/golden/schema_imports_multiple/expected/schema_ruby.rb +1 -1
  262. data/golden/schema_imports_multiple/expected/snast.txt +11 -11
  263. data/golden/schema_imports_multiple/expected/vecir.txt +13 -13
  264. data/golden/schema_imports_nested_expressions/expected/dfir.txt +4 -4
  265. data/golden/schema_imports_nested_expressions/expected/dfir_optimized.txt +6 -6
  266. data/golden/schema_imports_nested_expressions/expected/loopir.txt +6 -6
  267. data/golden/schema_imports_nested_expressions/expected/runtime.json +8 -0
  268. data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +1 -1
  269. data/golden/schema_imports_nested_expressions/expected/snast.txt +6 -6
  270. data/golden/schema_imports_nested_expressions/expected/vecir.txt +6 -6
  271. data/golden/schema_imports_nested_with_reductions/expected/dfir.txt +6 -6
  272. data/golden/schema_imports_nested_with_reductions/expected/dfir_optimized.txt +15 -15
  273. data/golden/schema_imports_nested_with_reductions/expected/loopir.txt +7 -14
  274. data/golden/schema_imports_nested_with_reductions/expected/runtime.json +12 -0
  275. data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +8 -15
  276. data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +9 -16
  277. data/golden/schema_imports_nested_with_reductions/expected/snast.txt +6 -6
  278. data/golden/schema_imports_nested_with_reductions/expected/vecir.txt +15 -15
  279. data/golden/schema_imports_with_imports/expected/dfir.txt +3 -3
  280. data/golden/schema_imports_with_imports/expected/dfir_optimized.txt +3 -3
  281. data/golden/schema_imports_with_imports/expected/loopir.txt +3 -3
  282. data/golden/schema_imports_with_imports/expected/runtime.json +7 -0
  283. data/golden/schema_imports_with_imports/expected/schema_ruby.rb +1 -1
  284. data/golden/schema_imports_with_imports/expected/snast.txt +5 -5
  285. data/golden/schema_imports_with_imports/expected/vecir.txt +3 -3
  286. data/golden/shift/expected/loopir.txt +4 -8
  287. data/golden/shift/expected/runtime.json +38 -0
  288. data/golden/shift/expected/schema_javascript.mjs +4 -8
  289. data/golden/shift/expected/schema_ruby.rb +5 -9
  290. data/golden/shift_2d/expected/loopir.txt +8 -16
  291. data/golden/shift_2d/expected/runtime.json +146 -0
  292. data/golden/shift_2d/expected/schema_javascript.mjs +8 -16
  293. data/golden/shift_2d/expected/schema_ruby.rb +9 -17
  294. data/golden/simple_math/expected/runtime.json +10 -0
  295. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  296. data/golden/streaming_basics/expected/loopir.txt +0 -3
  297. data/golden/streaming_basics/expected/runtime.json +25 -0
  298. data/golden/streaming_basics/expected/schema_javascript.mjs +3 -6
  299. data/golden/streaming_basics/expected/schema_ruby.rb +4 -7
  300. data/golden/transcendentals/expected/ast.txt +48 -0
  301. data/golden/transcendentals/expected/dfir.txt +31 -0
  302. data/golden/transcendentals/expected/dfir_optimized.txt +34 -0
  303. data/golden/transcendentals/expected/input_plan.txt +5 -0
  304. data/golden/transcendentals/expected/loopir.txt +46 -0
  305. data/golden/transcendentals/expected/nast.txt +34 -0
  306. data/golden/transcendentals/expected/runtime.json +27 -0
  307. data/golden/transcendentals/expected/schema_javascript.mjs +66 -0
  308. data/golden/transcendentals/expected/schema_ruby.rb +63 -0
  309. data/golden/transcendentals/expected/snast.txt +34 -0
  310. data/golden/transcendentals/expected/vecir.txt +34 -0
  311. data/golden/transcendentals/input.json +1 -0
  312. data/golden/transcendentals/schema.kumi +16 -0
  313. data/golden/tuples/expected/dfir.txt +4 -4
  314. data/golden/tuples/expected/runtime.json +12 -0
  315. data/golden/tuples/expected/schema_ruby.rb +1 -1
  316. data/golden/tuples_and_arrays/expected/dfir.txt +1 -1
  317. data/golden/tuples_and_arrays/expected/loopir.txt +0 -1
  318. data/golden/tuples_and_arrays/expected/runtime.json +13 -0
  319. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +1 -2
  320. data/golden/tuples_and_arrays/expected/schema_ruby.rb +2 -3
  321. data/golden/type_promotion/expected/ast.txt +75 -0
  322. data/golden/type_promotion/expected/dfir.txt +38 -0
  323. data/golden/type_promotion/expected/dfir_optimized.txt +51 -0
  324. data/golden/type_promotion/expected/input_plan.txt +9 -0
  325. data/golden/type_promotion/expected/loopir.txt +57 -0
  326. data/golden/type_promotion/expected/nast.txt +57 -0
  327. data/golden/type_promotion/expected/runtime.json +23 -0
  328. data/golden/type_promotion/expected/schema_javascript.mjs +90 -0
  329. data/golden/type_promotion/expected/schema_ruby.rb +89 -0
  330. data/golden/type_promotion/expected/snast.txt +57 -0
  331. data/golden/type_promotion/expected/vecir.txt +51 -0
  332. data/golden/type_promotion/input.json +11 -0
  333. data/golden/type_promotion/schema.kumi +30 -0
  334. data/golden/us_tax_2024/expected/dfir.txt +6 -6
  335. data/golden/us_tax_2024/expected/loopir.txt +108 -217
  336. data/golden/us_tax_2024/expected/runtime.json +423 -0
  337. data/golden/us_tax_2024/expected/schema_javascript.mjs +108 -235
  338. data/golden/us_tax_2024/expected/schema_ruby.rb +109 -218
  339. data/golden/vector_make_object/expected/schema_ruby.rb +1 -1
  340. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  341. data/lib/kumi/analyzer.rb +29 -34
  342. data/lib/kumi/configuration.rb +31 -0
  343. data/lib/kumi/core/analyzer/binder.rb +2 -2
  344. data/lib/kumi/core/analyzer/macro_expander.rb +3 -3
  345. data/lib/kumi/core/analyzer/pass_failure.rb +1 -1
  346. data/lib/kumi/core/analyzer/pass_manager.rb +211 -100
  347. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +44 -15
  348. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +6 -20
  349. data/lib/kumi/core/analyzer/passes/codegen/loop/js/emitter.rb +235 -35
  350. data/lib/kumi/core/analyzer/passes/codegen/loop/ruby/emitter.rb +6 -3
  351. data/lib/kumi/core/analyzer/passes/codegen/loop_js_pass.rb +3 -0
  352. data/lib/kumi/core/analyzer/passes/codegen/loop_ruby_pass.rb +3 -0
  353. data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +3 -0
  354. data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +1 -1
  355. data/lib/kumi/core/analyzer/passes/declaration_validator_pass.rb +83 -0
  356. data/lib/kumi/core/analyzer/passes/{dependency_resolver.rb → dependency_resolver_pass.rb} +8 -6
  357. data/lib/kumi/core/analyzer/passes/df_validate_pass.rb +3 -13
  358. data/lib/kumi/core/analyzer/passes/import_analysis_pass.rb +7 -2
  359. data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +4 -28
  360. data/lib/kumi/core/analyzer/passes/{input_collector.rb → input_collector_pass.rb} +30 -3
  361. data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +4 -1
  362. data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +4 -2
  363. data/lib/kumi/core/analyzer/passes/ir_lower_pass.rb +35 -0
  364. data/lib/kumi/core/analyzer/passes/ir_validate_pass.rb +43 -0
  365. data/lib/kumi/core/analyzer/passes/{load_input_cse.rb → load_input_cse_pass.rb} +1 -1
  366. data/lib/kumi/core/analyzer/passes/loop/lower_pass.rb +23 -10
  367. data/lib/kumi/core/analyzer/passes/loop_validate_pass.rb +2 -10
  368. data/lib/kumi/core/analyzer/passes/lower_to_dfir_pass.rb +4 -2
  369. data/lib/kumi/core/analyzer/passes/{name_indexer.rb → name_indexer_pass.rb} +3 -7
  370. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +174 -23
  371. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +19 -3
  372. data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +3 -0
  373. data/lib/kumi/core/analyzer/passes/pass_base.rb +78 -5
  374. data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +7 -1
  375. data/lib/kumi/core/analyzer/passes/{semantic_constraint_validator.rb → semantic_constraint_validator_pass.rb} +7 -14
  376. data/lib/kumi/core/analyzer/passes/snast_pass.rb +22 -48
  377. data/lib/kumi/core/analyzer/passes/{toposorter.rb → toposorter_pass.rb} +4 -5
  378. data/lib/kumi/core/analyzer/passes/{unsat_detector.rb → unsat_detector_pass.rb} +4 -15
  379. data/lib/kumi/core/analyzer/passes/vec/lower_pass.rb +6 -8
  380. data/lib/kumi/core/analyzer/passes/vec_validate_pass.rb +2 -10
  381. data/lib/kumi/core/analyzer/structs/input_meta.rb +1 -1
  382. data/lib/kumi/core/compiler/access_builder.rb +1 -1
  383. data/lib/kumi/core/compiler/access_codegen.rb +1 -1
  384. data/lib/kumi/core/compiler/access_emit/base.rb +1 -1
  385. data/lib/kumi/core/compiler/access_planner_v2.rb +2 -2
  386. data/lib/kumi/core/compiler/accessors/each_indexed_accessor.rb +1 -1
  387. data/lib/kumi/core/compiler/accessors/materialize_accessor.rb +1 -1
  388. data/lib/kumi/core/compiler/accessors/ravel_accessor.rb +1 -1
  389. data/lib/kumi/core/compiler/accessors/read_accessor.rb +1 -1
  390. data/lib/kumi/core/error_reporter.rb +6 -11
  391. data/lib/kumi/core/errors.rb +37 -11
  392. data/lib/kumi/core/expression_renderer.rb +97 -0
  393. data/lib/kumi/core/functions/overload_resolver.rb +79 -149
  394. data/lib/kumi/core/ir/execution_engine/combinators.rb +16 -10
  395. data/lib/kumi/core/nast.rb +24 -0
  396. data/lib/kumi/core/ruby_parser/dsl.rb +12 -2
  397. data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +14 -12
  398. data/lib/kumi/core/ruby_parser/guard_rails.rb +15 -1
  399. data/lib/kumi/core/ruby_parser/input_builder.rb +55 -48
  400. data/lib/kumi/core/ruby_parser/parser.rb +25 -17
  401. data/lib/kumi/core/ruby_parser/schema_builder.rb +43 -15
  402. data/lib/kumi/core/ruby_parser/sugar.rb +0 -86
  403. data/lib/kumi/core/types/dtype_rule.rb +76 -0
  404. data/lib/kumi/core/types/normalizer.rb +2 -2
  405. data/lib/kumi/core/types/profile.rb +82 -0
  406. data/lib/kumi/core/types/registry.rb +87 -0
  407. data/lib/kumi/core/types/system.rb +96 -0
  408. data/lib/kumi/core/types/value_objects.rb +14 -13
  409. data/lib/kumi/core/types.rb +41 -34
  410. data/lib/kumi/dev/golden_runtime.rb +163 -0
  411. data/lib/kumi/dev/golden_v2.rb +30 -5
  412. data/lib/kumi/dev/pretty_printer.rb +40 -73
  413. data/lib/kumi/frontends/ruby.rb +52 -12
  414. data/lib/kumi/frontends/source_frame.rb +71 -0
  415. data/lib/kumi/frontends/text.rb +4 -48
  416. data/lib/kumi/function_registry/loader.rb +101 -0
  417. data/lib/kumi/function_registry.rb +150 -0
  418. data/lib/kumi/ir/base/block.rb +11 -2
  419. data/lib/kumi/ir/base/builder.rb +1 -1
  420. data/lib/kumi/ir/base/function.rb +2 -4
  421. data/lib/kumi/ir/base/instruction.rb +10 -23
  422. data/lib/kumi/ir/base/module.rb +5 -4
  423. data/lib/kumi/ir/buf/lower.rb +1 -2
  424. data/lib/kumi/ir/df/access_contract.rb +3 -5
  425. data/lib/kumi/ir/df/import_inliner.rb +2 -5
  426. data/lib/kumi/ir/df/lower.rb +72 -51
  427. data/lib/kumi/ir/df/ops/axis_cross.rb +34 -0
  428. data/lib/kumi/ir/df/ops/axis_outer.rb +35 -0
  429. data/lib/kumi/ir/df/passes/broadcast_simplify.rb +1 -2
  430. data/lib/kumi/ir/df/passes/cse.rb +8 -3
  431. data/lib/kumi/ir/df/passes/decl_inlining.rb +5 -26
  432. data/lib/kumi/ir/df/passes/import_inlining.rb +42 -36
  433. data/lib/kumi/ir/df/passes/load_dedup.rb +9 -4
  434. data/lib/kumi/ir/df/passes/stencil_cse.rb +2 -5
  435. data/lib/kumi/ir/df/passes/support/instruction_cloner.rb +41 -14
  436. data/lib/kumi/ir/df/passes/tuple_fold_canonicalization.rb +8 -3
  437. data/lib/kumi/ir/df/passes/tuple_to_object.rb +1 -2
  438. data/lib/kumi/ir/df/validator.rb +3 -3
  439. data/lib/kumi/ir/df.rb +8 -0
  440. data/lib/kumi/ir/loop/lower.rb +231 -37
  441. data/lib/kumi/ir/loop/passes/array_contraction.rb +124 -0
  442. data/lib/kumi/ir/loop/passes/copy_cleanup.rb +112 -0
  443. data/lib/kumi/ir/loop/passes/loop_fusion.rb +125 -0
  444. data/lib/kumi/ir/loop/passes/support/structure.rb +100 -0
  445. data/lib/kumi/ir/loop/passes.rb +14 -0
  446. data/lib/kumi/ir/loop/pipeline.rb +9 -1
  447. data/lib/kumi/ir/loop/validator.rb +29 -4
  448. data/lib/kumi/ir/loop.rb +1 -0
  449. data/lib/kumi/ir/passes/register_generator.rb +32 -0
  450. data/lib/kumi/ir/testing/snast_factory.rb +2 -4
  451. data/lib/kumi/ir/vec/lower.rb +17 -7
  452. data/lib/kumi/ir/vec/ops/core_ops.rb +41 -0
  453. data/lib/kumi/ir/vec/passes/axis_canonicalization.rb +1 -2
  454. data/lib/kumi/ir/vec/passes/constant_propagation.rb +75 -47
  455. data/lib/kumi/ir/vec/passes/dce.rb +2 -5
  456. data/lib/kumi/ir/vec/passes/gvn.rb +8 -3
  457. data/lib/kumi/ir/vec/passes/peephole_simplify.rb +30 -13
  458. data/lib/kumi/ir/vec/passes/stencil_detection.rb +1 -2
  459. data/lib/kumi/ir/vec/passes/support/algebraic_identities.rb +70 -0
  460. data/lib/kumi/ir/vec/passes/support/instruction_cloner.rb +17 -3
  461. data/lib/kumi/ir/vec/validator.rb +26 -6
  462. data/lib/kumi/schema.rb +14 -10
  463. data/lib/kumi/schema_metadata/printer.rb +111 -0
  464. data/lib/kumi/schema_metadata.rb +289 -0
  465. data/lib/kumi/syntax/location.rb +14 -1
  466. data/lib/kumi/syntax/root.rb +35 -3
  467. data/lib/kumi/test_shared_schemas/pairwise.rb +27 -0
  468. data/lib/kumi/version.rb +1 -1
  469. data/lib/kumi.rb +3 -5
  470. data/tasks/docs_portal.rake +135 -0
  471. metadata +203 -81
  472. data/golden/array_element/expected.json +0 -5
  473. data/golden/array_index/expected.json +0 -5
  474. data/golden/cascade_logic/expected.json +0 -5
  475. data/golden/chained_fusion/expected.json +0 -45
  476. data/golden/decimal_explicit/expected.json +0 -1
  477. data/golden/element_arrays/expected.json +0 -55
  478. data/golden/empty_and_null_inputs/expected.json +0 -8
  479. data/golden/example_xpto/expected.json +0 -4
  480. data/golden/game_of_life/expected.json +0 -3
  481. data/golden/hash_keys/expected.json +0 -20
  482. data/golden/hash_value/expected.json +0 -19
  483. data/golden/hierarchical_complex/expected.json +0 -34
  484. data/golden/inline_rename_scope_leak/expected.json +0 -7
  485. data/golden/input_reference/expected.json +0 -7
  486. data/golden/interleaved_fusion/expected.json +0 -37
  487. data/golden/let_inline/expected.json +0 -1
  488. data/golden/loop_fusion/expected.json +0 -30
  489. data/golden/min_max_empty_arrays/expected.json +0 -7
  490. data/golden/min_reduce_scope/expected.json +0 -9
  491. data/golden/mixed_dimensions/expected.json +0 -6
  492. data/golden/multi_loop_reduction/expected.json +0 -5
  493. data/golden/multirank_hoisting/expected.json +0 -15
  494. data/golden/nested_hash/expected.json +0 -3
  495. data/golden/reduction_broadcast/expected.json +0 -25
  496. data/golden/roll/expected.json +0 -6
  497. data/golden/schema_imports_broadcasting_with_imports/expected.json +0 -4
  498. data/golden/schema_imports_complex_order_calc/expected.json +0 -12
  499. data/golden/schema_imports_composed_order/expected.json +0 -6
  500. data/golden/schema_imports_discount_with_tax/expected.json +0 -7
  501. data/golden/schema_imports_line_items/expected.json +0 -5
  502. data/golden/schema_imports_multiple/expected.json +0 -7
  503. data/golden/schema_imports_nested_expressions/expected.json +0 -5
  504. data/golden/schema_imports_nested_with_reductions/expected.json +0 -6
  505. data/golden/schema_imports_with_imports/expected.json +0 -4
  506. data/golden/shift/expected.json +0 -8
  507. data/golden/shift_2d/expected.json +0 -15
  508. data/golden/simple_math/expected.json +0 -1
  509. data/golden/streaming_basics/expected.json +0 -10
  510. data/golden/tuples/expected.json +0 -7
  511. data/golden/tuples_and_arrays/expected.json +0 -18
  512. data/golden/us_tax_2024/expected.json +0 -120
  513. data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +0 -130
  514. data/lib/kumi/core/analyzer/passes/declaration_validator.rb +0 -45
  515. data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +0 -197
  516. data/lib/kumi/core/compiler/access_planner.rb +0 -258
  517. data/lib/kumi/core/functions/function_spec.rb +0 -17
  518. data/lib/kumi/core/functions/loader.rb +0 -63
  519. data/lib/kumi/core/functions/type_categories.rb +0 -44
  520. data/lib/kumi/core/functions/type_error_reporter.rb +0 -116
  521. data/lib/kumi/core/functions/type_rules.rb +0 -228
  522. data/lib/kumi/core/irv2/builder.rb +0 -48
  523. data/lib/kumi/core/irv2/declaration.rb +0 -28
  524. data/lib/kumi/core/irv2/module.rb +0 -108
  525. data/lib/kumi/core/irv2/value.rb +0 -28
  526. data/lib/kumi/core/types/validator.rb +0 -33
  527. data/lib/kumi/dev/codegen.rb +0 -194
  528. data/lib/kumi/dev/golden/generator.rb +0 -109
  529. data/lib/kumi/dev/golden/reporter.rb +0 -169
  530. data/lib/kumi/dev/golden/representation.rb +0 -40
  531. data/lib/kumi/dev/golden/result.rb +0 -106
  532. data/lib/kumi/dev/golden/runtime_test.rb +0 -131
  533. data/lib/kumi/dev/golden/suite.rb +0 -147
  534. data/lib/kumi/dev/golden/value_normalizer.rb +0 -78
  535. data/lib/kumi/dev/golden/verifier.rb +0 -76
  536. data/lib/kumi/dev/golden.rb +0 -82
  537. data/lib/kumi/dev/golden_schema_wrapper.rb +0 -116
  538. data/lib/kumi/dev/printer/irv2_formatter.rb +0 -163
  539. data/lib/kumi/kernel_registry.rb +0 -59
  540. data/lib/kumi/pack/builder.rb +0 -229
  541. data/lib/kumi/pack.rb +0 -15
  542. data/lib/kumi/registry_v2/loader.rb +0 -170
  543. data/lib/kumi/registry_v2.rb +0 -135
@@ -344,16 +344,150 @@
344
344
  ],
345
345
  "reduction_strategy": null
346
346
  },
347
+ "sqrt": {
348
+ "id": "core.sqrt",
349
+ "kind": "elementwise",
350
+ "arity": 1,
351
+ "params": [
352
+ {
353
+ "name": "number",
354
+ "dtype": "numeric"
355
+ }
356
+ ],
357
+ "kernels": {
358
+ "ruby": "sqrt:ruby:v1"
359
+ },
360
+ "dtype": {
361
+ "rule": "scalar",
362
+ "kind": "float"
363
+ },
364
+ "aliases": [
365
+ "sqrt"
366
+ ],
367
+ "reduction_strategy": null
368
+ },
369
+ "sin": {
370
+ "id": "core.sin",
371
+ "kind": "elementwise",
372
+ "arity": 1,
373
+ "params": [
374
+ {
375
+ "name": "angle",
376
+ "dtype": "numeric"
377
+ }
378
+ ],
379
+ "kernels": {
380
+ "ruby": "sin:ruby:v1"
381
+ },
382
+ "dtype": {
383
+ "rule": "scalar",
384
+ "kind": "float"
385
+ },
386
+ "aliases": [
387
+ "sin"
388
+ ],
389
+ "reduction_strategy": null
390
+ },
391
+ "cos": {
392
+ "id": "core.cos",
393
+ "kind": "elementwise",
394
+ "arity": 1,
395
+ "params": [
396
+ {
397
+ "name": "angle",
398
+ "dtype": "numeric"
399
+ }
400
+ ],
401
+ "kernels": {
402
+ "ruby": "cos:ruby:v1"
403
+ },
404
+ "dtype": {
405
+ "rule": "scalar",
406
+ "kind": "float"
407
+ },
408
+ "aliases": [
409
+ "cos"
410
+ ],
411
+ "reduction_strategy": null
412
+ },
413
+ "exp": {
414
+ "id": "core.exp",
415
+ "kind": "elementwise",
416
+ "arity": 1,
417
+ "params": [
418
+ {
419
+ "name": "number",
420
+ "dtype": "numeric"
421
+ }
422
+ ],
423
+ "kernels": {
424
+ "ruby": "exp:ruby:v1"
425
+ },
426
+ "dtype": {
427
+ "rule": "scalar",
428
+ "kind": "float"
429
+ },
430
+ "aliases": [
431
+ "exp"
432
+ ],
433
+ "reduction_strategy": null
434
+ },
435
+ "log": {
436
+ "id": "core.log",
437
+ "kind": "elementwise",
438
+ "arity": 1,
439
+ "params": [
440
+ {
441
+ "name": "number",
442
+ "dtype": "numeric"
443
+ }
444
+ ],
445
+ "kernels": {
446
+ "ruby": "log:ruby:v1"
447
+ },
448
+ "dtype": {
449
+ "rule": "scalar",
450
+ "kind": "float"
451
+ },
452
+ "aliases": [
453
+ "log"
454
+ ],
455
+ "reduction_strategy": null
456
+ },
457
+ "tanh": {
458
+ "id": "core.tanh",
459
+ "kind": "elementwise",
460
+ "arity": 1,
461
+ "params": [
462
+ {
463
+ "name": "number",
464
+ "dtype": "numeric"
465
+ }
466
+ ],
467
+ "kernels": {
468
+ "ruby": "tanh:ruby:v1"
469
+ },
470
+ "dtype": {
471
+ "rule": "scalar",
472
+ "kind": "float"
473
+ },
474
+ "aliases": [
475
+ "tanh"
476
+ ],
477
+ "reduction_strategy": null
478
+ },
347
479
  "add": {
348
480
  "id": "core.add",
349
481
  "kind": "elementwise",
350
482
  "arity": 2,
351
483
  "params": [
352
484
  {
353
- "name": "left_operand"
485
+ "name": "left_operand",
486
+ "dtype": "numeric"
354
487
  },
355
488
  {
356
- "name": "right_operand"
489
+ "name": "right_operand",
490
+ "dtype": "numeric"
357
491
  }
358
492
  ],
359
493
  "kernels": {
@@ -377,10 +511,12 @@
377
511
  "arity": 2,
378
512
  "params": [
379
513
  {
380
- "name": "left_operand"
514
+ "name": "left_operand",
515
+ "dtype": "numeric"
381
516
  },
382
517
  {
383
- "name": "right_operand"
518
+ "name": "right_operand",
519
+ "dtype": "numeric"
384
520
  }
385
521
  ],
386
522
  "kernels": {
@@ -405,10 +541,12 @@
405
541
  "arity": 2,
406
542
  "params": [
407
543
  {
408
- "name": "left_operand"
544
+ "name": "left_operand",
545
+ "dtype": "numeric"
409
546
  },
410
547
  {
411
- "name": "right_operand"
548
+ "name": "right_operand",
549
+ "dtype": "numeric"
412
550
  }
413
551
  ],
414
552
  "kernels": {
@@ -428,26 +566,25 @@
428
566
  "reduction_strategy": null
429
567
  },
430
568
  "mul": {
431
- "id": "core.mul",
569
+ "id": "core.mul:string_repeat",
432
570
  "kind": "elementwise",
433
571
  "arity": 2,
434
572
  "params": [
435
573
  {
436
- "name": "left_operand"
574
+ "name": "string_value",
575
+ "dtype": "string"
437
576
  },
438
577
  {
439
- "name": "right_operand"
578
+ "name": "repeat_count",
579
+ "dtype": "integer"
440
580
  }
441
581
  ],
442
582
  "kernels": {
443
- "ruby": "mul:ruby:v1"
583
+ "string_repeat": "mul:string_repeat:ruby:v1"
444
584
  },
445
585
  "dtype": {
446
- "rule": "promote",
447
- "params": [
448
- "left_operand",
449
- "right_operand"
450
- ]
586
+ "rule": "scalar",
587
+ "kind": "string"
451
588
  },
452
589
  "aliases": [
453
590
  "mul",
@@ -456,26 +593,25 @@
456
593
  "reduction_strategy": null
457
594
  },
458
595
  "multiply": {
459
- "id": "core.mul",
596
+ "id": "core.mul:string_repeat",
460
597
  "kind": "elementwise",
461
598
  "arity": 2,
462
599
  "params": [
463
600
  {
464
- "name": "left_operand"
601
+ "name": "string_value",
602
+ "dtype": "string"
465
603
  },
466
604
  {
467
- "name": "right_operand"
605
+ "name": "repeat_count",
606
+ "dtype": "integer"
468
607
  }
469
608
  ],
470
609
  "kernels": {
471
- "ruby": "mul:ruby:v1"
610
+ "string_repeat": "mul:string_repeat:ruby:v1"
472
611
  },
473
612
  "dtype": {
474
- "rule": "promote",
475
- "params": [
476
- "left_operand",
477
- "right_operand"
478
- ]
613
+ "rule": "scalar",
614
+ "kind": "string"
479
615
  },
480
616
  "aliases": [
481
617
  "mul",
@@ -489,10 +625,12 @@
489
625
  "arity": 2,
490
626
  "params": [
491
627
  {
492
- "name": "base"
628
+ "name": "base",
629
+ "dtype": "numeric"
493
630
  },
494
631
  {
495
- "name": "exponent"
632
+ "name": "exponent",
633
+ "dtype": "numeric"
496
634
  }
497
635
  ],
498
636
  "kernels": {
@@ -517,10 +655,12 @@
517
655
  "arity": 2,
518
656
  "params": [
519
657
  {
520
- "name": "base"
658
+ "name": "base",
659
+ "dtype": "numeric"
521
660
  },
522
661
  {
523
- "name": "exponent"
662
+ "name": "exponent",
663
+ "dtype": "numeric"
524
664
  }
525
665
  ],
526
666
  "kernels": {
@@ -545,10 +685,12 @@
545
685
  "arity": 2,
546
686
  "params": [
547
687
  {
548
- "name": "left_operand"
688
+ "name": "left_operand",
689
+ "dtype": "numeric"
549
690
  },
550
691
  {
551
- "name": "right_operand"
692
+ "name": "right_operand",
693
+ "dtype": "numeric"
552
694
  }
553
695
  ],
554
696
  "kernels": {
@@ -570,10 +712,12 @@
570
712
  "arity": 2,
571
713
  "params": [
572
714
  {
573
- "name": "left_operand"
715
+ "name": "left_operand",
716
+ "dtype": "numeric"
574
717
  },
575
718
  {
576
- "name": "right_operand"
719
+ "name": "right_operand",
720
+ "dtype": "numeric"
577
721
  }
578
722
  ],
579
723
  "kernels": {
@@ -595,10 +739,12 @@
595
739
  "arity": 2,
596
740
  "params": [
597
741
  {
598
- "name": "left_operand"
742
+ "name": "left_operand",
743
+ "dtype": "numeric"
599
744
  },
600
745
  {
601
- "name": "right_operand"
746
+ "name": "right_operand",
747
+ "dtype": "numeric"
602
748
  }
603
749
  ],
604
750
  "kernels": {
@@ -624,10 +770,12 @@
624
770
  "arity": 2,
625
771
  "params": [
626
772
  {
627
- "name": "left_operand"
773
+ "name": "left_operand",
774
+ "dtype": "numeric"
628
775
  },
629
776
  {
630
- "name": "right_operand"
777
+ "name": "right_operand",
778
+ "dtype": "numeric"
631
779
  }
632
780
  ],
633
781
  "kernels": {
@@ -653,10 +801,12 @@
653
801
  "arity": 2,
654
802
  "params": [
655
803
  {
656
- "name": "left_operand"
804
+ "name": "left_operand",
805
+ "dtype": "numeric"
657
806
  },
658
807
  {
659
- "name": "right_operand"
808
+ "name": "right_operand",
809
+ "dtype": "numeric"
660
810
  }
661
811
  ],
662
812
  "kernels": {
@@ -709,10 +859,12 @@
709
859
  "arity": 2,
710
860
  "params": [
711
861
  {
712
- "name": "left_operand"
862
+ "name": "left_operand",
863
+ "dtype": "boolean"
713
864
  },
714
865
  {
715
- "name": "right_operand"
866
+ "name": "right_operand",
867
+ "dtype": "boolean"
716
868
  }
717
869
  ],
718
870
  "kernels": {
@@ -734,10 +886,12 @@
734
886
  "arity": 2,
735
887
  "params": [
736
888
  {
737
- "name": "left_operand"
889
+ "name": "left_operand",
890
+ "dtype": "boolean"
738
891
  },
739
892
  {
740
- "name": "right_operand"
893
+ "name": "right_operand",
894
+ "dtype": "boolean"
741
895
  }
742
896
  ],
743
897
  "kernels": {
@@ -759,10 +913,12 @@
759
913
  "arity": 2,
760
914
  "params": [
761
915
  {
762
- "name": "left_operand"
916
+ "name": "left_operand",
917
+ "dtype": "boolean"
763
918
  },
764
919
  {
765
- "name": "right_operand"
920
+ "name": "right_operand",
921
+ "dtype": "boolean"
766
922
  }
767
923
  ],
768
924
  "kernels": {
@@ -784,10 +940,12 @@
784
940
  "arity": 2,
785
941
  "params": [
786
942
  {
787
- "name": "left_operand"
943
+ "name": "left_operand",
944
+ "dtype": "boolean"
788
945
  },
789
946
  {
790
- "name": "right_operand"
947
+ "name": "right_operand",
948
+ "dtype": "boolean"
791
949
  }
792
950
  ],
793
951
  "kernels": {
@@ -809,7 +967,8 @@
809
967
  "arity": 1,
810
968
  "params": [
811
969
  {
812
- "name": "operand"
970
+ "name": "operand",
971
+ "dtype": "boolean"
813
972
  }
814
973
  ],
815
974
  "kernels": {
@@ -831,7 +990,8 @@
831
990
  "arity": 1,
832
991
  "params": [
833
992
  {
834
- "name": "operand"
993
+ "name": "operand",
994
+ "dtype": "boolean"
835
995
  }
836
996
  ],
837
997
  "kernels": {
@@ -853,10 +1013,12 @@
853
1013
  "arity": 2,
854
1014
  "params": [
855
1015
  {
856
- "name": "left_operand"
1016
+ "name": "left_operand",
1017
+ "dtype": "orderable"
857
1018
  },
858
1019
  {
859
- "name": "right_operand"
1020
+ "name": "right_operand",
1021
+ "dtype": "orderable"
860
1022
  }
861
1023
  ],
862
1024
  "kernels": {
@@ -880,10 +1042,12 @@
880
1042
  "arity": 2,
881
1043
  "params": [
882
1044
  {
883
- "name": "left_operand"
1045
+ "name": "left_operand",
1046
+ "dtype": "orderable"
884
1047
  },
885
1048
  {
886
- "name": "right_operand"
1049
+ "name": "right_operand",
1050
+ "dtype": "orderable"
887
1051
  }
888
1052
  ],
889
1053
  "kernels": {
@@ -907,10 +1071,12 @@
907
1071
  "arity": 2,
908
1072
  "params": [
909
1073
  {
910
- "name": "left_operand"
1074
+ "name": "left_operand",
1075
+ "dtype": "orderable"
911
1076
  },
912
1077
  {
913
- "name": "right_operand"
1078
+ "name": "right_operand",
1079
+ "dtype": "orderable"
914
1080
  }
915
1081
  ],
916
1082
  "kernels": {
@@ -934,10 +1100,12 @@
934
1100
  "arity": 2,
935
1101
  "params": [
936
1102
  {
937
- "name": "left_operand"
1103
+ "name": "left_operand",
1104
+ "dtype": "orderable"
938
1105
  },
939
1106
  {
940
- "name": "right_operand"
1107
+ "name": "right_operand",
1108
+ "dtype": "orderable"
941
1109
  }
942
1110
  ],
943
1111
  "kernels": {
@@ -961,10 +1129,12 @@
961
1129
  "arity": 2,
962
1130
  "params": [
963
1131
  {
964
- "name": "left_operand"
1132
+ "name": "left_operand",
1133
+ "dtype": "orderable"
965
1134
  },
966
1135
  {
967
- "name": "right_operand"
1136
+ "name": "right_operand",
1137
+ "dtype": "orderable"
968
1138
  }
969
1139
  ],
970
1140
  "kernels": {
@@ -987,10 +1157,12 @@
987
1157
  "arity": 2,
988
1158
  "params": [
989
1159
  {
990
- "name": "left_operand"
1160
+ "name": "left_operand",
1161
+ "dtype": "orderable"
991
1162
  },
992
1163
  {
993
- "name": "right_operand"
1164
+ "name": "right_operand",
1165
+ "dtype": "orderable"
994
1166
  }
995
1167
  ],
996
1168
  "kernels": {
@@ -1013,10 +1185,12 @@
1013
1185
  "arity": 2,
1014
1186
  "params": [
1015
1187
  {
1016
- "name": "left_operand"
1188
+ "name": "left_operand",
1189
+ "dtype": "orderable"
1017
1190
  },
1018
1191
  {
1019
- "name": "right_operand"
1192
+ "name": "right_operand",
1193
+ "dtype": "orderable"
1020
1194
  }
1021
1195
  ],
1022
1196
  "kernels": {
@@ -1039,10 +1213,12 @@
1039
1213
  "arity": 2,
1040
1214
  "params": [
1041
1215
  {
1042
- "name": "left_operand"
1216
+ "name": "left_operand",
1217
+ "dtype": "orderable"
1043
1218
  },
1044
1219
  {
1045
- "name": "right_operand"
1220
+ "name": "right_operand",
1221
+ "dtype": "orderable"
1046
1222
  }
1047
1223
  ],
1048
1224
  "kernels": {
@@ -1066,10 +1242,12 @@
1066
1242
  "arity": 2,
1067
1243
  "params": [
1068
1244
  {
1069
- "name": "left_operand"
1245
+ "name": "left_operand",
1246
+ "dtype": "orderable"
1070
1247
  },
1071
1248
  {
1072
- "name": "right_operand"
1249
+ "name": "right_operand",
1250
+ "dtype": "orderable"
1073
1251
  }
1074
1252
  ],
1075
1253
  "kernels": {
@@ -1093,10 +1271,12 @@
1093
1271
  "arity": 2,
1094
1272
  "params": [
1095
1273
  {
1096
- "name": "left_operand"
1274
+ "name": "left_operand",
1275
+ "dtype": "orderable"
1097
1276
  },
1098
1277
  {
1099
- "name": "right_operand"
1278
+ "name": "right_operand",
1279
+ "dtype": "orderable"
1100
1280
  }
1101
1281
  ],
1102
1282
  "kernels": {
@@ -1120,10 +1300,12 @@
1120
1300
  "arity": 2,
1121
1301
  "params": [
1122
1302
  {
1123
- "name": "left_operand"
1303
+ "name": "left_operand",
1304
+ "dtype": "orderable"
1124
1305
  },
1125
1306
  {
1126
- "name": "right_operand"
1307
+ "name": "right_operand",
1308
+ "dtype": "orderable"
1127
1309
  }
1128
1310
  ],
1129
1311
  "kernels": {
@@ -1147,10 +1329,12 @@
1147
1329
  "arity": 2,
1148
1330
  "params": [
1149
1331
  {
1150
- "name": "left_operand"
1332
+ "name": "left_operand",
1333
+ "dtype": "orderable"
1151
1334
  },
1152
1335
  {
1153
- "name": "right_operand"
1336
+ "name": "right_operand",
1337
+ "dtype": "orderable"
1154
1338
  }
1155
1339
  ],
1156
1340
  "kernels": {
@@ -1173,10 +1357,12 @@
1173
1357
  "arity": 2,
1174
1358
  "params": [
1175
1359
  {
1176
- "name": "left_operand"
1360
+ "name": "left_operand",
1361
+ "dtype": "orderable"
1177
1362
  },
1178
1363
  {
1179
- "name": "right_operand"
1364
+ "name": "right_operand",
1365
+ "dtype": "orderable"
1180
1366
  }
1181
1367
  ],
1182
1368
  "kernels": {
@@ -1199,10 +1385,12 @@
1199
1385
  "arity": 2,
1200
1386
  "params": [
1201
1387
  {
1202
- "name": "left_operand"
1388
+ "name": "left_operand",
1389
+ "dtype": "orderable"
1203
1390
  },
1204
1391
  {
1205
- "name": "right_operand"
1392
+ "name": "right_operand",
1393
+ "dtype": "orderable"
1206
1394
  }
1207
1395
  ],
1208
1396
  "kernels": {
@@ -1657,16 +1845,17 @@
1657
1845
  "reduction_strategy": null
1658
1846
  },
1659
1847
  "to_string": {
1660
- "id": "core.to_string",
1848
+ "id": "core.to_string:float",
1661
1849
  "kind": "elementwise",
1662
1850
  "arity": 1,
1663
1851
  "params": [
1664
1852
  {
1665
- "name": "value"
1853
+ "name": "value",
1854
+ "dtype": "float"
1666
1855
  }
1667
1856
  ],
1668
1857
  "kernels": {
1669
- "ruby": "to_string:ruby:v1"
1858
+ "ruby": "to_string_float:ruby:v1"
1670
1859
  },
1671
1860
  "dtype": {
1672
1861
  "rule": "scalar",
@@ -1679,16 +1868,17 @@
1679
1868
  "reduction_strategy": null
1680
1869
  },
1681
1870
  "to_str": {
1682
- "id": "core.to_string",
1871
+ "id": "core.to_string:float",
1683
1872
  "kind": "elementwise",
1684
1873
  "arity": 1,
1685
1874
  "params": [
1686
1875
  {
1687
- "name": "value"
1876
+ "name": "value",
1877
+ "dtype": "float"
1688
1878
  }
1689
1879
  ],
1690
1880
  "kernels": {
1691
- "ruby": "to_string:ruby:v1"
1881
+ "ruby": "to_string_float:ruby:v1"
1692
1882
  },
1693
1883
  "dtype": {
1694
1884
  "rule": "scalar",
@@ -1706,7 +1896,8 @@
1706
1896
  "arity": 3,
1707
1897
  "params": [
1708
1898
  {
1709
- "name": "condition_mask"
1899
+ "name": "condition_mask",
1900
+ "dtype": "boolean"
1710
1901
  },
1711
1902
  {
1712
1903
  "name": "value_when_true"
@@ -1732,7 +1923,8 @@
1732
1923
  "arity": 3,
1733
1924
  "params": [
1734
1925
  {
1735
- "name": "condition_mask"
1926
+ "name": "condition_mask",
1927
+ "dtype": "boolean"
1736
1928
  },
1737
1929
  {
1738
1930
  "name": "value_when_true"