kumi 0.0.23 → 0.0.25

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 (166) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +2 -2
  4. data/golden/array_element/expected/schema_ruby.rb +1 -1
  5. data/golden/array_index/expected/schema_ruby.rb +1 -1
  6. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  7. data/golden/cascade_logic/expected/lir_02_inlined.txt +8 -8
  8. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  9. data/golden/chained_fusion/expected/lir_02_inlined.txt +36 -36
  10. data/golden/chained_fusion/expected/lir_03_cse.txt +23 -23
  11. data/golden/chained_fusion/expected/lir_04_1_loop_fusion.txt +25 -25
  12. data/golden/chained_fusion/expected/lir_04_loop_invcm.txt +23 -23
  13. data/golden/chained_fusion/expected/lir_06_const_prop.txt +23 -23
  14. data/golden/chained_fusion/expected/schema_javascript.mjs +23 -23
  15. data/golden/chained_fusion/expected/schema_ruby.rb +28 -28
  16. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  17. data/golden/empty_and_null_inputs/expected/lir_02_inlined.txt +18 -18
  18. data/golden/empty_and_null_inputs/expected/lir_03_cse.txt +17 -17
  19. data/golden/empty_and_null_inputs/expected/lir_04_1_loop_fusion.txt +17 -17
  20. data/golden/empty_and_null_inputs/expected/lir_04_loop_invcm.txt +17 -17
  21. data/golden/empty_and_null_inputs/expected/lir_06_const_prop.txt +17 -17
  22. data/golden/empty_and_null_inputs/expected/schema_javascript.mjs +13 -13
  23. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +18 -18
  24. data/golden/game_of_life/expected/lir_00_unoptimized.txt +33 -33
  25. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +33 -33
  26. data/golden/game_of_life/expected/lir_02_inlined.txt +1370 -1370
  27. data/golden/game_of_life/expected/lir_03_cse.txt +448 -448
  28. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +448 -448
  29. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +448 -448
  30. data/golden/game_of_life/expected/lir_06_const_prop.txt +448 -448
  31. data/golden/game_of_life/expected/schema_javascript.mjs +85 -85
  32. data/golden/game_of_life/expected/schema_ruby.rb +86 -86
  33. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  34. data/golden/hash_keys/schema.kumi +4 -5
  35. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  36. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +15 -15
  37. data/golden/hierarchical_complex/expected/lir_03_cse.txt +1 -1
  38. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +1 -1
  39. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +1 -1
  40. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +1 -1
  41. data/golden/hierarchical_complex/expected/schema_javascript.mjs +1 -1
  42. data/golden/hierarchical_complex/expected/schema_ruby.rb +2 -2
  43. data/golden/inline_rename_scope_leak/expected/ast.txt +48 -0
  44. data/golden/inline_rename_scope_leak/expected/input_plan.txt +10 -0
  45. data/golden/inline_rename_scope_leak/expected/lir_00_unoptimized.txt +35 -0
  46. data/golden/inline_rename_scope_leak/expected/lir_01_hoist_scalar_references.txt +35 -0
  47. data/golden/inline_rename_scope_leak/expected/lir_02_inlined.txt +49 -0
  48. data/golden/inline_rename_scope_leak/expected/lir_03_cse.txt +49 -0
  49. data/golden/inline_rename_scope_leak/expected/lir_04_1_loop_fusion.txt +49 -0
  50. data/golden/inline_rename_scope_leak/expected/lir_04_loop_invcm.txt +49 -0
  51. data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +49 -0
  52. data/golden/inline_rename_scope_leak/expected/nast.txt +31 -0
  53. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +51 -0
  54. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +82 -0
  55. data/golden/inline_rename_scope_leak/expected/snast.txt +31 -0
  56. data/golden/inline_rename_scope_leak/expected.json +7 -0
  57. data/golden/inline_rename_scope_leak/input.json +4 -0
  58. data/golden/inline_rename_scope_leak/schema.kumi +24 -0
  59. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  60. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +35 -35
  61. data/golden/interleaved_fusion/expected/lir_03_cse.txt +26 -26
  62. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +27 -26
  63. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +26 -26
  64. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +26 -26
  65. data/golden/interleaved_fusion/expected/schema_javascript.mjs +23 -23
  66. data/golden/interleaved_fusion/expected/schema_ruby.rb +29 -29
  67. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  68. data/golden/loop_fusion/expected/lir_02_inlined.txt +17 -17
  69. data/golden/loop_fusion/expected/lir_03_cse.txt +14 -14
  70. data/golden/loop_fusion/expected/lir_04_1_loop_fusion.txt +14 -14
  71. data/golden/loop_fusion/expected/lir_04_loop_invcm.txt +14 -14
  72. data/golden/loop_fusion/expected/lir_06_const_prop.txt +14 -14
  73. data/golden/loop_fusion/expected/schema_javascript.mjs +12 -12
  74. data/golden/loop_fusion/expected/schema_ruby.rb +16 -16
  75. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  76. data/golden/mixed_dimensions/expected/lir_02_inlined.txt +5 -5
  77. data/golden/mixed_dimensions/expected/lir_03_cse.txt +5 -5
  78. data/golden/mixed_dimensions/expected/lir_04_1_loop_fusion.txt +5 -5
  79. data/golden/mixed_dimensions/expected/lir_04_loop_invcm.txt +5 -5
  80. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +5 -5
  81. data/golden/mixed_dimensions/expected/schema_javascript.mjs +3 -3
  82. data/golden/mixed_dimensions/expected/schema_ruby.rb +6 -6
  83. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +48 -48
  84. data/golden/multirank_hoisting/expected/lir_03_cse.txt +35 -35
  85. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +35 -35
  86. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +35 -35
  87. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +35 -35
  88. data/golden/multirank_hoisting/expected/schema_javascript.mjs +34 -34
  89. data/golden/multirank_hoisting/expected/schema_ruby.rb +36 -36
  90. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  91. data/golden/reduction_broadcast/expected/lir_02_inlined.txt +30 -30
  92. data/golden/reduction_broadcast/expected/lir_03_cse.txt +22 -22
  93. data/golden/reduction_broadcast/expected/lir_04_1_loop_fusion.txt +22 -22
  94. data/golden/reduction_broadcast/expected/lir_04_loop_invcm.txt +22 -22
  95. data/golden/reduction_broadcast/expected/lir_06_const_prop.txt +22 -22
  96. data/golden/reduction_broadcast/expected/schema_javascript.mjs +18 -18
  97. data/golden/reduction_broadcast/expected/schema_ruby.rb +23 -23
  98. data/golden/roll/expected/lir_00_unoptimized.txt +8 -8
  99. data/golden/roll/expected/lir_01_hoist_scalar_references.txt +8 -8
  100. data/golden/roll/expected/lir_02_inlined.txt +8 -8
  101. data/golden/roll/expected/lir_03_cse.txt +8 -8
  102. data/golden/roll/expected/lir_04_1_loop_fusion.txt +8 -8
  103. data/golden/roll/expected/lir_04_loop_invcm.txt +8 -8
  104. data/golden/roll/expected/lir_06_const_prop.txt +8 -8
  105. data/golden/roll/expected/schema_ruby.rb +1 -1
  106. data/golden/shift/expected/lir_00_unoptimized.txt +12 -12
  107. data/golden/shift/expected/lir_01_hoist_scalar_references.txt +12 -12
  108. data/golden/shift/expected/lir_02_inlined.txt +12 -12
  109. data/golden/shift/expected/lir_03_cse.txt +12 -12
  110. data/golden/shift/expected/lir_04_1_loop_fusion.txt +12 -12
  111. data/golden/shift/expected/lir_04_loop_invcm.txt +12 -12
  112. data/golden/shift/expected/lir_06_const_prop.txt +12 -12
  113. data/golden/shift/expected/schema_ruby.rb +1 -1
  114. data/golden/shift_2d/expected/lir_00_unoptimized.txt +48 -48
  115. data/golden/shift_2d/expected/lir_01_hoist_scalar_references.txt +48 -48
  116. data/golden/shift_2d/expected/lir_02_inlined.txt +48 -48
  117. data/golden/shift_2d/expected/lir_03_cse.txt +48 -48
  118. data/golden/shift_2d/expected/lir_04_1_loop_fusion.txt +48 -48
  119. data/golden/shift_2d/expected/lir_04_loop_invcm.txt +48 -48
  120. data/golden/shift_2d/expected/lir_06_const_prop.txt +48 -48
  121. data/golden/shift_2d/expected/schema_ruby.rb +1 -1
  122. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  123. data/golden/streaming_basics/expected/lir_02_inlined.txt +25 -25
  124. data/golden/streaming_basics/expected/lir_03_cse.txt +13 -13
  125. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +13 -13
  126. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +13 -13
  127. data/golden/streaming_basics/expected/lir_06_const_prop.txt +13 -13
  128. data/golden/streaming_basics/expected/schema_javascript.mjs +13 -13
  129. data/golden/streaming_basics/expected/schema_ruby.rb +14 -14
  130. data/golden/tuples/expected/lir_00_unoptimized.txt +4 -4
  131. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +4 -4
  132. data/golden/tuples/expected/lir_02_inlined.txt +4 -4
  133. data/golden/tuples/expected/lir_03_cse.txt +4 -4
  134. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +4 -4
  135. data/golden/tuples/expected/lir_04_loop_invcm.txt +4 -4
  136. data/golden/tuples/expected/lir_06_const_prop.txt +4 -4
  137. data/golden/tuples/expected/schema_ruby.rb +1 -1
  138. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +1 -1
  139. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +1 -1
  140. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +17 -17
  141. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +14 -14
  142. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +14 -14
  143. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +14 -14
  144. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +14 -14
  145. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +13 -13
  146. data/golden/tuples_and_arrays/expected/schema_ruby.rb +14 -14
  147. data/golden/us_tax_2024/expected/ast.txt +865 -0
  148. data/golden/us_tax_2024/expected/input_plan.txt +61 -0
  149. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +901 -0
  150. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +901 -0
  151. data/golden/us_tax_2024/expected/lir_02_inlined.txt +5178 -0
  152. data/golden/us_tax_2024/expected/lir_03_cse.txt +2499 -0
  153. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +2519 -0
  154. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +2499 -0
  155. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +2499 -0
  156. data/golden/us_tax_2024/expected/nast.txt +976 -0
  157. data/golden/us_tax_2024/expected/schema_javascript.mjs +584 -0
  158. data/golden/us_tax_2024/expected/schema_ruby.rb +639 -0
  159. data/golden/us_tax_2024/expected/snast.txt +976 -0
  160. data/golden/us_tax_2024/expected.json +1 -0
  161. data/golden/us_tax_2024/input.json +168 -0
  162. data/golden/us_tax_2024/schema.kumi +203 -0
  163. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  164. data/lib/kumi/core/analyzer/passes/lir/inline_declarations_pass.rb +227 -107
  165. data/lib/kumi/version.rb +1 -1
  166. metadata +33 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fb114ffa6a4c06a4a5c517757ba3030043095e62b54e15b206989cdcd10329fd
