kumi 0.0.25 → 0.0.27

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 (223) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -0
  3. data/CLAUDE.md +4 -0
  4. data/README.md +86 -78
  5. data/data/functions/agg/boolean.yaml +6 -2
  6. data/data/functions/agg/numeric.yaml +32 -16
  7. data/data/functions/agg/string.yaml +4 -3
  8. data/data/functions/core/arithmetic.yaml +62 -14
  9. data/data/functions/core/boolean.yaml +12 -6
  10. data/data/functions/core/comparison.yaml +25 -13
  11. data/data/functions/core/constructor.yaml +16 -8
  12. data/data/functions/core/conversion.yaml +32 -0
  13. data/data/functions/core/select.yaml +3 -1
  14. data/data/functions/core/stencil.yaml +14 -5
  15. data/data/functions/core/string.yaml +9 -4
  16. data/data/kernels/javascript/core/coercion.yaml +20 -0
  17. data/data/kernels/ruby/agg/numeric.yaml +1 -1
  18. data/data/kernels/ruby/core/coercion.yaml +20 -0
  19. data/docs/ARCHITECTURE.md +277 -0
  20. data/docs/DEVELOPMENT.md +62 -0
  21. data/docs/FUNCTIONS.md +955 -0
  22. data/docs/SYNTAX.md +8 -0
  23. data/docs/UNSAT_DETECTION.md +83 -0
  24. data/docs/VSCODE_EXTENSION.md +114 -0
  25. data/docs/functions-reference.json +1821 -0
  26. data/golden/array_element/expected/nast.txt +1 -1
  27. data/golden/array_element/expected/schema_ruby.rb +1 -1
  28. data/golden/array_index/expected/nast.txt +7 -7
  29. data/golden/array_index/expected/schema_ruby.rb +1 -1
  30. data/golden/array_operations/expected/nast.txt +2 -2
  31. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  32. data/golden/array_operations/expected/snast.txt +3 -3
  33. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  34. data/golden/cascade_logic/expected/snast.txt +2 -2
  35. data/golden/chained_fusion/expected/nast.txt +2 -2
  36. data/golden/chained_fusion/expected/schema_ruby.rb +1 -1
  37. data/golden/decimal_explicit/expected/ast.txt +38 -0
  38. data/golden/decimal_explicit/expected/input_plan.txt +3 -0
  39. data/golden/decimal_explicit/expected/lir_00_unoptimized.txt +30 -0
  40. data/golden/decimal_explicit/expected/lir_01_hoist_scalar_references.txt +30 -0
  41. data/golden/decimal_explicit/expected/lir_02_inlined.txt +44 -0
  42. data/golden/decimal_explicit/expected/lir_03_cse.txt +40 -0
  43. data/golden/decimal_explicit/expected/lir_04_1_loop_fusion.txt +40 -0
  44. data/golden/decimal_explicit/expected/lir_04_loop_invcm.txt +40 -0
  45. data/golden/decimal_explicit/expected/lir_06_const_prop.txt +40 -0
  46. data/golden/decimal_explicit/expected/nast.txt +30 -0
  47. data/golden/decimal_explicit/expected/schema_javascript.mjs +31 -0
  48. data/golden/decimal_explicit/expected/schema_ruby.rb +57 -0
  49. data/golden/decimal_explicit/expected/snast.txt +30 -0
  50. data/golden/decimal_explicit/expected.json +1 -0
  51. data/golden/decimal_explicit/input.json +5 -0
  52. data/golden/decimal_explicit/schema.kumi +14 -0
  53. data/golden/element_arrays/expected/nast.txt +2 -2
  54. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  55. data/golden/element_arrays/expected/snast.txt +1 -1
  56. data/golden/empty_and_null_inputs/expected/nast.txt +3 -3
  57. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +1 -1
  58. data/golden/function_overload/expected/ast.txt +29 -0
  59. data/golden/function_overload/expected/input_plan.txt +4 -0
  60. data/golden/function_overload/expected/lir_00_unoptimized.txt +18 -0
  61. data/golden/function_overload/expected/lir_01_hoist_scalar_references.txt +18 -0
  62. data/golden/function_overload/expected/lir_02_inlined.txt +20 -0
  63. data/golden/function_overload/expected/lir_03_cse.txt +20 -0
  64. data/golden/function_overload/expected/lir_04_1_loop_fusion.txt +20 -0
  65. data/golden/function_overload/expected/lir_04_loop_invcm.txt +20 -0
  66. data/golden/function_overload/expected/lir_06_const_prop.txt +20 -0
  67. data/golden/function_overload/expected/nast.txt +22 -0
  68. data/golden/function_overload/expected/schema_javascript.mjs +12 -0
  69. data/golden/function_overload/expected/schema_ruby.rb +39 -0
  70. data/golden/function_overload/expected/snast.txt +22 -0
  71. data/golden/function_overload/input.json +8 -0
  72. data/golden/function_overload/schema.kumi +19 -0
  73. data/golden/game_of_life/expected/lir_00_unoptimized.txt +4 -4
  74. data/golden/game_of_life/expected/lir_01_hoist_scalar_references.txt +4 -4
  75. data/golden/game_of_life/expected/lir_02_inlined.txt +16 -16
  76. data/golden/game_of_life/expected/lir_03_cse.txt +20 -16
  77. data/golden/game_of_life/expected/lir_04_1_loop_fusion.txt +20 -16
  78. data/golden/game_of_life/expected/lir_04_loop_invcm.txt +20 -16
  79. data/golden/game_of_life/expected/lir_06_const_prop.txt +20 -16
  80. data/golden/game_of_life/expected/nast.txt +4 -4
  81. data/golden/game_of_life/expected/schema_javascript.mjs +4 -2
  82. data/golden/game_of_life/expected/schema_ruby.rb +5 -3
  83. data/golden/game_of_life/expected/snast.txt +10 -10
  84. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  85. data/golden/hash_value/expected/nast.txt +1 -1
  86. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  87. data/golden/hash_value/expected/snast.txt +1 -1
  88. data/golden/hierarchical_complex/expected/nast.txt +3 -3
  89. data/golden/hierarchical_complex/expected/schema_ruby.rb +1 -1
  90. data/golden/hierarchical_complex/expected/snast.txt +3 -3
  91. data/golden/inline_rename_scope_leak/expected/nast.txt +3 -3
  92. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +1 -1
  93. data/golden/input_reference/expected/nast.txt +2 -2
  94. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  95. data/golden/interleaved_fusion/expected/nast.txt +2 -2
  96. data/golden/interleaved_fusion/expected/schema_ruby.rb +1 -1
  97. data/golden/let_inline/expected/nast.txt +4 -4
  98. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  99. data/golden/loop_fusion/expected/nast.txt +1 -1
  100. data/golden/loop_fusion/expected/schema_ruby.rb +1 -1
  101. data/golden/min_reduce_scope/expected/nast.txt +3 -3
  102. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  103. data/golden/min_reduce_scope/expected/snast.txt +1 -1
  104. data/golden/mixed_dimensions/expected/nast.txt +2 -2
  105. data/golden/mixed_dimensions/expected/schema_ruby.rb +1 -1
  106. data/golden/multirank_hoisting/expected/nast.txt +7 -7
  107. data/golden/multirank_hoisting/expected/schema_ruby.rb +1 -1
  108. data/golden/nested_hash/expected/nast.txt +1 -1
  109. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  110. data/golden/reduction_broadcast/expected/nast.txt +3 -3
  111. data/golden/reduction_broadcast/expected/schema_ruby.rb +1 -1
  112. data/golden/reduction_broadcast/expected/snast.txt +1 -1
  113. data/golden/roll/expected/schema_ruby.rb +1 -1
  114. data/golden/shift/expected/schema_ruby.rb +1 -1
  115. data/golden/shift_2d/expected/schema_ruby.rb +1 -1
  116. data/golden/simple_math/expected/lir_00_unoptimized.txt +1 -1
  117. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +1 -1
  118. data/golden/simple_math/expected/lir_02_inlined.txt +1 -1
  119. data/golden/simple_math/expected/lir_03_cse.txt +1 -1
  120. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +1 -1
  121. data/golden/simple_math/expected/lir_04_loop_invcm.txt +1 -1
  122. data/golden/simple_math/expected/lir_06_const_prop.txt +1 -1
  123. data/golden/simple_math/expected/nast.txt +5 -5
  124. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  125. data/golden/simple_math/expected/snast.txt +2 -2
  126. data/golden/streaming_basics/expected/nast.txt +8 -8
  127. data/golden/streaming_basics/expected/schema_ruby.rb +1 -1
  128. data/golden/streaming_basics/expected/snast.txt +1 -1
  129. data/golden/tuples/expected/lir_00_unoptimized.txt +5 -5
  130. data/golden/tuples/expected/lir_01_hoist_scalar_references.txt +5 -5
  131. data/golden/tuples/expected/lir_02_inlined.txt +5 -5
  132. data/golden/tuples/expected/lir_03_cse.txt +5 -5
  133. data/golden/tuples/expected/lir_04_1_loop_fusion.txt +5 -5
  134. data/golden/tuples/expected/lir_04_loop_invcm.txt +5 -5
  135. data/golden/tuples/expected/lir_06_const_prop.txt +5 -5
  136. data/golden/tuples/expected/nast.txt +4 -4
  137. data/golden/tuples/expected/schema_ruby.rb +1 -1
  138. data/golden/tuples/expected/snast.txt +6 -6
  139. data/golden/tuples_and_arrays/expected/lir_00_unoptimized.txt +1 -1
  140. data/golden/tuples_and_arrays/expected/lir_01_hoist_scalar_references.txt +1 -1
  141. data/golden/tuples_and_arrays/expected/lir_02_inlined.txt +2 -2
  142. data/golden/tuples_and_arrays/expected/lir_03_cse.txt +2 -2
  143. data/golden/tuples_and_arrays/expected/lir_04_1_loop_fusion.txt +2 -2
  144. data/golden/tuples_and_arrays/expected/lir_04_loop_invcm.txt +2 -2
  145. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +2 -2
  146. data/golden/tuples_and_arrays/expected/nast.txt +3 -3
  147. data/golden/tuples_and_arrays/expected/schema_ruby.rb +1 -1
  148. data/golden/tuples_and_arrays/expected/snast.txt +2 -2
  149. data/golden/us_tax_2024/expected/ast.txt +63 -670
  150. data/golden/us_tax_2024/expected/input_plan.txt +8 -45
  151. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +253 -863
  152. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +253 -863
  153. data/golden/us_tax_2024/expected/lir_02_inlined.txt +1215 -5139
  154. data/golden/us_tax_2024/expected/lir_03_cse.txt +587 -2460
  155. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +632 -2480
  156. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +587 -2460
  157. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +587 -2460
  158. data/golden/us_tax_2024/expected/nast.txt +123 -826
  159. data/golden/us_tax_2024/expected/schema_javascript.mjs +127 -581
  160. data/golden/us_tax_2024/expected/schema_ruby.rb +135 -610
  161. data/golden/us_tax_2024/expected/snast.txt +155 -858
  162. data/golden/us_tax_2024/expected.json +120 -1
  163. data/golden/us_tax_2024/input.json +18 -9
  164. data/golden/us_tax_2024/schema.kumi +48 -178
  165. data/golden/with_constants/expected/lir_00_unoptimized.txt +1 -1
  166. data/golden/with_constants/expected/lir_01_hoist_scalar_references.txt +1 -1
  167. data/golden/with_constants/expected/lir_02_inlined.txt +1 -1
  168. data/golden/with_constants/expected/lir_03_cse.txt +1 -1
  169. data/golden/with_constants/expected/lir_04_1_loop_fusion.txt +1 -1
  170. data/golden/with_constants/expected/lir_04_loop_invcm.txt +1 -1
  171. data/golden/with_constants/expected/lir_06_const_prop.txt +1 -1
  172. data/golden/with_constants/expected/nast.txt +2 -2
  173. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  174. data/golden/with_constants/expected/snast.txt +2 -2
  175. data/lib/kumi/analyzer.rb +12 -12
  176. data/lib/kumi/configuration.rb +6 -0
  177. data/lib/kumi/core/analyzer/passes/formal_constraint_propagator.rb +236 -0
  178. data/lib/kumi/core/analyzer/passes/input_collector.rb +22 -4
  179. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +64 -18
  180. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +9 -4
  181. data/lib/kumi/core/analyzer/passes/snast_pass.rb +3 -1
  182. data/lib/kumi/core/analyzer/passes/unsat_detector.rb +172 -198
  183. data/lib/kumi/core/error_reporter.rb +36 -1
  184. data/lib/kumi/core/errors.rb +33 -1
  185. data/lib/kumi/core/functions/function_spec.rb +5 -4
  186. data/lib/kumi/core/functions/loader.rb +17 -1
  187. data/lib/kumi/core/functions/overload_resolver.rb +164 -0
  188. data/lib/kumi/core/functions/type_error_reporter.rb +118 -0
  189. data/lib/kumi/core/functions/type_rules.rb +155 -35
  190. data/lib/kumi/core/input/type_matcher.rb +8 -1
  191. data/lib/kumi/core/ruby_parser/input_builder.rb +2 -2
  192. data/lib/kumi/core/types/inference.rb +29 -22
  193. data/lib/kumi/core/types/normalizer.rb +30 -45
  194. data/lib/kumi/core/types/validator.rb +17 -28
  195. data/lib/kumi/core/types/value_objects.rb +116 -0
  196. data/lib/kumi/core/types.rb +45 -37
  197. data/lib/kumi/dev/golden/reporter.rb +9 -0
  198. data/lib/kumi/dev/golden/result.rb +3 -1
  199. data/lib/kumi/dev/golden/runtime_test.rb +25 -0
  200. data/lib/kumi/dev/golden/suite.rb +4 -4
  201. data/lib/kumi/dev/golden/value_normalizer.rb +80 -0
  202. data/lib/kumi/dev/golden.rb +21 -12
  203. data/lib/kumi/doc_generator/formatters/json.rb +39 -0
  204. data/lib/kumi/doc_generator/formatters/markdown.rb +175 -0
  205. data/lib/kumi/doc_generator/loader.rb +37 -0
  206. data/lib/kumi/doc_generator/merger.rb +54 -0
  207. data/lib/kumi/doc_generator.rb +4 -0
  208. data/lib/kumi/registry_v2/loader.rb +90 -0
  209. data/lib/kumi/registry_v2.rb +18 -1
  210. data/lib/kumi/version.rb +1 -1
  211. data/vscode-extension/.gitignore +4 -0
  212. data/vscode-extension/README.md +59 -0
  213. data/vscode-extension/TESTING.md +151 -0
  214. data/vscode-extension/package.json +51 -0
  215. data/vscode-extension/src/extension.ts +295 -0
  216. data/vscode-extension/tsconfig.json +15 -0
  217. metadata +57 -7
  218. data/lib/kumi/core/analyzer/unsat_constant_evaluator.rb +0 -59
  219. data/lib/kumi/core/atom_unsat_solver.rb +0 -396
  220. data/lib/kumi/core/constraint_relationship_solver.rb +0 -641
  221. data/lib/kumi/core/types/builder.rb +0 -23
  222. data/lib/kumi/core/types/compatibility.rb +0 -96
  223. data/lib/kumi/core/types/formatter.rb +0 -26
