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.
Files changed (234) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/README.md +70 -71
  4. data/data/functions/agg/boolean.yaml +6 -2
  5. data/data/functions/agg/numeric.yaml +32 -16
  6. data/data/functions/agg/string.yaml +4 -3
  7. data/data/functions/core/arithmetic.yaml +62 -14
  8. data/data/functions/core/boolean.yaml +12 -6
  9. data/data/functions/core/comparison.yaml +25 -13
  10. data/data/functions/core/constructor.yaml +16 -8
  11. data/data/functions/core/select.yaml +3 -1
  12. data/data/functions/core/stencil.yaml +14 -5
  13. data/data/functions/core/string.yaml +9 -4
  14. data/data/kernels/ruby/agg/numeric.yaml +1 -1
  15. data/docs/UNSAT_DETECTION.md +83 -0
  16. data/golden/array_element/expected/nast.txt +1 -1
  17. data/golden/array_element/expected/schema_ruby.rb +1 -1
  18. data/golden/array_index/expected/nast.txt +7 -7
  19. data/golden/array_index/expected/schema_ruby.rb +1 -1
  20. data/golden/array_operations/expected/nast.txt +2 -2
  21. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  22. data/golden/array_operations/expected/snast.txt +3 -3
  23. data/golden/cascade_logic/expected/lir_02_inlined.txt +8 -8
  24. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  25. data/golden/cascade_logic/expected/snast.txt +2 -2
  26. data/golden/chained_fusion/expected/lir_02_inlined.txt +36 -36
  27. data/golden/chained_fusion/expected/lir_03_cse.txt +23 -23
  28. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +25 -25
  29. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +23 -23
  30. data/golden/chained_fusion/expected/lir_06_const_prop.txt +23 -23
  31. data/golden/chained_fusion/expected/nast.txt +2 -2
  32. data/golden/chained_fusion/expected/schema_javascript.mjs +23 -23
  33. data/golden/chained_fusion/expected/schema_ruby.rb +28 -28
  34. data/golden/element_arrays/expected/nast.txt +2 -2
  35. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  36. data/golden/element_arrays/expected/snast.txt +1 -1
  37. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +18 -18
  38. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +17 -17
  39. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +17 -17
  40. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +17 -17
  41. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +17 -17
  42. data/golden/empty_and_null_inputs/expected/nast.txt +3 -3
  43. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +13 -13
  44. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +18 -18
  45. data/golden/function_overload/expected/ast.txt +29 -0
  46. data/golden/function_overload/expected/input_plan.txt +4 -0
  47. data/golden/function_overload/expected/lir_00_unoptimized.txt +18 -0
  48. data/golden/function_overload/expected/lir_01_hoist_scalar_references.txt +18 -0
  49. data/golden/function_overload/expected/lir_02_inlined.txt +20 -0
  50. data/golden/function_overload/expected/lir_03_cse.txt +20 -0
  51. data/golden/function_overload/expected/lir_04_1_loop_fusion.txt +20 -0
  52. data/golden/function_overload/expected/lir_04_loop_invcm.txt +20 -0
  53. data/golden/function_overload/expected/lir_06_const_prop.txt +20 -0
  54. data/golden/function_overload/expected/nast.txt +22 -0
  55. data/golden/function_overload/expected/schema_javascript.mjs +12 -0
  56. data/golden/function_overload/expected/schema_ruby.rb +39 -0
  57. data/golden/function_overload/expected/snast.txt +22 -0
  58. data/golden/function_overload/input.json +8 -0
  59. data/golden/function_overload/schema.kumi +19 -0
  60. data/golden/game_of_life/expected/lir_00_unoptimized.txt +4 -4
  61. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +4 -4
  62. data/golden/game_of_life/expected/lir_02_inlined.txt +1294 -1294
  63. data/golden/game_of_life/expected/lir_03_cse.txt +403 -399
  64. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +403 -399
  65. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +403 -399
  66. data/golden/game_of_life/expected/lir_06_const_prop.txt +403 -399
  67. data/golden/game_of_life/expected/nast.txt +4 -4
  68. data/golden/game_of_life/expected/schema_javascript.mjs +87 -85
  69. data/golden/game_of_life/expected/schema_ruby.rb +88 -86
  70. data/golden/game_of_life/expected/snast.txt +10 -10
  71. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  72. data/golden/hash_value/expected/nast.txt +1 -1
  73. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  74. data/golden/hash_value/expected/snast.txt +1 -1
  75. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +15 -15
  76. data/golden/hierarchical_complex/expected/lir_03_cse.txt +1 -1
  77. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +1 -1
  78. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +1 -1
  79. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +1 -1
  80. data/golden/hierarchical_complex/expected/nast.txt +3 -3
  81. data/golden/hierarchical_complex/expected/schema_javascript.mjs +1 -1
  82. data/golden/hierarchical_complex/expected/schema_ruby.rb +2 -2
  83. data/golden/hierarchical_complex/expected/snast.txt +3 -3
  84. data/golden/inline_rename_scope_leak/expected/nast.txt +3 -3
  85. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +1 -1
  86. data/golden/input_reference/expected/nast.txt +2 -2
  87. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  88. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +35 -35
  89. data/golden/interleaved_fusion/expected/lir_03_cse.txt +26 -26
  90. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +27 -26
  91. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +26 -26
  92. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +26 -26
  93. data/golden/interleaved_fusion/expected/nast.txt +2 -2
  94. data/golden/interleaved_fusion/expected/schema_javascript.mjs +23 -23
  95. data/golden/interleaved_fusion/expected/schema_ruby.rb +29 -29
  96. data/golden/let_inline/expected/nast.txt +4 -4
  97. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  98. data/golden/loop_fusion/expected/lir_02_inlined.txt +17 -17
  99. data/golden/loop_fusion/expected/lir_03_cse.txt +14 -14
  100. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +14 -14
  101. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +14 -14
  102. data/golden/loop_fusion/expected/lir_06_const_prop.txt +14 -14
  103. data/golden/loop_fusion/expected/nast.txt +1 -1
  104. data/golden/loop_fusion/expected/schema_javascript.mjs +12 -12
  105. data/golden/loop_fusion/expected/schema_ruby.rb +16 -16
  106. data/golden/min_reduce_scope/expected/nast.txt +3 -3
  107. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  108. data/golden/min_reduce_scope/expected/snast.txt +1 -1
  109. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +5 -5
  110. data/golden/mixed_dimensions/expected/lir_03_cse.txt +5 -5
  111. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +5 -5
  112. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +5 -5
  113. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +5 -5
  114. data/golden/mixed_dimensions/expected/nast.txt +2 -2
  115. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -3
  116. data/golden/mixed_dimensions/expected/schema_ruby.rb +6 -6
  117. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +48 -48
  118. data/golden/multirank_hoisting/expected/lir_03_cse.txt +35 -35
  119. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +35 -35
  120. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +35 -35
  121. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +35 -35
  122. data/golden/multirank_hoisting/expected/nast.txt +7 -7
  123. data/golden/multirank_hoisting/expected/schema_javascript.mjs +34 -34
  124. data/golden/multirank_hoisting/expected/schema_ruby.rb +36 -36
  125. data/golden/nested_hash/expected/nast.txt +1 -1
  126. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  127. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +30 -30
  128. data/golden/reduction_broadcast/expected/lir_03_cse.txt +22 -22
  129. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +22 -22
  130. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +22 -22
  131. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +22 -22
  132. data/golden/reduction_broadcast/expected/nast.txt +3 -3
  133. data/golden/reduction_broadcast/expected/schema_javascript.mjs +18 -18
  134. data/golden/reduction_broadcast/expected/schema_ruby.rb +23 -23
  135. data/golden/reduction_broadcast/expected/snast.txt +1 -1
  136. data/golden/roll/expected/schema_ruby.rb +1 -1
  137. data/golden/shift/expected/schema_ruby.rb +1 -1
  138. data/golden/shift_2d/expected/schema_ruby.rb +1 -1
  139. data/golden/simple_math/expected/lir_00_unoptimized.txt +1 -1
  140. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +1 -1
  141. data/golden/simple_math/expected/lir_02_inlined.txt +1 -1
  142. data/golden/simple_math/expected/lir_03_cse.txt +1 -1
  143. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +1 -1
  144. data/golden/simple_math/expected/lir_04_loop_invcm.txt +1 -1
  145. data/golden/simple_math/expected/lir_06_const_prop.txt +1 -1
  146. data/golden/simple_math/expected/nast.txt +5 -5
  147. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  148. data/golden/simple_math/expected/snast.txt +2 -2
  149. data/golden/streaming_basics/expected/lir_02_inlined.txt +25 -25
  150. data/golden/streaming_basics/expected/lir_03_cse.txt +13 -13
  151. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +13 -13
  152. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +13 -13
  153. data/golden/streaming_basics/expected/lir_06_const_prop.txt +13 -13
  154. data/golden/streaming_basics/expected/nast.txt +8 -8
  155. data/golden/streaming_basics/expected/schema_javascript.mjs +13 -13
  156. data/golden/streaming_basics/expected/schema_ruby.rb +14 -14
  157. data/golden/streaming_basics/expected/snast.txt +1 -1
  158. data/golden/tuples/expected/lir_00_unoptimized.txt +5 -5
  159. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +5 -5
  160. data/golden/tuples/expected/lir_02_inlined.txt +5 -5
  161. data/golden/tuples/expected/lir_03_cse.txt +5 -5
  162. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +5 -5
  163. data/golden/tuples/expected/lir_04_loop_invcm.txt +5 -5
  164. data/golden/tuples/expected/lir_06_const_prop.txt +5 -5
  165. data/golden/tuples/expected/nast.txt +4 -4
  166. data/golden/tuples/expected/schema_ruby.rb +1 -1
  167. data/golden/tuples/expected/snast.txt +6 -6
  168. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +1 -1
  169. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +1 -1
  170. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +17 -17
  171. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +13 -13
  172. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +13 -13
  173. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +13 -13
  174. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +13 -13
  175. data/golden/tuples_and_arrays/expected/nast.txt +3 -3
  176. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +13 -13
  177. data/golden/tuples_and_arrays/expected/schema_ruby.rb +14 -14
  178. data/golden/tuples_and_arrays/expected/snast.txt +2 -2
  179. data/golden/us_tax_2024/expected/ast.txt +63 -670
  180. data/golden/us_tax_2024/expected/input_plan.txt +8 -45
  181. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +253 -863
  182. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +253 -863
  183. data/golden/us_tax_2024/expected/lir_02_inlined.txt +1215 -5139
  184. data/golden/us_tax_2024/expected/lir_03_cse.txt +587 -2460
  185. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +632 -2480
  186. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +587 -2400
  187. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +587 -2400
  188. data/golden/us_tax_2024/expected/nast.txt +123 -826
  189. data/golden/us_tax_2024/expected/schema_javascript.mjs +127 -581
  190. data/golden/us_tax_2024/expected/schema_ruby.rb +135 -610
  191. data/golden/us_tax_2024/expected/snast.txt +155 -858
  192. data/golden/us_tax_2024/expected.json +120 -1
  193. data/golden/us_tax_2024/input.json +18 -9
  194. data/golden/us_tax_2024/schema.kumi +48 -178
  195. data/golden/with_constants/expected/lir_00_unoptimized.txt +1 -1
  196. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +1 -1
  197. data/golden/with_constants/expected/lir_02_inlined.txt +1 -1
  198. data/golden/with_constants/expected/lir_03_cse.txt +1 -1
  199. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +1 -1
  200. data/golden/with_constants/expected/lir_04_loop_invcm.txt +1 -1
  201. data/golden/with_constants/expected/lir_06_const_prop.txt +1 -1
  202. data/golden/with_constants/expected/nast.txt +2 -2
  203. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  204. data/golden/with_constants/expected/snast.txt +2 -2
  205. data/lib/kumi/analyzer.rb +12 -12
  206. data/lib/kumi/core/analyzer/passes/formal_constraint_propagator.rb +236 -0
  207. data/lib/kumi/core/analyzer/passes/input_collector.rb +22 -4
  208. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +118 -74
  209. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +64 -18
  210. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +9 -4
  211. data/lib/kumi/core/analyzer/passes/snast_pass.rb +3 -1
  212. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +172 -198
  213. data/lib/kumi/core/error_reporter.rb +36 -1
  214. data/lib/kumi/core/errors.rb +33 -1
  215. data/lib/kumi/core/functions/function_spec.rb +5 -4
  216. data/lib/kumi/core/functions/loader.rb +17 -1
  217. data/lib/kumi/core/functions/overload_resolver.rb +164 -0
  218. data/lib/kumi/core/functions/type_error_reporter.rb +118 -0
  219. data/lib/kumi/core/functions/type_rules.rb +155 -35
  220. data/lib/kumi/core/types/inference.rb +29 -22
  221. data/lib/kumi/core/types/normalizer.rb +29 -45
  222. data/lib/kumi/core/types/validator.rb +16 -27
  223. data/lib/kumi/core/types/value_objects.rb +116 -0
  224. data/lib/kumi/core/types.rb +45 -37
  225. data/lib/kumi/registry_v2/loader.rb +90 -0
  226. data/lib/kumi/registry_v2.rb +18 -1
  227. data/lib/kumi/version.rb +1 -1
  228. metadata +21 -7
  229. data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +0 -59
  230. data/lib/kumi/core/atom_unsat_solver.rb +0 -396
  231. data/lib/kumi/core/constraint_relationship_solver.rb +0 -641
  232. data/lib/kumi/core/types/builder.rb +0 -23
  233. data/lib/kumi/core/types/compatibility.rb +0 -96
  234. data/lib/kumi/core/types/formatter.rb +0 -26
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_b02df7846ba29e94c8a665ca8d8aa1e248aea9154904c851bc619ecc87526657
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
- t67 = "manager"
111
- t69 = 1
112
- t70 = 0
113
- t78 = "senior"
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
- acc64 = 0
119
- acc75 = 0
120
- acc86 = nil
121
- t59.each_with_index do |employees_el_6, employees_i_7|
122
- t60 = employees_el_6["salary"] || employees_el_6[:salary]
123
- acc58 += t60
124
- t66 = employees_el_6["role"] || employees_el_6[:role]
125
- t68 = t66 == t67
126
- t71 = t68 ? t69 : t70
127
- acc64 += t71
128
- acc86 ||= t60
129
- acc86 = t60 if t60 > acc86
130
- t79 = t66 == t78
131
- t82 = t79 ? t69 : t70
132
- acc75 += t82
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
- t61 = acc58
135
- t72 = acc64
136
- t89 = acc86
137
- t83 = acc75
134
+ t63 = acc58
135
+ t76 = acc66
136
+ t97 = acc92
137
+ t89 = acc79
138
138
  t55 = {
139
139
  "name" => t50,
140
- "total_payroll" => t61,
141
- "manager_count" => t72,
142
- "senior_count" => t83,
143
- "top_salary" => t89
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
@@ -27,8 +27,8 @@
27
27
  )