4
- data.tar.gz: db8aa5df3fec33213cb27478523b24d3f94812b55e59ba5c39105f5ec1ae9a21
3
+ metadata.gz: 8d0a680258ba7c40a2f00d9af8d4abf116344071ddc61d8b587a9a5a49eed6c9
4
+ data.tar.gz: e16a0a52944cfa45d0a2f15c82fbbaac07392d4a1060f490b4c2fa67cb11208b
5
5
  SHA512:
6
- metadata.gz: d4af4d0d9406226983cf67d4cdf22b366fb01588c977cca449bbd221c5c25a633f04f98f0b9982c44228c526b452306a4c374cac823972581d9e0f4d7c368870
7
- data.tar.gz: 73cf1f508cf9501177b80014bbf28c111979057191bc4643a2749339dabe85dcdee46e202825ec285a378b301540d23aa67d7d4ff39e343a7c5f833c62b6d199
6
+ metadata.gz: 6002d0e6a6b86c345226d630f09279b8e24c5ab581c1d6dba1c3f76b70f91e5ce0a9e2200ee402d12e0b43b593d326cf314ce19b5dafdd7249c36d467ce99a4e
7
+ data.tar.gz: d58b16b88031e3c9ed75598f71e999657f3e6f23b8f0b9e2fe211c74f8f43d1aa43ff5125f6faef7c713cdb1fac5edd7e59e0aaf29405aafe7123708d352ee36
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.0.25] – 2025-10-17
4
+ ### Fixed
5
+ - Fix inlining bug caused by previous fix
6
+
7
+ ## [0.0.24] – 2025-10-16
8
+ ### Fixed
9
+ - Bug when inlining of declarations with multiple axis reductions.
10
+
3
11
  ## [0.0.23] – 2025-10-13
