kumi 0.0.17 → 0.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -1
- data/.ruby-version +1 -0
- data/CHANGELOG.md +28 -0
- data/CLAUDE.md +26 -139
- data/README.md +143 -372
- data/data/functions/agg/boolean.yaml +14 -0
- data/data/functions/agg/numeric.yaml +80 -0
- data/data/functions/agg/string.yaml +8 -0
- data/data/functions/core/arithmetic.yaml +50 -0
- data/data/functions/core/boolean.yaml +18 -0
- data/data/functions/core/comparison.yaml +42 -0
- data/data/functions/core/constructor.yaml +32 -0
- data/data/functions/core/select.yaml +7 -0
- data/data/functions/core/stencil.yaml +21 -0
- data/data/functions/core/string.yaml +19 -0
- data/data/kernels/javascript/agg/boolean.yaml +12 -0
- data/data/kernels/javascript/agg/numeric.yaml +27 -0
- data/data/kernels/javascript/agg/string.yaml +5 -0
- data/data/kernels/javascript/core/arithmetic.yaml +32 -0
- data/data/kernels/javascript/core/boolean.yaml +12 -0
- data/data/kernels/javascript/core/comparison.yaml +24 -0
- data/data/kernels/javascript/core/constructor.yaml +15 -0
- data/data/kernels/javascript/core/select.yaml +7 -0
- data/data/kernels/javascript/core/string.yaml +12 -0
- data/data/kernels/ruby/agg/boolean.yaml +18 -0
- data/data/kernels/ruby/agg/numeric.yaml +29 -0
- data/data/kernels/ruby/agg/string.yaml +5 -0
- data/data/kernels/ruby/core/arithmetic.yaml +38 -0
- data/data/kernels/ruby/core/boolean.yaml +15 -0
- data/data/kernels/ruby/core/comparison.yaml +30 -0
- data/data/kernels/ruby/core/constructor.yaml +17 -0
- data/data/kernels/ruby/core/select.yaml +4 -0
- data/data/kernels/ruby/core/string.yaml +15 -0
- data/debug_ordering.rb +52 -0
- data/docs/FORM_SCHEMA.md +85 -0
- data/docs/OUTPUT_SCHEMA.md +69 -0
- data/docs/SYNTAX.md +626 -373
- data/golden/array_element/expected/ast.txt +21 -0
- data/golden/array_element/expected/input_plan.txt +5 -0
- data/golden/array_element/expected/lir_00_unoptimized.txt +13 -0
- data/golden/array_element/expected/lir_01_hoist_scalar_references.txt +13 -0
- data/golden/array_element/expected/lir_02_inlined.txt +13 -0
- data/golden/array_element/expected/lir_03_cse.txt +13 -0
- data/golden/array_element/expected/lir_04_1_loop_fusion.txt +13 -0
- data/golden/array_element/expected/lir_04_loop_invcm.txt +13 -0
- data/golden/array_element/expected/lir_06_const_prop.txt +13 -0
- data/golden/array_element/expected/nast.txt +7 -0
- data/golden/array_element/expected/schema_javascript.mjs +13 -0
- data/golden/array_element/expected/schema_ruby.rb +41 -0
- data/golden/array_element/expected/snast.txt +7 -0
- data/golden/array_element/expected.json +5 -0
- data/golden/array_element/input.json +9 -0
- data/golden/array_element/schema.kumi +11 -0
- data/golden/array_index/expected/ast.txt +59 -0
- data/golden/array_index/expected/input_plan.txt +5 -0
- data/golden/array_index/expected/lir_00_unoptimized.txt +41 -0
- data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +41 -0
- data/golden/array_index/expected/lir_02_inlined.txt +42 -0
- data/golden/array_index/expected/lir_03_cse.txt +40 -0
- data/golden/array_index/expected/lir_04_1_loop_fusion.txt +40 -0
- data/golden/array_index/expected/lir_04_loop_invcm.txt +40 -0
- data/golden/array_index/expected/lir_06_const_prop.txt +40 -0
- data/golden/array_index/expected/nast.txt +33 -0
- data/golden/array_index/expected/schema_javascript.mjs +46 -0
- data/golden/array_index/expected/schema_ruby.rb +75 -0
- data/golden/array_index/expected/snast.txt +33 -0
- data/golden/array_index/expected.json +5 -0
- data/golden/array_index/input.json +1 -0
- data/golden/array_index/schema.kumi +19 -0
- data/golden/array_operations/expected/ast.txt +50 -0
- data/golden/array_operations/expected/input_plan.txt +10 -0
- data/golden/array_operations/expected/lir_00_unoptimized.txt +47 -0
- data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +47 -0
- data/golden/array_operations/expected/lir_02_inlined.txt +47 -0
- data/golden/array_operations/expected/lir_03_cse.txt +47 -0
- data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +47 -0
- data/golden/array_operations/expected/lir_04_loop_invcm.txt +47 -0
- data/golden/array_operations/expected/lir_06_const_prop.txt +47 -0
- data/golden/array_operations/expected/nast.txt +32 -0
- data/golden/array_operations/expected/schema_javascript.mjs +60 -0
- data/golden/array_operations/expected/schema_ruby.rb +91 -0
- data/golden/array_operations/expected/snast.txt +32 -0
- data/golden/array_operations/expected.json +27 -0
- data/golden/array_operations/input.json +8 -0
- data/golden/array_operations/schema.kumi +12 -10
- data/golden/cascade_logic/expected/ast.txt +37 -0
- data/golden/cascade_logic/expected/input_plan.txt +2 -0
- data/golden/cascade_logic/expected/lir_00_unoptimized.txt +29 -0
- data/golden/cascade_logic/expected/lir_01_hoist_scalar_references.txt +29 -0
- data/golden/cascade_logic/expected/lir_02_inlined.txt +37 -0
- data/golden/cascade_logic/expected/lir_03_cse.txt +30 -0
- data/golden/cascade_logic/expected/lir_04_1_loop_fusion.txt +30 -0
- data/golden/cascade_logic/expected/lir_04_loop_invcm.txt +30 -0
- data/golden/cascade_logic/expected/lir_06_const_prop.txt +30 -0
- data/golden/cascade_logic/expected/nast.txt +32 -0
- data/golden/cascade_logic/expected/schema_javascript.mjs +31 -0
- data/golden/cascade_logic/expected/schema_ruby.rb +57 -0
- data/golden/cascade_logic/expected/snast.txt +32 -0
- data/golden/cascade_logic/expected.json +5 -0
- data/golden/cascade_logic/input.json +4 -0
- data/golden/cascade_logic/schema.kumi +1 -3
- data/golden/chained_fusion/expected/ast.txt +57 -0
- data/golden/chained_fusion/expected/input_plan.txt +13 -0
- data/golden/chained_fusion/expected/lir_00_unoptimized.txt +76 -0
- data/golden/chained_fusion/expected/lir_01_hoist_scalar_references.txt +76 -0
- data/golden/chained_fusion/expected/lir_02_inlined.txt +114 -0
- data/golden/chained_fusion/expected/lir_03_cse.txt +97 -0
- data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +99 -0
- data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +97 -0
- data/golden/chained_fusion/expected/lir_06_const_prop.txt +97 -0
- data/golden/chained_fusion/expected/nast.txt +55 -0
- data/golden/chained_fusion/expected/schema_javascript.mjs +116 -0
- data/golden/chained_fusion/expected/schema_ruby.rb +149 -0
- data/golden/chained_fusion/expected/snast.txt +55 -0
- data/golden/chained_fusion/expected.json +45 -0
- data/golden/chained_fusion/input.json +51 -0
- data/golden/chained_fusion/schema.kumi +52 -0
- data/golden/element_arrays/expected/ast.txt +55 -0
- data/golden/element_arrays/expected/input_plan.txt +7 -0
- data/golden/element_arrays/expected/lir_00_unoptimized.txt +81 -0
- data/golden/element_arrays/expected/lir_01_hoist_scalar_references.txt +81 -0
- data/golden/element_arrays/expected/lir_02_inlined.txt +85 -0
- data/golden/element_arrays/expected/lir_03_cse.txt +83 -0
- data/golden/element_arrays/expected/lir_04_1_loop_fusion.txt +83 -0
- data/golden/element_arrays/expected/lir_04_loop_invcm.txt +83 -0
- data/golden/element_arrays/expected/lir_06_const_prop.txt +83 -0
- data/golden/element_arrays/expected/nast.txt +42 -0
- data/golden/element_arrays/expected/schema_javascript.mjs +106 -0
- data/golden/element_arrays/expected/schema_ruby.rb +141 -0
- data/golden/element_arrays/expected/snast.txt +42 -0
- data/golden/element_arrays/expected.json +55 -0
- data/golden/element_arrays/input.json +12 -0
- data/golden/element_arrays/schema.kumi +21 -0
- data/golden/empty_and_null_inputs/expected/ast.txt +42 -0
- data/golden/empty_and_null_inputs/expected/input_plan.txt +12 -0
- data/golden/empty_and_null_inputs/expected/lir_00_unoptimized.txt +31 -0
- data/golden/empty_and_null_inputs/expected/lir_01_hoist_scalar_references.txt +31 -0
- data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +51 -0
- data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +49 -0
- data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +49 -0
- data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +49 -0
- data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +49 -0
- data/golden/empty_and_null_inputs/expected/nast.txt +18 -0
- data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +47 -0
- data/golden/empty_and_null_inputs/expected/schema_ruby.rb +79 -0
- data/golden/empty_and_null_inputs/expected/snast.txt +18 -0
- data/golden/empty_and_null_inputs/expected.json +8 -0
- data/golden/empty_and_null_inputs/input.json +16 -0
- data/golden/empty_and_null_inputs/schema.kumi +30 -0
- data/golden/game_of_life/expected/ast.txt +118 -0
- data/golden/game_of_life/expected/input_plan.txt +5 -0
- data/golden/game_of_life/expected/lir_00_unoptimized.txt +343 -0
- data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +343 -0
- data/golden/game_of_life/expected/lir_02_inlined.txt +1918 -0
- data/golden/game_of_life/expected/lir_03_cse.txt +766 -0
- data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +766 -0
- data/golden/game_of_life/expected/lir_04_loop_invcm.txt +766 -0
- data/golden/game_of_life/expected/lir_06_const_prop.txt +766 -0
- data/golden/game_of_life/expected/nast.txt +104 -0
- data/golden/game_of_life/expected/schema_javascript.mjs +98 -0
- data/golden/game_of_life/expected/schema_ruby.rb +125 -0
- data/golden/game_of_life/expected/snast.txt +104 -0
- data/golden/game_of_life/expected.json +3 -0
- data/golden/game_of_life/input.json +8 -0
- data/golden/game_of_life/schema.kumi +33 -0
- data/golden/hash_keys/expected/ast.txt +29 -0
- data/golden/hash_keys/expected/input_plan.txt +2 -0
- data/golden/hash_keys/expected/lir_00_unoptimized.txt +18 -0
- data/golden/hash_keys/expected/lir_01_hoist_scalar_references.txt +18 -0
- data/golden/hash_keys/expected/lir_02_inlined.txt +18 -0
- data/golden/hash_keys/expected/lir_03_cse.txt +18 -0
- data/golden/hash_keys/expected/lir_04_1_loop_fusion.txt +18 -0
- data/golden/hash_keys/expected/lir_04_loop_invcm.txt +18 -0
- data/golden/hash_keys/expected/lir_06_const_prop.txt +18 -0
- data/golden/hash_keys/expected/nast.txt +46 -0
- data/golden/hash_keys/expected/schema_javascript.mjs +34 -0
- data/golden/hash_keys/expected/schema_ruby.rb +61 -0
- data/golden/hash_keys/expected/snast.txt +46 -0
- data/golden/hash_keys/expected.json +20 -0
- data/golden/hash_keys/input.json +4 -0
- data/golden/hash_keys/schema.kumi +14 -0
- data/golden/hash_value/expected/ast.txt +37 -0
- data/golden/hash_value/expected/input_plan.txt +7 -0
- data/golden/hash_value/expected/lir_00_unoptimized.txt +30 -0
- data/golden/hash_value/expected/lir_01_hoist_scalar_references.txt +30 -0
- data/golden/hash_value/expected/lir_02_inlined.txt +36 -0
- data/golden/hash_value/expected/lir_03_cse.txt +33 -0
- data/golden/hash_value/expected/lir_04_1_loop_fusion.txt +33 -0
- data/golden/hash_value/expected/lir_04_loop_invcm.txt +33 -0
- data/golden/hash_value/expected/lir_06_const_prop.txt +33 -0
- data/golden/hash_value/expected/nast.txt +25 -0
- data/golden/hash_value/expected/schema_javascript.mjs +46 -0
- data/golden/hash_value/expected/schema_ruby.rb +75 -0
- data/golden/hash_value/expected/snast.txt +25 -0
- data/golden/hash_value/expected.json +19 -0
- data/golden/hash_value/input.json +12 -0
- data/golden/hash_value/schema.kumi +19 -0
- data/golden/hierarchical_complex/expected/ast.txt +85 -0
- data/golden/hierarchical_complex/expected/input_plan.txt +23 -0
- data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +87 -0
- data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +87 -0
- data/golden/hierarchical_complex/expected/lir_02_inlined.txt +115 -0
- data/golden/hierarchical_complex/expected/lir_03_cse.txt +89 -0
- data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +89 -0
- data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +89 -0
- data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +89 -0
- data/golden/hierarchical_complex/expected/nast.txt +49 -0
- data/golden/hierarchical_complex/expected/schema_javascript.mjs +121 -0
- data/golden/hierarchical_complex/expected/schema_ruby.rb +151 -0
- data/golden/hierarchical_complex/expected/snast.txt +49 -0
- data/golden/hierarchical_complex/expected.json +34 -0
- data/golden/hierarchical_complex/input.json +26 -0
- data/golden/hierarchical_complex/schema.kumi +38 -0
- data/golden/input_reference/expected/ast.txt +46 -0
- data/golden/input_reference/expected/input_plan.txt +15 -0
- data/golden/input_reference/expected/lir_00_unoptimized.txt +39 -0
- data/golden/input_reference/expected/lir_01_hoist_scalar_references.txt +39 -0
- data/golden/input_reference/expected/lir_02_inlined.txt +39 -0
- data/golden/input_reference/expected/lir_03_cse.txt +39 -0
- data/golden/input_reference/expected/lir_04_1_loop_fusion.txt +39 -0
- data/golden/input_reference/expected/lir_04_loop_invcm.txt +39 -0
- data/golden/input_reference/expected/lir_06_const_prop.txt +39 -0
- data/golden/input_reference/expected/nast.txt +21 -0
- data/golden/input_reference/expected/schema_javascript.mjs +45 -0
- data/golden/input_reference/expected/schema_ruby.rb +74 -0
- data/golden/input_reference/expected/snast.txt +21 -0
- data/golden/input_reference/expected.json +7 -0
- data/golden/input_reference/input.json +11 -0
- data/golden/input_reference/schema.kumi +22 -0
- data/golden/interleaved_fusion/expected/ast.txt +51 -0
- data/golden/interleaved_fusion/expected/input_plan.txt +13 -0
- data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +53 -0
- data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +53 -0
- data/golden/interleaved_fusion/expected/lir_02_inlined.txt +89 -0
- data/golden/interleaved_fusion/expected/lir_03_cse.txt +77 -0
- data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +77 -0
- data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +77 -0
- data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +77 -0
- data/golden/interleaved_fusion/expected/nast.txt +41 -0
- data/golden/interleaved_fusion/expected/schema_javascript.mjs +86 -0
- data/golden/interleaved_fusion/expected/schema_ruby.rb +122 -0
- data/golden/interleaved_fusion/expected/snast.txt +41 -0
- data/golden/interleaved_fusion/expected.json +37 -0
- data/golden/interleaved_fusion/input.json +26 -0
- data/golden/interleaved_fusion/schema.kumi +57 -0
- data/golden/let_inline/expected/ast.txt +33 -0
- data/golden/let_inline/expected/input_plan.txt +2 -0
- data/golden/let_inline/expected/lir_00_unoptimized.txt +26 -0
- data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +26 -0
- data/golden/let_inline/expected/lir_02_inlined.txt +36 -0
- data/golden/let_inline/expected/lir_03_cse.txt +30 -0
- data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +30 -0
- data/golden/let_inline/expected/lir_04_loop_invcm.txt +30 -0
- data/golden/let_inline/expected/lir_06_const_prop.txt +30 -0
- data/golden/let_inline/expected/nast.txt +26 -0
- data/golden/let_inline/expected/schema_javascript.mjs +11 -0
- data/golden/let_inline/expected/schema_ruby.rb +37 -0
- data/golden/let_inline/expected/snast.txt +26 -0
- data/golden/let_inline/expected.json +1 -0
- data/golden/let_inline/input.json +1 -0
- data/golden/let_inline/schema.kumi +11 -0
- data/golden/loop_fusion/expected/ast.txt +44 -0
- data/golden/loop_fusion/expected/input_plan.txt +13 -0
- data/golden/loop_fusion/expected/lir_00_unoptimized.txt +43 -0
- data/golden/loop_fusion/expected/lir_01_hoist_scalar_references.txt +43 -0
- data/golden/loop_fusion/expected/lir_02_inlined.txt +62 -0
- data/golden/loop_fusion/expected/lir_03_cse.txt +57 -0
- data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +57 -0
- data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +57 -0
- data/golden/loop_fusion/expected/lir_06_const_prop.txt +57 -0
- data/golden/loop_fusion/expected/nast.txt +32 -0
- data/golden/loop_fusion/expected/schema_javascript.mjs +64 -0
- data/golden/loop_fusion/expected/schema_ruby.rb +97 -0
- data/golden/loop_fusion/expected/snast.txt +32 -0
- data/golden/loop_fusion/expected.json +30 -0
- data/golden/loop_fusion/input.json +28 -0
- data/golden/loop_fusion/schema.kumi +32 -0
- data/golden/min_reduce_scope/expected/ast.txt +49 -0
- data/golden/min_reduce_scope/expected/input_plan.txt +9 -0
- data/golden/min_reduce_scope/expected/lir_00_unoptimized.txt +59 -0
- data/golden/min_reduce_scope/expected/lir_01_hoist_scalar_references.txt +59 -0
- data/golden/min_reduce_scope/expected/lir_02_inlined.txt +63 -0
- data/golden/min_reduce_scope/expected/lir_03_cse.txt +60 -0
- data/golden/min_reduce_scope/expected/lir_04_1_loop_fusion.txt +60 -0
- data/golden/min_reduce_scope/expected/lir_04_loop_invcm.txt +60 -0
- data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +60 -0
- data/golden/min_reduce_scope/expected/nast.txt +29 -0
- data/golden/min_reduce_scope/expected/schema_javascript.mjs +66 -0
- data/golden/min_reduce_scope/expected/schema_ruby.rb +99 -0
- data/golden/min_reduce_scope/expected/snast.txt +29 -0
- data/golden/min_reduce_scope/expected.json +9 -0
- data/golden/min_reduce_scope/input.json +18 -0
- data/golden/min_reduce_scope/schema.kumi +25 -0
- data/golden/mixed_dimensions/expected/ast.txt +54 -0
- data/golden/mixed_dimensions/expected/input_plan.txt +15 -0
- data/golden/mixed_dimensions/expected/lir_00_unoptimized.txt +42 -0
- data/golden/mixed_dimensions/expected/lir_01_hoist_scalar_references.txt +42 -0
- data/golden/mixed_dimensions/expected/lir_02_inlined.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_03_cse.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +48 -0
- data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +48 -0
- data/golden/mixed_dimensions/expected/nast.txt +22 -0
- data/golden/mixed_dimensions/expected/schema_javascript.mjs +53 -0
- data/golden/mixed_dimensions/expected/schema_ruby.rb +84 -0
- data/golden/mixed_dimensions/expected/snast.txt +22 -0
- data/golden/mixed_dimensions/expected.json +6 -0
- data/golden/mixed_dimensions/input.json +22 -0
- data/golden/mixed_dimensions/schema.kumi +35 -0
- data/golden/multirank_hoisting/expected/ast.txt +72 -0
- data/golden/multirank_hoisting/expected/input_plan.txt +18 -0
- data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +75 -0
- data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +75 -0
- data/golden/multirank_hoisting/expected/lir_02_inlined.txt +126 -0
- data/golden/multirank_hoisting/expected/lir_03_cse.txt +109 -0
- data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +109 -0
- data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +109 -0
- data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +109 -0
- data/golden/multirank_hoisting/expected/nast.txt +39 -0
- data/golden/multirank_hoisting/expected/schema_javascript.mjs +128 -0
- data/golden/multirank_hoisting/expected/schema_ruby.rb +162 -0
- data/golden/multirank_hoisting/expected/snast.txt +39 -0
- data/golden/multirank_hoisting/expected.json +15 -0
- data/golden/multirank_hoisting/input.json +19 -0
- data/golden/multirank_hoisting/schema.kumi +38 -0
- data/golden/nested_hash/expected/ast.txt +22 -0
- data/golden/nested_hash/expected/input_plan.txt +5 -0
- data/golden/nested_hash/expected/lir_00_unoptimized.txt +10 -0
- data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +10 -0
- data/golden/nested_hash/expected/lir_02_inlined.txt +10 -0
- data/golden/nested_hash/expected/lir_03_cse.txt +10 -0
- data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +10 -0
- data/golden/nested_hash/expected/lir_04_loop_invcm.txt +10 -0
- data/golden/nested_hash/expected/lir_06_const_prop.txt +10 -0
- data/golden/nested_hash/expected/nast.txt +8 -0
- data/golden/nested_hash/expected/schema_javascript.mjs +9 -0
- data/golden/nested_hash/expected/schema_ruby.rb +35 -0
- data/golden/nested_hash/expected/snast.txt +8 -0
- data/golden/nested_hash/expected.json +3 -0
- data/golden/nested_hash/input.json +7 -0
- data/golden/nested_hash/schema.kumi +11 -0
- data/golden/reduction_broadcast/expected/ast.txt +49 -0
- data/golden/reduction_broadcast/expected/input_plan.txt +13 -0
- data/golden/reduction_broadcast/expected/lir_00_unoptimized.txt +49 -0
- data/golden/reduction_broadcast/expected/lir_01_hoist_scalar_references.txt +49 -0
- data/golden/reduction_broadcast/expected/lir_02_inlined.txt +80 -0
- data/golden/reduction_broadcast/expected/lir_03_cse.txt +68 -0
- data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +68 -0
- data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +68 -0
- data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +68 -0
- data/golden/reduction_broadcast/expected/nast.txt +24 -0
- data/golden/reduction_broadcast/expected/schema_javascript.mjs +74 -0
- data/golden/reduction_broadcast/expected/schema_ruby.rb +110 -0
- data/golden/reduction_broadcast/expected/snast.txt +24 -0
- data/golden/reduction_broadcast/expected.json +25 -0
- data/golden/reduction_broadcast/input.json +19 -0
- data/golden/reduction_broadcast/schema.kumi +34 -0
- data/golden/roll/expected/ast.txt +36 -0
- data/golden/roll/expected/input_plan.txt +3 -0
- data/golden/roll/expected/lir_00_unoptimized.txt +56 -0
- data/golden/roll/expected/lir_01_hoist_scalar_references.txt +56 -0
- data/golden/roll/expected/lir_02_inlined.txt +56 -0
- data/golden/roll/expected/lir_03_cse.txt +55 -0
- data/golden/roll/expected/lir_04_1_loop_fusion.txt +55 -0
- data/golden/roll/expected/lir_04_loop_invcm.txt +55 -0
- data/golden/roll/expected/lir_06_const_prop.txt +55 -0
- data/golden/roll/expected/nast.txt +26 -0
- data/golden/roll/expected/schema_javascript.mjs +65 -0
- data/golden/roll/expected/schema_ruby.rb +95 -0
- data/golden/roll/expected/snast.txt +26 -0
- data/golden/roll/expected.json +6 -0
- data/golden/roll/input.json +1 -0
- data/golden/roll/schema.kumi +13 -0
- data/golden/shift/expected/ast.txt +48 -0
- data/golden/shift/expected/input_plan.txt +3 -0
- data/golden/shift/expected/lir_00_unoptimized.txt +96 -0
- data/golden/shift/expected/lir_01_hoist_scalar_references.txt +96 -0
- data/golden/shift/expected/lir_02_inlined.txt +96 -0
- data/golden/shift/expected/lir_03_cse.txt +90 -0
- data/golden/shift/expected/lir_04_1_loop_fusion.txt +90 -0
- data/golden/shift/expected/lir_04_loop_invcm.txt +90 -0
- data/golden/shift/expected/lir_06_const_prop.txt +90 -0
- data/golden/shift/expected/nast.txt +38 -0
- data/golden/shift/expected/schema_javascript.mjs +106 -0
- data/golden/shift/expected/schema_ruby.rb +138 -0
- data/golden/shift/expected/snast.txt +38 -0
- data/golden/shift/expected.json +8 -0
- data/golden/shift/input.json +1 -0
- data/golden/shift/schema.kumi +15 -0
- data/golden/shift_2d/expected/ast.txt +88 -0
- data/golden/shift_2d/expected/input_plan.txt +5 -0
- data/golden/shift_2d/expected/lir_00_unoptimized.txt +274 -0
- data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +274 -0
- data/golden/shift_2d/expected/lir_02_inlined.txt +274 -0
- data/golden/shift_2d/expected/lir_03_cse.txt +262 -0
- data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +262 -0
- data/golden/shift_2d/expected/lir_04_loop_invcm.txt +262 -0
- data/golden/shift_2d/expected/lir_06_const_prop.txt +262 -0
- data/golden/shift_2d/expected/nast.txt +74 -0
- data/golden/shift_2d/expected/schema_javascript.mjs +320 -0
- data/golden/shift_2d/expected/schema_ruby.rb +358 -0
- data/golden/shift_2d/expected/snast.txt +74 -0
- data/golden/shift_2d/expected.json +15 -0
- data/golden/shift_2d/input.json +14 -0
- data/golden/shift_2d/schema.kumi +25 -0
- data/golden/simple_math/expected/ast.txt +40 -0
- data/golden/simple_math/expected/input_plan.txt +2 -0
- data/golden/simple_math/expected/lir_00_unoptimized.txt +31 -0
- data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +31 -0
- data/golden/simple_math/expected/lir_02_inlined.txt +31 -0
- data/golden/simple_math/expected/lir_03_cse.txt +31 -0
- data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +31 -0
- data/golden/simple_math/expected/lir_04_loop_invcm.txt +31 -0
- data/golden/simple_math/expected/lir_06_const_prop.txt +31 -0
- data/golden/simple_math/expected/nast.txt +33 -0
- data/golden/simple_math/expected/schema_javascript.mjs +33 -0
- data/golden/simple_math/expected/schema_ruby.rb +59 -0
- data/golden/simple_math/expected/snast.txt +33 -0
- data/golden/simple_math/expected.json +1 -0
- data/golden/simple_math/input.json +4 -0
- data/golden/simple_math/schema.kumi +2 -1
- data/golden/streaming_basics/expected/ast.txt +64 -0
- data/golden/streaming_basics/expected/input_plan.txt +8 -0
- data/golden/streaming_basics/expected/lir_00_unoptimized.txt +73 -0
- data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +73 -0
- data/golden/streaming_basics/expected/lir_02_inlined.txt +100 -0
- data/golden/streaming_basics/expected/lir_03_cse.txt +84 -0
- data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +84 -0
- data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +84 -0
- data/golden/streaming_basics/expected/lir_06_const_prop.txt +84 -0
- data/golden/streaming_basics/expected/nast.txt +48 -0
- data/golden/streaming_basics/expected/schema_javascript.mjs +94 -0
- data/golden/streaming_basics/expected/schema_ruby.rb +127 -0
- data/golden/streaming_basics/expected/snast.txt +48 -0
- data/golden/streaming_basics/expected.json +10 -0
- data/golden/streaming_basics/input.json +8 -0
- data/golden/streaming_basics/schema.kumi +24 -0
- data/golden/tuples/expected/ast.txt +48 -0
- data/golden/tuples/expected/input_plan.txt +1 -0
- data/golden/tuples/expected/lir_00_unoptimized.txt +40 -0
- data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +40 -0
- data/golden/tuples/expected/lir_02_inlined.txt +48 -0
- data/golden/tuples/expected/lir_03_cse.txt +48 -0
- data/golden/tuples/expected/lir_04_1_loop_fusion.txt +48 -0
- data/golden/tuples/expected/lir_04_loop_invcm.txt +48 -0
- data/golden/tuples/expected/lir_06_const_prop.txt +48 -0
- data/golden/tuples/expected/nast.txt +42 -0
- data/golden/tuples/expected/schema_javascript.mjs +51 -0
- data/golden/tuples/expected/schema_ruby.rb +77 -0
- data/golden/tuples/expected/snast.txt +42 -0
- data/golden/tuples/expected.json +7 -0
- data/golden/tuples/input.json +3 -0
- data/golden/tuples/schema.kumi +11 -0
- data/golden/tuples_and_arrays/expected/ast.txt +44 -0
- data/golden/tuples_and_arrays/expected/input_plan.txt +7 -0
- data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +41 -0
- data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +41 -0
- data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +62 -0
- data/golden/tuples_and_arrays/expected/lir_03_cse.txt +51 -0
- data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +51 -0
- data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +51 -0
- data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +51 -0
- data/golden/tuples_and_arrays/expected/nast.txt +28 -0
- data/golden/tuples_and_arrays/expected/schema_javascript.mjs +58 -0
- data/golden/tuples_and_arrays/expected/schema_ruby.rb +88 -0
- data/golden/tuples_and_arrays/expected/snast.txt +28 -0
- data/golden/tuples_and_arrays/expected.json +18 -0
- data/golden/tuples_and_arrays/input.json +7 -0
- data/golden/tuples_and_arrays/schema.kumi +38 -0
- data/golden/with_constants/expected/ast.txt +28 -0
- data/golden/with_constants/expected/input_plan.txt +2 -0
- data/golden/with_constants/expected/lir_00_unoptimized.txt +17 -0
- data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +17 -0
- data/golden/with_constants/expected/lir_02_inlined.txt +17 -0
- data/golden/with_constants/expected/lir_03_cse.txt +17 -0
- data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +17 -0
- data/golden/with_constants/expected/lir_04_loop_invcm.txt +17 -0
- data/golden/with_constants/expected/lir_06_const_prop.txt +17 -0
- data/golden/with_constants/expected/nast.txt +21 -0
- data/golden/with_constants/expected/schema_javascript.mjs +18 -0
- data/golden/with_constants/expected/schema_ruby.rb +44 -0
- data/golden/with_constants/expected/snast.txt +15 -0
- data/golden/with_constants/schema.kumi +10 -0
- data/lib/kumi/analyzer.rb +76 -24
- data/lib/kumi/configuration.rb +60 -0
- data/lib/kumi/core/analyzer/binder.rb +121 -0
- data/lib/kumi/core/analyzer/checkpoint.rb +15 -9
- data/lib/kumi/core/analyzer/constant_evaluator.rb +32 -37
- data/lib/kumi/core/analyzer/constant_folding_helpers.rb +55 -0
- data/lib/kumi/core/analyzer/debug.rb +14 -16
- data/lib/kumi/core/analyzer/fn_aliases.rb +46 -0
- data/lib/kumi/core/analyzer/folder.rb +94 -0
- data/lib/kumi/core/analyzer/macro_expander.rb +69 -0
- data/lib/kumi/core/analyzer/passes/assemble_irv2_pass.rb +130 -0
- data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +71 -0
- data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +181 -0
- data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +317 -0
- data/lib/kumi/core/analyzer/passes/codegen/js/emitter.rb +75 -0
- data/lib/kumi/core/analyzer/passes/codegen/js/output_buffer.rb +103 -0
- data/lib/kumi/core/analyzer/passes/codegen/js_pass.rb +27 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +321 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby/emitter.rb +85 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +111 -0
- data/lib/kumi/core/analyzer/passes/codegen/ruby_pass.rb +32 -0
- data/lib/kumi/core/analyzer/passes/constant_folding_pass.rb +33 -0
- data/lib/kumi/core/analyzer/passes/contract_checker_pass.rb +220 -0
- data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +5 -6
- data/lib/kumi/core/analyzer/passes/input_access_planner_pass.rb +7 -3
- data/lib/kumi/core/analyzer/passes/input_collector.rb +74 -122
- data/lib/kumi/core/analyzer/passes/input_form_schema_pass.rb +43 -0
- data/lib/kumi/core/analyzer/passes/ir_dependency_pass.rb +1 -1
- data/lib/kumi/core/analyzer/passes/ir_execution_schedule_pass.rb +1 -1
- data/lib/kumi/core/analyzer/passes/join_reduce_planning_pass.rb +21 -23
- data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +84 -0
- data/lib/kumi/core/analyzer/passes/lir/dead_code_elimination_pass.rb +93 -0
- data/lib/kumi/core/analyzer/passes/lir/hoist_scalar_references_pass.rb +115 -0
- data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +274 -0
- data/lib/kumi/core/analyzer/passes/lir/instruction_scheduling_pass.rb +198 -0
- data/lib/kumi/core/analyzer/passes/lir/kernel_binding_pass.rb +30 -0
- data/lib/kumi/core/analyzer/passes/lir/local_cse_pass.rb +121 -0
- data/lib/kumi/core/analyzer/passes/lir/loop_fusion_pass.rb +156 -0
- data/lib/kumi/core/analyzer/passes/lir/loop_invariant_code_motion_pass.rb +148 -0
- data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +407 -0
- data/lib/kumi/core/analyzer/passes/lir/stencil_emitter.rb +243 -0
- data/lib/kumi/core/analyzer/passes/lir/validation_pass.rb +83 -0
- data/lib/kumi/core/analyzer/passes/load_input_cse.rb +17 -16
- data/lib/kumi/core/analyzer/passes/lower_to_ir_pass.rb +4 -2
- data/lib/kumi/core/analyzer/passes/lower_to_irv2_pass.rb +197 -0
- data/lib/kumi/core/analyzer/passes/name_indexer.rb +4 -1
- data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +237 -0
- data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +156 -0
- data/lib/kumi/core/analyzer/passes/output_schema_pass.rb +38 -0
- data/lib/kumi/core/analyzer/passes/pass_base.rb +30 -4
- data/lib/kumi/core/analyzer/passes/precompute_access_paths_pass.rb +93 -0
- data/lib/kumi/core/analyzer/passes/scope_resolution_pass.rb +33 -30
- data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -26
- data/lib/kumi/core/analyzer/passes/snast_pass.rb +229 -0
- data/lib/kumi/core/analyzer/passes/toposorter.rb +1 -0
- data/lib/kumi/core/analyzer/passes/type_checker.rb +13 -0
- data/lib/kumi/core/analyzer/passes/type_inferencer_pass.rb +14 -16
- data/lib/kumi/core/analyzer/passes/unsat_detector.rb +2 -1
- data/lib/kumi/core/analyzer/plans.rb +12 -0
- data/lib/kumi/core/analyzer/state_serde.rb +4 -4
- data/lib/kumi/core/analyzer/structs/access_plan.rb +2 -2
- data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +59 -0
- data/lib/kumi/core/compiler/access_codegen.rb +1 -1
- data/lib/kumi/core/compiler/access_emit/base.rb +9 -5
- data/lib/kumi/core/compiler/access_emit/each_indexed.rb +10 -3
- data/lib/kumi/core/compiler/access_emit/materialize.rb +12 -5
- data/lib/kumi/core/compiler/access_emit/ravel.rb +10 -3
- data/lib/kumi/core/compiler/access_emit/read.rb +4 -1
- data/lib/kumi/core/compiler/access_planner.rb +42 -4
- data/lib/kumi/core/compiler/access_planner_v2.rb +164 -0
- data/lib/kumi/core/explain.rb +18 -11
- data/lib/kumi/core/functions/loader.rb +47 -0
- data/lib/kumi/core/functions/model.rb +10 -0
- data/lib/kumi/core/functions/type_rules.rb +108 -0
- data/lib/kumi/core/ir/execution_engine/interpreter.rb +1 -1
- data/lib/kumi/core/ir/execution_engine/profiler.rb +107 -97
- data/lib/kumi/core/ir.rb +6 -2
- data/lib/kumi/core/irv2/builder.rb +48 -0
- data/lib/kumi/core/irv2/declaration.rb +28 -0
- data/lib/kumi/core/irv2/module.rb +108 -0
- data/lib/kumi/core/irv2/value.rb +28 -0
- data/lib/kumi/core/lir/analyze.rb +64 -0
- data/lib/kumi/core/lir/build.rb +363 -0
- data/lib/kumi/core/lir/emit.rb +62 -0
- data/lib/kumi/core/lir/structs/instruction.rb +44 -0
- data/lib/kumi/core/lir/structs/literal.rb +14 -0
- data/lib/kumi/core/lir/structs/stamp.rb +13 -0
- data/lib/kumi/core/lir/support/error.rb +9 -0
- data/lib/kumi/core/lir/support/ids.rb +34 -0
- data/lib/kumi/core/lir/validate.rb +74 -0
- data/lib/kumi/core/lir.rb +34 -0
- data/lib/kumi/core/nast.rb +216 -0
- data/lib/kumi/core/ruby_parser/dsl.rb +2 -2
- data/lib/kumi/core/ruby_parser/dsl_cascade_builder.rb +1 -1
- data/lib/kumi/core/ruby_parser/expression_converter.rb +10 -0
- data/lib/kumi/core/ruby_parser/input_builder.rb +16 -17
- data/lib/kumi/core/ruby_parser/schema_builder.rb +36 -10
- data/lib/kumi/core/ruby_parser/sugar.rb +64 -0
- data/lib/kumi/core/types/builder.rb +2 -2
- data/lib/kumi/core/types/normalizer.rb +2 -0
- data/lib/kumi/core/types/validator.rb +10 -3
- data/lib/kumi/core/types.rb +7 -0
- data/lib/kumi/dev/codegen.rb +194 -0
- data/lib/kumi/dev/golden/generator.rb +105 -0
- data/lib/kumi/dev/golden/reporter.rb +160 -0
- data/lib/kumi/dev/golden/representation.rb +45 -0
- data/lib/kumi/dev/golden/result.rb +98 -0
- data/lib/kumi/dev/golden/runtime_test.rb +93 -0
- data/lib/kumi/dev/golden/suite.rb +131 -0
- data/lib/kumi/dev/golden/verifier.rb +76 -0
- data/lib/kumi/dev/golden.rb +75 -0
- data/lib/kumi/dev/ir.rb +4 -4
- data/lib/kumi/dev/parse.rb +1 -1
- data/lib/kumi/dev/pretty_printer.rb +229 -0
- data/lib/kumi/dev/printer/irv2_formatter.rb +163 -0
- data/lib/kumi/dev/printer/width_aware_json.rb +44 -0
- data/lib/kumi/dev/profile_aggregator.rb +36 -38
- data/lib/kumi/dev/profile_runner.rb +19 -23
- data/lib/kumi/dev/runner.rb +12 -22
- data/lib/kumi/dev/support/kumi_runner.mjs +39 -0
- data/lib/kumi/dev.rb +3 -3
- data/lib/kumi/frontends/ruby.rb +12 -12
- data/lib/kumi/frontends/text.rb +26 -21
- data/lib/kumi/frontends.rb +6 -8
- data/lib/kumi/kernel_registry.rb +59 -0
- data/lib/kumi/pack/builder.rb +229 -0
- data/lib/kumi/pack.rb +15 -0
- data/lib/kumi/registry_v2/loader.rb +81 -0
- data/lib/kumi/registry_v2.rb +118 -0
- data/lib/kumi/schema.rb +83 -43
- data/lib/kumi/support/diff.rb +3 -2
- data/lib/kumi/support/ir_render.rb +1 -1
- data/lib/kumi/support/lir_printer.rb +143 -0
- data/lib/kumi/support/nast_printer.rb +93 -0
- data/lib/kumi/support/s_expression_printer.rb +5 -4
- data/lib/kumi/support/snast_printer.rb +111 -0
- data/lib/kumi/syntax/call_expression.rb +1 -1
- data/lib/kumi/syntax/input_declaration.rb +2 -2
- data/lib/kumi/syntax/node.rb +4 -12
- data/lib/kumi/syntax/root.rb +10 -0
- data/lib/kumi/syntax/trait_declaration.rb +1 -0
- data/lib/kumi/syntax/value_declaration.rb +1 -0
- data/lib/kumi/version.rb +1 -1
- data/lib/kumi.rb +47 -5
- metadata +571 -54
- data/docs/AST.md +0 -133
- data/docs/DSL.md +0 -154
- data/docs/FUNCTIONS.md +0 -176
- data/docs/VECTOR_SEMANTICS.md +0 -286
- data/docs/compiler_design_principles.md +0 -86
- data/docs/dev/analyzer-debug.md +0 -52
- data/docs/dev/parse-command.md +0 -64
- data/docs/dev/vm-profiling.md +0 -95
- data/docs/development/README.md +0 -120
- data/docs/development/error-reporting.md +0 -361
- data/docs/features/README.md +0 -58
- data/docs/features/analysis-type-inference.md +0 -42
- data/docs/features/analysis-unsat-detection.md +0 -71
- data/docs/features/hierarchical-broadcasting.md +0 -415
- data/docs/features/input-declaration-system.md +0 -58
- data/docs/features/performance.md +0 -14
- data/docs/features/s-expression-printer.md +0 -77
- data/docs/schema_metadata/broadcasts.md +0 -53
- data/docs/schema_metadata/cascades.md +0 -45
- data/docs/schema_metadata/declarations.md +0 -54
- data/docs/schema_metadata/dependencies.md +0 -57
- data/docs/schema_metadata/evaluation_order.md +0 -29
- data/docs/schema_metadata/examples.md +0 -95
- data/docs/schema_metadata/inferred_types.md +0 -46
- data/docs/schema_metadata/inputs.md +0 -86
- data/docs/schema_metadata.md +0 -108
- data/golden/mixed_nesting/schema.kumi +0 -42
- data/lib/kumi/core/function_registry/collection_functions.rb +0 -298
- data/lib/kumi/core/function_registry/comparison_functions.rb +0 -33
- data/lib/kumi/core/function_registry/conditional_functions.rb +0 -48
- data/lib/kumi/core/function_registry/function_builder.rb +0 -184
- data/lib/kumi/core/function_registry/logical_functions.rb +0 -214
- data/lib/kumi/core/function_registry/math_functions.rb +0 -74
- data/lib/kumi/core/function_registry/stat_functions.rb +0 -156
- data/lib/kumi/core/function_registry/string_functions.rb +0 -57
- data/lib/kumi/core/function_registry/type_functions.rb +0 -53
- data/lib/kumi/core/function_registry.rb +0 -176
- data/lib/kumi/registry.rb +0 -32
- data/lib/kumi/runtime/executable.rb +0 -135
- data/lib/kumi/runtime/run.rb +0 -105
- data/performance_results.txt +0 -63
- data/scripts/analyze_broadcast_methods.rb +0 -68
- data/scripts/analyze_cascade_methods.rb +0 -74
- data/scripts/check_broadcasting_coverage.rb +0 -51
- data/scripts/find_dead_code.rb +0 -114
- data/scripts/generate_function_docs.rb +0 -71
- data/scripts/test_mixed_nesting_performance.rb +0 -206
@@ -0,0 +1,19 @@
|
|
1
|
+
schema do
|
2
|
+
input do
|
3
|
+
array :users do
|
4
|
+
hash :user do
|
5
|
+
string :name
|
6
|
+
string :state
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
value :users, {
|
12
|
+
name: input.users.user.name,
|
13
|
+
state: input.users.user.state
|
14
|
+
}
|
15
|
+
|
16
|
+
trait :is_john, input.users.user.name == "John"
|
17
|
+
|
18
|
+
value :john_user, select(is_john, users, "NOT_JOHN")
|
19
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
(Root
|
2
|
+
inputs: [
|
3
|
+
(InputDeclaration :regions :array
|
4
|
+
[
|
5
|
+
(InputDeclaration :region :hash
|
6
|
+
[
|
7
|
+
(InputDeclaration :offices :array
|
8
|
+
[
|
9
|
+
(InputDeclaration :office :hash
|
10
|
+
[
|
11
|
+
(InputDeclaration :teams :array
|
12
|
+
[
|
13
|
+
(InputDeclaration :team :hash
|
14
|
+
[
|
15
|
+
(InputDeclaration :performance_score :float)
|
16
|
+
(InputDeclaration :employees :array
|
17
|
+
[
|
18
|
+
(InputDeclaration :employee :hash
|
19
|
+
[
|
20
|
+
(InputDeclaration :salary :float)
|
21
|
+
(InputDeclaration :rating :float)
|
22
|
+
(InputDeclaration :level :string)
|
23
|
+
]
|
24
|
+
)
|
25
|
+
]
|
26
|
+
)
|
27
|
+
]
|
28
|
+
)
|
29
|
+
]
|
30
|
+
)
|
31
|
+
]
|
32
|
+
)
|
33
|
+
]
|
34
|
+
)
|
35
|
+
]
|
36
|
+
)
|
37
|
+
]
|
38
|
+
)
|
39
|
+
]
|
40
|
+
values: [
|
41
|
+
(ValueDeclaration :employee_bonus
|
42
|
+
(CascadeExpression
|
43
|
+
((CallExpression :cascade_and
|
44
|
+
(DeclarationReference :high_performer)
|
45
|
+
(DeclarationReference :senior_level)
|
46
|
+
(DeclarationReference :top_team)
|
47
|
+
) (CallExpression :multiply
|
48
|
+
(InputElementReference regions.region.offices.office.teams.team.employees.employee.salary)
|
49
|
+
(Literal 0.3)
|
50
|
+
))
|
51
|
+
((CallExpression :cascade_and
|
52
|
+
(DeclarationReference :high_performer)
|
53
|
+
(DeclarationReference :top_team)
|
54
|
+
) (CallExpression :multiply
|
55
|
+
(InputElementReference regions.region.offices.office.teams.team.employees.employee.salary)
|
56
|
+
(Literal 0.2)
|
57
|
+
))
|
58
|
+
((Literal true) (CallExpression :multiply
|
59
|
+
(InputElementReference regions.region.offices.office.teams.team.employees.employee.salary)
|
60
|
+
(Literal 0.05)
|
61
|
+
))
|
62
|
+
)
|
63
|
+
)
|
64
|
+
]
|
65
|
+
traits: [
|
66
|
+
(TraitDeclaration :high_performer
|
67
|
+
(CallExpression :>=
|
68
|
+
(InputElementReference regions.region.offices.office.teams.team.employees.employee.rating)
|
69
|
+
(Literal 4.5)
|
70
|
+
)
|
71
|
+
)
|
72
|
+
(TraitDeclaration :senior_level
|
73
|
+
(CallExpression :==
|
74
|
+
(InputElementReference regions.region.offices.office.teams.team.employees.employee.level)
|
75
|
+
(Literal "senior")
|
76
|
+
)
|
77
|
+
)
|
78
|
+
(TraitDeclaration :top_team
|
79
|
+
(CallExpression :>=
|
80
|
+
(InputElementReference regions.region.offices.office.teams.team.performance_score)
|
81
|
+
(Literal 0.9)
|
82
|
+
)
|
83
|
+
)
|
84
|
+
]
|
85
|
+
)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
regions: array (array) access_mode=element
|
2
|
+
└─> region: element_access
|
3
|
+
region: hash (hash)
|
4
|
+
└─> offices: property_access → array_loop
|
5
|
+
offices: array (array) access_mode=element
|
6
|
+
└─> office: element_access
|
7
|
+
office: hash (hash)
|
8
|
+
└─> teams: property_access → array_loop
|
9
|
+
teams: array (array) access_mode=element
|
10
|
+
└─> team: element_access
|
11
|
+
team: hash (hash)
|
12
|
+
└─> performance_score: property_access
|
13
|
+
└─> employees: property_access → array_loop
|
14
|
+
performance_score: float
|
15
|
+
employees: array (array) access_mode=element
|
16
|
+
└─> employee: element_access
|
17
|
+
employee: hash (hash)
|
18
|
+
└─> salary: property_access
|
19
|
+
└─> rating: property_access
|
20
|
+
└─> level: property_access
|
21
|
+
salary: float
|
22
|
+
rating: float
|
23
|
+
level: string
|
@@ -0,0 +1,87 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration high_performer
|
3
|
+
%t1 = load_input "regions" :: array
|
4
|
+
loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
|
5
|
+
%t4 = load_field regions_el_2["offices"] :: any
|
6
|
+
loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
|
7
|
+
%t7 = load_field offices_el_5["teams"] :: any
|
8
|
+
loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
|
9
|
+
%t10 = load_field teams_el_8["employees"] :: any
|
10
|
+
loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
|
11
|
+
%t13 = load_field employees_el_11["rating"] :: float
|
12
|
+
%t14 = const 4.5 :: float
|
13
|
+
%t15 = call core.gte(%t13, %t14) :: boolean
|
14
|
+
yield %t15
|
15
|
+
end_loop
|
16
|
+
end_loop
|
17
|
+
end_loop
|
18
|
+
end_loop
|
19
|
+
)
|
20
|
+
(Declaration senior_level
|
21
|
+
%t16 = load_input "regions" :: array
|
22
|
+
loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
|
23
|
+
%t19 = load_field regions_el_17["offices"] :: any
|
24
|
+
loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
|
25
|
+
%t22 = load_field offices_el_20["teams"] :: any
|
26
|
+
loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
|
27
|
+
%t25 = load_field teams_el_23["employees"] :: any
|
28
|
+
loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
|
29
|
+
%t28 = load_field employees_el_26["level"] :: string
|
30
|
+
%t29 = const "senior" :: string
|
31
|
+
%t30 = call core.eq(%t28, %t29) :: boolean
|
32
|
+
yield %t30
|
33
|
+
end_loop
|
34
|
+
end_loop
|
35
|
+
end_loop
|
36
|
+
end_loop
|
37
|
+
)
|
38
|
+
(Declaration top_team
|
39
|
+
%t31 = load_input "regions" :: array
|
40
|
+
loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
|
41
|
+
%t34 = load_field regions_el_32["offices"] :: any
|
42
|
+
loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
|
43
|
+
%t37 = load_field offices_el_35["teams"] :: any
|
44
|
+
loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
|
45
|
+
%t40 = load_field teams_el_38["performance_score"] :: float
|
46
|
+
%t41 = const 0.9 :: float
|
47
|
+
%t42 = call core.gte(%t40, %t41) :: boolean
|
48
|
+
yield %t42
|
49
|
+
end_loop
|
50
|
+
end_loop
|
51
|
+
end_loop
|
52
|
+
)
|
53
|
+
(Declaration employee_bonus
|
54
|
+
%t43 = load_input "regions" :: array
|
55
|
+
loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
|
56
|
+
%t46 = load_field regions_el_44["offices"] :: any
|
57
|
+
loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
|
58
|
+
%t49 = load_field offices_el_47["teams"] :: any
|
59
|
+
loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
|
60
|
+
%t52 = load_field teams_el_50["employees"] :: any
|
61
|
+
loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
|
62
|
+
%t55 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
|
63
|
+
%t56 = load_decl senior_level axes=[regions, offices, teams, employees] :: boolean
|
64
|
+
%t57 = load_decl top_team axes=[regions, offices, teams] :: boolean
|
65
|
+
%t58 = call core.and(%t56, %t57) :: boolean
|
66
|
+
%t59 = call core.and(%t55, %t58) :: boolean
|
67
|
+
%t60 = load_field employees_el_53["salary"] :: float
|
68
|
+
%t61 = const 0.3 :: float
|
69
|
+
%t62 = call core.mul(%t60, %t61) :: float
|
70
|
+
%t63 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
|
71
|
+
%t64 = load_decl top_team axes=[regions, offices, teams] :: boolean
|
72
|
+
%t65 = call core.and(%t63, %t64) :: boolean
|
73
|
+
%t66 = load_field employees_el_53["salary"] :: float
|
74
|
+
%t67 = const 0.2 :: float
|
75
|
+
%t68 = call core.mul(%t66, %t67) :: float
|
76
|
+
%t69 = load_field employees_el_53["salary"] :: float
|
77
|
+
%t70 = const 0.05 :: float
|
78
|
+
%t71 = call core.mul(%t69, %t70) :: float
|
79
|
+
%t72 = select %t65, %t68, %t71 :: float
|
80
|
+
%t73 = select %t59, %t62, %t72 :: float
|
81
|
+
yield %t73
|
82
|
+
end_loop
|
83
|
+
end_loop
|
84
|
+
end_loop
|
85
|
+
end_loop
|
86
|
+
)
|
87
|
+
)
|
@@ -0,0 +1,87 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration high_performer
|
3
|
+
%t1 = load_input "regions" :: array
|
4
|
+
loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
|
5
|
+
%t4 = load_field regions_el_2["offices"] :: any
|
6
|
+
loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
|
7
|
+
%t7 = load_field offices_el_5["teams"] :: any
|
8
|
+
loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
|
9
|
+
%t10 = load_field teams_el_8["employees"] :: any
|
10
|
+
loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
|
11
|
+
%t13 = load_field employees_el_11["rating"] :: float
|
12
|
+
%t14 = const 4.5 :: float
|
13
|
+
%t15 = call core.gte(%t13, %t14) :: boolean
|
14
|
+
yield %t15
|
15
|
+
end_loop
|
16
|
+
end_loop
|
17
|
+
end_loop
|
18
|
+
end_loop
|
19
|
+
)
|
20
|
+
(Declaration senior_level
|
21
|
+
%t16 = load_input "regions" :: array
|
22
|
+
loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
|
23
|
+
%t19 = load_field regions_el_17["offices"] :: any
|
24
|
+
loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
|
25
|
+
%t22 = load_field offices_el_20["teams"] :: any
|
26
|
+
loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
|
27
|
+
%t25 = load_field teams_el_23["employees"] :: any
|
28
|
+
loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
|
29
|
+
%t28 = load_field employees_el_26["level"] :: string
|
30
|
+
%t29 = const "senior" :: string
|
31
|
+
%t30 = call core.eq(%t28, %t29) :: boolean
|
32
|
+
yield %t30
|
33
|
+
end_loop
|
34
|
+
end_loop
|
35
|
+
end_loop
|
36
|
+
end_loop
|
37
|
+
)
|
38
|
+
(Declaration top_team
|
39
|
+
%t31 = load_input "regions" :: array
|
40
|
+
loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
|
41
|
+
%t34 = load_field regions_el_32["offices"] :: any
|
42
|
+
loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
|
43
|
+
%t37 = load_field offices_el_35["teams"] :: any
|
44
|
+
loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
|
45
|
+
%t40 = load_field teams_el_38["performance_score"] :: float
|
46
|
+
%t41 = const 0.9 :: float
|
47
|
+
%t42 = call core.gte(%t40, %t41) :: boolean
|
48
|
+
yield %t42
|
49
|
+
end_loop
|
50
|
+
end_loop
|
51
|
+
end_loop
|
52
|
+
)
|
53
|
+
(Declaration employee_bonus
|
54
|
+
%t43 = load_input "regions" :: array
|
55
|
+
loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
|
56
|
+
%t46 = load_field regions_el_44["offices"] :: any
|
57
|
+
loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
|
58
|
+
%t49 = load_field offices_el_47["teams"] :: any
|
59
|
+
loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
|
60
|
+
%t52 = load_field teams_el_50["employees"] :: any
|
61
|
+
loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
|
62
|
+
%t55 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
|
63
|
+
%t56 = load_decl senior_level axes=[regions, offices, teams, employees] :: boolean
|
64
|
+
%t57 = load_decl top_team axes=[regions, offices, teams] :: boolean
|
65
|
+
%t58 = call core.and(%t56, %t57) :: boolean
|
66
|
+
%t59 = call core.and(%t55, %t58) :: boolean
|
67
|
+
%t60 = load_field employees_el_53["salary"] :: float
|
68
|
+
%t61 = const 0.3 :: float
|
69
|
+
%t62 = call core.mul(%t60, %t61) :: float
|
70
|
+
%t63 = load_decl high_performer axes=[regions, offices, teams, employees] :: boolean
|
71
|
+
%t64 = load_decl top_team axes=[regions, offices, teams] :: boolean
|
72
|
+
%t65 = call core.and(%t63, %t64) :: boolean
|
73
|
+
%t66 = load_field employees_el_53["salary"] :: float
|
74
|
+
%t67 = const 0.2 :: float
|
75
|
+
%t68 = call core.mul(%t66, %t67) :: float
|
76
|
+
%t69 = load_field employees_el_53["salary"] :: float
|
77
|
+
%t70 = const 0.05 :: float
|
78
|
+
%t71 = call core.mul(%t69, %t70) :: float
|
79
|
+
%t72 = select %t65, %t68, %t71 :: float
|
80
|
+
%t73 = select %t59, %t62, %t72 :: float
|
81
|
+
yield %t73
|
82
|
+
end_loop
|
83
|
+
end_loop
|
84
|
+
end_loop
|
85
|
+
end_loop
|
86
|
+
)
|
87
|
+
)
|
@@ -0,0 +1,115 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration high_performer
|
3
|
+
%t1 = load_input "regions" :: array
|
4
|
+
loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
|
5
|
+
%t4 = load_field regions_el_2["offices"] :: any
|
6
|
+
loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
|
7
|
+
%t7 = load_field offices_el_5["teams"] :: any
|
8
|
+
loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
|
9
|
+
%t10 = load_field teams_el_8["employees"] :: any
|
10
|
+
loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
|
11
|
+
%t13 = load_field employees_el_11["rating"] :: float
|
12
|
+
%t14 = const 4.5 :: float
|
13
|
+
%t15 = call core.gte(%t13, %t14) :: boolean
|
14
|
+
yield %t15
|
15
|
+
end_loop
|
16
|
+
end_loop
|
17
|
+
end_loop
|
18
|
+
end_loop
|
19
|
+
)
|
20
|
+
(Declaration senior_level
|
21
|
+
%t16 = load_input "regions" :: array
|
22
|
+
loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
|
23
|
+
%t19 = load_field regions_el_17["offices"] :: any
|
24
|
+
loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
|
25
|
+
%t22 = load_field offices_el_20["teams"] :: any
|
26
|
+
loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
|
27
|
+
%t25 = load_field teams_el_23["employees"] :: any
|
28
|
+
loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
|
29
|
+
%t28 = load_field employees_el_26["level"] :: string
|
30
|
+
%t29 = const "senior" :: string
|
31
|
+
%t30 = call core.eq(%t28, %t29) :: boolean
|
32
|
+
yield %t30
|
33
|
+
end_loop
|
34
|
+
end_loop
|
35
|
+
end_loop
|
36
|
+
end_loop
|
37
|
+
)
|
38
|
+
(Declaration top_team
|
39
|
+
%t31 = load_input "regions" :: array
|
40
|
+
loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
|
41
|
+
%t34 = load_field regions_el_32["offices"] :: any
|
42
|
+
loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
|
43
|
+
%t37 = load_field offices_el_35["teams"] :: any
|
44
|
+
loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
|
45
|
+
%t40 = load_field teams_el_38["performance_score"] :: float
|
46
|
+
%t41 = const 0.9 :: float
|
47
|
+
%t42 = call core.gte(%t40, %t41) :: boolean
|
48
|
+
yield %t42
|
49
|
+
end_loop
|
50
|
+
end_loop
|
51
|
+
end_loop
|
52
|
+
)
|
53
|
+
(Declaration employee_bonus
|
54
|
+
%t43 = load_input "regions" :: array
|
55
|
+
loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
|
56
|
+
%t46 = load_field regions_el_44["offices"] :: any
|
57
|
+
loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
|
58
|
+
%t49 = load_field offices_el_47["teams"] :: any
|
59
|
+
loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
|
60
|
+
%t52 = load_field teams_el_50["employees"] :: any
|
61
|
+
%t88 = load_input "regions" :: array
|
62
|
+
%t89 = load_field regions_el_44["offices"] :: any
|
63
|
+
%t90 = load_field offices_el_47["teams"] :: any
|
64
|
+
%t91 = load_field teams_el_50["performance_score"] :: float
|
65
|
+
%t92 = const 0.9 :: float
|
66
|
+
%t93 = call core.gte(%t91, %t92) :: boolean
|
67
|
+
%t88 = load_input "regions" :: array
|
68
|
+
%t89 = load_field regions_el_44["offices"] :: any
|
69
|
+
%t90 = load_field offices_el_47["teams"] :: any
|
70
|
+
%t91 = load_field teams_el_50["performance_score"] :: float
|
71
|
+
%t92 = const 0.9 :: float
|
72
|
+
%t93 = call core.gte(%t91, %t92) :: boolean
|
73
|
+
loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
|
74
|
+
%t74 = load_input "regions" :: array
|
75
|
+
%t75 = load_field regions_el_44["offices"] :: any
|
76
|
+
%t76 = load_field offices_el_47["teams"] :: any
|
77
|
+
%t77 = load_field teams_el_50["employees"] :: any
|
78
|
+
%t78 = load_field employees_el_53["rating"] :: float
|
79
|
+
%t79 = const 4.5 :: float
|
80
|
+
%t80 = call core.gte(%t78, %t79) :: boolean
|
81
|
+
%t81 = load_input "regions" :: array
|
82
|
+
%t82 = load_field regions_el_44["offices"] :: any
|
83
|
+
%t83 = load_field offices_el_47["teams"] :: any
|
84
|
+
%t84 = load_field teams_el_50["employees"] :: any
|
85
|
+
%t85 = load_field employees_el_53["level"] :: string
|
86
|
+
%t86 = const "senior" :: string
|
87
|
+
%t87 = call core.eq(%t85, %t86) :: boolean
|
88
|
+
%t58 = call core.and(%t87, %t93) :: boolean
|
89
|
+
%t59 = call core.and(%t80, %t58) :: boolean
|
90
|
+
%t60 = load_field employees_el_53["salary"] :: float
|
91
|
+
%t61 = const 0.3 :: float
|
92
|
+
%t62 = call core.mul(%t60, %t61) :: float
|
93
|
+
%t74 = load_input "regions" :: array
|
94
|
+
%t75 = load_field regions_el_44["offices"] :: any
|
95
|
+
%t76 = load_field offices_el_47["teams"] :: any
|
96
|
+
%t77 = load_field teams_el_50["employees"] :: any
|
97
|
+
%t78 = load_field employees_el_53["rating"] :: float
|
98
|
+
%t79 = const 4.5 :: float
|
99
|
+
%t80 = call core.gte(%t78, %t79) :: boolean
|
100
|
+
%t65 = call core.and(%t80, %t93) :: boolean
|
101
|
+
%t66 = load_field employees_el_53["salary"] :: float
|
102
|
+
%t67 = const 0.2 :: float
|
103
|
+
%t68 = call core.mul(%t66, %t67) :: float
|
104
|
+
%t69 = load_field employees_el_53["salary"] :: float
|
105
|
+
%t70 = const 0.05 :: float
|
106
|
+
%t71 = call core.mul(%t69, %t70) :: float
|
107
|
+
%t72 = select %t65, %t68, %t71 :: float
|
108
|
+
%t73 = select %t59, %t62, %t72 :: float
|
109
|
+
yield %t73
|
110
|
+
end_loop
|
111
|
+
end_loop
|
112
|
+
end_loop
|
113
|
+
end_loop
|
114
|
+
)
|
115
|
+
)
|
@@ -0,0 +1,89 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration high_performer
|
3
|
+
%t1 = load_input "regions" :: array
|
4
|
+
loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
|
5
|
+
%t4 = load_field regions_el_2["offices"] :: any
|
6
|
+
loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
|
7
|
+
%t7 = load_field offices_el_5["teams"] :: any
|
8
|
+
loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
|
9
|
+
%t10 = load_field teams_el_8["employees"] :: any
|
10
|
+
loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
|
11
|
+
%t13 = load_field employees_el_11["rating"] :: float
|
12
|
+
%t14 = const 4.5 :: float
|
13
|
+
%t15 = call core.gte(%t13, %t14) :: boolean
|
14
|
+
yield %t15
|
15
|
+
end_loop
|
16
|
+
end_loop
|
17
|
+
end_loop
|
18
|
+
end_loop
|
19
|
+
)
|
20
|
+
(Declaration senior_level
|
21
|
+
%t16 = load_input "regions" :: array
|
22
|
+
loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
|
23
|
+
%t19 = load_field regions_el_17["offices"] :: any
|
24
|
+
loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
|
25
|
+
%t22 = load_field offices_el_20["teams"] :: any
|
26
|
+
loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
|
27
|
+
%t25 = load_field teams_el_23["employees"] :: any
|
28
|
+
loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
|
29
|
+
%t28 = load_field employees_el_26["level"] :: string
|
30
|
+
%t29 = const "senior" :: string
|
31
|
+
%t30 = call core.eq(%t28, %t29) :: boolean
|
32
|
+
yield %t30
|
33
|
+
end_loop
|
34
|
+
end_loop
|
35
|
+
end_loop
|
36
|
+
end_loop
|
37
|
+
)
|
38
|
+
(Declaration top_team
|
39
|
+
%t31 = load_input "regions" :: array
|
40
|
+
loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
|
41
|
+
%t34 = load_field regions_el_32["offices"] :: any
|
42
|
+
loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
|
43
|
+
%t37 = load_field offices_el_35["teams"] :: any
|
44
|
+
loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
|
45
|
+
%t40 = load_field teams_el_38["performance_score"] :: float
|
46
|
+
%t41 = const 0.9 :: float
|
47
|
+
%t42 = call core.gte(%t40, %t41) :: boolean
|
48
|
+
yield %t42
|
49
|
+
end_loop
|
50
|
+
end_loop
|
51
|
+
end_loop
|
52
|
+
)
|
53
|
+
(Declaration employee_bonus
|
54
|
+
%t43 = load_input "regions" :: array
|
55
|
+
loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
|
56
|
+
%t46 = load_field regions_el_44["offices"] :: any
|
57
|
+
loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
|
58
|
+
%t49 = load_field offices_el_47["teams"] :: any
|
59
|
+
loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
|
60
|
+
%t52 = load_field teams_el_50["employees"] :: any
|
61
|
+
%t91 = load_field teams_el_50["performance_score"] :: float
|
62
|
+
%t92 = const 0.9 :: float
|
63
|
+
%t93 = call core.gte(%t91, %t92) :: boolean
|
64
|
+
loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
|
65
|
+
%t78 = load_field employees_el_53["rating"] :: float
|
66
|
+
%t79 = const 4.5 :: float
|
67
|
+
%t80 = call core.gte(%t78, %t79) :: boolean
|
68
|
+
%t85 = load_field employees_el_53["level"] :: string
|
69
|
+
%t86 = const "senior" :: string
|
70
|
+
%t87 = call core.eq(%t85, %t86) :: boolean
|
71
|
+
%t58 = call core.and(%t87, %t93) :: boolean
|
72
|
+
%t59 = call core.and(%t80, %t58) :: boolean
|
73
|
+
%t60 = load_field employees_el_53["salary"] :: float
|
74
|
+
%t61 = const 0.3 :: float
|
75
|
+
%t62 = call core.mul(%t60, %t61) :: float
|
76
|
+
%t65 = call core.and(%t80, %t93) :: boolean
|
77
|
+
%t67 = const 0.2 :: float
|
78
|
+
%t68 = call core.mul(%t60, %t67) :: float
|
79
|
+
%t70 = const 0.05 :: float
|
80
|
+
%t71 = call core.mul(%t60, %t70) :: float
|
81
|
+
%t72 = select %t65, %t68, %t71 :: float
|
82
|
+
%t73 = select %t59, %t62, %t72 :: float
|
83
|
+
yield %t73
|
84
|
+
end_loop
|
85
|
+
end_loop
|
86
|
+
end_loop
|
87
|
+
end_loop
|
88
|
+
)
|
89
|
+
)
|
@@ -0,0 +1,89 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration high_performer
|
3
|
+
%t1 = load_input "regions" :: array
|
4
|
+
loop regions id=L1 in %t1 as el=%regions_el_2, idx=%regions_i_3
|
5
|
+
%t4 = load_field regions_el_2["offices"] :: any
|
6
|
+
loop offices id=L2 in %t4 as el=%offices_el_5, idx=%offices_i_6
|
7
|
+
%t7 = load_field offices_el_5["teams"] :: any
|
8
|
+
loop teams id=L3 in %t7 as el=%teams_el_8, idx=%teams_i_9
|
9
|
+
%t10 = load_field teams_el_8["employees"] :: any
|
10
|
+
loop employees id=L4 in %t10 as el=%employees_el_11, idx=%employees_i_12
|
11
|
+
%t13 = load_field employees_el_11["rating"] :: float
|
12
|
+
%t14 = const 4.5 :: float
|
13
|
+
%t15 = call core.gte(%t13, %t14) :: boolean
|
14
|
+
yield %t15
|
15
|
+
end_loop
|
16
|
+
end_loop
|
17
|
+
end_loop
|
18
|
+
end_loop
|
19
|
+
)
|
20
|
+
(Declaration senior_level
|
21
|
+
%t16 = load_input "regions" :: array
|
22
|
+
loop regions id=L5 in %t16 as el=%regions_el_17, idx=%regions_i_18
|
23
|
+
%t19 = load_field regions_el_17["offices"] :: any
|
24
|
+
loop offices id=L6 in %t19 as el=%offices_el_20, idx=%offices_i_21
|
25
|
+
%t22 = load_field offices_el_20["teams"] :: any
|
26
|
+
loop teams id=L7 in %t22 as el=%teams_el_23, idx=%teams_i_24
|
27
|
+
%t25 = load_field teams_el_23["employees"] :: any
|
28
|
+
loop employees id=L8 in %t25 as el=%employees_el_26, idx=%employees_i_27
|
29
|
+
%t28 = load_field employees_el_26["level"] :: string
|
30
|
+
%t29 = const "senior" :: string
|
31
|
+
%t30 = call core.eq(%t28, %t29) :: boolean
|
32
|
+
yield %t30
|
33
|
+
end_loop
|
34
|
+
end_loop
|
35
|
+
end_loop
|
36
|
+
end_loop
|
37
|
+
)
|
38
|
+
(Declaration top_team
|
39
|
+
%t31 = load_input "regions" :: array
|
40
|
+
loop regions id=L9 in %t31 as el=%regions_el_32, idx=%regions_i_33
|
41
|
+
%t34 = load_field regions_el_32["offices"] :: any
|
42
|
+
loop offices id=L10 in %t34 as el=%offices_el_35, idx=%offices_i_36
|
43
|
+
%t37 = load_field offices_el_35["teams"] :: any
|
44
|
+
loop teams id=L11 in %t37 as el=%teams_el_38, idx=%teams_i_39
|
45
|
+
%t40 = load_field teams_el_38["performance_score"] :: float
|
46
|
+
%t41 = const 0.9 :: float
|
47
|
+
%t42 = call core.gte(%t40, %t41) :: boolean
|
48
|
+
yield %t42
|
49
|
+
end_loop
|
50
|
+
end_loop
|
51
|
+
end_loop
|
52
|
+
)
|
53
|
+
(Declaration employee_bonus
|
54
|
+
%t43 = load_input "regions" :: array
|
55
|
+
loop regions id=L12 in %t43 as el=%regions_el_44, idx=%regions_i_45
|
56
|
+
%t46 = load_field regions_el_44["offices"] :: any
|
57
|
+
loop offices id=L13 in %t46 as el=%offices_el_47, idx=%offices_i_48
|
58
|
+
%t49 = load_field offices_el_47["teams"] :: any
|
59
|
+
loop teams id=L14 in %t49 as el=%teams_el_50, idx=%teams_i_51
|
60
|
+
%t52 = load_field teams_el_50["employees"] :: any
|
61
|
+
%t91 = load_field teams_el_50["performance_score"] :: float
|
62
|
+
%t92 = const 0.9 :: float
|
63
|
+
%t93 = call core.gte(%t91, %t92) :: boolean
|
64
|
+
loop employees id=L15 in %t52 as el=%employees_el_53, idx=%employees_i_54
|
65
|
+
%t78 = load_field employees_el_53["rating"] :: float
|
66
|
+
%t79 = const 4.5 :: float
|
67
|
+
%t80 = call core.gte(%t78, %t79) :: boolean
|
68
|
+
%t85 = load_field employees_el_53["level"] :: string
|
69
|
+
%t86 = const "senior" :: string
|
70
|
+
%t87 = call core.eq(%t85, %t86) :: boolean
|
71
|
+
%t58 = call core.and(%t87, %t93) :: boolean
|
72
|
+
%t59 = call core.and(%t80, %t58) :: boolean
|
73
|
+
%t60 = load_field employees_el_53["salary"] :: float
|
74
|
+
%t61 = const 0.3 :: float
|
75
|
+
%t62 = call core.mul(%t60, %t61) :: float
|
76
|
+
%t65 = call core.and(%t80, %t93) :: boolean
|
77
|
+
%t67 = const 0.2 :: float
|
78
|
+
%t68 = call core.mul(%t60, %t67) :: float
|
79
|
+
%t70 = const 0.05 :: float
|
80
|
+
%t71 = call core.mul(%t60, %t70) :: float
|
81
|
+
%t72 = select %t65, %t68, %t71 :: float
|
82
|
+
%t73 = select %t59, %t62, %t72 :: float
|
83
|
+
yield %t73
|
84
|
+
end_loop
|
85
|
+
end_loop
|
86
|
+
end_loop
|
87
|
+
end_loop
|
88
|
+
)
|
89
|
+
)
|