@@ -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
@@ -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
  )
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_948ef2383d338bae98f165855c5c82984da1d3f936bcaca00b80221e19f34c6a
2
+ module Kumi::Compiled::KUMI_2c59ff6fbf5f9f54855ffed7efed5fb3e86a9502ac7b4245f2ecaf6d0965d362
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -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
+ )
@@ -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,22 @@
1
+ (NAST
2
+ (VALUE name_len
3
+ (Call :size
4
+ (InputRef [:name])
5
+ )
6
+ )
7
+ (VALUE items_count
8
+ (Call :size
9
+ (InputRef [:items])
10
+ )
11
+ )
12
+ (VALUE summary
13
+ (Hash
14
+ (Pair name_length
15
+ (Ref name_len)
16
+ )
17
+ (Pair item_count
18
+ (Ref items_count)
19
+ )
20
+ )
21
+ )
22
+ )
@@ -0,0 +1,12 @@
1
+ export function _summary(input) {
2
+ let t8 = input["name"];
3
+ let t9 = t8.length;
4
+ let t10 = input["items"];
5
+ let t11 = t10.length;
6
+ let t7 = {
7
+ "name_length": t9,
8
+ "item_count": t11
9
+ };
10
+ return t7;
11
+ }
12
+
@@ -0,0 +1,39 @@
1
+ # Autogenerated by Kumi Codegen
2
+ module Kumi::Compiled::KUMI_7bfb4d1f4b47bb1aec37b86c3b05a808ae6e13b28cdcac7f03ffeb7624df3532
3
+ def self.from(input_data = nil)
4
+ instance = Object.new
5
+ instance.extend(self)
6
+ instance.instance_variable_set(:@input, input_data)
7
+ instance
8
+ end
9
+
10
+ def self.__kumi_executable__
11
+ instance = Object.new
12
+ instance.extend(self)
13
+ instance
14
+ end
15
+
16
+ def update(input_data)
17
+ @input = @input.merge(input_data)
18
+ self
19
+ end
20
+
21
+ def [](name)
22
+ case name
23
+ when :summary then _summary
24
+ else raise KeyError, "Unknown declaration"
25
+ end
26
+ end
27
+
28
+ def _summary(input = @input)
29
+ t8 = input["name"] || input[:name]
30
+ t9 = t8.length
31
+ t10 = input["items"] || input[:items]
32
+ t11 = t10.length
33
+ t7 = {
34
+ "name_length" => t9,
35
+ "item_count" => t11
36
+ }
37
+ t7
38
+ end
39
+ end
@@ -0,0 +1,22 @@
1
+ (SNAST
2
+ (VALUE name_len
3
+ (Call :core.length
4
+ (InputRef name key_chain=[]) :: [] -> string
5
+ ) :: [] -> integer
6
+ ) :: [] -> integer
7
+ (VALUE items_count
8
+ (Call :core.array_size
9
+ (InputRef items key_chain=[]) :: [] -> array
10
+ ) :: [] -> integer
11
+ ) :: [] -> integer
12
+ (VALUE summary
13
+ (Hash
14
+ (Pair name_length
15
+ (Ref name_len) :: [] -> integer
16
+ ) :: [] -> pair
17
+ (Pair item_count
18
+ (Ref items_count) :: [] -> integer
19
+ ) :: [] -> pair
20
+ ) :: [] -> hash
21
+ ) :: [] -> hash
22
+ )
@@ -0,0 +1,8 @@
1
+ {
2
+ "name": "test",
3
+ "items": [
4
+ { "value": 1 },
5
+ { "value": 2 },
6
+ { "value": 3 }
7
+ ]
8
+ }
@@ -0,0 +1,19 @@
1
+ schema do
2
+ input do
3
+ string :name
4
+ array :items do
5
+ integer :value
6
+ end
7
+ end
8
+
9
+ # Should resolve to core.length (string -> integer)
10
+ let :name_len, fn(:size, input.name)
11
+
12
+ # Should resolve to core.array_size (array -> integer)
13
+ let :items_count, fn(:size, input.items)
14
+
15
+ value :summary, {
16
+ name_length: name_len,
17
+ item_count: items_count
18
+ }
19
+ end
@@ -267,8 +267,8 @@
267
267
  %t240 = load_decl ne axes=[rows, col] :: integer