4
12
  ### Fixed
5
13
  - OutputSchemaPass now excludes inline `:let` declarations from output_schema metadata, matching JS/Ruby codegen behavior
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  [![CI](https://github.com/amuta/kumi/workflows/CI/badge.svg)](https://github.com/amuta/kumi/actions)
4
4
  [![Gem Version](https://badge.fury.io/rb/kumi.svg)](https://badge.fury.io/rb/kumi)
5
5
 
6
- **[Try the interactive demo →](https://kumi-play.example.com)**
6
+ **[Try the interactive demo →](https://kumi-play-web.fly.dev/)**
7
7
 
8
8
  ---
9
9
 
@@ -148,4 +148,4 @@ Double.write_source("output.mjs", platform: :javascript)
148
148
 
149
149
  ## License
150
150
 
151
- MIT License. See [LICENSE](LICENSE).
151
+ MIT License. See [LICENSE](LICENSE).
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_1412b74cf62d9ac249af9fd939b136c4f77dc87035a46bf635f2e5274454e431
2
+ module Kumi::Compiled::KUMI_9728a32b2ef1c73739b44f006d54b23230821bda76275eb804cd9ec4c91c3089
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_6638f46fadb918fd0d9801db1cc74a8644071d3e15e8db0cebb4c1b7699ed811
2
+ module Kumi::Compiled::KUMI_b0b7f061a7a0eedb52d282a806e7e102921f6ab3042667bd6fc6fc7f3a1018e2
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_d1c9f17db78e51ee1d92553426415c98ea436e202c29221735f0456eb9d070ac
2
+ module Kumi::Compiled::KUMI_f6e8984aaae6be8cee0041865907ace29c189473e461ccf9db4a6bec97465dab
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -20,17 +20,17 @@
20
20
  %t24 = call core.gt(%t22, %t23) :: boolean
21
21
  %t9 = call core.and(%t21, %t24) :: boolean
22
22
  %t10 = const "both positive" :: string
23
- %t22 = load_input "x" :: integer
24
- %t23 = const 0 :: integer
25
- %t24 = call core.gt(%t22, %t23) :: boolean
23
+ %t25 = load_input "x" :: integer
24
+ %t26 = const 0 :: integer
25
+ %t27 = call core.gt(%t25, %t26) :: boolean
26
26
  %t12 = const "x positive" :: string
27
- %t19 = load_input "y" :: integer
28
- %t20 = const 0 :: integer
29
- %t21 = call core.gt(%t19, %t20) :: boolean
27
+ %t28 = load_input "y" :: integer
28
+ %t29 = const 0 :: integer
29
+ %t30 = call core.gt(%t28, %t29) :: boolean
30
30
  %t14 = const "y positive" :: string
31
31
  %t15 = const "neither positive" :: string
32
- %t16 = select %t21, %t14, %t15 :: string
33
- %t17 = select %t24, %t12, %t16 :: string
32
+ %t16 = select %t30, %t14, %t15 :: string
33
+ %t17 = select %t27, %t12, %t16 :: string
34
34
  %t18 = select %t9, %t10, %t17 :: string
35
35
  yield %t18
36
36
  )
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_224cfbaaefdfa09e4554f97c92feefff11d3f31eb69c5be7d4e017cf7895cf77
2
+ module Kumi::Compiled::KUMI_68bc018c477a94cdfe07ac690bfacdebc9208a590b464f22d499aee7aafafd19
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -68,46 +68,46 @@
68
68
  %t56 = load_input "departments" :: array
69
69
  %acc58 = decl_acc :: integer
70
70
  %t59 = load_field departments_el_48["employees"] :: any
71
- loop employees id=L10 in %t59 as el=%employees_el_6, idx=%employees_i_7
72
- %t60 = load_field employees_el_6["salary"] :: integer
73
- %acc58 = acc_add agg.sum(%acc58, %t60) :: integer
71
+ loop employees id=L10 in %t59 as el=%t60, idx=%t61
72
+ %t62 = load_field t60["salary"] :: integer
73
+ %acc58 = acc_add agg.sum(%acc58, %t62) :: integer
74
74
  end_loop
75
- %t61 = acc_load %acc58 :: integer
76
- %t62 = load_input "departments" :: array
77
- %acc64 = decl_acc :: integer
78
- %t65 = load_field departments_el_48["employees"] :: any
79
- loop employees id=L11 in %t65 as el=%employees_el_15, idx=%employees_i_16
80
- %t66 = load_field employees_el_15["role"] :: string
81
- %t67 = const "manager" :: string
82
- %t68 = call core.eq(%t66, %t67) :: boolean
83
- %t69 = const 1 :: integer
84
- %t70 = const 0 :: integer
85
- %t71 = select %t68, %t69, %t70 :: integer
86
- %acc64 = acc_add agg.sum(%acc64, %t71) :: integer
75
+ %t63 = acc_load %acc58 :: integer
76
+ %t64 = load_input "departments" :: array
77
+ %acc66 = decl_acc :: integer
78
+ %t67 = load_field departments_el_48["employees"] :: any
79
+ loop employees id=L11 in %t67 as el=%t68, idx=%t69
80
+ %t70 = load_field t68["role"] :: string
81
+ %t71 = const "manager" :: string
82
+ %t72 = call core.eq(%t70, %t71) :: boolean
83
+ %t73 = const 1 :: integer
84
+ %t74 = const 0 :: integer
85
+ %t75 = select %t72, %t73, %t74 :: integer
86
+ %acc66 = acc_add agg.sum(%acc66, %t75) :: integer
87
87
  end_loop
88
- %t72 = acc_load %acc64 :: integer
89
- %t73 = load_input "departments" :: array
90
- %acc75 = decl_acc :: integer
91
- %t76 = load_field departments_el_48["employees"] :: any
92
- loop employees id=L12 in %t76 as el=%employees_el_29, idx=%employees_i_30
93
- %t77 = load_field employees_el_29["role"] :: string
94
- %t78 = const "senior" :: string
95
- %t79 = call core.eq(%t77, %t78) :: boolean
96
- %t80 = const 1 :: integer
97
- %t81 = const 0 :: integer
98
- %t82 = select %t79, %t80, %t81 :: integer
99
- %acc75 = acc_add agg.sum(%acc75, %t82) :: integer
88
+ %t76 = acc_load %acc66 :: integer
89
+ %t77 = load_input "departments" :: array
90
+ %acc79 = decl_acc :: integer
91
+ %t80 = load_field departments_el_48["employees"] :: any
92
+ loop employees id=L12 in %t80 as el=%t81, idx=%t82
93
+ %t83 = load_field t81["role"] :: string
94
+ %t84 = const "senior" :: string
95
+ %t85 = call core.eq(%t83, %t84) :: boolean
96
+ %t86 = const 1 :: integer
97
+ %t87 = const 0 :: integer
98
+ %t88 = select %t85, %t86, %t87 :: integer
99
+ %acc79 = acc_add agg.sum(%acc79, %t88) :: integer
100
100
  end_loop
101
- %t83 = acc_load %acc75 :: integer
102
- %t84 = load_input "departments" :: array
103
- %acc86 = decl_acc :: integer
104
- %t87 = load_field departments_el_48["employees"] :: any
105
- loop employees id=L13 in %t87 as el=%employees_el_43, idx=%employees_i_44
106
- %t88 = load_field employees_el_43["salary"] :: integer
107
- %acc86 = acc_add agg.max(%acc86, %t88) :: integer
101
+ %t89 = acc_load %acc79 :: integer
102
+ %t90 = load_input "departments" :: array
103
+ %acc92 = decl_acc :: integer
104
+ %t93 = load_field departments_el_48["employees"] :: any
105
+ loop employees id=L13 in %t93 as el=%t94, idx=%t95
106
+ %t96 = load_field t94["salary"] :: integer
107
+ %acc92 = acc_add agg.max(%acc92, %t96) :: integer
108
108
  end_loop
109
- %t89 = acc_load %acc86 :: integer
110
- %t55 = make_object{name: %t50, total_payroll: %t61, manager_count: %t72, senior_count: %t83, top_salary: %t89} :: object
109
+ %t97 = acc_load %acc92 :: integer
110
+ %t55 = make_object{name: %t50, total_payroll: %t63, manager_count: %t76, senior_count: %t89, top_salary: %t97} :: object
111
111
  yield %t55
112
112
  end_loop
113
113
  )
@@ -67,30 +67,30 @@
67
67
  %t50 = load_field departments_el_48["name"] :: string
68
68
  %acc58 = decl_acc :: integer
69
69
  %t59 = load_field departments_el_48["employees"] :: any
70
- %acc64 = decl_acc :: integer
71
- %acc75 = decl_acc :: integer
72
- %acc86 = decl_acc :: integer
73
- loop employees id=L10 in %t59 as el=%employees_el_6, idx=%employees_i_7
74
- %t60 = load_field employees_el_6["salary"] :: integer
75
- %acc58 = acc_add agg.sum(%acc58, %t60) :: integer
76
- %t66 = load_field employees_el_6["role"] :: string
77
- %t67 = const "manager" :: string
78
- %t68 = call core.eq(%t66, %t67) :: boolean
79
- %t69 = const 1 :: integer
80
- %t70 = const 0 :: integer
81
- %t71 = select %t68, %t69, %t70 :: integer
82
- %acc64 = acc_add agg.sum(%acc64, %t71) :: integer
83
- %acc86 = acc_add agg.max(%acc86, %t60) :: integer
84
- %t78 = const "senior" :: string
85
- %t79 = call core.eq(%t66, %t78) :: boolean
86
- %t82 = select %t79, %t69, %t70 :: integer
87
- %acc75 = acc_add agg.sum(%acc75, %t82) :: integer
70
+ %acc66 = decl_acc :: integer
71
+ %acc79 = decl_acc :: integer
72
+ %acc92 = decl_acc :: integer
73
+ loop employees id=L10 in %t59 as el=%t60, idx=%t61
74
+ %t62 = load_field t60["salary"] :: integer
75
+ %acc58 = acc_add agg.sum(%acc58, %t62) :: integer
76
+ %t70 = load_field t60["role"] :: string
77
+ %t71 = const "manager" :: string
78
+ %t72 = call core.eq(%t70, %t71) :: boolean
79
+ %t73 = const 1 :: integer
80
+ %t74 = const 0 :: integer
81
+ %t75 = select %t72, %t73, %t74 :: integer
82
+ %acc66 = acc_add agg.sum(%acc66, %t75) :: integer
83
+ %acc92 = acc_add agg.max(%acc92, %t62) :: integer
84
+ %t84 = const "senior" :: string
85
+ %t85 = call core.eq(%t70, %t84) :: boolean
86
+ %t88 = select %t85, %t73, %t74 :: integer
87
+ %acc79 = acc_add agg.sum(%acc79, %t88) :: integer
88
88
  end_loop
89
- %t61 = acc_load %acc58 :: integer
90
- %t72 = acc_load %acc64 :: integer
91
- %t89 = acc_load %acc86 :: integer
92
- %t83 = acc_load %acc75 :: integer
93
- %t55 = make_object{name: %t50, total_payroll: %t61, manager_count: %t72, senior_count: %t83, top_salary: %t89} :: object
89
+ %t63 = acc_load %acc58 :: integer
90
+ %t76 = acc_load %acc66 :: integer
91
+ %t97 = acc_load %acc92 :: integer
92
+ %t89 = acc_load %acc79 :: integer
93
+ %t55 = make_object{name: %t50, total_payroll: %t63, manager_count: %t76, senior_count: %t89, top_salary: %t97} :: object
94
94
  yield %t55
95
95
  end_loop
96
96
  )
@@ -67,32 +67,32 @@
67
67
  %t50 = load_field departments_el_48["name"] :: string
68
68
  %acc58 = decl_acc :: integer
69
69
  %t59 = load_field departments_el_48["employees"] :: any
70
- %acc64 = decl_acc :: integer
71
- %acc75 = decl_acc :: integer
72
- %acc86 = decl_acc :: integer
73
- loop employees id=L10 in %t59 as el=%employees_el_6, idx=%employees_i_7
74
- %t60 = load_field employees_el_6["salary"] :: integer
75
- %acc58 = acc_add agg.sum(%acc58, %t60) :: integer
76
- %t66 = load_field employees_el_6["role"] :: string
77
- %t67 = const "manager" :: string
78
- %t68 = call core.eq(%t66, %t67) :: boolean
79
- %t69 = const 1 :: integer
80
- %t70 = const 0 :: integer
81
- %t71 = select %t68, %t69, %t70 :: integer
82
- %acc64 = acc_add agg.sum(%acc64, %t71) :: integer
83
- %t88 = load_field employees_el_6["salary"] :: integer
84
- %acc86 = acc_add agg.max(%acc86, %t88) :: integer
85
- %t77 = load_field employees_el_6["role"] :: string
86
- %t78 = const "senior" :: string
87
- %t79 = call core.eq(%t77, %t78) :: boolean
88
- %t82 = select %t79, %t69, %t70 :: integer
89
- %acc75 = acc_add agg.sum(%acc75, %t82) :: integer
70
+ %acc66 = decl_acc :: integer
71
+ %acc79 = decl_acc :: integer
72
+ %acc92 = decl_acc :: integer
73
+ loop employees id=L10 in %t59 as el=%t60, idx=%t61
74
+ %t62 = load_field t60["salary"] :: integer
75
+ %acc58 = acc_add agg.sum(%acc58, %t62) :: integer
76
+ %t70 = load_field t60["role"] :: string
77
+ %t71 = const "manager" :: string
78
+ %t72 = call core.eq(%t70, %t71) :: boolean
79
+ %t73 = const 1 :: integer
80
+ %t74 = const 0 :: integer
81
+ %t75 = select %t72, %t73, %t74 :: integer
82
+ %acc66 = acc_add agg.sum(%acc66, %t75) :: integer
83
+ %t96 = load_field t60["salary"] :: integer
84
+ %acc92 = acc_add agg.max(%acc92, %t96) :: integer
85
+ %t83 = load_field t60["role"] :: string
86
+ %t84 = const "senior" :: string
87
+ %t85 = call core.eq(%t83, %t84) :: boolean
88
+ %t88 = select %t85, %t73, %t74 :: integer
89
+ %acc79 = acc_add agg.sum(%acc79, %t88) :: integer
90
90
  end_loop
91
- %t61 = acc_load %acc58 :: integer
92
- %t72 = acc_load %acc64 :: integer
93
- %t89 = acc_load %acc86 :: integer
94
- %t83 = acc_load %acc75 :: integer
95
- %t55 = make_object{name: %t50, total_payroll: %t61, manager_count: %t72, senior_count: %t83, top_salary: %t89} :: object
91
+ %t63 = acc_load %acc58 :: integer
92
+ %t76 = acc_load %acc66 :: integer
93
+ %t97 = acc_load %acc92 :: integer
94
+ %t89 = acc_load %acc79 :: integer
95
+ %t55 = make_object{name: %t50, total_payroll: %t63, manager_count: %t76, senior_count: %t89, top_salary: %t97} :: object
96
96
  yield %t55
97
97
  end_loop
98
98
  )
@@ -63,34 +63,34 @@
63
63
  )
64
64
  (Declaration department_summary
65
65
  %t47 = load_input "departments" :: array
66
- %t67 = const "manager" :: string
67
- %t69 = const 1 :: integer
68
- %t70 = const 0 :: integer
69
- %t78 = const "senior" :: string
66
+ %t71 = const "manager" :: string
67
+ %t73 = const 1 :: integer
68
+ %t74 = const 0 :: integer
69
+ %t84 = const "senior" :: string
70
70
  loop departments id=L9 in %t47 as el=%departments_el_48, idx=%departments_i_49
71
71
  %t50 = load_field departments_el_48["name"] :: string
72
72
  %acc58 = decl_acc :: integer
73
73
  %t59 = load_field departments_el_48["employees"] :: any
74
- %acc64 = decl_acc :: integer
75
- %acc75 = decl_acc :: integer
76
- %acc86 = decl_acc :: integer
77
- loop employees id=L10 in %t59 as el=%employees_el_6, idx=%employees_i_7
78
- %t60 = load_field employees_el_6["salary"] :: integer
79
- %acc58 = acc_add agg.sum(%acc58, %t60) :: integer
80
- %t66 = load_field employees_el_6["role"] :: string
81
- %t68 = call core.eq(%t66, %t67) :: boolean
82
- %t71 = select %t68, %t69, %t70 :: integer
83
- %acc64 = acc_add agg.sum(%acc64, %t71) :: integer
84
- %acc86 = acc_add agg.max(%acc86, %t60) :: integer
85
- %t79 = call core.eq(%t66, %t78) :: boolean
86
- %t82 = select %t79, %t69, %t70 :: integer
87
- %acc75 = acc_add agg.sum(%acc75, %t82) :: integer
74
+ %acc66 = decl_acc :: integer
75
+ %acc79 = decl_acc :: integer
76
+ %acc92 = decl_acc :: integer
77
+ loop employees id=L10 in %t59 as el=%t60, idx=%t61
78
+ %t62 = load_field t60["salary"] :: integer
79
+ %acc58 = acc_add agg.sum(%acc58, %t62) :: integer
80
+ %t70 = load_field t60["role"] :: string
81
+ %t72 = call core.eq(%t70, %t71) :: boolean
82
+ %t75 = select %t72, %t73, %t74 :: integer
83
+ %acc66 = acc_add agg.sum(%acc66, %t75) :: integer
84
+ %acc92 = acc_add agg.max(%acc92, %t62) :: integer
85
+ %t85 = call core.eq(%t70, %t84) :: boolean
86
+ %t88 = select %t85, %t73, %t74 :: integer
87
+ %acc79 = acc_add agg.sum(%acc79, %t88) :: integer
88
88
  end_loop
89
- %t61 = acc_load %acc58 :: integer
90
- %t72 = acc_load %acc64 :: integer
91
- %t89 = acc_load %acc86 :: integer
92
- %t83 = acc_load %acc75 :: integer
93
- %t55 = make_object{name: %t50, total_payroll: %t61, manager_count: %t72, senior_count: %t83, top_salary: %t89} :: object
89
+ %t63 = acc_load %acc58 :: integer
90
+ %t76 = acc_load %acc66 :: integer
91
+ %t97 = acc_load %acc92 :: integer
92
+ %t89 = acc_load %acc79 :: integer
93
+ %t55 = make_object{name: %t50, total_payroll: %t63, manager_count: %t76, senior_count: %t89, top_salary: %t97} :: object
94
94
  yield %t55
95
95
  end_loop
96
96
  )
@@ -63,34 +63,34 @@
63
63
  )
