kumi 0.0.33 → 0.0.35
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.
- checksums.yaml +4 -4
- data/.codex +0 -0
- data/CHANGELOG.md +18 -0
- data/README.md +38 -26
- data/Rakefile +2 -0
- data/data/functions/agg/numeric.yaml +6 -0
- data/data/functions/core/arithmetic.yaml +26 -0
- data/data/kernels/javascript/agg/numeric.yaml +8 -4
- data/data/kernels/javascript/agg/string.yaml +4 -1
- data/data/kernels/javascript/core/arithmetic.yaml +8 -0
- data/data/kernels/ruby/agg/numeric.yaml +6 -2
- data/data/kernels/ruby/agg/string.yaml +4 -1
- data/data/kernels/ruby/core/arithmetic.yaml +10 -0
- data/docs/AGENTS.md +60 -0
- data/docs/ARCHITECTURE.md +114 -250
- data/docs/DEVELOPMENT.md +13 -0
- data/docs/GOLDEN_TESTS.md +88 -161
- data/docs/RELEASING.md +52 -0
- data/docs/SCHEMA_IMPORTS.md +85 -205
- data/docs/UNSAT_DETECTION.md +2 -1
- data/golden/array_element/expected/dfir.txt +5 -0
- data/golden/array_element/expected/dfir_optimized.txt +5 -0
- data/golden/array_element/expected/loopir.txt +11 -0
- data/golden/array_element/expected/schema_javascript.mjs +13 -10
- data/golden/array_element/expected/schema_ruby.rb +9 -9
- data/golden/array_element/expected/vecir.txt +5 -0
- data/golden/array_index/expected/dfir.txt +25 -0
- data/golden/array_index/expected/dfir_optimized.txt +27 -0
- data/golden/array_index/expected/loopir.txt +44 -0
- data/golden/array_index/expected/nast.txt +6 -6
- data/golden/array_index/expected/schema_javascript.mjs +53 -36
- data/golden/array_index/expected/schema_ruby.rb +40 -30
- data/golden/array_index/expected/snast.txt +2 -2
- data/golden/array_index/expected/vecir.txt +27 -0
- data/golden/array_operations/expected/dfir.txt +36 -0
- data/golden/array_operations/expected/dfir_optimized.txt +36 -0
- data/golden/array_operations/expected/loopir.txt +45 -0
- data/golden/array_operations/expected/schema_javascript.mjs +50 -41
- data/golden/array_operations/expected/schema_ruby.rb +40 -36
- data/golden/array_operations/expected/vecir.txt +36 -0
- data/golden/cascade_logic/expected/dfir.txt +21 -0
- data/golden/cascade_logic/expected/dfir_optimized.txt +22 -0
- data/golden/cascade_logic/expected/loopir.txt +22 -0
- data/golden/cascade_logic/expected/schema_javascript.mjs +18 -11
- data/golden/cascade_logic/expected/schema_ruby.rb +21 -11
- data/golden/cascade_logic/expected/vecir.txt +22 -0
- data/golden/chained_fusion/expected/dfir.txt +53 -0
- data/golden/chained_fusion/expected/dfir_optimized.txt +75 -0
- data/golden/chained_fusion/expected/loopir.txt +95 -0
- data/golden/chained_fusion/expected/schema_javascript.mjs +105 -91
- data/golden/chained_fusion/expected/schema_ruby.rb +87 -83
- data/golden/chained_fusion/expected/vecir.txt +75 -0
- data/golden/decimal_explicit/expected/dfir.txt +18 -0
- data/golden/decimal_explicit/expected/dfir_optimized.txt +28 -0
- data/golden/decimal_explicit/expected/loopir.txt +28 -0
- data/golden/decimal_explicit/expected/schema_javascript.mjs +31 -19
- data/golden/decimal_explicit/expected/schema_ruby.rb +34 -19
- data/golden/decimal_explicit/expected/vecir.txt +28 -0
- data/golden/element_arrays/expected/dfir.txt +42 -0
- data/golden/element_arrays/expected/dfir_optimized.txt +50 -0
- data/golden/element_arrays/expected/loopir.txt +92 -0
- data/golden/element_arrays/expected/schema_javascript.mjs +107 -79
- data/golden/element_arrays/expected/schema_ruby.rb +77 -66
- data/golden/element_arrays/expected/snast.txt +6 -6
- data/golden/element_arrays/expected/vecir.txt +50 -0
- data/golden/empty_and_null_inputs/expected/dfir.txt +14 -0
- data/golden/empty_and_null_inputs/expected/dfir_optimized.txt +25 -0
- data/golden/empty_and_null_inputs/expected/loopir.txt +43 -0
- data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +49 -38
- data/golden/empty_and_null_inputs/expected/schema_ruby.rb +37 -35
- data/golden/empty_and_null_inputs/expected/vecir.txt +25 -0
- data/golden/example_xpto/expected/dfir.txt +10 -0
- data/golden/example_xpto/expected/dfir_optimized.txt +10 -0
- data/golden/example_xpto/expected/loopir.txt +10 -0
- data/golden/example_xpto/expected/schema_javascript.mjs +8 -5
- data/golden/example_xpto/expected/schema_ruby.rb +10 -5
- data/golden/example_xpto/expected/vecir.txt +10 -0
- data/golden/function_overload/expected/dfir.txt +10 -0
- data/golden/function_overload/expected/dfir_optimized.txt +12 -0
- data/golden/function_overload/expected/loopir.txt +12 -0
- data/golden/function_overload/expected/schema_javascript.mjs +17 -8
- data/golden/function_overload/expected/schema_ruby.rb +18 -9
- data/golden/function_overload/expected/snast.txt +1 -1
- data/golden/function_overload/expected/vecir.txt +12 -0
- data/golden/game_of_life/expected/dfir.txt +69 -0
- data/golden/game_of_life/expected/dfir_optimized.txt +207 -0
- data/golden/game_of_life/expected/loopir.txt +694 -0
- data/golden/game_of_life/expected/schema_javascript.mjs +841 -90
- data/golden/game_of_life/expected/schema_ruby.rb +799 -90
- data/golden/game_of_life/expected/vecir.txt +207 -0
- data/golden/hash_keys/expected/dfir.txt +14 -0
- data/golden/hash_keys/expected/dfir_optimized.txt +14 -0
- data/golden/hash_keys/expected/loopir.txt +14 -0
- data/golden/hash_keys/expected/schema_javascript.mjs +13 -24
- data/golden/hash_keys/expected/schema_ruby.rb +14 -25
- data/golden/hash_keys/expected/vecir.txt +14 -0
- data/golden/hash_value/expected/dfir.txt +21 -0
- data/golden/hash_value/expected/dfir_optimized.txt +25 -0
- data/golden/hash_value/expected/loopir.txt +31 -0
- data/golden/hash_value/expected/schema_javascript.mjs +34 -34
- data/golden/hash_value/expected/schema_ruby.rb +28 -31
- data/golden/hash_value/expected/vecir.txt +25 -0
- data/golden/hierarchical_complex/expected/dfir.txt +86 -0
- data/golden/hierarchical_complex/expected/dfir_optimized.txt +88 -0
- data/golden/hierarchical_complex/expected/loopir.txt +129 -0
- data/golden/hierarchical_complex/expected/schema_javascript.mjs +145 -100
- data/golden/hierarchical_complex/expected/schema_ruby.rb +114 -85
- data/golden/hierarchical_complex/expected/vecir.txt +88 -0
- data/golden/inline_rename_scope_leak/expected/dfir.txt +19 -0
- data/golden/inline_rename_scope_leak/expected/dfir_optimized.txt +27 -0
- data/golden/inline_rename_scope_leak/expected/loopir.txt +35 -0
- data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +39 -35
- data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +31 -32
- data/golden/inline_rename_scope_leak/expected/vecir.txt +23 -0
- data/golden/input_reference/expected/dfir.txt +22 -0
- data/golden/input_reference/expected/dfir_optimized.txt +22 -0
- data/golden/input_reference/expected/loopir.txt +33 -0
- data/golden/input_reference/expected/schema_javascript.mjs +36 -30
- data/golden/input_reference/expected/schema_ruby.rb +30 -25
- data/golden/input_reference/expected/snast.txt +1 -1
- data/golden/input_reference/expected/vecir.txt +22 -0
- data/golden/interleaved_fusion/expected/dfir.txt +35 -0
- data/golden/interleaved_fusion/expected/dfir_optimized.txt +60 -0
- data/golden/interleaved_fusion/expected/loopir.txt +74 -0
- data/golden/interleaved_fusion/expected/schema_javascript.mjs +82 -65
- data/golden/interleaved_fusion/expected/schema_ruby.rb +65 -63
- data/golden/interleaved_fusion/expected/vecir.txt +60 -0
- data/golden/let_inline/expected/dfir.txt +16 -0
- data/golden/let_inline/expected/dfir_optimized.txt +20 -0
- data/golden/let_inline/expected/loopir.txt +20 -0
- data/golden/let_inline/expected/schema_javascript.mjs +28 -6
- data/golden/let_inline/expected/schema_ruby.rb +29 -6
- data/golden/let_inline/expected/vecir.txt +20 -0
- data/golden/loop_fusion/expected/dfir.txt +29 -0
- data/golden/loop_fusion/expected/dfir_optimized.txt +47 -0
- data/golden/loop_fusion/expected/loopir.txt +55 -0
- data/golden/loop_fusion/expected/schema_javascript.mjs +61 -49
- data/golden/loop_fusion/expected/schema_ruby.rb +49 -47
- data/golden/loop_fusion/expected/vecir.txt +47 -0
- data/golden/min_max_empty_arrays/expected/ast.txt +58 -0
- data/golden/min_max_empty_arrays/expected/dfir.txt +27 -0
- data/golden/min_max_empty_arrays/expected/dfir_optimized.txt +37 -0
- data/golden/min_max_empty_arrays/expected/input_plan.txt +15 -0
- data/golden/min_max_empty_arrays/expected/loopir.txt +67 -0
- data/golden/min_max_empty_arrays/expected/nast.txt +27 -0
- data/golden/min_max_empty_arrays/expected/schema_javascript.mjs +92 -0
- data/golden/min_max_empty_arrays/expected/schema_ruby.rb +90 -0
- data/golden/min_max_empty_arrays/expected/snast.txt +27 -0
- data/golden/min_max_empty_arrays/expected/vecir.txt +37 -0
- data/golden/min_max_empty_arrays/expected.json +7 -0
- data/golden/min_max_empty_arrays/input.json +12 -0
- data/golden/min_max_empty_arrays/schema.kumi +24 -0
- data/golden/min_reduce_scope/expected/dfir.txt +35 -0
- data/golden/min_reduce_scope/expected/dfir_optimized.txt +37 -0
- data/golden/min_reduce_scope/expected/loopir.txt +58 -0
- data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -51
- data/golden/min_reduce_scope/expected/schema_ruby.rb +50 -46
- data/golden/min_reduce_scope/expected/vecir.txt +37 -0
- data/golden/mixed_dimensions/expected/dfir.txt +23 -0
- data/golden/mixed_dimensions/expected/dfir_optimized.txt +26 -0
- data/golden/mixed_dimensions/expected/loopir.txt +44 -0
- data/golden/mixed_dimensions/expected/schema_javascript.mjs +50 -40
- data/golden/mixed_dimensions/expected/schema_ruby.rb +38 -36
- data/golden/mixed_dimensions/expected/vecir.txt +28 -0
- data/golden/multi_loop_reduction/expected/ast.txt +39 -0
- data/golden/multi_loop_reduction/expected/dfir.txt +23 -0
- data/golden/multi_loop_reduction/expected/dfir_optimized.txt +25 -0
- data/golden/multi_loop_reduction/expected/input_plan.txt +5 -0
- data/golden/multi_loop_reduction/expected/loopir.txt +37 -0
- data/golden/multi_loop_reduction/expected/nast.txt +25 -0
- data/golden/multi_loop_reduction/expected/schema_javascript.mjs +50 -0
- data/golden/multi_loop_reduction/expected/schema_ruby.rb +48 -0
- data/golden/multi_loop_reduction/expected/snast.txt +25 -0
- data/golden/multi_loop_reduction/expected/vecir.txt +25 -0
- data/golden/multi_loop_reduction/expected.json +5 -0
- data/golden/multi_loop_reduction/input.json +7 -0
- data/golden/multi_loop_reduction/schema.kumi +20 -0
- data/golden/multirank_hoisting/expected/dfir.txt +40 -0
- data/golden/multirank_hoisting/expected/dfir_optimized.txt +109 -0
- data/golden/multirank_hoisting/expected/loopir.txt +164 -0
- data/golden/multirank_hoisting/expected/schema_javascript.mjs +183 -99
- data/golden/multirank_hoisting/expected/schema_ruby.rb +151 -90
- data/golden/multirank_hoisting/expected/vecir.txt +109 -0
- data/golden/nested_hash/expected/dfir.txt +6 -0
- data/golden/nested_hash/expected/dfir_optimized.txt +6 -0
- data/golden/nested_hash/expected/loopir.txt +6 -0
- data/golden/nested_hash/expected/schema_javascript.mjs +5 -4
- data/golden/nested_hash/expected/schema_ruby.rb +6 -4
- data/golden/nested_hash/expected/vecir.txt +6 -0
- data/golden/reduction_broadcast/expected/dfir.txt +27 -0
- data/golden/reduction_broadcast/expected/dfir_optimized.txt +44 -0
- data/golden/reduction_broadcast/expected/loopir.txt +68 -0
- data/golden/reduction_broadcast/expected/schema_javascript.mjs +77 -62
- data/golden/reduction_broadcast/expected/schema_ruby.rb +59 -59
- data/golden/reduction_broadcast/expected/vecir.txt +44 -0
- data/golden/roll/expected/dfir.txt +16 -0
- data/golden/roll/expected/dfir_optimized.txt +16 -0
- data/golden/roll/expected/loopir.txt +40 -0
- data/golden/roll/expected/schema_javascript.mjs +44 -46
- data/golden/roll/expected/schema_ruby.rb +36 -42
- data/golden/roll/expected/vecir.txt +16 -0
- data/golden/schema_imports_broadcasting_with_imports/expected/dfir.txt +8 -0
- data/golden/schema_imports_broadcasting_with_imports/expected/dfir_optimized.txt +13 -0
- data/golden/schema_imports_broadcasting_with_imports/expected/loopir.txt +19 -0
- data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +21 -16
- data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +17 -14
- data/golden/schema_imports_broadcasting_with_imports/expected/vecir.txt +13 -0
- data/golden/schema_imports_complex_order_calc/expected/dfir.txt +41 -0
- data/golden/schema_imports_complex_order_calc/expected/dfir_optimized.txt +168 -0
- data/golden/schema_imports_complex_order_calc/expected/loopir.txt +202 -0
- data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +221 -117
- data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +192 -107
- data/golden/schema_imports_complex_order_calc/expected/snast.txt +1 -1
- data/golden/schema_imports_complex_order_calc/expected/vecir.txt +168 -0
- data/golden/schema_imports_composed_order/expected/dfir.txt +15 -0
- data/golden/schema_imports_composed_order/expected/dfir_optimized.txt +29 -0
- data/golden/schema_imports_composed_order/expected/loopir.txt +29 -0
- data/golden/schema_imports_composed_order/expected/schema_javascript.mjs +28 -22
- data/golden/schema_imports_composed_order/expected/schema_ruby.rb +29 -19
- data/golden/schema_imports_composed_order/expected/vecir.txt +29 -0
- data/golden/schema_imports_discount_with_tax/expected/dfir.txt +18 -0
- data/golden/schema_imports_discount_with_tax/expected/dfir_optimized.txt +31 -0
- data/golden/schema_imports_discount_with_tax/expected/loopir.txt +31 -0
- data/golden/schema_imports_discount_with_tax/expected/schema_javascript.mjs +30 -21
- data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +31 -17
- data/golden/schema_imports_discount_with_tax/expected/vecir.txt +31 -0
- data/golden/schema_imports_line_items/expected/dfir.txt +11 -0
- data/golden/schema_imports_line_items/expected/dfir_optimized.txt +26 -0
- data/golden/schema_imports_line_items/expected/loopir.txt +35 -0
- data/golden/schema_imports_line_items/expected/schema_javascript.mjs +36 -12
- data/golden/schema_imports_line_items/expected/schema_ruby.rb +35 -11
- data/golden/schema_imports_line_items/expected/snast.txt +1 -1
- data/golden/schema_imports_line_items/expected/vecir.txt +26 -0
- data/golden/schema_imports_multiple/expected/dfir.txt +17 -0
- data/golden/schema_imports_multiple/expected/dfir_optimized.txt +34 -0
- data/golden/schema_imports_multiple/expected/loopir.txt +34 -0
- data/golden/schema_imports_multiple/expected/schema_javascript.mjs +33 -24
- data/golden/schema_imports_multiple/expected/schema_ruby.rb +34 -20
- data/golden/schema_imports_multiple/expected/vecir.txt +34 -0
- data/golden/schema_imports_nested_expressions/expected/dfir.txt +14 -0
- data/golden/schema_imports_nested_expressions/expected/dfir_optimized.txt +24 -0
- data/golden/schema_imports_nested_expressions/expected/loopir.txt +24 -0
- data/golden/schema_imports_nested_expressions/expected/schema_javascript.mjs +21 -17
- data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +23 -16
- data/golden/schema_imports_nested_expressions/expected/vecir.txt +24 -0
- data/golden/schema_imports_nested_with_reductions/expected/dfir.txt +15 -0
- data/golden/schema_imports_nested_with_reductions/expected/dfir_optimized.txt +44 -0
- data/golden/schema_imports_nested_with_reductions/expected/loopir.txt +68 -0
- data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +76 -37
- data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +64 -34
- data/golden/schema_imports_nested_with_reductions/expected/snast.txt +1 -1
- data/golden/schema_imports_nested_with_reductions/expected/vecir.txt +44 -0
- data/golden/schema_imports_with_imports/expected/dfir.txt +7 -0
- data/golden/schema_imports_with_imports/expected/dfir_optimized.txt +9 -0
- data/golden/schema_imports_with_imports/expected/loopir.txt +9 -0
- data/golden/schema_imports_with_imports/expected/schema_javascript.mjs +8 -6
- data/golden/schema_imports_with_imports/expected/schema_ruby.rb +9 -5
- data/golden/schema_imports_with_imports/expected/vecir.txt +9 -0
- data/golden/shift/expected/dfir.txt +24 -0
- data/golden/shift/expected/dfir_optimized.txt +24 -0
- data/golden/shift/expected/loopir.txt +64 -0
- data/golden/shift/expected/schema_javascript.mjs +72 -76
- data/golden/shift/expected/schema_ruby.rb +60 -70
- data/golden/shift/expected/vecir.txt +24 -0
- data/golden/shift_2d/expected/dfir.txt +60 -0
- data/golden/shift_2d/expected/dfir_optimized.txt +60 -0
- data/golden/shift_2d/expected/loopir.txt +176 -0
- data/golden/shift_2d/expected/schema_javascript.mjs +204 -260
- data/golden/shift_2d/expected/schema_ruby.rb +156 -236
- data/golden/shift_2d/expected/vecir.txt +60 -0
- data/golden/simple_math/expected/dfir.txt +21 -0
- data/golden/simple_math/expected/dfir_optimized.txt +21 -0
- data/golden/simple_math/expected/loopir.txt +21 -0
- data/golden/simple_math/expected/schema_javascript.mjs +17 -14
- data/golden/simple_math/expected/schema_ruby.rb +21 -14
- data/golden/simple_math/expected/vecir.txt +21 -0
- data/golden/streaming_basics/expected/dfir.txt +43 -0
- data/golden/streaming_basics/expected/dfir_optimized.txt +69 -0
- data/golden/streaming_basics/expected/loopir.txt +76 -0
- data/golden/streaming_basics/expected/schema_javascript.mjs +83 -67
- data/golden/streaming_basics/expected/schema_ruby.rb +69 -60
- data/golden/streaming_basics/expected/vecir.txt +69 -0
- data/golden/tuples/expected/dfir.txt +28 -0
- data/golden/tuples/expected/dfir_optimized.txt +42 -0
- data/golden/tuples/expected/loopir.txt +42 -0
- data/golden/tuples/expected/schema_javascript.mjs +41 -18
- data/golden/tuples/expected/schema_ruby.rb +42 -14
- data/golden/tuples/expected/vecir.txt +42 -0
- data/golden/tuples_and_arrays/expected/dfir.txt +26 -0
- data/golden/tuples_and_arrays/expected/dfir_optimized.txt +37 -0
- data/golden/tuples_and_arrays/expected/loopir.txt +45 -0
- data/golden/tuples_and_arrays/expected/schema_javascript.mjs +49 -42
- data/golden/tuples_and_arrays/expected/schema_ruby.rb +41 -38
- data/golden/tuples_and_arrays/expected/vecir.txt +37 -0
- data/golden/us_tax_2024/expected/dfir.txt +189 -0
- data/golden/us_tax_2024/expected/dfir_optimized.txt +565 -0
- data/golden/us_tax_2024/expected/loopir.txt +685 -0
- data/golden/us_tax_2024/expected/schema_javascript.mjs +813 -119
- data/golden/us_tax_2024/expected/schema_ruby.rb +762 -125
- data/golden/us_tax_2024/expected/vecir.txt +567 -0
- data/golden/vector_make_object/expected/ast.txt +22 -0
- data/golden/vector_make_object/expected/dfir.txt +6 -0
- data/golden/vector_make_object/expected/dfir_optimized.txt +6 -0
- data/golden/vector_make_object/expected/input_plan.txt +5 -0
- data/golden/vector_make_object/expected/loopir.txt +9 -0
- data/golden/vector_make_object/expected/nast.txt +8 -0
- data/golden/vector_make_object/expected/schema_javascript.mjs +13 -0
- data/golden/vector_make_object/expected/schema_ruby.rb +14 -0
- data/golden/vector_make_object/expected/snast.txt +8 -0
- data/golden/vector_make_object/expected/vecir.txt +7 -0
- data/golden/vector_make_object/schema.kumi +11 -0
- data/golden/with_constants/expected/dfir.txt +9 -0
- data/golden/with_constants/expected/dfir_optimized.txt +9 -0
- data/golden/with_constants/expected/loopir.txt +9 -0
- data/golden/with_constants/expected/schema_javascript.mjs +8 -3
- data/golden/with_constants/expected/schema_ruby.rb +9 -3
- data/golden/with_constants/expected/vecir.txt +9 -0
- data/lib/kumi/analyzer.rb +20 -27
- data/lib/kumi/core/analyzer/pass_manager.rb +6 -1
- data/lib/kumi/core/analyzer/passes/codegen/loop/js/emitter.rb +204 -0
- data/lib/kumi/core/analyzer/passes/codegen/loop/ruby/emitter.rb +212 -0
- data/lib/kumi/core/analyzer/passes/codegen/loop/ruby/output_buffer.rb +74 -0
- data/lib/kumi/core/analyzer/passes/codegen/loop_js_pass.rb +24 -0
- data/lib/kumi/core/analyzer/passes/codegen/loop_ruby_pass.rb +24 -0
- data/lib/kumi/core/analyzer/passes/df_validate_pass.rb +24 -0
- data/lib/kumi/core/analyzer/passes/loop/lower_pass.rb +28 -0
- data/lib/kumi/core/analyzer/passes/loop_validate_pass.rb +21 -0
- data/lib/kumi/core/analyzer/passes/lower_to_dfir_pass.rb +37 -0
- data/lib/kumi/core/analyzer/passes/vec/lower_pass.rb +24 -0
- data/lib/kumi/core/analyzer/passes/vec_validate_pass.rb +21 -0
- data/lib/kumi/core/analyzer/plans.rb +2 -3
- data/lib/kumi/core/compiler/access_planner_v2.rb +33 -2
- data/lib/kumi/dev/golden/representation.rb +4 -7
- data/lib/kumi/dev/golden_v2.rb +292 -0
- data/lib/kumi/dev/pretty_printer.rb +42 -67
- data/lib/kumi/ir/README.md +163 -0
- data/lib/kumi/ir/base/block.rb +32 -0
- data/lib/kumi/ir/base/builder.rb +43 -0
- data/lib/kumi/ir/base/function.rb +45 -0
- data/lib/kumi/ir/base/instruction.rb +206 -0
- data/lib/kumi/ir/base/module.rb +37 -0
- data/lib/kumi/ir/base.rb +10 -0
- data/lib/kumi/ir/buf/lower.rb +28 -0
- data/lib/kumi/ir/buf/pipeline.rb +19 -0
- data/lib/kumi/ir/buf.rb +29 -0
- data/lib/kumi/ir/df/access_contract.rb +87 -0
- data/lib/kumi/ir/df/import_inliner.rb +89 -0
- data/lib/kumi/ir/df/import_loader.rb +63 -0
- data/lib/kumi/ir/df/lower.rb +397 -0
- data/lib/kumi/ir/df/ops/array_build.rb +23 -0
- data/lib/kumi/ir/df/ops/array_get.rb +29 -0
- data/lib/kumi/ir/df/ops/array_len.rb +23 -0
- data/lib/kumi/ir/df/ops/axis_broadcast.rb +28 -0
- data/lib/kumi/ir/df/ops/axis_index.rb +23 -0
- data/lib/kumi/ir/df/ops/axis_shift.rb +35 -0
- data/lib/kumi/ir/df/ops/constant.rb +21 -0
- data/lib/kumi/ir/df/ops/decl_ref.rb +23 -0
- data/lib/kumi/ir/df/ops/fold.rb +25 -0
- data/lib/kumi/ir/df/ops/import_call.rb +25 -0
- data/lib/kumi/ir/df/ops/load_field.rb +33 -0
- data/lib/kumi/ir/df/ops/load_input.rb +31 -0
- data/lib/kumi/ir/df/ops/make_object.rb +23 -0
- data/lib/kumi/ir/df/ops/map.rb +21 -0
- data/lib/kumi/ir/df/ops/node.rb +46 -0
- data/lib/kumi/ir/df/ops/reduce.rb +27 -0
- data/lib/kumi/ir/df/ops/select.rb +25 -0
- data/lib/kumi/ir/df/ops.rb +10 -0
- data/lib/kumi/ir/df/passes/broadcast_simplify.rb +74 -0
- data/lib/kumi/ir/df/passes/cse.rb +51 -0
- data/lib/kumi/ir/df/passes/decl_inlining.rb +131 -0
- data/lib/kumi/ir/df/passes/import_inlining.rb +272 -0
- data/lib/kumi/ir/df/passes/load_dedup.rb +93 -0
- data/lib/kumi/ir/df/passes/stencil_cse.rb +71 -0
- data/lib/kumi/ir/df/passes/support/instruction_cloner.rb +82 -0
- data/lib/kumi/ir/df/passes/tuple_fold_canonicalization.rb +181 -0
- data/lib/kumi/ir/df/passes/tuple_to_object.rb +58 -0
- data/lib/kumi/ir/df/passes.rb +11 -0
- data/lib/kumi/ir/df/pipeline.rb +32 -0
- data/lib/kumi/ir/df/validator.rb +120 -0
- data/lib/kumi/ir/df.rb +95 -0
- data/lib/kumi/ir/loop/builder.rb +84 -0
- data/lib/kumi/ir/loop/lower.rb +679 -0
- data/lib/kumi/ir/loop/ops/core_ops.rb +194 -0
- data/lib/kumi/ir/loop/ops/node.rb +45 -0
- data/lib/kumi/ir/loop/ops.rb +4 -0
- data/lib/kumi/ir/loop/pipeline.rb +19 -0
- data/lib/kumi/ir/loop/validator.rb +101 -0
- data/lib/kumi/ir/loop.rb +28 -0
- data/lib/kumi/ir/loop_definition.md +93 -0
- data/lib/kumi/ir/passes.rb +32 -0
- data/lib/kumi/ir/printer.rb +54 -0
- data/lib/kumi/ir/testing/snast_factory.rb +146 -0
- data/lib/kumi/ir/testing.rb +9 -0
- data/lib/kumi/ir/vec/lower.rb +131 -0
- data/lib/kumi/ir/vec/ops/core_ops.rb +126 -0
- data/lib/kumi/ir/vec/ops/node.rb +45 -0
- data/lib/kumi/ir/vec/ops.rb +13 -0
- data/lib/kumi/ir/vec/passes/axis_canonicalization.rb +57 -0
- data/lib/kumi/ir/vec/passes/constant_propagation.rb +110 -0
- data/lib/kumi/ir/vec/passes/dce.rb +52 -0
- data/lib/kumi/ir/vec/passes/gvn.rb +64 -0
- data/lib/kumi/ir/vec/passes/peephole_simplify.rb +67 -0
- data/lib/kumi/ir/vec/passes/stencil_detection.rb +60 -0
- data/lib/kumi/ir/vec/passes/support/instruction_cloner.rb +48 -0
- data/lib/kumi/ir/vec/passes.rb +16 -0
- data/lib/kumi/ir/vec/pipeline.rb +30 -0
- data/lib/kumi/ir/vec/validator.rb +68 -0
- data/lib/kumi/ir/vec.rb +66 -0
- data/lib/kumi/ir/vec_definition.md +102 -0
- data/lib/kumi/ir.rb +14 -0
- data/lib/kumi/support/nast_printer.rb +3 -0
- data/lib/kumi/version.rb +1 -1
- data/lib/kumi.rb +38 -37
- data/tasks/release.rake +129 -0
- metadata +298 -331
- data/CLAUDE.md +0 -45
- data/docs/COMPOSED_SCHEMAS.md +0 -137
- data/docs/GOLDEN_QUICK_START.md +0 -141
- data/golden/array_element/expected/lir_00_unoptimized.txt +0 -13
- data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +0 -13
- data/golden/array_element/expected/lir_02_inlined.txt +0 -13
- data/golden/array_element/expected/lir_03_cse.txt +0 -13
- data/golden/array_element/expected/lir_04_1_loop_fusion.txt +0 -13
- data/golden/array_element/expected/lir_04_loop_invcm.txt +0 -13
- data/golden/array_element/expected/lir_06_const_prop.txt +0 -13
- data/golden/array_index/expected/lir_00_unoptimized.txt +0 -41
- data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +0 -41
- data/golden/array_index/expected/lir_02_inlined.txt +0 -42
- data/golden/array_index/expected/lir_03_cse.txt +0 -40
- data/golden/array_index/expected/lir_04_1_loop_fusion.txt +0 -40
- data/golden/array_index/expected/lir_04_loop_invcm.txt +0 -40
- data/golden/array_index/expected/lir_06_const_prop.txt +0 -40
- data/golden/array_operations/expected/lir_00_unoptimized.txt +0 -47
- data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +0 -47
- data/golden/array_operations/expected/lir_02_inlined.txt +0 -47
- data/golden/array_operations/expected/lir_03_cse.txt +0 -47
- data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +0 -47
- data/golden/array_operations/expected/lir_04_loop_invcm.txt +0 -47
- data/golden/array_operations/expected/lir_06_const_prop.txt +0 -43
- data/golden/cascade_logic/expected/lir_00_unoptimized.txt +0 -29
- data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +0 -29
- data/golden/cascade_logic/expected/lir_02_inlined.txt +0 -37
- data/golden/cascade_logic/expected/lir_03_cse.txt +0 -30
- data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +0 -30
- data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +0 -30
- data/golden/cascade_logic/expected/lir_06_const_prop.txt +0 -23
- data/golden/chained_fusion/expected/lir_00_unoptimized.txt +0 -76
- data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +0 -76
- data/golden/chained_fusion/expected/lir_02_inlined.txt +0 -114
- data/golden/chained_fusion/expected/lir_03_cse.txt +0 -97
- data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +0 -99
- data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +0 -97
- data/golden/chained_fusion/expected/lir_06_const_prop.txt +0 -87
- data/golden/decimal_explicit/expected/lir_00_unoptimized.txt +0 -30
- data/golden/decimal_explicit/expected/lir_01_hoist_scalar_references.txt +0 -30
- data/golden/decimal_explicit/expected/lir_02_inlined.txt +0 -44
- data/golden/decimal_explicit/expected/lir_03_cse.txt +0 -40
- data/golden/decimal_explicit/expected/lir_04_1_loop_fusion.txt +0 -40
- data/golden/decimal_explicit/expected/lir_04_loop_invcm.txt +0 -40
- data/golden/decimal_explicit/expected/lir_06_const_prop.txt +0 -40
- data/golden/element_arrays/expected/lir_00_unoptimized.txt +0 -81
- data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +0 -81
- data/golden/element_arrays/expected/lir_02_inlined.txt +0 -85
- data/golden/element_arrays/expected/lir_03_cse.txt +0 -83
- data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +0 -83
- data/golden/element_arrays/expected/lir_04_loop_invcm.txt +0 -83
- data/golden/element_arrays/expected/lir_06_const_prop.txt +0 -77
- data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +0 -31
- data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +0 -31
- data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +0 -51
- data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +0 -49
- data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +0 -49
- data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +0 -49
- data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +0 -49
- data/golden/example_xpto/expected/lir_00_unoptimized.txt +0 -16
- data/golden/example_xpto/expected/lir_01_hoist_scalar_references.txt +0 -16
- data/golden/example_xpto/expected/lir_02_inlined.txt +0 -16
- data/golden/example_xpto/expected/lir_03_cse.txt +0 -16
- data/golden/example_xpto/expected/lir_04_1_loop_fusion.txt +0 -16
- data/golden/example_xpto/expected/lir_04_loop_invcm.txt +0 -16
- data/golden/example_xpto/expected/lir_06_const_prop.txt +0 -13
- data/golden/function_overload/expected/lir_00_unoptimized.txt +0 -18
- data/golden/function_overload/expected/lir_01_hoist_scalar_references.txt +0 -18
- data/golden/function_overload/expected/lir_02_inlined.txt +0 -20
- data/golden/function_overload/expected/lir_03_cse.txt +0 -20
- data/golden/function_overload/expected/lir_04_1_loop_fusion.txt +0 -20
- data/golden/function_overload/expected/lir_04_loop_invcm.txt +0 -20
- data/golden/function_overload/expected/lir_06_const_prop.txt +0 -20
- data/golden/game_of_life/expected/lir_00_unoptimized.txt +0 -343
- data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +0 -343
- data/golden/game_of_life/expected/lir_02_inlined.txt +0 -1918
- data/golden/game_of_life/expected/lir_03_cse.txt +0 -770
- data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +0 -770
- data/golden/game_of_life/expected/lir_04_loop_invcm.txt +0 -770
- data/golden/game_of_life/expected/lir_06_const_prop.txt +0 -719
- data/golden/hash_keys/expected/lir_00_unoptimized.txt +0 -18
- data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +0 -18
- data/golden/hash_keys/expected/lir_02_inlined.txt +0 -18
- data/golden/hash_keys/expected/lir_03_cse.txt +0 -18
- data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +0 -18
- data/golden/hash_keys/expected/lir_04_loop_invcm.txt +0 -18
- data/golden/hash_keys/expected/lir_06_const_prop.txt +0 -12
- data/golden/hash_value/expected/lir_00_unoptimized.txt +0 -30
- data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +0 -30
- data/golden/hash_value/expected/lir_02_inlined.txt +0 -36
- data/golden/hash_value/expected/lir_03_cse.txt +0 -33
- data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +0 -33
- data/golden/hash_value/expected/lir_04_loop_invcm.txt +0 -33
- data/golden/hash_value/expected/lir_06_const_prop.txt +0 -30
- data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +0 -87
- data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +0 -87
- data/golden/hierarchical_complex/expected/lir_02_inlined.txt +0 -115
- data/golden/hierarchical_complex/expected/lir_03_cse.txt +0 -89
- data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +0 -89
- data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +0 -89
- data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +0 -80
- data/golden/inline_rename_scope_leak/expected/lir_00_unoptimized.txt +0 -35
- data/golden/inline_rename_scope_leak/expected/lir_01_hoist_scalar_references.txt +0 -35
- data/golden/inline_rename_scope_leak/expected/lir_02_inlined.txt +0 -49
- data/golden/inline_rename_scope_leak/expected/lir_03_cse.txt +0 -49
- data/golden/inline_rename_scope_leak/expected/lir_04_1_loop_fusion.txt +0 -49
- data/golden/inline_rename_scope_leak/expected/lir_04_loop_invcm.txt +0 -49
- data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +0 -45
- data/golden/input_reference/expected/lir_00_unoptimized.txt +0 -39
- data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +0 -39
- data/golden/input_reference/expected/lir_02_inlined.txt +0 -39
- data/golden/input_reference/expected/lir_03_cse.txt +0 -39
- data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +0 -39
- data/golden/input_reference/expected/lir_04_loop_invcm.txt +0 -39
- data/golden/input_reference/expected/lir_06_const_prop.txt +0 -39
- data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +0 -53
- data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +0 -53
- data/golden/interleaved_fusion/expected/lir_02_inlined.txt +0 -89
- data/golden/interleaved_fusion/expected/lir_03_cse.txt +0 -77
- data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +0 -78
- data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +0 -77
- data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +0 -69
- data/golden/let_inline/expected/lir_00_unoptimized.txt +0 -26
- data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +0 -26
- data/golden/let_inline/expected/lir_02_inlined.txt +0 -36
- data/golden/let_inline/expected/lir_03_cse.txt +0 -30
- data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +0 -30
- data/golden/let_inline/expected/lir_04_loop_invcm.txt +0 -30
- data/golden/let_inline/expected/lir_06_const_prop.txt +0 -29
- data/golden/loop_fusion/expected/lir_00_unoptimized.txt +0 -43
- data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +0 -43
- data/golden/loop_fusion/expected/lir_02_inlined.txt +0 -62
- data/golden/loop_fusion/expected/lir_03_cse.txt +0 -57
- data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +0 -57
- data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +0 -57
- data/golden/loop_fusion/expected/lir_06_const_prop.txt +0 -51
- data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +0 -59
- data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +0 -59
- data/golden/min_reduce_scope/expected/lir_02_inlined.txt +0 -63
- data/golden/min_reduce_scope/expected/lir_03_cse.txt +0 -60
- data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +0 -60
- data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +0 -60
- data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +0 -57
- data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +0 -42
- data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +0 -42
- data/golden/mixed_dimensions/expected/lir_02_inlined.txt +0 -48
- data/golden/mixed_dimensions/expected/lir_03_cse.txt +0 -48
- data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +0 -48
- data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +0 -48
- data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +0 -47
- data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +0 -75
- data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +0 -75
- data/golden/multirank_hoisting/expected/lir_02_inlined.txt +0 -126
- data/golden/multirank_hoisting/expected/lir_03_cse.txt +0 -109
- data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +0 -109
- data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +0 -109
- data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +0 -100
- data/golden/nested_hash/expected/lir_00_unoptimized.txt +0 -10
- data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +0 -10
- data/golden/nested_hash/expected/lir_02_inlined.txt +0 -10
- data/golden/nested_hash/expected/lir_03_cse.txt +0 -10
- data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +0 -10
- data/golden/nested_hash/expected/lir_04_loop_invcm.txt +0 -10
- data/golden/nested_hash/expected/lir_06_const_prop.txt +0 -9
- data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +0 -49
- data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +0 -49
- data/golden/reduction_broadcast/expected/lir_02_inlined.txt +0 -80
- data/golden/reduction_broadcast/expected/lir_03_cse.txt +0 -68
- data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +0 -68
- data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +0 -68
- data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +0 -68
- data/golden/roll/expected/lir_00_unoptimized.txt +0 -56
- data/golden/roll/expected/lir_01_hoist_scalar_references.txt +0 -56
- data/golden/roll/expected/lir_02_inlined.txt +0 -56
- data/golden/roll/expected/lir_03_cse.txt +0 -55
- data/golden/roll/expected/lir_04_1_loop_fusion.txt +0 -55
- data/golden/roll/expected/lir_04_loop_invcm.txt +0 -55
- data/golden/roll/expected/lir_06_const_prop.txt +0 -48
- data/golden/schema_imports_broadcasting_with_imports/expected/lir_00_unoptimized.txt +0 -20
- data/golden/schema_imports_broadcasting_with_imports/expected/lir_01_hoist_scalar_references.txt +0 -20
- data/golden/schema_imports_broadcasting_with_imports/expected/lir_02_inlined.txt +0 -22
- data/golden/schema_imports_broadcasting_with_imports/expected/lir_03_cse.txt +0 -21
- data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_1_loop_fusion.txt +0 -21
- data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_loop_invcm.txt +0 -21
- data/golden/schema_imports_broadcasting_with_imports/expected/lir_06_const_prop.txt +0 -21
- data/golden/schema_imports_complex_order_calc/expected/lir_00_unoptimized.txt +0 -94
- data/golden/schema_imports_complex_order_calc/expected/lir_01_hoist_scalar_references.txt +0 -94
- data/golden/schema_imports_complex_order_calc/expected/lir_02_inlined.txt +0 -187
- data/golden/schema_imports_complex_order_calc/expected/lir_03_cse.txt +0 -131
- data/golden/schema_imports_complex_order_calc/expected/lir_04_1_loop_fusion.txt +0 -131
- data/golden/schema_imports_complex_order_calc/expected/lir_04_loop_invcm.txt +0 -131
- data/golden/schema_imports_complex_order_calc/expected/lir_06_const_prop.txt +0 -131
- data/golden/schema_imports_composed_order/expected/lir_00_unoptimized.txt +0 -25
- data/golden/schema_imports_composed_order/expected/lir_01_hoist_scalar_references.txt +0 -25
- data/golden/schema_imports_composed_order/expected/lir_02_inlined.txt +0 -33
- data/golden/schema_imports_composed_order/expected/lir_03_cse.txt +0 -33
- data/golden/schema_imports_composed_order/expected/lir_04_1_loop_fusion.txt +0 -33
- data/golden/schema_imports_composed_order/expected/lir_04_loop_invcm.txt +0 -33
- data/golden/schema_imports_composed_order/expected/lir_06_const_prop.txt +0 -33
- data/golden/schema_imports_discount_with_tax/expected/lir_00_unoptimized.txt +0 -30
- data/golden/schema_imports_discount_with_tax/expected/lir_01_hoist_scalar_references.txt +0 -30
- data/golden/schema_imports_discount_with_tax/expected/lir_02_inlined.txt +0 -37
- data/golden/schema_imports_discount_with_tax/expected/lir_03_cse.txt +0 -34
- data/golden/schema_imports_discount_with_tax/expected/lir_04_1_loop_fusion.txt +0 -34
- data/golden/schema_imports_discount_with_tax/expected/lir_04_loop_invcm.txt +0 -34
- data/golden/schema_imports_discount_with_tax/expected/lir_06_const_prop.txt +0 -34
- data/golden/schema_imports_line_items/expected/lir_00_unoptimized.txt +0 -19
- data/golden/schema_imports_line_items/expected/lir_01_hoist_scalar_references.txt +0 -19
- data/golden/schema_imports_line_items/expected/lir_02_inlined.txt +0 -24
- data/golden/schema_imports_line_items/expected/lir_03_cse.txt +0 -22
- data/golden/schema_imports_line_items/expected/lir_04_1_loop_fusion.txt +0 -22
- data/golden/schema_imports_line_items/expected/lir_04_loop_invcm.txt +0 -22
- data/golden/schema_imports_line_items/expected/lir_06_const_prop.txt +0 -22
- data/golden/schema_imports_multiple/expected/lir_00_unoptimized.txt +0 -29
- data/golden/schema_imports_multiple/expected/lir_01_hoist_scalar_references.txt +0 -29
- data/golden/schema_imports_multiple/expected/lir_02_inlined.txt +0 -41
- data/golden/schema_imports_multiple/expected/lir_03_cse.txt +0 -37
- data/golden/schema_imports_multiple/expected/lir_04_1_loop_fusion.txt +0 -37
- data/golden/schema_imports_multiple/expected/lir_04_loop_invcm.txt +0 -37
- data/golden/schema_imports_multiple/expected/lir_06_const_prop.txt +0 -37
- data/golden/schema_imports_nested_expressions/expected/lir_00_unoptimized.txt +0 -22
- data/golden/schema_imports_nested_expressions/expected/lir_01_hoist_scalar_references.txt +0 -22
- data/golden/schema_imports_nested_expressions/expected/lir_02_inlined.txt +0 -32
- data/golden/schema_imports_nested_expressions/expected/lir_03_cse.txt +0 -32
- data/golden/schema_imports_nested_expressions/expected/lir_04_1_loop_fusion.txt +0 -32
- data/golden/schema_imports_nested_expressions/expected/lir_04_loop_invcm.txt +0 -32
- data/golden/schema_imports_nested_expressions/expected/lir_06_const_prop.txt +0 -28
- data/golden/schema_imports_nested_with_reductions/expected/lir_00_unoptimized.txt +0 -31
- data/golden/schema_imports_nested_with_reductions/expected/lir_01_hoist_scalar_references.txt +0 -31
- data/golden/schema_imports_nested_with_reductions/expected/lir_02_inlined.txt +0 -58
- data/golden/schema_imports_nested_with_reductions/expected/lir_03_cse.txt +0 -49
- data/golden/schema_imports_nested_with_reductions/expected/lir_04_1_loop_fusion.txt +0 -51
- data/golden/schema_imports_nested_with_reductions/expected/lir_04_loop_invcm.txt +0 -49
- data/golden/schema_imports_nested_with_reductions/expected/lir_06_const_prop.txt +0 -49
- data/golden/schema_imports_with_imports/expected/lir_00_unoptimized.txt +0 -13
- data/golden/schema_imports_with_imports/expected/lir_01_hoist_scalar_references.txt +0 -13
- data/golden/schema_imports_with_imports/expected/lir_02_inlined.txt +0 -14
- data/golden/schema_imports_with_imports/expected/lir_03_cse.txt +0 -13
- data/golden/schema_imports_with_imports/expected/lir_04_1_loop_fusion.txt +0 -13
- data/golden/schema_imports_with_imports/expected/lir_04_loop_invcm.txt +0 -13
- data/golden/schema_imports_with_imports/expected/lir_06_const_prop.txt +0 -13
- data/golden/shift/expected/lir_00_unoptimized.txt +0 -96
- data/golden/shift/expected/lir_01_hoist_scalar_references.txt +0 -96
- data/golden/shift/expected/lir_02_inlined.txt +0 -96
- data/golden/shift/expected/lir_03_cse.txt +0 -90
- data/golden/shift/expected/lir_04_1_loop_fusion.txt +0 -90
- data/golden/shift/expected/lir_04_loop_invcm.txt +0 -90
- data/golden/shift/expected/lir_06_const_prop.txt +0 -78
- data/golden/shift_2d/expected/lir_00_unoptimized.txt +0 -274
- data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +0 -274
- data/golden/shift_2d/expected/lir_02_inlined.txt +0 -274
- data/golden/shift_2d/expected/lir_03_cse.txt +0 -262
- data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +0 -262
- data/golden/shift_2d/expected/lir_04_loop_invcm.txt +0 -262
- data/golden/shift_2d/expected/lir_06_const_prop.txt +0 -238
- data/golden/simple_math/expected/lir_00_unoptimized.txt +0 -31
- data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +0 -31
- data/golden/simple_math/expected/lir_02_inlined.txt +0 -31
- data/golden/simple_math/expected/lir_03_cse.txt +0 -31
- data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +0 -31
- data/golden/simple_math/expected/lir_04_loop_invcm.txt +0 -31
- data/golden/simple_math/expected/lir_06_const_prop.txt +0 -28
- data/golden/streaming_basics/expected/lir_00_unoptimized.txt +0 -73
- data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +0 -73
- data/golden/streaming_basics/expected/lir_02_inlined.txt +0 -100
- data/golden/streaming_basics/expected/lir_03_cse.txt +0 -84
- data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +0 -84
- data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +0 -84
- data/golden/streaming_basics/expected/lir_06_const_prop.txt +0 -78
- data/golden/tuples/expected/lir_00_unoptimized.txt +0 -40
- data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +0 -40
- data/golden/tuples/expected/lir_02_inlined.txt +0 -48
- data/golden/tuples/expected/lir_03_cse.txt +0 -48
- data/golden/tuples/expected/lir_04_1_loop_fusion.txt +0 -48
- data/golden/tuples/expected/lir_04_loop_invcm.txt +0 -48
- data/golden/tuples/expected/lir_06_const_prop.txt +0 -31
- data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +0 -41
- data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +0 -41
- data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +0 -62
- data/golden/tuples_and_arrays/expected/lir_03_cse.txt +0 -51
- data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +0 -51
- data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +0 -51
- data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +0 -47
- data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +0 -291
- data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +0 -291
- data/golden/us_tax_2024/expected/lir_02_inlined.txt +0 -1254
- data/golden/us_tax_2024/expected/lir_03_cse.txt +0 -626
- data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +0 -671
- data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +0 -626
- data/golden/us_tax_2024/expected/lir_06_const_prop.txt +0 -549
- data/golden/with_constants/expected/lir_00_unoptimized.txt +0 -17
- data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +0 -17
- data/golden/with_constants/expected/lir_02_inlined.txt +0 -17
- data/golden/with_constants/expected/lir_03_cse.txt +0 -17
- data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +0 -17
- data/golden/with_constants/expected/lir_04_loop_invcm.txt +0 -17
- data/golden/with_constants/expected/lir_06_const_prop.txt +0 -12
- data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +0 -337
- data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +0 -75
- data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +0 -103
- data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +0 -27
- data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +0 -330
- data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +0 -85
- data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +0 -79
- data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +0 -32
- data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +0 -125
- data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +0 -93
- data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +0 -115
- data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +0 -394
- data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +0 -198
- data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +0 -30
- data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +0 -121
- data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +0 -156
- data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +0 -148
- data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +0 -422
- data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +0 -241
- data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +0 -83
- data/lib/kumi/core/lir/analyze.rb +0 -64
- data/lib/kumi/core/lir/build.rb +0 -390
- data/lib/kumi/core/lir/emit.rb +0 -62
- data/lib/kumi/core/lir/peephole.rb +0 -164
- data/lib/kumi/core/lir/structs/instruction.rb +0 -44
- data/lib/kumi/core/lir/structs/literal.rb +0 -14
- data/lib/kumi/core/lir/structs/stamp.rb +0 -13
- data/lib/kumi/core/lir/support/error.rb +0 -9
- data/lib/kumi/core/lir/support/ids.rb +0 -34
- data/lib/kumi/core/lir/validate.rb +0 -74
- data/lib/kumi/core/lir.rb +0 -34
- data/lib/kumi/support/lir_printer.rb +0 -159
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 74f061f34a9936380a89aff28563594be891ac849f233613edf5ad9b52acce64
|
|
4
|
+
data.tar.gz: 8c7ee4b31d80293c18d8ea5914ae51ec80a489f6950352dd47044aa1b1aecba1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 70164a71693f388d25f2b2c8fc3c7d938860bb6e0f06344f06f7be96d1edb25a1e88686339fb81e919f6fde6d11510d14174cea22c3acc9f200bcc5c6fbf8724
|
|
7
|
+
data.tar.gz: 02df5faaef97f3d951a5fb022d7621daf1cec37ee482d0aa8db366c0ff7e0f44f6dc301302745249de1901c63c6e40dc52cff3e8d0019712ddae364196a4f642
|
data/.codex
ADDED
|
File without changes
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## [0.0.35] – 2026-06-11
|
|
4
|
+
### Added
|
|
5
|
+
- **Dataflow IR Pipeline:** New DF IR graph, typed operations, validation, import inlining, broadcast simplification, CSE, load deduplication, tuple/object canonicalization, and golden artifact coverage.
|
|
6
|
+
- **Vector IR Pipeline:** New VecIR builder, lowerer, validator, axis canonicalization, constant propagation, GVN, DCE, peephole simplification, stencil detection, and focused specs.
|
|
7
|
+
- **Loop IR Pipeline:** New LoopIR builder/lowerer/validator and Ruby/JavaScript loop codegen path replacing the legacy LIR codegen pipeline.
|
|
8
|
+
- **IR Tooling:** Shared IR base types, pass pipeline infrastructure, pretty printers, SNAST factory helpers, and expanded golden v2 output artifacts for DF/Vec/Loop stages.
|
|
9
|
+
- **Regression Coverage:** External installed-gem loading spec that builds and installs the gem in an isolated `GEM_HOME` so runtime packaging issues are caught.
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
- Removed the legacy LIR pipeline and refreshed golden outputs to the DF/Vec/Loop representation stack.
|
|
13
|
+
- Updated generated Ruby and JavaScript output to use the LoopIR-backed codegen path.
|
|
14
|
+
- Hardened kernel definitions and docs around numeric reductions, string aggregations, arithmetic helpers, and min/max empty-array behavior.
|
|
15
|
+
- Revised architecture, schema import, golden test, and development documentation around the new IR pipeline.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Runtime `require "kumi"` no longer loads golden-test support files or leaks the Zeitwerk loader as a top-level `AUTOLOADER` constant.
|
|
19
|
+
- Golden shared schemas are loaded only through `Kumi.load_shared_schemas!`, preserving test support behavior without coupling it to normal gem loading.
|
|
20
|
+
|
|
3
21
|
## [0.0.33] – 2025-11-05
|
|
4
22
|
### Added
|
|
5
23
|
- **Peephole Optimization Helper:** `Kumi::Core::LIR::Peephole` plus specs for safer peephole transforms, inline Ruby clamp kernel, richer LIR dumps, and refreshed golden files
|
data/README.md
CHANGED
|
@@ -10,36 +10,44 @@
|
|
|
10
10
|
|
|
11
11
|
## What is Kumi?
|
|
12
12
|
|
|
13
|
-
Kumi is a **declarative DSL for
|
|
13
|
+
Kumi is a **declarative DSL for calculation logic** — tax rules, pricing, scoring, financial projections — that compiles to plain Ruby and JavaScript.
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
- Input shape (scalars, arrays, nested structures)
|
|
17
|
-
- Declarations (computed values and boolean conditions)
|
|
18
|
-
- Dependencies between declarations
|
|
15
|
+
You declare the shape of your input data and the values you want computed. The compiler determines evaluation order, checks types, detects impossible conditions, and emits dependency-free code for each target.
|
|
19
16
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
```ruby
|
|
18
|
+
schema do
|
|
19
|
+
input do
|
|
20
|
+
array :items do
|
|
21
|
+
hash :item do
|
|
22
|
+
integer :quantity
|
|
23
|
+
decimal :unit_price
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
25
27
|
|
|
26
|
-
|
|
28
|
+
value :line_totals, input.items.item.quantity * input.items.item.unit_price
|
|
29
|
+
value :subtotal, fn(:sum, line_totals)
|
|
30
|
+
end
|
|
31
|
+
```
|
|
27
32
|
|
|
28
|
-
|
|
33
|
+
No loops, no iteration plumbing: `line_totals` is computed per item because that's where the data lives, and `fn(:sum, ...)` collapses it back to a scalar. This works through arbitrarily nested arrays.
|
|
29
34
|
|
|
30
|
-
|
|
35
|
+
## Why
|
|
31
36
|
|
|
32
|
-
**
|
|
37
|
+
- **One source of truth, two targets.** The same schema compiles to Ruby and JavaScript with identical semantics — write pricing logic once, run it in your backend and in the browser preview.
|
|
38
|
+
- **Broadcasting from data shape.** Operations align over arrays automatically based on the declared input structure, including nested and ragged data.
|
|
39
|
+
- **Static checks at compile time.** Type checking, dependency cycle detection, and unsatisfiable-constraint detection happen when the schema is defined, not in production.
|
|
40
|
+
- **Boring generated code.** Output is deterministic, dependency-free, straight-line code with explicit loops. What you read is what runs.
|
|
33
41
|
|
|
34
|
-
|
|
42
|
+
## Use Cases
|
|
43
|
+
|
|
44
|
+
Tax engines, pricing models, financial projections, compliance rules, insurance underwriting, shipping rate calculators — anywhere calculation logic must be correct, auditable, and consistent across platforms.
|
|
35
45
|
|
|
36
46
|
---
|
|
37
47
|
|
|
38
|
-
|
|
48
|
+
**Status**: experimental. Public API may change. Typing and some static checks are still evolving.
|
|
39
49
|
|
|
40
|
-
|
|
41
|
-
- **Monte Carlo Portfolio** — demonstrates probabilistic simulations and table visualizations. [Open in the demo](https://kumi-play-web.fly.dev/?example=monte-carlo-simulation).
|
|
42
|
-
- **Conway's Game of Life** — showcases array operations powering a grid-based simulation. [Open in the demo](https://kumi-play-web.fly.dev/?example=game-of-life).
|
|
50
|
+
**Feedback**: have a use case or hit a rough edge? Open an issue or reach out (andremuta+kumi@gmail.com).
|
|
43
51
|
|
|
44
52
|
---
|
|
45
53
|
|
|
@@ -85,18 +93,22 @@ Double.write_source("output.mjs", platform: :javascript)
|
|
|
85
93
|
You can also override the compilation strategy without touching code by setting
|
|
86
94
|
`KUMI_COMPILATION_MODE` to `jit` or `aot` (e.g. `export KUMI_COMPILATION_MODE=aot`).
|
|
87
95
|
|
|
88
|
-
|
|
96
|
+
## Examples
|
|
97
|
+
|
|
98
|
+
- **US Tax Calculator (2024)** — a single schema computes federal, state, and FICA taxes across multiple filing statuses. [Open in the demo](https://kumi-play-web.fly.dev/?example=us-federal-tax-2024).
|
|
99
|
+
- **Monte Carlo Portfolio** — probabilistic simulations and table visualizations. [Open in the demo](https://kumi-play-web.fly.dev/?example=monte-carlo-simulation).
|
|
100
|
+
- **Conway's Game of Life** — array operations powering a grid-based simulation. [Open in the demo](https://kumi-play-web.fly.dev/?example=game-of-life).
|
|
89
101
|
|
|
90
102
|
---
|
|
91
103
|
|
|
92
104
|
## Documentation
|
|
93
105
|
|
|
94
|
-
- **[Syntax Reference](docs/SYNTAX.md)**
|
|
95
|
-
- **[Functions Reference](docs/FUNCTIONS.md)**
|
|
96
|
-
- **[
|
|
97
|
-
- **[
|
|
98
|
-
|
|
99
|
-
|
|
106
|
+
- **[Syntax Reference](docs/SYNTAX.md)** — DSL syntax, types, operators, functions
|
|
107
|
+
- **[Functions Reference](docs/FUNCTIONS.md)** — auto-generated docs for all functions and kernels ([machine-readable JSON](docs/functions-reference.json))
|
|
108
|
+
- **[Schema Imports](docs/SCHEMA_IMPORTS.md)** — composing and reusing schemas
|
|
109
|
+
- **[Architecture](docs/ARCHITECTURE.md)** — the compiler pipeline and IR stack
|
|
110
|
+
- **[Golden Tests](docs/GOLDEN_TESTS.md)** — the end-to-end test harness
|
|
111
|
+
- **[Development Guide](docs/DEVELOPMENT.md)** — tooling, docs generation, IDE integration
|
|
100
112
|
|
|
101
113
|
---
|
|
102
114
|
|
data/Rakefile
CHANGED
|
@@ -7,6 +7,8 @@ functions:
|
|
|
7
7
|
param: source_value
|
|
8
8
|
reduction_strategy: identity # This function has a true identity value.
|
|
9
9
|
aliases: ["sum"]
|
|
10
|
+
options:
|
|
11
|
+
tuple_fold_combiner: core.add
|
|
10
12
|
|
|
11
13
|
- id: agg.count
|
|
12
14
|
kind: reduce
|
|
@@ -25,6 +27,8 @@ functions:
|
|
|
25
27
|
param: source_value
|
|
26
28
|
reduction_strategy: first_element
|
|
27
29
|
aliases: ["min"]
|
|
30
|
+
options:
|
|
31
|
+
tuple_fold_combiner: core.min
|
|
28
32
|
|
|
29
33
|
- id: agg.max
|
|
30
34
|
kind: reduce
|
|
@@ -34,6 +38,8 @@ functions:
|
|
|
34
38
|
param: source_value
|
|
35
39
|
reduction_strategy: first_element
|
|
36
40
|
aliases: ["max"]
|
|
41
|
+
options:
|
|
42
|
+
tuple_fold_combiner: core.max
|
|
37
43
|
|
|
38
44
|
- id: agg.mean
|
|
39
45
|
kind: reduce
|
|
@@ -7,6 +7,32 @@ functions:
|
|
|
7
7
|
param: number
|
|
8
8
|
aliases: ["abs"]
|
|
9
9
|
|
|
10
|
+
- id: core.max
|
|
11
|
+
kind: elementwise
|
|
12
|
+
params:
|
|
13
|
+
- { name: left_operand, dtype: numeric }
|
|
14
|
+
- { name: right_operand, dtype: numeric }
|
|
15
|
+
dtype:
|
|
16
|
+
rule: promote
|
|
17
|
+
params: [left_operand, right_operand]
|
|
18
|
+
constraint_semantics:
|
|
19
|
+
pure_combiner: true
|
|
20
|
+
commutativity: true
|
|
21
|
+
associativity: true
|
|
22
|
+
|
|
23
|
+
- id: core.min
|
|
24
|
+
kind: elementwise
|
|
25
|
+
params:
|
|
26
|
+
- { name: left_operand, dtype: numeric }
|
|
27
|
+
- { name: right_operand, dtype: numeric }
|
|
28
|
+
dtype:
|
|
29
|
+
rule: promote
|
|
30
|
+
params: [left_operand, right_operand]
|
|
31
|
+
constraint_semantics:
|
|
32
|
+
pure_combiner: true
|
|
33
|
+
commutativity: true
|
|
34
|
+
associativity: true
|
|
35
|
+
|
|
10
36
|
- id: core.add
|
|
11
37
|
kind: elementwise
|
|
12
38
|
params:
|
|
@@ -16,12 +16,16 @@ kernels:
|
|
|
16
16
|
|
|
17
17
|
- id: agg.min:javascript:v1
|
|
18
18
|
fn: agg.min
|
|
19
|
-
#
|
|
20
|
-
|
|
19
|
+
# Skips null values (an inner reduction over an empty array yields null);
|
|
20
|
+
# the $1 !== null guard is required because null coerces to 0 in
|
|
21
|
+
# relational comparisons (null < 5 is true).
|
|
22
|
+
inline: "= ($1 !== null && ($0 === null || $1 < $0)) ? $1 : $0"
|
|
21
23
|
fold_inline: "= Math.min(...$0)"
|
|
22
24
|
|
|
23
25
|
- id: agg.max:javascript:v1
|
|
24
26
|
fn: agg.max
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
+
# Skips null values (an inner reduction over an empty array yields null);
|
|
28
|
+
# the $1 !== null guard is required because null coerces to 0 in
|
|
29
|
+
# relational comparisons (null > -5 is true).
|
|
30
|
+
inline: "= ($1 !== null && ($0 === null || $1 > $0)) ? $1 : $0"
|
|
27
31
|
fold_inline: "= Math.max(...$0)"
|
|
@@ -7,6 +7,14 @@ kernels:
|
|
|
7
7
|
fn: core.mod
|
|
8
8
|
inline: "= (($0 % $1) + $1) % $1"
|
|
9
9
|
|
|
10
|
+
- id: max:javascript:v1
|
|
11
|
+
fn: core.max
|
|
12
|
+
inline: "= Math.max($0, $1)"
|
|
13
|
+
|
|
14
|
+
- id: min:javascript:v1
|
|
15
|
+
fn: core.min
|
|
16
|
+
inline: "= Math.min($0, $1)"
|
|
17
|
+
|
|
10
18
|
- id: add:javascript:v1
|
|
11
19
|
fn: core.add
|
|
12
20
|
inline: "= $0 + $1"
|
|
@@ -18,12 +18,16 @@ kernels:
|
|
|
18
18
|
|
|
19
19
|
- id: agg.min:ruby:v1
|
|
20
20
|
fn: agg.min
|
|
21
|
-
|
|
21
|
+
# Skips nil values (an inner reduction over an empty array yields nil),
|
|
22
|
+
# matching the javascript kernel's null handling.
|
|
23
|
+
inline: "= $1 if !$1.nil? && $1 < $0"
|
|
22
24
|
impl: "(a, b)\n a < b ? a : b"
|
|
23
25
|
fold_inline: "= $0.min"
|
|
24
26
|
|
|
25
27
|
- id: agg.max:ruby:v1
|
|
26
28
|
fn: agg.max
|
|
27
|
-
|
|
29
|
+
# Skips nil values (an inner reduction over an empty array yields nil),
|
|
30
|
+
# matching the javascript kernel's null handling.
|
|
31
|
+
inline: "= $1 if !$1.nil? && $1 > $0"
|
|
28
32
|
impl: "(a, b)\n a > b ? a : b"
|
|
29
33
|
fold_inline: "= $0.max"
|
|
@@ -7,6 +7,16 @@ kernels:
|
|
|
7
7
|
fn: core.mod
|
|
8
8
|
inline: "= $0 % $1"
|
|
9
9
|
|
|
10
|
+
- id: max:ruby:v1
|
|
11
|
+
fn: core.max
|
|
12
|
+
inline: "= $0 > $1 ? $0 : $1"
|
|
13
|
+
impl: "(a, b)\n a > b ? a : b"
|
|
14
|
+
|
|
15
|
+
- id: min:ruby:v1
|
|
16
|
+
fn: core.min
|
|
17
|
+
inline: "= $0 < $1 ? $0 : $1"
|
|
18
|
+
impl: "(a, b)\n a < b ? a : b"
|
|
19
|
+
|
|
10
20
|
- id: add:ruby:v1
|
|
11
21
|
fn: core.add
|
|
12
22
|
inline: "= $0 + $1"
|
data/docs/AGENTS.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# Agent Reference
|
|
2
|
+
|
|
3
|
+
A toolbox for inspecting and debugging the compiler pipeline. The pipeline is
|
|
4
|
+
SNAST → DFIR → VecIR → LoopIR → Ruby/JS emitters; see
|
|
5
|
+
[ARCHITECTURE.md](ARCHITECTURE.md).
|
|
6
|
+
|
|
7
|
+
## Inspect One Layer for One Schema
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bundle exec bin/kumi pp <repr> <schema.kumi>
|
|
11
|
+
# reprs: ast, input_plan, nast, snast, dfir, dfir_optimized, vecir, loopir,
|
|
12
|
+
# schema_ruby, schema_javascript
|
|
13
|
+
bundle exec bin/kumi pp loopir golden/multi_loop_reduction/schema.kumi
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
This is the fastest way to surface a lowering crash in a specific layer.
|
|
17
|
+
|
|
18
|
+
## Sweep for Crashes
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
for d in golden/*/; do
|
|
22
|
+
bundle exec bin/kumi pp loopir "$d/schema.kumi" >/dev/null || echo "$d"
|
|
23
|
+
done
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Phase-Scoped Golden Checks
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
bundle exec bin/kumi golden_v2 verify --repr loop # one layer, all schemas
|
|
30
|
+
bundle exec bin/kumi golden_v2 diff --repr df <schema> # unified diff
|
|
31
|
+
bundle exec bin/kumi golden_v2 update --repr vec,loop # regenerate layers
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Groups: `frontend`, `df`, `vec`, `loop`, `codegen`, `all`.
|
|
35
|
+
|
|
36
|
+
## Runtime Ground Truth
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
bundle exec bin/kumi golden test # regenerate + execute Ruby and JS
|
|
40
|
+
bundle exec bin/kumi golden test <schema>
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Search Goldens Instead of Reading Them
|
|
44
|
+
|
|
45
|
+
Some golden artifacts are large (`game_of_life`, `us_tax_2024`) — grep them:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
rg -n "reduce" golden -g"dfir*.txt"
|
|
49
|
+
rg -n "axis_shift" golden -g"vecir.txt"
|
|
50
|
+
rg -n "function" golden/<schema>/expected/loopir.txt
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Other Useful Commands
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
bundle exec bin/kumi analyze <schema> --dump <state_key> # inspect analyzer state
|
|
57
|
+
bundle exec rspec # full test suite
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
`tmp/` is gitignored and a good place for debug scripts.
|