268
268
  %t241 = load_decl sw axes=[rows, col] :: integer
269
269
  %t242 = load_decl se axes=[rows, col] :: integer
270
- %t243 = make_tuple(%t235, %t236, %t237, %t238, %t239, %t240, %t241, %t242) :: tuple<integer>
271
- %t244 = fold %t243 fn="agg.sum" ::
270
+ %t243 = make_tuple(%t235, %t236, %t237, %t238, %t239, %t240, %t241, %t242) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
271
+ %t244 = fold %t243 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
272
272
  yield %t244
273
273
  end_loop
274
274
  end_loop
@@ -288,7 +288,7 @@
288
288
  %t253 = load_input "rows" :: array
289
289
  loop rows id=L23 in %t253 as el=%rows_el_254, idx=%rows_i_255
290
290
  loop col id=L24 in %rows_el_254 as el=%col_el_256, idx=%col_i_257
291
- %t258 = load_decl neighbors axes=[rows, col] ::
291
+ %t258 = load_decl neighbors axes=[rows, col] :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
292
292
  %t259 = const 3 :: integer
293
293
  %t260 = call core.eq(%t258, %t259) :: boolean
294
294
  yield %t260
@@ -299,7 +299,7 @@
299
299
  %t261 = load_input "rows" :: array