64
64
  (Declaration department_summary
65
65
  %t47 = load_input "departments" :: array
66
- %t67 = const "manager" :: string
67
- %t69 = const 1 :: integer
68
- %t70 = const 0 :: integer
69
- %t78 = const "senior" :: string
66
+ %t71 = const "manager" :: string
67
+ %t73 = const 1 :: integer
68
+ %t74 = const 0 :: integer
69
+ %t84 = const "senior" :: string
70
70
  loop departments id=L9 in %t47 as el=%departments_el_48, idx=%departments_i_49
71
71
  %t50 = load_field departments_el_48["name"] :: string
72
72
  %acc58 = decl_acc :: integer
73
73
  %t59 = load_field departments_el_48["employees"] :: any
74
- %acc64 = decl_acc :: integer
75
- %acc75 = decl_acc :: integer
76
- %acc86 = decl_acc :: integer
77
- loop employees id=L10 in %t59 as el=%employees_el_6, idx=%employees_i_7
78
- %t60 = load_field employees_el_6["salary"] :: integer
79
- %acc58 = acc_add agg.sum(%acc58, %t60) :: integer
80
- %t66 = load_field employees_el_6["role"] :: string
81
- %t68 = call core.eq(%t66, %t67) :: boolean
82
- %t71 = select %t68, %t69, %t70 :: integer
83
- %acc64 = acc_add agg.sum(%acc64, %t71) :: integer
84
- %acc86 = acc_add agg.max(%acc86, %t60) :: integer
85
- %t79 = call core.eq(%t66, %t78) :: boolean
86
- %t82 = select %t79, %t69, %t70 :: integer
87
- %acc75 = acc_add agg.sum(%acc75, %t82) :: integer
74
+ %acc66 = decl_acc :: integer
75
+ %acc79 = decl_acc :: integer
76
+ %acc92 = decl_acc :: integer
77
+ loop employees id=L10 in %t59 as el=%t60, idx=%t61
78
+ %t62 = load_field t60["salary"] :: integer
79
+ %acc58 = acc_add agg.sum(%acc58, %t62) :: integer
80
+ %t70 = load_field t60["role"] :: string
81
+ %t72 = call core.eq(%t70, %t71) :: boolean
82
+ %t75 = select %t72, %t73, %t74 :: integer
83
+ %acc66 = acc_add agg.sum(%acc66, %t75) :: integer
84
+ %acc92 = acc_add agg.max(%acc92, %t62) :: integer
85
+ %t85 = call core.eq(%t70, %t84) :: boolean
86
+ %t88 = select %t85, %t73, %t74 :: integer
87
+ %acc79 = acc_add agg.sum(%acc79, %t88) :: integer
88
88
  end_loop
89
- %t61 = acc_load %acc58 :: integer
90
- %t72 = acc_load %acc64 :: integer
91
- %t89 = acc_load %acc86 :: integer
92
- %t83 = acc_load %acc75 :: integer
93
- %t55 = make_object{name: %t50, total_payroll: %t61, manager_count: %t72, senior_count: %t83, top_salary: %t89} :: object
89
+ %t63 = acc_load %acc58 :: integer
90
+ %t76 = acc_load %acc66 :: integer
91
+ %t97 = acc_load %acc92 :: integer
92
+ %t89 = acc_load %acc79 :: integer
93
+ %t55 = make_object{name: %t50, total_payroll: %t63, manager_count: %t76, senior_count: %t89, top_salary: %t97} :: object
94
94
  yield %t55
95
95
  end_loop
96
96
  )