28
28
  )
29
29
  (VALUE count_over_limit
30
- (Call :"agg.sum"
31
- (Call :"agg.sum"
30
+ (Call :sum
31
+ (Call :sum
32
32
  (Call :sum
33
33
  (Call :__select__
34
34
  (Ref cell_over_limit)
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_cd218374a442352129564ba66fdc114d3f395c40c049f8f0253da3c7bd20c5ef
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
- (TRAIT cell_over_limit
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=%sales_el_6, idx=%sales_i_7
23
- %t23 = load_field sales_el_6["amount"] :: integer
24
- %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
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
- %t24 = acc_load %acc21 :: integer
27
- %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
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
- %acc26 = decl_acc :: integer
34
- %t27 = load_input "regions" :: array
35
- loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
36
- %t30 = load_input "regions" :: array
37
- %acc32 = decl_acc :: integer
38
- %t33 = load_field regions_el_12["sales"] :: any
39
- loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
40
- %t34 = load_field sales_el_6["amount"] :: integer
41
- %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
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
- %t35 = acc_load %acc32 :: integer
44
- %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
43
+ %t41 = acc_load %acc36 :: integer
44
+ %acc28 = acc_add agg.sum(%acc28, %t41) :: integer
45
45
  end_loop
46
- %t29 = acc_load %acc26 :: integer
46
+ %t33 = acc_load %acc28 :: integer
47
47
  %t17 = load_input "adjustment" :: integer
48
- %t18 = call core.add(%t29, %t17) :: integer
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=%sales_el_6, idx=%sales_i_7
22
- %t23 = load_field sales_el_6["amount"] :: integer
23
- %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
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
- %t24 = acc_load %acc21 :: integer
26
- %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
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
- %acc26 = decl_acc :: integer
33
- %t27 = load_input "regions" :: array
34
- loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
35
- %acc32 = decl_acc :: integer
36
- %t33 = load_field regions_el_12["sales"] :: any
37
- loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
38
- %t34 = load_field sales_el_6["amount"] :: integer
39
- %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
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
- %t35 = acc_load %acc32 :: integer
42
- %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
41
+ %t41 = acc_load %acc36 :: integer
42
+ %acc28 = acc_add agg.sum(%acc28, %t41) :: integer
43
43
  end_loop
44
- %t29 = acc_load %acc26 :: integer
44
+ %t33 = acc_load %acc28 :: integer
45
45
  %t17 = load_input "adjustment" :: integer
46
- %t18 = call core.add(%t29, %t17) :: integer
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=%sales_el_6, idx=%sales_i_7
22
- %t23 = load_field sales_el_6["amount"] :: integer
23
- %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
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
- %t24 = acc_load %acc21 :: integer
26
- %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
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
- %acc26 = decl_acc :: integer
33
- %t27 = load_input "regions" :: array
34
- loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
35
- %acc32 = decl_acc :: integer
36
- %t33 = load_field regions_el_12["sales"] :: any
37
- loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
38
- %t34 = load_field sales_el_6["amount"] :: integer
39
- %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
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
- %t35 = acc_load %acc32 :: integer
42
- %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
41
+ %t41 = acc_load %acc36 :: integer
42
+ %acc28 = acc_add agg.sum(%acc28, %t41) :: integer
43
43
  end_loop
44
- %t29 = acc_load %acc26 :: integer
44
+ %t33 = acc_load %acc28 :: integer
45
45
  %t17 = load_input "adjustment" :: integer
46
- %t18 = call core.add(%t29, %t17) :: integer
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=%sales_el_6, idx=%sales_i_7
22
- %t23 = load_field sales_el_6["amount"] :: integer
23
- %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
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
- %t24 = acc_load %acc21 :: integer
26
- %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
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
- %acc26 = decl_acc :: integer
33
- %t27 = load_input "regions" :: array
34
- loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
35
- %acc32 = decl_acc :: integer
36
- %t33 = load_field regions_el_12["sales"] :: any
37
- loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
38
- %t34 = load_field sales_el_6["amount"] :: integer
39
- %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
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
- %t35 = acc_load %acc32 :: integer
42
- %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
41
+ %t41 = acc_load %acc36 :: integer
42
+ %acc28 = acc_add agg.sum(%acc28, %t41) :: integer
43
43
  end_loop
44
- %t29 = acc_load %acc26 :: integer
44
+ %t33 = acc_load %acc28 :: integer
45
45
  %t17 = load_input "adjustment" :: integer
46
- %t18 = call core.add(%t29, %t17) :: integer
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=%sales_el_6, idx=%sales_i_7
22
- %t23 = load_field sales_el_6["amount"] :: integer
23
- %acc21 = acc_add agg.sum(%acc21, %t23) :: integer
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
- %t24 = acc_load %acc21 :: integer
26
- %acc_10 = acc_add agg.sum(%acc_10, %t24) :: integer
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
- %acc26 = decl_acc :: integer
33
- %t27 = load_input "regions" :: array
34
- loop regions id=L5 in %t27 as el=%regions_el_12, idx=%regions_i_13
35
- %acc32 = decl_acc :: integer
36
- %t33 = load_field regions_el_12["sales"] :: any
37
- loop sales id=L6 in %t33 as el=%sales_el_6, idx=%sales_i_7
38
- %t34 = load_field sales_el_6["amount"] :: integer
39
- %acc32 = acc_add agg.sum(%acc32, %t34) :: integer
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
- %t35 = acc_load %acc32 :: integer
42
- %acc26 = acc_add agg.sum(%acc26, %t35) :: integer
41
+ %t41 = acc_load %acc36 :: integer
42
+ %acc28 = acc_add agg.sum(%acc28, %t41) :: integer
43
43
  end_loop
44
- %t29 = acc_load %acc26 :: integer
44
+ %t33 = acc_load %acc28 :: integer
45
45
  %t17 = load_input "adjustment" :: integer
46
- %t18 = call core.add(%t29, %t17) :: integer
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 :"agg.sum"
3
+ (Call :sum
4
4
  (InputRef [:regions, :region, :sales, :sale, :amount])
5
5
  )
6
6
  )
7
7
  (VALUE total_sales
8
- (Call :"agg.sum"
8
+ (Call :sum
9
9
  (Ref regional_sales)
10
10
  )
11
11
  )
12
12
  (VALUE adjusted_total
13
- (Call :"core.add"
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((sales_el_6, sales_i_7) => {
23
- let t23 = sales_el_6["amount"];
24
- acc21 += t23;
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 acc26 = 0;
33
- let t27 = input["regions"];
34
- t27.forEach((regions_el_12, regions_i_13) => {
35
- let acc32 = 0;
36
- let t33 = regions_el_12["sales"];
37
- t33.forEach((sales_el_6, sales_i_7) => {
38
- let t34 = sales_el_6["amount"];
39
- acc32 += t34;
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
- acc26 += acc32;
41
+ acc28 += acc36;
42
42
  });
43
43
  let t17 = input["adjustment"];
44
- let t18 = acc26 + t17;
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::KUMI_f5ff83c5472452825724e8d6146d84050de84e9c1f3ece855cde1d1599126d71
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 |sales_el_6, sales_i_7|
53
- t23 = sales_el_6["amount"] || sales_el_6[:amount]
54
- acc21 += t23
52
+ t22.each_with_index do |t23, t24|
53
+ t25 = t23["amount"] || t23[:amount]
54
+ acc21 += t25
55
55
  end
56
- t24 = acc21
57
- acc_10 += t24
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
- acc26 = 0
64
- t27 = input["regions"] || input[:regions]
65
- t27.each_with_index do |regions_el_12, regions_i_13|
66
- acc32 = 0
67
- t33 = regions_el_12["sales"] || regions_el_12[:sales]
68
- t33.each_with_index do |sales_el_6, sales_i_7|
69
- t34 = sales_el_6["amount"] || sales_el_6[:amount]
70
- acc32 += t34
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
- t35 = acc32
73
- acc26 += t35
72
+ t41 = acc36
73
+ acc28 += t41
74
74
  end
75
- t29 = acc26
75
+ t33 = acc28
76
76
  t17 = input["adjustment"] || input[:adjustment]
77
- t29 + t17
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,4 @@
1
+ name: string
2
+ items: array (array) access_mode=element
3
+ └─> value: element_access
4
+ value: integer
@@ -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
+ )