300
300
  loop rows id=L25 in %t261 as el=%rows_el_262, idx=%rows_i_263
301
301
  loop col id=L26 in %rows_el_262 as el=%col_el_264, idx=%col_i_265
302
- %t266 = load_decl neighbors axes=[rows, col] ::
302
+ %t266 = load_decl neighbors axes=[rows, col] :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
303
303
  %t267 = const 2 :: integer
304
304
  %t268 = call core.eq(%t266, %t267) :: boolean
305
305
  yield %t268
@@ -267,8 +267,8 @@
267
267
  %t240 = load_decl ne axes=[rows, col] :: integer
268
268
  %t241 = load_decl sw axes=[rows, col] :: integer
269
269
  %t242 = load_decl se axes=[rows, col] :: integer
270
- %t243 = make_tuple(%t235, %t236, %t237, %t238, %t239, %t240, %t241, %t242) :: tuple<integer>
271
- %t244 = fold %t243 fn="agg.sum" ::
270
+ %t243 = make_tuple(%t235, %t236, %t237, %t238, %t239, %t240, %t241, %t242) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
271
+ %t244 = fold %t243 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
272
272
  yield %t244
273
273
  end_loop
274
274
  end_loop
@@ -288,7 +288,7 @@
288
288
  %t253 = load_input "rows" :: array