@@ -75,39 +75,39 @@ export function _max_salary(input) {
75
75
  export function _department_summary(input) {
76
76
  let out = [];
77
77
  let t47 = input["departments"];
78
- const t67 = "manager";
79
- const t69 = 1;
80
- const t70 = 0;
81
- const t78 = "senior";
78
+ const t71 = "manager";
79
+ const t73 = 1;
80
+ const t74 = 0;
81
+ const t84 = "senior";
82
82
  t47.forEach((departments_el_48, departments_i_49) => {
83
83
  let t50 = departments_el_48["name"];
84
84
  let acc58 = 0;
85
85
  let t59 = departments_el_48["employees"];
86
- let acc64 = 0;
87
- let acc75 = 0;
88
- let acc86 = null;
89
- t59.forEach((employees_el_6, employees_i_7) => {
90
- let t60 = employees_el_6["salary"];
91
- acc58 += t60;
92
- let t66 = employees_el_6["role"];
93
- let t68 = t66 == t67;
94
- let t71 = t68 ? t69 : t70;
95
- acc64 += t71;
96
- if (acc86 === null || acc86 === undefined) {
97
- acc86 = t60;
86
+ let acc66 = 0;
87
+ let acc79 = 0;
88
+ let acc92 = null;
89
+ t59.forEach((t60, t61) => {
90
+ let t62 = t60["salary"];
91
+ acc58 += t62;
92
+ let t70 = t60["role"];
93
+ let t72 = t70 == t71;
94
+ let t75 = t72 ? t73 : t74;
95
+ acc66 += t75;
96
+ if (acc92 === null || acc92 === undefined) {
97
+ acc92 = t62;
98
98
  } else {
99
- acc86 = (acc86 === null || t60 > acc86) ? t60 : acc86;
99
+ acc92 = (acc92 === null || t62 > acc92) ? t62 : acc92;
100
100
  }
101
- let t79 = t66 == t78;
102
- let t82 = t79 ? t69 : t70;
103
- acc75 += t82;
101
+ let t85 = t70 == t84;
102
+ let t88 = t85 ? t73 : t74;
103
+ acc79 += t88;
104
104
  });
105
105
  let t55 = {
106
106
  "name": t50,
107
107
  "total_payroll": acc58,
108
- "manager_count": acc64,
109
- "senior_count": acc75,
110
- "top_salary": acc86
108
+ "manager_count": acc66,
109
+ "senior_count": acc79,
110
+ "top_salary": acc92
111
111
  };
112
112
  out.push(t55);
113
113
  });
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_509c7b2dc9bbeff658a7cc53b4102928b79f1ea86c21bf5f477bd596a2b47bb4
2
+ module Kumi::Compiled::KUMI_d345f8b5098b438aa322a7ee8d0a4d26f7c84aa9e453db79a0466b672d60fe36
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_509c7b2dc9bbeff658a7cc53b4102928b79f1ea86c21bf5f477b
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
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_95ba78dae41111df66252b8589633cd101a5db4a581ac86815334d8152861f2f
2
+ module Kumi::Compiled::KUMI_2861f5d1d1e2c819036f9450880c9c966a10cf904bae70971a4845415ebaacf9
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -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
  )