kumi 0.0.24 → 0.0.26
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/CHANGELOG.md +14 -0
- data/README.md +70 -71
- data/data/functions/agg/boolean.yaml +6 -2
- data/data/functions/agg/numeric.yaml +32 -16
- data/data/functions/agg/string.yaml +4 -3
- data/data/functions/core/arithmetic.yaml +62 -14
- data/data/functions/core/boolean.yaml +12 -6
- data/data/functions/core/comparison.yaml +25 -13
- data/data/functions/core/constructor.yaml +16 -8
- data/data/functions/core/select.yaml +3 -1
- data/data/functions/core/stencil.yaml +14 -5
- data/data/functions/core/string.yaml +9 -4
- data/data/kernels/ruby/agg/numeric.yaml +1 -1
- data/docs/UNSAT_DETECTION.md +83 -0
- data/golden/array_element/expected/nast.txt +1 -1
- data/golden/array_element/expected/schema_ruby.rb +1 -1
- data/golden/array_index/expected/nast.txt +7 -7
- data/golden/array_index/expected/schema_ruby.rb +1 -1
- data/golden/array_operations/expected/nast.txt +2 -2
- data/golden/array_operations/expected/schema_ruby.rb +1 -1
- data/golden/array_operations/expected/snast.txt +3 -3
- data/golden/cascade_logic/expected/lir_02_inlined.txt +8 -8
- data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
- data/golden/cascade_logic/expected/snast.txt +2 -2
- data/golden/chained_fusion/expected/lir_02_inlined.txt +36 -36
- data/golden/chained_fusion/expected/lir_03_cse.txt +23 -23
- data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +25 -25
- data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +23 -23
- data/golden/chained_fusion/expected/lir_06_const_prop.txt +23 -23
- data/golden/chained_fusion/expected/nast.txt +2 -2
- data/golden/chained_fusion/expected/schema_javascript.mjs +23 -23
- data/golden/chained_fusion/expected/schema_ruby.rb +28 -28
- data/golden/element_arrays/expected/nast.txt +2 -2
- data/golden/element_arrays/expected/schema_ruby.rb +1 -1
- data/golden/element_arrays/expected/snast.txt +1 -1
- data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +18 -18
- data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +17 -17
- data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +17 -17
- data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +17 -17
- data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +17 -17
- data/golden/empty_and_null_inputs/expected/nast.txt +3 -3
- data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +13 -13
- data/golden/empty_and_null_inputs/expected/schema_ruby.rb +18 -18
- data/golden/function_overload/expected/ast.txt +29 -0
- data/golden/function_overload/expected/input_plan.txt +4 -0
- data/golden/function_overload/expected/lir_00_unoptimized.txt +18 -0
- data/golden/function_overload/expected/lir_01_hoist_scalar_references.txt +18 -0
- data/golden/function_overload/expected/lir_02_inlined.txt +20 -0
- data/golden/function_overload/expected/lir_03_cse.txt +20 -0
- data/golden/function_overload/expected/lir_04_1_loop_fusion.txt +20 -0
- data/golden/function_overload/expected/lir_04_loop_invcm.txt +20 -0
- data/golden/function_overload/expected/lir_06_const_prop.txt +20 -0
- data/golden/function_overload/expected/nast.txt +22 -0
- data/golden/function_overload/expected/schema_javascript.mjs +12 -0
- data/golden/function_overload/expected/schema_ruby.rb +39 -0
- data/golden/function_overload/expected/snast.txt +22 -0
- data/golden/function_overload/input.json +8 -0
- data/golden/function_overload/schema.kumi +19 -0
- data/golden/game_of_life/expected/lir_00_unoptimized.txt +4 -4
- data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +4 -4
- data/golden/game_of_life/expected/lir_02_inlined.txt +1294 -1294
- data/golden/game_of_life/expected/lir_03_cse.txt +403 -399
- data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +403 -399
- data/golden/game_of_life/expected/lir_04_loop_invcm.txt +403 -399
- data/golden/game_of_life/expected/lir_06_const_prop.txt +403 -399
- data/golden/game_of_life/expected/nast.txt +4 -4
- data/golden/game_of_life/expected/schema_javascript.mjs +87 -85
- data/golden/game_of_life/expected/schema_ruby.rb +88 -86
- data/golden/game_of_life/expected/snast.txt +10 -10
- data/golden/hash_keys/expected/schema_ruby.rb +1 -1
- data/golden/hash_value/expected/nast.txt +1 -1
- data/golden/hash_value/expected/schema_ruby.rb +1 -1
- data/golden/hash_value/expected/snast.txt +1 -1
- data/golden/hierarchical_complex/expected/lir_02_inlined.txt +15 -15
- data/golden/hierarchical_complex/expected/lir_03_cse.txt +1 -1
- data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +1 -1
- data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +1 -1
- data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +1 -1
- data/golden/hierarchical_complex/expected/nast.txt +3 -3
- data/golden/hierarchical_complex/expected/schema_javascript.mjs +1 -1
- data/golden/hierarchical_complex/expected/schema_ruby.rb +2 -2
- data/golden/hierarchical_complex/expected/snast.txt +3 -3
- data/golden/inline_rename_scope_leak/expected/nast.txt +3 -3
- data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +1 -1
- data/golden/input_reference/expected/nast.txt +2 -2
- data/golden/input_reference/expected/schema_ruby.rb +1 -1
- data/golden/interleaved_fusion/expected/lir_02_inlined.txt +35 -35
- data/golden/interleaved_fusion/expected/lir_03_cse.txt +26 -26
- data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +27 -26
- data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +26 -26
- data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +26 -26
- data/golden/interleaved_fusion/expected/nast.txt +2 -2
- data/golden/interleaved_fusion/expected/schema_javascript.mjs +23 -23
- data/golden/interleaved_fusion/expected/schema_ruby.rb +29 -29
- data/golden/let_inline/expected/nast.txt +4 -4
- data/golden/let_inline/expected/schema_ruby.rb +1 -1
- data/golden/loop_fusion/expected/lir_02_inlined.txt +17 -17
- data/golden/loop_fusion/expected/lir_03_cse.txt +14 -14
- data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +14 -14
- data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +14 -14
- data/golden/loop_fusion/expected/lir_06_const_prop.txt +14 -14
- data/golden/loop_fusion/expected/nast.txt +1 -1
- data/golden/loop_fusion/expected/schema_javascript.mjs +12 -12
- data/golden/loop_fusion/expected/schema_ruby.rb +16 -16
- data/golden/min_reduce_scope/expected/nast.txt +3 -3
- data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
- data/golden/min_reduce_scope/expected/snast.txt +1 -1
- data/golden/mixed_dimensions/expected/lir_02_inlined.txt +5 -5
- data/golden/mixed_dimensions/expected/lir_03_cse.txt +5 -5
- data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +5 -5
- data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +5 -5
- data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +5 -5
- data/golden/mixed_dimensions/expected/nast.txt +2 -2
- data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -3
- data/golden/mixed_dimensions/expected/schema_ruby.rb +6 -6
- data/golden/multirank_hoisting/expected/lir_02_inlined.txt +48 -48
- data/golden/multirank_hoisting/expected/lir_03_cse.txt +35 -35
- data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +35 -35
- data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +35 -35
- data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +35 -35
- data/golden/multirank_hoisting/expected/nast.txt +7 -7
- data/golden/multirank_hoisting/expected/schema_javascript.mjs +34 -34
- data/golden/multirank_hoisting/expected/schema_ruby.rb +36 -36
- data/golden/nested_hash/expected/nast.txt +1 -1
- data/golden/nested_hash/expected/schema_ruby.rb +1 -1
- data/golden/reduction_broadcast/expected/lir_02_inlined.txt +30 -30
- data/golden/reduction_broadcast/expected/lir_03_cse.txt +22 -22
- data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +22 -22
- data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +22 -22
- data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +22 -22
- data/golden/reduction_broadcast/expected/nast.txt +3 -3
- data/golden/reduction_broadcast/expected/schema_javascript.mjs +18 -18
- data/golden/reduction_broadcast/expected/schema_ruby.rb +23 -23
- data/golden/reduction_broadcast/expected/snast.txt +1 -1
- data/golden/roll/expected/schema_ruby.rb +1 -1
- data/golden/shift/expected/schema_ruby.rb +1 -1
- data/golden/shift_2d/expected/schema_ruby.rb +1 -1
- data/golden/simple_math/expected/lir_00_unoptimized.txt +1 -1
- data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +1 -1
- data/golden/simple_math/expected/lir_02_inlined.txt +1 -1
- data/golden/simple_math/expected/lir_03_cse.txt +1 -1
- data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +1 -1
- data/golden/simple_math/expected/lir_04_loop_invcm.txt +1 -1
- data/golden/simple_math/expected/lir_06_const_prop.txt +1 -1
- data/golden/simple_math/expected/nast.txt +5 -5
- data/golden/simple_math/expected/schema_ruby.rb +1 -1
- data/golden/simple_math/expected/snast.txt +2 -2
- data/golden/streaming_basics/expected/lir_02_inlined.txt +25 -25
- data/golden/streaming_basics/expected/lir_03_cse.txt +13 -13
- data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +13 -13
- data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +13 -13
- data/golden/streaming_basics/expected/lir_06_const_prop.txt +13 -13
- data/golden/streaming_basics/expected/nast.txt +8 -8
- data/golden/streaming_basics/expected/schema_javascript.mjs +13 -13
- data/golden/streaming_basics/expected/schema_ruby.rb +14 -14
- data/golden/streaming_basics/expected/snast.txt +1 -1
- data/golden/tuples/expected/lir_00_unoptimized.txt +5 -5
- data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +5 -5
- data/golden/tuples/expected/lir_02_inlined.txt +5 -5
- data/golden/tuples/expected/lir_03_cse.txt +5 -5
- data/golden/tuples/expected/lir_04_1_loop_fusion.txt +5 -5
- data/golden/tuples/expected/lir_04_loop_invcm.txt +5 -5
- data/golden/tuples/expected/lir_06_const_prop.txt +5 -5
- data/golden/tuples/expected/nast.txt +4 -4
- data/golden/tuples/expected/schema_ruby.rb +1 -1
- data/golden/tuples/expected/snast.txt +6 -6
- data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +1 -1
- data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +1 -1
- data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +17 -17
- data/golden/tuples_and_arrays/expected/lir_03_cse.txt +13 -13
- data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +13 -13
- data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +13 -13
- data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +13 -13
- data/golden/tuples_and_arrays/expected/nast.txt +3 -3
- data/golden/tuples_and_arrays/expected/schema_javascript.mjs +13 -13
- data/golden/tuples_and_arrays/expected/schema_ruby.rb +14 -14
- data/golden/tuples_and_arrays/expected/snast.txt +2 -2
- data/golden/us_tax_2024/expected/ast.txt +63 -670
- data/golden/us_tax_2024/expected/input_plan.txt +8 -45
- data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +253 -863
- data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +253 -863
- data/golden/us_tax_2024/expected/lir_02_inlined.txt +1215 -5139
- data/golden/us_tax_2024/expected/lir_03_cse.txt +587 -2460
- data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +632 -2480
- data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +587 -2400
- data/golden/us_tax_2024/expected/lir_06_const_prop.txt +587 -2400
- data/golden/us_tax_2024/expected/nast.txt +123 -826
- data/golden/us_tax_2024/expected/schema_javascript.mjs +127 -581
- data/golden/us_tax_2024/expected/schema_ruby.rb +135 -610
- data/golden/us_tax_2024/expected/snast.txt +155 -858
- data/golden/us_tax_2024/expected.json +120 -1
- data/golden/us_tax_2024/input.json +18 -9
- data/golden/us_tax_2024/schema.kumi +48 -178
- data/golden/with_constants/expected/lir_00_unoptimized.txt +1 -1
- data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +1 -1
- data/golden/with_constants/expected/lir_02_inlined.txt +1 -1
- data/golden/with_constants/expected/lir_03_cse.txt +1 -1
- data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +1 -1
- data/golden/with_constants/expected/lir_04_loop_invcm.txt +1 -1
- data/golden/with_constants/expected/lir_06_const_prop.txt +1 -1
- data/golden/with_constants/expected/nast.txt +2 -2
- data/golden/with_constants/expected/schema_ruby.rb +1 -1
- data/golden/with_constants/expected/snast.txt +2 -2
- data/lib/kumi/analyzer.rb +12 -12
- data/lib/kumi/core/analyzer/passes/formal_constraint_propagator.rb +236 -0
- data/lib/kumi/core/analyzer/passes/input_collector.rb +22 -4
- data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +118 -74
- data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +64 -18
- data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +9 -4
- data/lib/kumi/core/analyzer/passes/snast_pass.rb +3 -1
- data/lib/kumi/core/analyzer/passes/unsat_detector.rb +172 -198
- data/lib/kumi/core/error_reporter.rb +36 -1
- data/lib/kumi/core/errors.rb +33 -1
- data/lib/kumi/core/functions/function_spec.rb +5 -4
- data/lib/kumi/core/functions/loader.rb +17 -1
- data/lib/kumi/core/functions/overload_resolver.rb +164 -0
- data/lib/kumi/core/functions/type_error_reporter.rb +118 -0
- data/lib/kumi/core/functions/type_rules.rb +155 -35
- data/lib/kumi/core/types/inference.rb +29 -22
- data/lib/kumi/core/types/normalizer.rb +29 -45
- data/lib/kumi/core/types/validator.rb +16 -27
- data/lib/kumi/core/types/value_objects.rb +116 -0
- data/lib/kumi/core/types.rb +45 -37
- data/lib/kumi/registry_v2/loader.rb +90 -0
- data/lib/kumi/registry_v2.rb +18 -1
- data/lib/kumi/version.rb +1 -1
- metadata +21 -7
- data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +0 -59
- data/lib/kumi/core/atom_unsat_solver.rb +0 -396
- data/lib/kumi/core/constraint_relationship_solver.rb +0 -641
- data/lib/kumi/core/types/builder.rb +0 -23
- data/lib/kumi/core/types/compatibility.rb +0 -96
- data/lib/kumi/core/types/formatter.rb +0 -26
@@ -1,5 +1,5 @@
|
|
1
1
|
# Autogenerated by Kumi Codegen
|
2
|
-
module Kumi::Compiled::
|
2
|
+
module Kumi::Compiled::KUMI_e5b30cb23c39d5d7959274f41cf2d6a7e4ec0016dc7e19c0bef5c08d67ee1933
|
3
3
|
def self.from(input_data = nil)
|
4
4
|
instance = Object.new
|
5
5
|
instance.extend(self)
|
@@ -107,40 +107,40 @@ module Kumi::Compiled::KUMI_b02df7846ba29e94c8a665ca8d8aa1e248aea9154904c851bc61
|
|
107
107
|
def _department_summary(input = @input)
|
108
108
|
out = []
|
109
109
|
t47 = input["departments"] || input[:departments]
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
110
|
+
t71 = "manager"
|
111
|
+
t73 = 1
|
112
|
+
t74 = 0
|
113
|
+
t84 = "senior"
|
114
114
|
t47.each_with_index do |departments_el_48, departments_i_49|
|
115
115
|
t50 = departments_el_48["name"] || departments_el_48[:name]
|
116
116
|
acc58 = 0
|
117
117
|
t59 = departments_el_48["employees"] || departments_el_48[:employees]
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
t59.each_with_index do |
|
122
|
-
|
123
|
-
acc58 +=
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
118
|
+
acc66 = 0
|
119
|
+
acc79 = 0
|
120
|
+
acc92 = nil
|
121
|
+
t59.each_with_index do |t60, t61|
|
122
|
+
t62 = t60["salary"] || t60[:salary]
|
123
|
+
acc58 += t62
|
124
|
+
t70 = t60["role"] || t60[:role]
|
125
|
+
t72 = t70 == t71
|
126
|
+
t75 = t72 ? t73 : t74
|
127
|
+
acc66 += t75
|
128
|
+
acc92 ||= t62
|
129
|
+
acc92 = t62 if t62 > acc92
|
130
|
+
t85 = t70 == t84
|
131
|
+
t88 = t85 ? t73 : t74
|
132
|
+
acc79 += t88
|
133
133
|
end
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
134
|
+
t63 = acc58
|
135
|
+
t76 = acc66
|
136
|
+
t97 = acc92
|
137
|
+
t89 = acc79
|
138
138
|
t55 = {
|
139
139
|
"name" => t50,
|
140
|
-
"total_payroll" =>
|
141
|
-
"manager_count" =>
|
142
|
-
"senior_count" =>
|
143
|
-
"top_salary" =>
|
140
|
+
"total_payroll" => t63,
|
141
|
+
"manager_count" => t76,
|
142
|
+
"senior_count" => t89,
|
143
|
+
"top_salary" => t97
|
144
144
|
}
|
145
145
|
out << t55
|
146
146
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Autogenerated by Kumi Codegen
|
2
|
-
module Kumi::Compiled::
|
2
|
+
module Kumi::Compiled::KUMI_a2c21afb35a86d67d51bfe12d6bb29d2ef5886500b42431cad974924e3677fa3
|
3
3
|
def self.from(input_data = nil)
|
4
4
|
instance = Object.new
|
5
5
|
instance.extend(self)
|
@@ -11,7 +11,7 @@
|
|
11
11
|
(VALUE cell
|
12
12
|
(InputRef cube.layer.row.cell key_chain=[]) :: [cube, layer, row] -> integer
|
13
13
|
) :: [cube, layer, row] -> integer
|
14
|
-
(
|
14
|
+
(VALUE cell_over_limit
|
15
15
|
(Call :core.gt
|
16
16
|
(InputRef cube.layer.row.cell key_chain=[]) :: [cube, layer, row] -> integer
|
17
17
|
(Const 100) :: [] -> integer
|
@@ -19,33 +19,33 @@
|
|
19
19
|
%t19 = load_input "regions" :: array
|
20
20
|
%acc21 = decl_acc :: integer
|
21
21
|
%t22 = load_field regions_el_12["sales"] :: any
|
22
|
-
loop sales id=L4 in %t22 as el=%
|
23
|
-
%
|
24
|
-
%acc21 = acc_add agg.sum(%acc21, %
|
22
|
+
loop sales id=L4 in %t22 as el=%t23, idx=%t24
|
23
|
+
%t25 = load_field t23["amount"] :: integer
|
24
|
+
%acc21 = acc_add agg.sum(%acc21, %t25) :: integer
|
25
25
|
end_loop
|
26
|
-
%
|
27
|
-
%acc_10 = acc_add agg.sum(%acc_10, %
|
26
|
+
%t26 = acc_load %acc21 :: integer
|
27
|
+
%acc_10 = acc_add agg.sum(%acc_10, %t26) :: integer
|
28
28
|
end_loop
|
29
29
|
%t15 = acc_load %acc_10 :: integer
|
30
30
|
yield %t15
|
31
31
|
)
|
32
32
|
(Declaration adjusted_total
|
33
|
-
%
|
34
|
-
%
|
35
|
-
loop regions id=L5 in %
|
36
|
-
%
|
37
|
-
%
|
38
|
-
%
|
39
|
-
loop sales id=L6 in %
|
40
|
-
%
|
41
|
-
%
|
33
|
+
%acc28 = decl_acc :: integer
|
34
|
+
%t29 = load_input "regions" :: array
|
35
|
+
loop regions id=L5 in %t29 as el=%t30, idx=%t31
|
36
|
+
%t34 = load_input "regions" :: array
|
37
|
+
%acc36 = decl_acc :: integer
|
38
|
+
%t37 = load_field t30["sales"] :: any
|
39
|
+
loop sales id=L6 in %t37 as el=%t38, idx=%t39
|
40
|
+
%t40 = load_field t38["amount"] :: integer
|
41
|
+
%acc36 = acc_add agg.sum(%acc36, %t40) :: integer
|
42
42
|
end_loop
|
43
|
-
%
|
44
|
-
%
|
43
|
+
%t41 = acc_load %acc36 :: integer
|
44
|
+
%acc28 = acc_add agg.sum(%acc28, %t41) :: integer
|
45
45
|
end_loop
|
46
|
-
%
|
46
|
+
%t33 = acc_load %acc28 :: integer
|
47
47
|
%t17 = load_input "adjustment" :: integer
|
48
|
-
%t18 = call core.add(%
|
48
|
+
%t18 = call core.add(%t33, %t17) :: integer
|
49
49
|
yield %t18
|
50
50
|
)
|
51
51
|
)
|
@@ -18,32 +18,32 @@
|
|
18
18
|
loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
|
19
19
|
%acc21 = decl_acc :: integer
|
20
20
|
%t22 = load_field regions_el_12["sales"] :: any
|
21
|
-
loop sales id=L4 in %t22 as el=%
|
22
|
-
%
|
23
|
-
%acc21 = acc_add agg.sum(%acc21, %
|
21
|
+
loop sales id=L4 in %t22 as el=%t23, idx=%t24
|
22
|
+
%t25 = load_field t23["amount"] :: integer
|
23
|
+
%acc21 = acc_add agg.sum(%acc21, %t25) :: integer
|
24
24
|
end_loop
|
25
|
-
%
|
26
|
-
%acc_10 = acc_add agg.sum(%acc_10, %
|
25
|
+
%t26 = acc_load %acc21 :: integer
|
26
|
+
%acc_10 = acc_add agg.sum(%acc_10, %t26) :: integer
|
27
27
|
end_loop
|
28
28
|
%t15 = acc_load %acc_10 :: integer
|
29
29
|
yield %t15
|
30
30
|
)
|
31
31
|
(Declaration adjusted_total
|
32
|
-
%
|
33
|
-
%
|
34
|
-
loop regions id=L5 in %
|
35
|
-
%
|
36
|
-
%
|
37
|
-
loop sales id=L6 in %
|
38
|
-
%
|
39
|
-
%
|
32
|
+
%acc28 = decl_acc :: integer
|
33
|
+
%t29 = load_input "regions" :: array
|
34
|
+
loop regions id=L5 in %t29 as el=%t30, idx=%t31
|
35
|
+
%acc36 = decl_acc :: integer
|
36
|
+
%t37 = load_field t30["sales"] :: any
|
37
|
+
loop sales id=L6 in %t37 as el=%t38, idx=%t39
|
38
|
+
%t40 = load_field t38["amount"] :: integer
|
39
|
+
%acc36 = acc_add agg.sum(%acc36, %t40) :: integer
|
40
40
|
end_loop
|
41
|
-
%
|
42
|
-
%
|
41
|
+
%t41 = acc_load %acc36 :: integer
|
42
|
+
%acc28 = acc_add agg.sum(%acc28, %t41) :: integer
|
43
43
|
end_loop
|
44
|
-
%
|
44
|
+
%t33 = acc_load %acc28 :: integer
|
45
45
|
%t17 = load_input "adjustment" :: integer
|
46
|
-
%t18 = call core.add(%
|
46
|
+
%t18 = call core.add(%t33, %t17) :: integer
|
47
47
|
yield %t18
|
48
48
|
)
|
49
49
|
)
|
@@ -18,32 +18,32 @@
|
|
18
18
|
loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
|
19
19
|
%acc21 = decl_acc :: integer
|
20
20
|
%t22 = load_field regions_el_12["sales"] :: any
|
21
|
-
loop sales id=L4 in %t22 as el=%
|
22
|
-
%
|
23
|
-
%acc21 = acc_add agg.sum(%acc21, %
|
21
|
+
loop sales id=L4 in %t22 as el=%t23, idx=%t24
|
22
|
+
%t25 = load_field t23["amount"] :: integer
|
23
|
+
%acc21 = acc_add agg.sum(%acc21, %t25) :: integer
|
24
24
|
end_loop
|
25
|
-
%
|
26
|
-
%acc_10 = acc_add agg.sum(%acc_10, %
|
25
|
+
%t26 = acc_load %acc21 :: integer
|
26
|
+
%acc_10 = acc_add agg.sum(%acc_10, %t26) :: integer
|
27
27
|
end_loop
|
28
28
|
%t15 = acc_load %acc_10 :: integer
|
29
29
|
yield %t15
|
30
30
|
)
|
31
31
|
(Declaration adjusted_total
|
32
|
-
%
|
33
|
-
%
|
34
|
-
loop regions id=L5 in %
|
35
|
-
%
|
36
|
-
%
|
37
|
-
loop sales id=L6 in %
|
38
|
-
%
|
39
|
-
%
|
32
|
+
%acc28 = decl_acc :: integer
|
33
|
+
%t29 = load_input "regions" :: array
|
34
|
+
loop regions id=L5 in %t29 as el=%t30, idx=%t31
|
35
|
+
%acc36 = decl_acc :: integer
|
36
|
+
%t37 = load_field t30["sales"] :: any
|
37
|
+
loop sales id=L6 in %t37 as el=%t38, idx=%t39
|
38
|
+
%t40 = load_field t38["amount"] :: integer
|
39
|
+
%acc36 = acc_add agg.sum(%acc36, %t40) :: integer
|
40
40
|
end_loop
|
41
|
-
%
|
42
|
-
%
|
41
|
+
%t41 = acc_load %acc36 :: integer
|
42
|
+
%acc28 = acc_add agg.sum(%acc28, %t41) :: integer
|
43
43
|
end_loop
|
44
|
-
%
|
44
|
+
%t33 = acc_load %acc28 :: integer
|
45
45
|
%t17 = load_input "adjustment" :: integer
|
46
|
-
%t18 = call core.add(%
|
46
|
+
%t18 = call core.add(%t33, %t17) :: integer
|
47
47
|
yield %t18
|
48
48
|
)
|
49
49
|
)
|
@@ -18,32 +18,32 @@
|
|
18
18
|
loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
|
19
19
|
%acc21 = decl_acc :: integer
|
20
20
|
%t22 = load_field regions_el_12["sales"] :: any
|
21
|
-
loop sales id=L4 in %t22 as el=%
|
22
|
-
%
|
23
|
-
%acc21 = acc_add agg.sum(%acc21, %
|
21
|
+
loop sales id=L4 in %t22 as el=%t23, idx=%t24
|
22
|
+
%t25 = load_field t23["amount"] :: integer
|
23
|
+
%acc21 = acc_add agg.sum(%acc21, %t25) :: integer
|
24
24
|
end_loop
|
25
|
-
%
|
26
|
-
%acc_10 = acc_add agg.sum(%acc_10, %
|
25
|
+
%t26 = acc_load %acc21 :: integer
|
26
|
+
%acc_10 = acc_add agg.sum(%acc_10, %t26) :: integer
|
27
27
|
end_loop
|
28
28
|
%t15 = acc_load %acc_10 :: integer
|
29
29
|
yield %t15
|
30
30
|
)
|
31
31
|
(Declaration adjusted_total
|
32
|
-
%
|
33
|
-
%
|
34
|
-
loop regions id=L5 in %
|
35
|
-
%
|
36
|
-
%
|
37
|
-
loop sales id=L6 in %
|
38
|
-
%
|
39
|
-
%
|
32
|
+
%acc28 = decl_acc :: integer
|
33
|
+
%t29 = load_input "regions" :: array
|
34
|
+
loop regions id=L5 in %t29 as el=%t30, idx=%t31
|
35
|
+
%acc36 = decl_acc :: integer
|
36
|
+
%t37 = load_field t30["sales"] :: any
|
37
|
+
loop sales id=L6 in %t37 as el=%t38, idx=%t39
|
38
|
+
%t40 = load_field t38["amount"] :: integer
|
39
|
+
%acc36 = acc_add agg.sum(%acc36, %t40) :: integer
|
40
40
|
end_loop
|
41
|
-
%
|
42
|
-
%
|
41
|
+
%t41 = acc_load %acc36 :: integer
|
42
|
+
%acc28 = acc_add agg.sum(%acc28, %t41) :: integer
|
43
43
|
end_loop
|
44
|
-
%
|
44
|
+
%t33 = acc_load %acc28 :: integer
|
45
45
|
%t17 = load_input "adjustment" :: integer
|
46
|
-
%t18 = call core.add(%
|
46
|
+
%t18 = call core.add(%t33, %t17) :: integer
|
47
47
|
yield %t18
|
48
48
|
)
|
49
49
|
)
|
@@ -18,32 +18,32 @@
|
|
18
18
|
loop regions id=L3 in %t11 as el=%regions_el_12, idx=%regions_i_13
|
19
19
|
%acc21 = decl_acc :: integer
|
20
20
|
%t22 = load_field regions_el_12["sales"] :: any
|
21
|
-
loop sales id=L4 in %t22 as el=%
|
22
|
-
%
|
23
|
-
%acc21 = acc_add agg.sum(%acc21, %
|
21
|
+
loop sales id=L4 in %t22 as el=%t23, idx=%t24
|
22
|
+
%t25 = load_field t23["amount"] :: integer
|
23
|
+
%acc21 = acc_add agg.sum(%acc21, %t25) :: integer
|
24
24
|
end_loop
|
25
|
-
%
|
26
|
-
%acc_10 = acc_add agg.sum(%acc_10, %
|
25
|
+
%t26 = acc_load %acc21 :: integer
|
26
|
+
%acc_10 = acc_add agg.sum(%acc_10, %t26) :: integer
|
27
27
|
end_loop
|
28
28
|
%t15 = acc_load %acc_10 :: integer
|
29
29
|
yield %t15
|
30
30
|
)
|
31
31
|
(Declaration adjusted_total
|
32
|
-
%
|
33
|
-
%
|
34
|
-
loop regions id=L5 in %
|
35
|
-
%
|
36
|
-
%
|
37
|
-
loop sales id=L6 in %
|
38
|
-
%
|
39
|
-
%
|
32
|
+
%acc28 = decl_acc :: integer
|
33
|
+
%t29 = load_input "regions" :: array
|
34
|
+
loop regions id=L5 in %t29 as el=%t30, idx=%t31
|
35
|
+
%acc36 = decl_acc :: integer
|
36
|
+
%t37 = load_field t30["sales"] :: any
|
37
|
+
loop sales id=L6 in %t37 as el=%t38, idx=%t39
|
38
|
+
%t40 = load_field t38["amount"] :: integer
|
39
|
+
%acc36 = acc_add agg.sum(%acc36, %t40) :: integer
|
40
40
|
end_loop
|
41
|
-
%
|
42
|
-
%
|
41
|
+
%t41 = acc_load %acc36 :: integer
|
42
|
+
%acc28 = acc_add agg.sum(%acc28, %t41) :: integer
|
43
43
|
end_loop
|
44
|
-
%
|
44
|
+
%t33 = acc_load %acc28 :: integer
|
45
45
|
%t17 = load_input "adjustment" :: integer
|
46
|
-
%t18 = call core.add(%
|
46
|
+
%t18 = call core.add(%t33, %t17) :: integer
|
47
47
|
yield %t18
|
48
48
|
)
|
49
49
|
)
|
@@ -1,16 +1,16 @@
|
|
1
1
|
(NAST
|
2
2
|
(VALUE regional_sales
|
3
|
-
(Call :
|
3
|
+
(Call :sum
|
4
4
|
(InputRef [:regions, :region, :sales, :sale, :amount])
|
5
5
|
)
|
6
6
|
)
|
7
7
|
(VALUE total_sales
|
8
|
-
(Call :
|
8
|
+
(Call :sum
|
9
9
|
(Ref regional_sales)
|
10
10
|
)
|
11
11
|
)
|
12
12
|
(VALUE adjusted_total
|
13
|
-
(Call :
|
13
|
+
(Call :add
|
14
14
|
(Ref total_sales)
|
15
15
|
(InputRef [:adjustment])
|
16
16
|
)
|
@@ -19,9 +19,9 @@ export function _total_sales(input) {
|
|
19
19
|
t11.forEach((regions_el_12, regions_i_13) => {
|
20
20
|
let acc21 = 0;
|
21
21
|
let t22 = regions_el_12["sales"];
|
22
|
-
t22.forEach((
|
23
|
-
let
|
24
|
-
acc21 +=
|
22
|
+
t22.forEach((t23, t24) => {
|
23
|
+
let t25 = t23["amount"];
|
24
|
+
acc21 += t25;
|
25
25
|
});
|
26
26
|
acc_10 += acc21;
|
27
27
|
});
|
@@ -29,19 +29,19 @@ export function _total_sales(input) {
|
|
29
29
|
}
|
30
30
|
|
31
31
|
export function _adjusted_total(input) {
|
32
|
-
let
|
33
|
-
let
|
34
|
-
|
35
|
-
let
|
36
|
-
let
|
37
|
-
|
38
|
-
let
|
39
|
-
|
32
|
+
let acc28 = 0;
|
33
|
+
let t29 = input["regions"];
|
34
|
+
t29.forEach((t30, t31) => {
|
35
|
+
let acc36 = 0;
|
36
|
+
let t37 = t30["sales"];
|
37
|
+
t37.forEach((t38, t39) => {
|
38
|
+
let t40 = t38["amount"];
|
39
|
+
acc36 += t40;
|
40
40
|
});
|
41
|
-
|
41
|
+
acc28 += acc36;
|
42
42
|
});
|
43
43
|
let t17 = input["adjustment"];
|
44
|
-
let t18 =
|
44
|
+
let t18 = acc28 + t17;
|
45
45
|
return t18;
|
46
46
|
}
|
47
47
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
# Autogenerated by Kumi Codegen
|
2
|
-
module Kumi::Compiled::
|
2
|
+
module Kumi::Compiled::KUMI_ad6e7ee5524d611f2ec03728b7e9f8c097e1308dbaf49da390610067b59c4145
|
3
3
|
def self.from(input_data = nil)
|
4
4
|
instance = Object.new
|
5
5
|
instance.extend(self)
|
@@ -49,31 +49,31 @@ module Kumi::Compiled::KUMI_f5ff83c5472452825724e8d6146d84050de84e9c1f3ece855cde
|
|
49
49
|
t11.each_with_index do |regions_el_12, regions_i_13|
|
50
50
|
acc21 = 0
|
51
51
|
t22 = regions_el_12["sales"] || regions_el_12[:sales]
|
52
|
-
t22.each_with_index do |
|
53
|
-
|
54
|
-
acc21 +=
|
52
|
+
t22.each_with_index do |t23, t24|
|
53
|
+
t25 = t23["amount"] || t23[:amount]
|
54
|
+
acc21 += t25
|
55
55
|
end
|
56
|
-
|
57
|
-
acc_10 +=
|
56
|
+
t26 = acc21
|
57
|
+
acc_10 += t26
|
58
58
|
end
|
59
59
|
acc_10
|
60
60
|
end
|
61
61
|
|
62
62
|
def _adjusted_total(input = @input)
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
63
|
+
acc28 = 0
|
64
|
+
t29 = input["regions"] || input[:regions]
|
65
|
+
t29.each_with_index do |t30, t31|
|
66
|
+
acc36 = 0
|
67
|
+
t37 = t30["sales"] || t30[:sales]
|
68
|
+
t37.each_with_index do |t38, t39|
|
69
|
+
t40 = t38["amount"] || t38[:amount]
|
70
|
+
acc36 += t40
|
71
71
|
end
|
72
|
-
|
73
|
-
|
72
|
+
t41 = acc36
|
73
|
+
acc28 += t41
|
74
74
|
end
|
75
|
-
|
75
|
+
t33 = acc28
|
76
76
|
t17 = input["adjustment"] || input[:adjustment]
|
77
|
-
|
77
|
+
t33 + t17
|
78
78
|
end
|
79
79
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
(Root
|
2
|
+
inputs: [
|
3
|
+
(InputDeclaration :name :string)
|
4
|
+
(InputDeclaration :items :array
|
5
|
+
[
|
6
|
+
(InputDeclaration :value :integer)
|
7
|
+
]
|
8
|
+
)
|
9
|
+
]
|
10
|
+
values: [
|
11
|
+
(ValueDeclaration :name_len
|
12
|
+
(CallExpression :size
|
13
|
+
(InputReference :name)
|
14
|
+
)
|
15
|
+
)
|
16
|
+
(ValueDeclaration :items_count
|
17
|
+
(CallExpression :size
|
18
|
+
(InputReference :items)
|
19
|
+
)
|
20
|
+
)
|
21
|
+
(ValueDeclaration :summary
|
22
|
+
(HashExpression
|
23
|
+
((Literal :name_length) (DeclarationReference :name_len))
|
24
|
+
((Literal :item_count) (DeclarationReference :items_count))
|
25
|
+
)
|
26
|
+
)
|
27
|
+
]
|
28
|
+
traits: []
|
29
|
+
)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration name_len
|
3
|
+
%t1 = load_input "name" :: string
|
4
|
+
%t2 = call core.length(%t1) :: integer
|
5
|
+
yield %t2
|
6
|
+
)
|
7
|
+
(Declaration items_count
|
8
|
+
%t3 = load_input "items" :: array
|
9
|
+
%t4 = call core.array_size(%t3) :: integer
|
10
|
+
yield %t4
|
11
|
+
)
|
12
|
+
(Declaration summary
|
13
|
+
%t5 = load_decl name_len :: integer
|
14
|
+
%t6 = load_decl items_count :: integer
|
15
|
+
%t7 = make_object{name_length: %t5, item_count: %t6} :: object
|
16
|
+
yield %t7
|
17
|
+
)
|
18
|
+
)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration name_len
|
3
|
+
%t1 = load_input "name" :: string
|
4
|
+
%t2 = call core.length(%t1) :: integer
|
5
|
+
yield %t2
|
6
|
+
)
|
7
|
+
(Declaration items_count
|
8
|
+
%t3 = load_input "items" :: array
|
9
|
+
%t4 = call core.array_size(%t3) :: integer
|
10
|
+
yield %t4
|
11
|
+
)
|
12
|
+
(Declaration summary
|
13
|
+
%t5 = load_decl name_len :: integer
|
14
|
+
%t6 = load_decl items_count :: integer
|
15
|
+
%t7 = make_object{name_length: %t5, item_count: %t6} :: object
|
16
|
+
yield %t7
|
17
|
+
)
|
18
|
+
)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration name_len
|
3
|
+
%t1 = load_input "name" :: string
|
4
|
+
%t2 = call core.length(%t1) :: integer
|
5
|
+
yield %t2
|
6
|
+
)
|
7
|
+
(Declaration items_count
|
8
|
+
%t3 = load_input "items" :: array
|
9
|
+
%t4 = call core.array_size(%t3) :: integer
|
10
|
+
yield %t4
|
11
|
+
)
|
12
|
+
(Declaration summary
|
13
|
+
%t8 = load_input "name" :: string
|
14
|
+
%t9 = call core.length(%t8) :: integer
|
15
|
+
%t10 = load_input "items" :: array
|
16
|
+
%t11 = call core.array_size(%t10) :: integer
|
17
|
+
%t7 = make_object{name_length: %t9, item_count: %t11} :: object
|
18
|
+
yield %t7
|
19
|
+
)
|
20
|
+
)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration name_len
|
3
|
+
%t1 = load_input "name" :: string
|
4
|
+
%t2 = call core.length(%t1) :: integer
|
5
|
+
yield %t2
|
6
|
+
)
|
7
|
+
(Declaration items_count
|
8
|
+
%t3 = load_input "items" :: array
|
9
|
+
%t4 = call core.array_size(%t3) :: integer
|
10
|
+
yield %t4
|
11
|
+
)
|
12
|
+
(Declaration summary
|
13
|
+
%t8 = load_input "name" :: string
|
14
|
+
%t9 = call core.length(%t8) :: integer
|
15
|
+
%t10 = load_input "items" :: array
|
16
|
+
%t11 = call core.array_size(%t10) :: integer
|
17
|
+
%t7 = make_object{name_length: %t9, item_count: %t11} :: object
|
18
|
+
yield %t7
|
19
|
+
)
|
20
|
+
)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration name_len
|
3
|
+
%t1 = load_input "name" :: string
|
4
|
+
%t2 = call core.length(%t1) :: integer
|
5
|
+
yield %t2
|
6
|
+
)
|
7
|
+
(Declaration items_count
|
8
|
+
%t3 = load_input "items" :: array
|
9
|
+
%t4 = call core.array_size(%t3) :: integer
|
10
|
+
yield %t4
|
11
|
+
)
|
12
|
+
(Declaration summary
|
13
|
+
%t8 = load_input "name" :: string
|
14
|
+
%t9 = call core.length(%t8) :: integer
|
15
|
+
%t10 = load_input "items" :: array
|
16
|
+
%t11 = call core.array_size(%t10) :: integer
|
17
|
+
%t7 = make_object{name_length: %t9, item_count: %t11} :: object
|
18
|
+
yield %t7
|
19
|
+
)
|
20
|
+
)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
(LIR
|
2
|
+
(Declaration name_len
|
3
|
+
%t1 = load_input "name" :: string
|
4
|
+
%t2 = call core.length(%t1) :: integer
|
5
|
+
yield %t2
|
6
|
+
)
|
7
|
+
(Declaration items_count
|
8
|
+
%t3 = load_input "items" :: array
|
9
|
+
%t4 = call core.array_size(%t3) :: integer
|
10
|
+
yield %t4
|
11
|
+
)
|
12
|
+
(Declaration summary
|
13
|
+
%t8 = load_input "name" :: string
|
14
|
+
%t9 = call core.length(%t8) :: integer
|
15
|
+
%t10 = load_input "items" :: array
|
16
|
+
%t11 = call core.array_size(%t10) :: integer
|
17
|
+
%t7 = make_object{name_length: %t9, item_count: %t11} :: object
|
18
|
+
yield %t7
|
19
|
+
)
|
20
|
+
)
|