289
289
  loop rows id=L23 in %t253 as el=%rows_el_254, idx=%rows_i_255
290
290
  loop col id=L24 in %rows_el_254 as el=%col_el_256, idx=%col_i_257
291
- %t258 = load_decl neighbors axes=[rows, col] ::
291
+ %t258 = load_decl neighbors axes=[rows, col] :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
292
292
  %t259 = const 3 :: integer
293
293
  %t260 = call core.eq(%t258, %t259) :: boolean
294
294
  yield %t260
@@ -299,7 +299,7 @@
299
299
  %t261 = load_input "rows" :: array
300
300
  loop rows id=L25 in %t261 as el=%rows_el_262, idx=%rows_i_263
301
301
  loop col id=L26 in %rows_el_262 as el=%col_el_264, idx=%col_i_265
302
- %t266 = load_decl neighbors axes=[rows, col] ::
302
+ %t266 = load_decl neighbors axes=[rows, col] :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
303
303
  %t267 = const 2 :: integer
304
304
  %t268 = call core.eq(%t266, %t267) :: boolean
305
305
  yield %t268
@@ -451,8 +451,8 @@
451
451
  %t483 = gather %t470, %t482 :: integer
452
452
  %t484 = const 0 :: integer
453
453
  %t485 = select %t478, %t483, %t484 :: integer
454
- %t243 = make_tuple(%t313, %t333, %t353, %t373, %t401, %t429, %t457, %t485) :: tuple<integer>
455
- %t244 = fold %t243 fn="agg.sum" ::
454
+ %t243 = make_tuple(%t313, %t333, %t353, %t373, %t401, %t429, %t457, %t485) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
455
+ %t244 = fold %t243 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
456
456
  yield %t244
457
457
  end_loop
458
458
  end_loop
@@ -665,8 +665,8 @@
665
665
  %t687 = gather %t674, %t686 :: integer
666
666
  %t688 = const 0 :: integer
667
667
  %t689 = select %t682, %t687, %t688 :: integer
668
- %t496 = make_tuple(%t517, %t537, %t557, %t577, %t605, %t633, %t661, %t689) :: tuple<integer>
669
- %t497 = fold %t496 fn="agg.sum" ::
668
+ %t496 = make_tuple(%t517, %t537, %t557, %t577, %t605, %t633, %t661, %t689) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
669
+ %t497 = fold %t496 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
670
670
  %t259 = const 3 :: integer
671
671
  %t260 = call core.eq(%t497, %t259) :: boolean
672
672
  yield %t260
@@ -870,8 +870,8 @@
870
870
  %t890 = gather %t877, %t889 :: integer
871
871
  %t891 = const 0 :: integer
872
872
  %t892 = select %t885, %t890, %t891 :: integer
873
- %t699 = make_tuple(%t720, %t740, %t760, %t780, %t808, %t836, %t864, %t892) :: tuple<integer>
874
- %t700 = fold %t699 fn="agg.sum" ::
873
+ %t699 = make_tuple(%t720, %t740, %t760, %t780, %t808, %t836, %t864, %t892) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
874
+ %t700 = fold %t699 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
875
875
  %t267 = const 2 :: integer
876
876
  %t268 = call core.eq(%t700, %t267) :: boolean
877
877
  yield %t268
@@ -1076,8 +1076,8 @@
1076
1076
  %t1097 = gather %t1084, %t1096 :: integer
1077
1077
  %t1098 = const 0 :: integer
1078
1078
  %t1099 = select %t1092, %t1097, %t1098 :: integer
1079
- %t906 = make_tuple(%t927, %t947, %t967, %t987, %t1015, %t1043, %t1071, %t1099) :: tuple<integer>
1080
- %t907 = fold %t906 fn="agg.sum" ::
1079
+ %t906 = make_tuple(%t927, %t947, %t967, %t987, %t1015, %t1043, %t1071, %t1099) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1080
+ %t907 = fold %t906 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1081
1081
  %t895 = const 2 :: integer
1082
1082
  %t896 = call core.eq(%t907, %t895) :: boolean
1083
1083
  %t1100 = load_input "rows" :: array
@@ -1287,8 +1287,8 @@
1287
1287
  %t1309 = gather %t1296, %t1308 :: integer
1288
1288
  %t1310 = const 0 :: integer
1289
1289
  %t1311 = select %t1304, %t1309, %t1310 :: integer
1290
- %t1118 = make_tuple(%t1139, %t1159, %t1179, %t1199, %t1227, %t1255, %t1283, %t1311) :: tuple<integer>
1291
- %t1119 = fold %t1118 fn="agg.sum" ::
1290
+ %t1118 = make_tuple(%t1139, %t1159, %t1179, %t1199, %t1227, %t1255, %t1283, %t1311) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1291
+ %t1119 = fold %t1118 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1292
1292
  %t1107 = const 3 :: integer
1293
1293
  %t1108 = call core.eq(%t1119, %t1107) :: boolean
1294
1294
  %t1312 = load_input "rows" :: array
@@ -1486,8 +1486,8 @@
1486
1486
  %t1520 = gather %t1507, %t1519 :: integer
1487
1487
  %t1521 = const 0 :: integer
1488
1488
  %t1522 = select %t1515, %t1520, %t1521 :: integer
1489
- %t1329 = make_tuple(%t1350, %t1370, %t1390, %t1410, %t1438, %t1466, %t1494, %t1522) :: tuple<integer>
1490
- %t1330 = fold %t1329 fn="agg.sum" ::
1489
+ %t1329 = make_tuple(%t1350, %t1370, %t1390, %t1410, %t1438, %t1466, %t1494, %t1522) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1490
+ %t1330 = fold %t1329 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1491
1491
  %t1318 = const 2 :: integer
1492
1492
  %t1319 = call core.eq(%t1330, %t1318) :: boolean
1493
1493
  %t1523 = load_input "rows" :: array
@@ -1699,8 +1699,8 @@
1699
1699
  %t1736 = gather %t1723, %t1735 :: integer
1700
1700
  %t1737 = const 0 :: integer
1701
1701
  %t1738 = select %t1731, %t1736, %t1737 :: integer
1702
- %t1545 = make_tuple(%t1566, %t1586, %t1606, %t1626, %t1654, %t1682, %t1710, %t1738) :: tuple<integer>
1703
- %t1546 = fold %t1545 fn="agg.sum" ::
1702
+ %t1545 = make_tuple(%t1566, %t1586, %t1606, %t1626, %t1654, %t1682, %t1710, %t1738) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1703
+ %t1546 = fold %t1545 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1704
1704
  %t1534 = const 3 :: integer
1705
1705
  %t1535 = call core.eq(%t1546, %t1534) :: boolean
1706
1706
  %t1739 = load_input "rows" :: array
@@ -1898,8 +1898,8 @@
1898
1898
  %t1947 = gather %t1934, %t1946 :: integer
1899
1899
  %t1948 = const 0 :: integer
1900
1900
  %t1949 = select %t1942, %t1947, %t1948 :: integer
1901
- %t1756 = make_tuple(%t1777, %t1797, %t1817, %t1837, %t1865, %t1893, %t1921, %t1949) :: tuple<integer>
1902
- %t1757 = fold %t1756 fn="agg.sum" ::
1901
+ %t1756 = make_tuple(%t1777, %t1797, %t1817, %t1837, %t1865, %t1893, %t1921, %t1949) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1902
+ %t1757 = fold %t1756 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
1903
1903
  %t1745 = const 2 :: integer
1904
1904
  %t1746 = call core.eq(%t1757, %t1745) :: boolean
1905
1905
  %t1950 = load_input "rows" :: array
@@ -299,8 +299,8 @@
299
299
  %t482 = call core.clamp(%t362, %t298, %t452) :: integer
300
300
  %t483 = gather %t326, %t482 :: integer
301
301
  %t485 = select %t478, %t483, %t298 :: integer
302
- %t243 = make_tuple(%t313, %t333, %t353, %t373, %t401, %t429, %t457, %t485) :: tuple<integer>
303
- %t244 = fold %t243 fn="agg.sum" ::
302
+ %t243 = make_tuple(%t313, %t333, %t353, %t373, %t401, %t429, %t457, %t485) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
303
+ %t244 = fold %t243 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
304
304
  yield %t244
305
305
  end_loop
306
306
  end_loop
@@ -394,8 +394,8 @@
394
394
  %t686 = call core.clamp(%t566, %t502, %t656) :: integer
395
395
  %t687 = gather %t530, %t686 :: integer
396
396
  %t689 = select %t682, %t687, %t502 :: integer
397
- %t496 = make_tuple(%t517, %t537, %t557, %t577, %t605, %t633, %t661, %t689) :: tuple<integer>
398
- %t497 = fold %t496 fn="agg.sum" ::
397
+ %t496 = make_tuple(%t517, %t537, %t557, %t577, %t605, %t633, %t661, %t689) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
398
+ %t497 = fold %t496 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
399
399
  %t259 = const 3 :: integer
400
400
  %t260 = call core.eq(%t497, %t259) :: boolean
401
401
  yield %t260
@@ -481,8 +481,8 @@
481
481
  %t889 = call core.clamp(%t769, %t705, %t859) :: integer
482
482
  %t890 = gather %t733, %t889 :: integer
483
483
  %t892 = select %t885, %t890, %t705 :: integer
484
- %t699 = make_tuple(%t720, %t740, %t760, %t780, %t808, %t836, %t864, %t892) :: tuple<integer>
485
- %t700 = fold %t699 fn="agg.sum" ::
484
+ %t699 = make_tuple(%t720, %t740, %t760, %t780, %t808, %t836, %t864, %t892) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
485
+ %t700 = fold %t699 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
486
486
  %t267 = const 2 :: integer
487
487
  %t268 = call core.eq(%t700, %t267) :: boolean
488
488
  yield %t268
@@ -568,11 +568,12 @@
568
568
  %t1096 = call core.clamp(%t976, %t912, %t1066) :: integer
569
569
  %t1097 = gather %t940, %t1096 :: integer
570
570
  %t1099 = select %t1092, %t1097, %t912 :: integer
571
- %t906 = make_tuple(%t927, %t947, %t967, %t987, %t1015, %t1043, %t1071, %t1099) :: tuple<integer>
572
- %t907 = fold %t906 fn="agg.sum" ::
571
+ %t906 = make_tuple(%t927, %t947, %t967, %t987, %t1015, %t1043, %t1071, %t1099) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
572
+ %t907 = fold %t906 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
573
573
  %t895 = const 2 :: integer
574
574
  %t896 = call core.eq(%t907, %t895) :: boolean
575
- %t1103 = call core.gt(%col_el_272, %t912) :: boolean
575
+ %t1102 = const 0 :: integer
576
+ %t1103 = call core.gt(%col_el_272, %t1102) :: boolean
576
577
  %t276 = call core.and(%t896, %t1103) :: boolean
577
578
  yield %t276
578
579
  end_loop
@@ -657,13 +658,14 @@
657
658
  %t1308 = call core.clamp(%t1188, %t1124, %t1278) :: integer
658
659
  %t1309 = gather %t1152, %t1308 :: integer
659
660
  %t1311 = select %t1304, %t1309, %t1124 :: integer
660
- %t1118 = make_tuple(%t1139, %t1159, %t1179, %t1199, %t1227, %t1255, %t1283, %t1311) :: tuple<integer>
661
- %t1119 = fold %t1118 fn="agg.sum" ::
661
+ %t1118 = make_tuple(%t1139, %t1159, %t1179, %t1199, %t1227, %t1255, %t1283, %t1311) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
662
+ %t1119 = fold %t1118 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
662
663
  %t1107 = const 3 :: integer
663
664
  %t1108 = call core.eq(%t1119, %t1107) :: boolean
664
665
  %t1318 = const 2 :: integer
665
666
  %t1319 = call core.eq(%t1119, %t1318) :: boolean
666
- %t1526 = call core.gt(%col_el_280, %t1124) :: boolean
667
+ %t1525 = const 0 :: integer
668
+ %t1526 = call core.gt(%col_el_280, %t1525) :: boolean
667
669
  %t1315 = call core.and(%t1319, %t1526) :: boolean
668
670
  %t284 = call core.or(%t1108, %t1315) :: boolean
669
671
  yield %t284
@@ -749,16 +751,18 @@
749
751
  %t1735 = call core.clamp(%t1615, %t1551, %t1705) :: integer
750
752
  %t1736 = gather %t1579, %t1735 :: integer
751
753
  %t1738 = select %t1731, %t1736, %t1551 :: integer
752
- %t1545 = make_tuple(%t1566, %t1586, %t1606, %t1626, %t1654, %t1682, %t1710, %t1738) :: tuple<integer>
753
- %t1546 = fold %t1545 fn="agg.sum" ::
754
+ %t1545 = make_tuple(%t1566, %t1586, %t1606, %t1626, %t1654, %t1682, %t1710, %t1738) :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
755
+ %t1546 = fold %t1545 fn="agg.sum" :: tuple<integer, integer, integer, integer, integer, integer, integer, integer>
754
756
  %t1534 = const 3 :: integer
755
757
  %t1535 = call core.eq(%t1546, %t1534) :: boolean
756
758
  %t1745 = const 2 :: integer
757
759
  %t1746 = call core.eq(%t1546, %t1745) :: boolean
758
- %t1953 = call core.gt(%col_el_288, %t1551) :: boolean
760
+ %t1952 = const 0 :: integer
761
+ %t1953 = call core.gt(%col_el_288, %t1952) :: boolean
759
762
  %t1742 = call core.and(%t1746, %t1953) :: boolean
760
763
  %t1531 = call core.or(%t1535, %t1742) :: boolean
761
- %t293 = select %t1531, %t1555, %t1551 :: integer
764
+ %t291 = const 1 :: integer
765
+ %t293 = select %t1531, %t291, %t1952 :: integer
762
766
  yield %t293
763
767
  end_loop
764
768
  end_loop