kumi 0.0.31 → 0.0.33

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 (294) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +21 -1
  3. data/README.md +31 -99
  4. data/data/kernels/ruby/core/arithmetic.yaml +2 -2
  5. data/docs/COMPOSED_SCHEMAS.md +137 -0
  6. data/docs/SCHEMA_IMPORTS.md +275 -0
  7. data/docs/SYNTAX.md +48 -0
  8. data/golden/array_element/expected/schema_ruby.rb +2 -27
  9. data/golden/array_index/expected/nast.txt +6 -6
  10. data/golden/array_index/expected/schema_ruby.rb +4 -31
  11. data/golden/array_operations/expected/lir_06_const_prop.txt +4 -8
  12. data/golden/array_operations/expected/schema_javascript.mjs +4 -8
  13. data/golden/array_operations/expected/schema_ruby.rb +10 -43
  14. data/golden/cascade_logic/expected/lir_06_const_prop.txt +7 -14
  15. data/golden/cascade_logic/expected/schema_javascript.mjs +7 -14
  16. data/golden/cascade_logic/expected/schema_ruby.rb +11 -45
  17. data/golden/chained_fusion/expected/lir_06_const_prop.txt +8 -18
  18. data/golden/chained_fusion/expected/schema_javascript.mjs +8 -18
  19. data/golden/chained_fusion/expected/schema_ruby.rb +14 -53
  20. data/golden/decimal_explicit/expected/schema_ruby.rb +4 -31
  21. data/golden/element_arrays/expected/lir_06_const_prop.txt +5 -11
  22. data/golden/element_arrays/expected/schema_javascript.mjs +5 -11
  23. data/golden/element_arrays/expected/schema_ruby.rb +13 -50
  24. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +4 -31
  25. data/golden/example_xpto/expected/ast.txt +23 -0
  26. data/golden/example_xpto/expected/input_plan.txt +1 -0
  27. data/golden/example_xpto/expected/lir_00_unoptimized.txt +16 -0
  28. data/golden/example_xpto/expected/lir_01_hoist_scalar_references.txt +16 -0
  29. data/golden/example_xpto/expected/lir_02_inlined.txt +16 -0
  30. data/golden/example_xpto/expected/lir_03_cse.txt +16 -0
  31. data/golden/example_xpto/expected/lir_04_1_loop_fusion.txt +16 -0
  32. data/golden/example_xpto/expected/lir_04_loop_invcm.txt +16 -0
  33. data/golden/example_xpto/expected/lir_06_const_prop.txt +13 -0
  34. data/golden/example_xpto/expected/nast.txt +17 -0
  35. data/golden/example_xpto/expected/schema_javascript.mjs +13 -0
  36. data/golden/example_xpto/expected/schema_ruby.rb +13 -0
  37. data/golden/example_xpto/expected/snast.txt +17 -0
  38. data/golden/example_xpto/expected.json +4 -0
  39. data/golden/example_xpto/input.json +3 -0
  40. data/golden/example_xpto/schema.kumi +8 -0
  41. data/golden/function_overload/expected/schema_ruby.rb +2 -27
  42. data/golden/game_of_life/expected/lir_06_const_prop.txt +236 -287
  43. data/golden/game_of_life/expected/schema_javascript.mjs +32 -39
  44. data/golden/game_of_life/expected/schema_ruby.rb +34 -66
  45. data/golden/hash_keys/expected/lir_06_const_prop.txt +4 -10
  46. data/golden/hash_keys/expected/schema_javascript.mjs +6 -12
  47. data/golden/hash_keys/expected/schema_ruby.rb +8 -39
  48. data/golden/hash_value/expected/lir_06_const_prop.txt +3 -6
  49. data/golden/hash_value/expected/schema_javascript.mjs +3 -6
  50. data/golden/hash_value/expected/schema_ruby.rb +7 -37
  51. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +9 -18
  52. data/golden/hierarchical_complex/expected/schema_javascript.mjs +9 -18
  53. data/golden/hierarchical_complex/expected/schema_ruby.rb +14 -51
  54. data/golden/inline_rename_scope_leak/expected/lir_06_const_prop.txt +2 -6
  55. data/golden/inline_rename_scope_leak/expected/schema_javascript.mjs +2 -6
  56. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +7 -39
  57. data/golden/input_reference/expected/schema_ruby.rb +6 -35
  58. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +6 -14
  59. data/golden/interleaved_fusion/expected/schema_javascript.mjs +6 -14
  60. data/golden/interleaved_fusion/expected/schema_ruby.rb +11 -47
  61. data/golden/let_inline/expected/lir_06_const_prop.txt +1 -2
  62. data/golden/let_inline/expected/schema_javascript.mjs +1 -2
  63. data/golden/let_inline/expected/schema_ruby.rb +3 -29
  64. data/golden/loop_fusion/expected/lir_06_const_prop.txt +4 -10
  65. data/golden/loop_fusion/expected/schema_javascript.mjs +4 -10
  66. data/golden/loop_fusion/expected/schema_ruby.rb +8 -41
  67. data/golden/min_reduce_scope/expected/lir_06_const_prop.txt +3 -6
  68. data/golden/min_reduce_scope/expected/schema_javascript.mjs +3 -6
  69. data/golden/min_reduce_scope/expected/schema_ruby.rb +8 -39
  70. data/golden/mixed_dimensions/expected/lir_06_const_prop.txt +1 -2
  71. data/golden/mixed_dimensions/expected/schema_javascript.mjs +1 -2
  72. data/golden/mixed_dimensions/expected/schema_ruby.rb +5 -33
  73. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +9 -18
  74. data/golden/multirank_hoisting/expected/schema_javascript.mjs +9 -18
  75. data/golden/multirank_hoisting/expected/schema_ruby.rb +16 -55
  76. data/golden/nested_hash/expected/lir_06_const_prop.txt +1 -2
  77. data/golden/nested_hash/expected/schema_javascript.mjs +1 -2
  78. data/golden/nested_hash/expected/schema_ruby.rb +3 -29
  79. data/golden/reduction_broadcast/expected/schema_ruby.rb +5 -33
  80. data/golden/roll/expected/lir_06_const_prop.txt +8 -15
  81. data/golden/roll/expected/schema_javascript.mjs +8 -15
  82. data/golden/roll/expected/schema_ruby.rb +13 -48
  83. data/golden/schema_imports_broadcasting_with_imports/expected/ast.txt +26 -0
  84. data/golden/schema_imports_broadcasting_with_imports/expected/input_plan.txt +5 -0
  85. data/golden/schema_imports_broadcasting_with_imports/expected/lir_00_unoptimized.txt +20 -0
  86. data/golden/schema_imports_broadcasting_with_imports/expected/lir_01_hoist_scalar_references.txt +20 -0
  87. data/golden/schema_imports_broadcasting_with_imports/expected/lir_02_inlined.txt +22 -0
  88. data/golden/schema_imports_broadcasting_with_imports/expected/lir_03_cse.txt +21 -0
  89. data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_1_loop_fusion.txt +21 -0
  90. data/golden/schema_imports_broadcasting_with_imports/expected/lir_04_loop_invcm.txt +21 -0
  91. data/golden/schema_imports_broadcasting_with_imports/expected/lir_06_const_prop.txt +21 -0
  92. data/golden/schema_imports_broadcasting_with_imports/expected/nast.txt +12 -0
  93. data/golden/schema_imports_broadcasting_with_imports/expected/schema_javascript.mjs +22 -0
  94. data/golden/schema_imports_broadcasting_with_imports/expected/schema_ruby.rb +24 -0
  95. data/golden/schema_imports_broadcasting_with_imports/expected/snast.txt +12 -0
  96. data/golden/schema_imports_broadcasting_with_imports/expected.json +4 -0
  97. data/golden/schema_imports_broadcasting_with_imports/input.json +7 -0
  98. data/golden/schema_imports_broadcasting_with_imports/schema.kumi +14 -0
  99. data/golden/schema_imports_complex_order_calc/expected/ast.txt +82 -0
  100. data/golden/schema_imports_complex_order_calc/expected/input_plan.txt +16 -0
  101. data/golden/schema_imports_complex_order_calc/expected/lir_00_unoptimized.txt +94 -0
  102. data/golden/schema_imports_complex_order_calc/expected/lir_01_hoist_scalar_references.txt +94 -0
  103. data/golden/schema_imports_complex_order_calc/expected/lir_02_inlined.txt +187 -0
  104. data/golden/schema_imports_complex_order_calc/expected/lir_03_cse.txt +131 -0
  105. data/golden/schema_imports_complex_order_calc/expected/lir_04_1_loop_fusion.txt +131 -0
  106. data/golden/schema_imports_complex_order_calc/expected/lir_04_loop_invcm.txt +131 -0
  107. data/golden/schema_imports_complex_order_calc/expected/lir_06_const_prop.txt +131 -0
  108. data/golden/schema_imports_complex_order_calc/expected/nast.txt +56 -0
  109. data/golden/schema_imports_complex_order_calc/expected/schema_javascript.mjs +147 -0
  110. data/golden/schema_imports_complex_order_calc/expected/schema_ruby.rb +149 -0
  111. data/golden/schema_imports_complex_order_calc/expected/snast.txt +56 -0
  112. data/golden/schema_imports_complex_order_calc/expected.json +12 -0
  113. data/golden/schema_imports_complex_order_calc/input.json +20 -0
  114. data/golden/schema_imports_complex_order_calc/schema.kumi +33 -0
  115. data/golden/schema_imports_composed_order/expected/ast.txt +33 -0
  116. data/golden/schema_imports_composed_order/expected/input_plan.txt +3 -0
  117. data/golden/schema_imports_composed_order/expected/lir_00_unoptimized.txt +25 -0
  118. data/golden/schema_imports_composed_order/expected/lir_01_hoist_scalar_references.txt +25 -0
  119. data/golden/schema_imports_composed_order/expected/lir_02_inlined.txt +33 -0
  120. data/golden/schema_imports_composed_order/expected/lir_03_cse.txt +33 -0
  121. data/golden/schema_imports_composed_order/expected/lir_04_1_loop_fusion.txt +33 -0
  122. data/golden/schema_imports_composed_order/expected/lir_04_loop_invcm.txt +33 -0
  123. data/golden/schema_imports_composed_order/expected/lir_06_const_prop.txt +33 -0
  124. data/golden/schema_imports_composed_order/expected/nast.txt +25 -0
  125. data/golden/schema_imports_composed_order/expected/schema_javascript.mjs +35 -0
  126. data/golden/schema_imports_composed_order/expected/schema_ruby.rb +33 -0
  127. data/golden/schema_imports_composed_order/expected/snast.txt +25 -0
  128. data/golden/schema_imports_composed_order/expected.json +6 -0
  129. data/golden/schema_imports_composed_order/input.json +5 -0
  130. data/golden/schema_imports_composed_order/schema.kumi +15 -0
  131. data/golden/schema_imports_discount_with_tax/expected/ast.txt +37 -0
  132. data/golden/schema_imports_discount_with_tax/expected/input_plan.txt +2 -0
  133. data/golden/schema_imports_discount_with_tax/expected/lir_00_unoptimized.txt +30 -0
  134. data/golden/schema_imports_discount_with_tax/expected/lir_01_hoist_scalar_references.txt +30 -0
  135. data/golden/schema_imports_discount_with_tax/expected/lir_02_inlined.txt +37 -0
  136. data/golden/schema_imports_discount_with_tax/expected/lir_03_cse.txt +34 -0
  137. data/golden/schema_imports_discount_with_tax/expected/lir_04_1_loop_fusion.txt +34 -0
  138. data/golden/schema_imports_discount_with_tax/expected/lir_04_loop_invcm.txt +34 -0
  139. data/golden/schema_imports_discount_with_tax/expected/lir_06_const_prop.txt +34 -0
  140. data/golden/schema_imports_discount_with_tax/expected/nast.txt +30 -0
  141. data/golden/schema_imports_discount_with_tax/expected/schema_javascript.mjs +37 -0
  142. data/golden/schema_imports_discount_with_tax/expected/schema_ruby.rb +34 -0
  143. data/golden/schema_imports_discount_with_tax/expected/snast.txt +30 -0
  144. data/golden/schema_imports_discount_with_tax/expected.json +7 -0
  145. data/golden/schema_imports_discount_with_tax/input.json +4 -0
  146. data/golden/schema_imports_discount_with_tax/schema.kumi +15 -0
  147. data/golden/schema_imports_line_items/expected/ast.txt +35 -0
  148. data/golden/schema_imports_line_items/expected/input_plan.txt +8 -0
  149. data/golden/schema_imports_line_items/expected/lir_00_unoptimized.txt +19 -0
  150. data/golden/schema_imports_line_items/expected/lir_01_hoist_scalar_references.txt +19 -0
  151. data/golden/schema_imports_line_items/expected/lir_02_inlined.txt +24 -0
  152. data/golden/schema_imports_line_items/expected/lir_03_cse.txt +22 -0
  153. data/golden/schema_imports_line_items/expected/lir_04_1_loop_fusion.txt +22 -0
  154. data/golden/schema_imports_line_items/expected/lir_04_loop_invcm.txt +22 -0
  155. data/golden/schema_imports_line_items/expected/lir_06_const_prop.txt +22 -0
  156. data/golden/schema_imports_line_items/expected/nast.txt +19 -0
  157. data/golden/schema_imports_line_items/expected/schema_javascript.mjs +23 -0
  158. data/golden/schema_imports_line_items/expected/schema_ruby.rb +22 -0
  159. data/golden/schema_imports_line_items/expected/snast.txt +19 -0
  160. data/golden/schema_imports_line_items/expected.json +5 -0
  161. data/golden/schema_imports_line_items/input.json +13 -0
  162. data/golden/schema_imports_line_items/schema.kumi +17 -0
  163. data/golden/schema_imports_multiple/expected/ast.txt +35 -0
  164. data/golden/schema_imports_multiple/expected/input_plan.txt +2 -0
  165. data/golden/schema_imports_multiple/expected/lir_00_unoptimized.txt +29 -0
  166. data/golden/schema_imports_multiple/expected/lir_01_hoist_scalar_references.txt +29 -0
  167. data/golden/schema_imports_multiple/expected/lir_02_inlined.txt +41 -0
  168. data/golden/schema_imports_multiple/expected/lir_03_cse.txt +37 -0
  169. data/golden/schema_imports_multiple/expected/lir_04_1_loop_fusion.txt +37 -0
  170. data/golden/schema_imports_multiple/expected/lir_04_loop_invcm.txt +37 -0
  171. data/golden/schema_imports_multiple/expected/lir_06_const_prop.txt +37 -0
  172. data/golden/schema_imports_multiple/expected/nast.txt +28 -0
  173. data/golden/schema_imports_multiple/expected/schema_javascript.mjs +40 -0
  174. data/golden/schema_imports_multiple/expected/schema_ruby.rb +37 -0
  175. data/golden/schema_imports_multiple/expected/snast.txt +28 -0
  176. data/golden/schema_imports_multiple/expected.json +7 -0
  177. data/golden/schema_imports_multiple/input.json +4 -0
  178. data/golden/schema_imports_multiple/schema.kumi +15 -0
  179. data/golden/schema_imports_nested_expressions/expected/ast.txt +31 -0
  180. data/golden/schema_imports_nested_expressions/expected/input_plan.txt +3 -0
  181. data/golden/schema_imports_nested_expressions/expected/lir_00_unoptimized.txt +22 -0
  182. data/golden/schema_imports_nested_expressions/expected/lir_01_hoist_scalar_references.txt +22 -0
  183. data/golden/schema_imports_nested_expressions/expected/lir_02_inlined.txt +32 -0
  184. data/golden/schema_imports_nested_expressions/expected/lir_03_cse.txt +32 -0
  185. data/golden/schema_imports_nested_expressions/expected/lir_04_1_loop_fusion.txt +32 -0
  186. data/golden/schema_imports_nested_expressions/expected/lir_04_loop_invcm.txt +32 -0
  187. data/golden/schema_imports_nested_expressions/expected/lir_06_const_prop.txt +28 -0
  188. data/golden/schema_imports_nested_expressions/expected/nast.txt +23 -0
  189. data/golden/schema_imports_nested_expressions/expected/schema_javascript.mjs +29 -0
  190. data/golden/schema_imports_nested_expressions/expected/schema_ruby.rb +28 -0
  191. data/golden/schema_imports_nested_expressions/expected/snast.txt +23 -0
  192. data/golden/schema_imports_nested_expressions/expected.json +5 -0
  193. data/golden/schema_imports_nested_expressions/input.json +5 -0
  194. data/golden/schema_imports_nested_expressions/schema.kumi +13 -0
  195. data/golden/schema_imports_nested_with_reductions/expected/ast.txt +47 -0
  196. data/golden/schema_imports_nested_with_reductions/expected/input_plan.txt +12 -0
  197. data/golden/schema_imports_nested_with_reductions/expected/lir_00_unoptimized.txt +31 -0
  198. data/golden/schema_imports_nested_with_reductions/expected/lir_01_hoist_scalar_references.txt +31 -0
  199. data/golden/schema_imports_nested_with_reductions/expected/lir_02_inlined.txt +58 -0
  200. data/golden/schema_imports_nested_with_reductions/expected/lir_03_cse.txt +49 -0
  201. data/golden/schema_imports_nested_with_reductions/expected/lir_04_1_loop_fusion.txt +51 -0
  202. data/golden/schema_imports_nested_with_reductions/expected/lir_04_loop_invcm.txt +49 -0
  203. data/golden/schema_imports_nested_with_reductions/expected/lir_06_const_prop.txt +49 -0
  204. data/golden/schema_imports_nested_with_reductions/expected/nast.txt +23 -0
  205. data/golden/schema_imports_nested_with_reductions/expected/schema_javascript.mjs +49 -0
  206. data/golden/schema_imports_nested_with_reductions/expected/schema_ruby.rb +52 -0
  207. data/golden/schema_imports_nested_with_reductions/expected/snast.txt +23 -0
  208. data/golden/schema_imports_nested_with_reductions/expected.json +6 -0
  209. data/golden/schema_imports_nested_with_reductions/input.json +16 -0
  210. data/golden/schema_imports_nested_with_reductions/schema.kumi +23 -0
  211. data/golden/schema_imports_with_imports/expected/ast.txt +19 -0
  212. data/golden/schema_imports_with_imports/expected/input_plan.txt +1 -0
  213. data/golden/schema_imports_with_imports/expected/lir_00_unoptimized.txt +13 -0
  214. data/golden/schema_imports_with_imports/expected/lir_01_hoist_scalar_references.txt +13 -0
  215. data/golden/schema_imports_with_imports/expected/lir_02_inlined.txt +14 -0
  216. data/golden/schema_imports_with_imports/expected/lir_03_cse.txt +13 -0
  217. data/golden/schema_imports_with_imports/expected/lir_04_1_loop_fusion.txt +13 -0
  218. data/golden/schema_imports_with_imports/expected/lir_04_loop_invcm.txt +13 -0
  219. data/golden/schema_imports_with_imports/expected/lir_06_const_prop.txt +13 -0
  220. data/golden/schema_imports_with_imports/expected/nast.txt +13 -0
  221. data/golden/schema_imports_with_imports/expected/schema_javascript.mjs +13 -0
  222. data/golden/schema_imports_with_imports/expected/schema_ruby.rb +13 -0
  223. data/golden/schema_imports_with_imports/expected/snast.txt +13 -0
  224. data/golden/schema_imports_with_imports/expected.json +4 -0
  225. data/golden/schema_imports_with_imports/input.json +3 -0
  226. data/golden/schema_imports_with_imports/schema.kumi +10 -0
  227. data/golden/shift/expected/lir_06_const_prop.txt +18 -30
  228. data/golden/shift/expected/schema_javascript.mjs +18 -30
  229. data/golden/shift/expected/schema_ruby.rb +25 -67
  230. data/golden/shift_2d/expected/lir_06_const_prop.txt +36 -60
  231. data/golden/shift_2d/expected/schema_javascript.mjs +36 -60
  232. data/golden/shift_2d/expected/schema_ruby.rb +49 -109
  233. data/golden/simple_math/expected/lir_06_const_prop.txt +3 -6
  234. data/golden/simple_math/expected/schema_javascript.mjs +3 -6
  235. data/golden/simple_math/expected/schema_ruby.rb +8 -39
  236. data/golden/streaming_basics/expected/lir_06_const_prop.txt +6 -12
  237. data/golden/streaming_basics/expected/schema_javascript.mjs +6 -12
  238. data/golden/streaming_basics/expected/schema_ruby.rb +14 -51
  239. data/golden/tuples/expected/lir_06_const_prop.txt +5 -22
  240. data/golden/tuples/expected/schema_javascript.mjs +5 -22
  241. data/golden/tuples/expected/schema_ruby.rb +11 -57
  242. data/golden/tuples_and_arrays/expected/lir_06_const_prop.txt +4 -8
  243. data/golden/tuples_and_arrays/expected/schema_javascript.mjs +4 -8
  244. data/golden/tuples_and_arrays/expected/schema_ruby.rb +9 -41
  245. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +94 -171
  246. data/golden/us_tax_2024/expected/schema_javascript.mjs +13 -21
  247. data/golden/us_tax_2024/expected/schema_ruby.rb +15 -48
  248. data/golden/with_constants/expected/lir_06_const_prop.txt +3 -8
  249. data/golden/with_constants/expected/schema_javascript.mjs +3 -8
  250. data/golden/with_constants/expected/schema_ruby.rb +5 -35
  251. data/lib/kumi/analyzer.rb +8 -7
  252. data/lib/kumi/configuration.rb +7 -6
  253. data/lib/kumi/core/analyzer/passes/attach_anchors_pass.rb +1 -1
  254. data/lib/kumi/core/analyzer/passes/attach_terminal_info_pass.rb +1 -1
  255. data/lib/kumi/core/analyzer/passes/codegen/js/declaration_emitter.rb +20 -0
  256. data/lib/kumi/core/analyzer/passes/codegen/ruby/declaration_emitter.rb +16 -7
  257. data/lib/kumi/core/analyzer/passes/codegen/ruby/output_buffer.rb +3 -35
  258. data/lib/kumi/core/analyzer/passes/dependency_resolver.rb +6 -0
  259. data/lib/kumi/core/analyzer/passes/import_analysis_pass.rb +90 -0
  260. data/lib/kumi/core/analyzer/passes/lir/constant_propagation_pass.rb +77 -36
  261. data/lib/kumi/core/analyzer/passes/lir/lower_pass.rb +26 -11
  262. data/lib/kumi/core/analyzer/passes/name_indexer.rb +20 -2
  263. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +44 -0
  264. data/lib/kumi/core/analyzer/passes/normalize_to_nast_pass.rb +30 -0
  265. data/lib/kumi/core/analyzer/passes/semantic_constraint_validator.rb +5 -1
  266. data/lib/kumi/core/analyzer/passes/snast_pass.rb +15 -0
  267. data/lib/kumi/core/lir/build.rb +27 -0
  268. data/lib/kumi/core/lir/peephole.rb +164 -0
  269. data/lib/kumi/core/nast.rb +16 -0
  270. data/lib/kumi/core/ruby_parser/build_context.rb +3 -1
  271. data/lib/kumi/core/ruby_parser/parser.rb +1 -1
  272. data/lib/kumi/core/ruby_parser/schema_builder.rb +33 -3
  273. data/lib/kumi/dev/golden/result.rb +9 -3
  274. data/lib/kumi/dev/golden/runtime_test.rb +16 -1
  275. data/lib/kumi/dev/golden.rb +18 -20
  276. data/lib/kumi/dev/golden_schema_modules.rb +8 -0
  277. data/lib/kumi/dev/golden_schema_wrapper.rb +116 -0
  278. data/lib/kumi/dev/support/kumi_runner.mjs +18 -0
  279. data/lib/kumi/schema.rb +44 -2
  280. data/lib/kumi/support/lir_printer.rb +21 -5
  281. data/lib/kumi/support/nast_printer.rb +11 -0
  282. data/lib/kumi/support/s_expression_printer.rb +9 -0
  283. data/lib/kumi/support/snast_printer.rb +6 -0
  284. data/lib/kumi/syntax/import_call.rb +11 -0
  285. data/lib/kumi/syntax/import_declaration.rb +11 -0
  286. data/lib/kumi/syntax/root.rb +2 -2
  287. data/lib/kumi/test_shared_schemas/compound.rb +21 -0
  288. data/lib/kumi/test_shared_schemas/discount.rb +19 -0
  289. data/lib/kumi/test_shared_schemas/price.rb +19 -0
  290. data/lib/kumi/test_shared_schemas/subtotal.rb +22 -0
  291. data/lib/kumi/test_shared_schemas/tax.rb +18 -0
  292. data/lib/kumi/version.rb +1 -1
  293. data/lib/kumi.rb +19 -4
  294. metadata +176 -3
@@ -1,7 +1,6 @@
1
1
  export function _high_performer(input) {
2
2
  let out = [];
3
3
  let t1 = input["regions"];
4
- const t14 = 4.5;
5
4
  t1.forEach((regions_el_2, regions_i_3) => {
6
5
  let out_1 = [];
7
6
  let t4 = regions_el_2["offices"];
@@ -13,7 +12,7 @@ export function _high_performer(input) {
13
12
  let t10 = teams_el_8["employees"];
14
13
  t10.forEach((employees_el_11, employees_i_12) => {
15
14
  let t13 = employees_el_11["rating"];
16
- let t15 = t13 >= t14;
15
+ let t15 = t13 >= 4.5;
17
16
  out_3.push(t15);
18
17
  });
19
18
  out_2.push(out_3);
@@ -28,7 +27,6 @@ export function _high_performer(input) {
28
27
  export function _senior_level(input) {
29
28
  let out = [];
30
29
  let t16 = input["regions"];
31
- const t29 = "senior";
32
30
  t16.forEach((regions_el_17, regions_i_18) => {
33
31
  let out_1 = [];
34
32
  let t19 = regions_el_17["offices"];
@@ -40,7 +38,7 @@ export function _senior_level(input) {
40
38
  let t25 = teams_el_23["employees"];
41
39
  t25.forEach((employees_el_26, employees_i_27) => {
42
40
  let t28 = employees_el_26["level"];
43
- let t30 = t28 == t29;
41
+ let t30 = t28 == "senior";
44
42
  out_3.push(t30);
45
43
  });
46
44
  out_2.push(out_3);
@@ -55,7 +53,6 @@ export function _senior_level(input) {
55
53
  export function _top_team(input) {
56
54
  let out = [];
57
55
  let t31 = input["regions"];
58
- const t41 = 0.9;
59
56
  t31.forEach((regions_el_32, regions_i_33) => {
60
57
  let out_1 = [];
61
58
  let t34 = regions_el_32["offices"];
@@ -64,7 +61,7 @@ export function _top_team(input) {
64
61
  let t37 = offices_el_35["teams"];
65
62
  t37.forEach((teams_el_38, teams_i_39) => {
66
63
  let t40 = teams_el_38["performance_score"];
67
- let t42 = t40 >= t41;
64
+ let t42 = t40 >= 0.9;
68
65
  out_2.push(t42);
69
66
  });
70
67
  out_1.push(out_2);
@@ -77,12 +74,6 @@ export function _top_team(input) {
77
74
  export function _employee_bonus(input) {
78
75
  let out = [];
79
76
  let t43 = input["regions"];
80
- const t92 = 0.9;
81
- const t79 = 4.5;
82
- const t86 = "senior";
83
- const t61 = 0.3;
84
- const t67 = 0.2;
85
- const t70 = 0.05;
86
77
  t43.forEach((regions_el_44, regions_i_45) => {
87
78
  let out_1 = [];
88
79
  let t46 = regions_el_44["offices"];
@@ -92,20 +83,20 @@ export function _employee_bonus(input) {
92
83
  t49.forEach((teams_el_50, teams_i_51) => {
93
84
  let out_3 = [];
94
85
  let t91 = teams_el_50["performance_score"];
95
- let t93 = t91 >= t92;
86
+ let t93 = t91 >= 0.9;
96
87
  let t52 = teams_el_50["employees"];
97
88
  t52.forEach((employees_el_53, employees_i_54) => {
98
89
  let t78 = employees_el_53["rating"];
99
- let t80 = t78 >= t79;
90
+ let t80 = t78 >= 4.5;
100
91
  let t85 = employees_el_53["level"];
101
- let t87 = t85 == t86;
92
+ let t87 = t85 == "senior";
102
93
  let t58 = t87 && t93;
103
94
  let t59 = t80 && t58;
104
95
  let t60 = employees_el_53["salary"];
105
- let t62 = t60 * t61;
96
+ let t62 = t60 * 0.3;
106
97
  let t65 = t80 && t93;
107
- let t68 = t60 * t67;
108
- let t71 = t60 * t70;
98
+ let t68 = t60 * 0.2;
99
+ let t71 = t60 * 0.05;
109
100
  let t72 = t65 ? t68 : t71;
110
101
  let t73 = t59 ? t62 : t72;
111
102
  out_3.push(t73);
@@ -1,37 +1,8 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc526cb7ba2ac3
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 :high_performer then _high_performer
24
- when :senior_level then _senior_level
25
- when :top_team then _top_team
26
- when :employee_bonus then _employee_bonus
27
- else raise KeyError, "Unknown declaration"
28
- end
29
- end
30
-
31
- def _high_performer(input = @input)
2
+ module Kumi::Compiled::KUMI_b4a999bc336fd010ad9dfd6850c0ff7524073440568a014d8c6d492210d63608
3
+ def self._high_performer(input)
32
4
  out = []
33
5
  t1 = input["regions"] || input[:regions]
34
- t14 = 4.5
35
6
  t1.each_with_index do |regions_el_2, regions_i_3|
36
7
  out_1 = []
37
8
  t4 = regions_el_2["offices"] || regions_el_2[:offices]
@@ -43,7 +14,7 @@ module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc
43
14
  t10 = teams_el_8["employees"] || teams_el_8[:employees]
44
15
  t10.each_with_index do |employees_el_11, employees_i_12|
45
16
  t13 = employees_el_11["rating"] || employees_el_11[:rating]
46
- t15 = t13 >= t14
17
+ t15 = t13 >= 4.5
47
18
  out_3 << t15
48
19
  end
49
20
  out_2 << out_3
@@ -55,10 +26,9 @@ module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc
55
26
  out
56
27
  end
57
28
 
58
- def _senior_level(input = @input)
29
+ def self._senior_level(input)
59
30
  out = []
60
31
  t16 = input["regions"] || input[:regions]
61
- t29 = "senior"
62
32
  t16.each_with_index do |regions_el_17, regions_i_18|
63
33
  out_1 = []
64
34
  t19 = regions_el_17["offices"] || regions_el_17[:offices]
@@ -70,7 +40,7 @@ module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc
70
40
  t25 = teams_el_23["employees"] || teams_el_23[:employees]
71
41
  t25.each_with_index do |employees_el_26, employees_i_27|
72
42
  t28 = employees_el_26["level"] || employees_el_26[:level]
73
- t30 = t28 == t29
43
+ t30 = t28 == "senior"
74
44
  out_3 << t30
75
45
  end
76
46
  out_2 << out_3
@@ -82,10 +52,9 @@ module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc
82
52
  out
83
53
  end
84
54
 
85
- def _top_team(input = @input)
55
+ def self._top_team(input)
86
56
  out = []
87
57
  t31 = input["regions"] || input[:regions]
88
- t41 = 0.9
89
58
  t31.each_with_index do |regions_el_32, regions_i_33|
90
59
  out_1 = []
91
60
  t34 = regions_el_32["offices"] || regions_el_32[:offices]
@@ -94,7 +63,7 @@ module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc
94
63
  t37 = offices_el_35["teams"] || offices_el_35[:teams]
95
64
  t37.each_with_index do |teams_el_38, teams_i_39|
96
65
  t40 = teams_el_38["performance_score"] || teams_el_38[:performance_score]
97
- t42 = t40 >= t41
66
+ t42 = t40 >= 0.9
98
67
  out_2 << t42
99
68
  end
100
69
  out_1 << out_2
@@ -104,15 +73,9 @@ module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc
104
73
  out
105
74
  end
106
75
 
107
- def _employee_bonus(input = @input)
76
+ def self._employee_bonus(input)
108
77
  out = []
109
78
  t43 = input["regions"] || input[:regions]
110
- t92 = 0.9
111
- t79 = 4.5
112
- t86 = "senior"
113
- t61 = 0.3
114
- t67 = 0.2
115
- t70 = 0.05
116
79
  t43.each_with_index do |regions_el_44, regions_i_45|
117
80
  out_1 = []
118
81
  t46 = regions_el_44["offices"] || regions_el_44[:offices]
@@ -122,20 +85,20 @@ module Kumi::Compiled::KUMI_8ec94ceea868d100e7236c5727a53dd266057cbfa5edb5c01dfc
122
85
  t49.each_with_index do |teams_el_50, teams_i_51|
123
86
  out_3 = []
124
87
  t91 = teams_el_50["performance_score"] || teams_el_50[:performance_score]
125
- t93 = t91 >= t92
88
+ t93 = t91 >= 0.9
126
89
  t52 = teams_el_50["employees"] || teams_el_50[:employees]
127
90
  t52.each_with_index do |employees_el_53, employees_i_54|
128
91
  t78 = employees_el_53["rating"] || employees_el_53[:rating]
129
- t80 = t78 >= t79
92
+ t80 = t78 >= 4.5
130
93
  t85 = employees_el_53["level"] || employees_el_53[:level]
131
- t87 = t85 == t86
94
+ t87 = t85 == "senior"
132
95
  t58 = t87 && t93
133
96
  t59 = t80 && t58
134
97
  t60 = employees_el_53["salary"] || employees_el_53[:salary]
135
- t62 = t60 * t61
98
+ t62 = t60 * 0.3
136
99
  t65 = t80 && t93
137
- t68 = t60 * t67
138
- t71 = t60 * t70
100
+ t68 = t60 * 0.2
101
+ t71 = t60 * 0.05
139
102
  t72 = t65 ? t68 : t71
140
103
  t73 = t59 ? t62 : t72
141
104
  out_3 << t73
@@ -20,9 +20,7 @@
20
20
  yield %t12
21
21
  )
22
22
  (Declaration tail
23
- %t13 = const 7.0 :: float
24
- %t14 = const 5.0 :: float
25
- %t15 = call core.add(%t13, %t14) :: float
23
+ %t15 = call core.add(7.0, 5.0) :: float
26
24
  yield %t15
27
25
  )
28
26
  (Declaration out
@@ -40,9 +38,7 @@
40
38
  %acc28 = acc_add agg.sum(%acc28, %t32) :: float
41
39
  end_loop
42
40
  %t33 = acc_load %acc28 :: float
43
- %t34 = const 7.0 :: float
44
- %t35 = const 5.0 :: float
45
- %t36 = call core.add(%t34, %t35) :: float
41
+ %t36 = call core.add(7.0, 5.0) :: float
46
42
  %t19 = make_object{x: %t26, y: %t33, t: %t36} :: object
47
43
  yield %t19
48
44
  )
@@ -19,9 +19,7 @@ export function _sum_y(input) {
19
19
  }
20
20
 
21
21
  export function _tail(input) {
22
- const t13 = 7.0;
23
- const t14 = 5.0;
24
- let t15 = t13 + t14;
22
+ let t15 = 7.0 + 5.0;
25
23
  return t15;
26
24
  }
27
25
 
@@ -38,9 +36,7 @@ export function _out(input) {
38
36
  let t32 = t30["v"];
39
37
  acc28 += t32;
40
38
  });
41
- const t34 = 7.0;
42
- const t35 = 5.0;
43
- let t36 = t34 + t35;
39
+ let t36 = 7.0 + 5.0;
44
40
  let t19 = {
45
41
  "x": acc21,
46
42
  "y": acc28,
@@ -1,34 +1,6 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_e896af406023cdb9bef06f70f0dd300b87ca6f23151bc9f9f5b6fabb97cb8505
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 :sum_x then _sum_x
24
- when :sum_y then _sum_y
25
- when :tail then _tail
26
- when :out then _out
27
- else raise KeyError, "Unknown declaration"
28
- end
29
- end
30
-
31
- def _sum_x(input = @input)
2
+ module Kumi::Compiled::KUMI_c643a8d29b9013c6ecdf24ce0c4387db0982df57327c97bd1b05a3a8b2993b91
3
+ def self._sum_x(input)
32
4
  acc_1 = 0.0
33
5
  t2 = input["xs"] || input[:xs]
34
6
  t2.each_with_index do |xs_el_3, xs_i_4|
@@ -38,7 +10,7 @@ module Kumi::Compiled::KUMI_e896af406023cdb9bef06f70f0dd300b87ca6f23151bc9f9f5b6
38
10
  acc_1
39
11
  end
40
12
 
41
- def _sum_y(input = @input)
13
+ def self._sum_y(input)
42
14
  acc_7 = 0.0
43
15
  t8 = input["ys"] || input[:ys]
44
16
  t8.each_with_index do |ys_el_9, ys_i_10|
@@ -48,13 +20,11 @@ module Kumi::Compiled::KUMI_e896af406023cdb9bef06f70f0dd300b87ca6f23151bc9f9f5b6
48
20
  acc_7
49
21
  end
50
22
 
51
- def _tail(input = @input)
52
- t13 = 7.0
53
- t14 = 5.0
54
- t13 + t14
23
+ def self._tail(input)
24
+ 7.0 + 5.0
55
25
  end
56
26
 
57
- def _out(input = @input)
27
+ def self._out(input)
58
28
  acc21 = 0.0
59
29
  t22 = input["xs"] || input[:xs]
60
30
  t22.each_with_index do |t23, t24|
@@ -69,9 +39,7 @@ module Kumi::Compiled::KUMI_e896af406023cdb9bef06f70f0dd300b87ca6f23151bc9f9f5b6
69
39
  acc28 += t32
70
40
  end
71
41
  t33 = acc28
72
- t34 = 7.0
73
- t35 = 5.0
74
- t36 = t34 + t35
42
+ t36 = 7.0 + 5.0
75
43
  t19 = {
76
44
  "x" => t26,
77
45
  "y" => t33,
@@ -1,40 +1,11 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_e5a63c0ea318c059da2823266d32fe23fa0da1f4b7a7ea14ee37ceb768ad0041
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 :app_name then _app_name
24
- when :all_flags then _all_flags
25
- when :server_hostnames then _server_hostnames
26
- when :server_count then _server_count
27
- when :total_ports then _total_ports
28
- else raise KeyError, "Unknown declaration"
29
- end
30
- end
31
-
32
- def _app_name(input = @input)
2
+ module Kumi::Compiled::KUMI_48050e64f006a3402733461d279c22eaf921d1d00c06a20af060b9f90c6ec8d2
3
+ def self._app_name(input)
33
4
  t1 = input["config"] || input[:config]
34
5
  t1["app_name"] || t1[:app_name]
35
6
  end
36
7
 
37
- def _all_flags(input = @input)
8
+ def self._all_flags(input)
38
9
  out = []
39
10
  t3 = input["config"] || input[:config]
40
11
  t4 = t3["feature_flags"] || t3[:feature_flags]
@@ -44,7 +15,7 @@ module Kumi::Compiled::KUMI_e5a63c0ea318c059da2823266d32fe23fa0da1f4b7a7ea14ee37
44
15
  out
45
16
  end
46
17
 
47
- def _server_hostnames(input = @input)
18
+ def self._server_hostnames(input)
48
19
  out = []
49
20
  t7 = input["config"] || input[:config]
50
21
  t8 = t7["servers"] || t7[:servers]
@@ -55,13 +26,13 @@ module Kumi::Compiled::KUMI_e5a63c0ea318c059da2823266d32fe23fa0da1f4b7a7ea14ee37
55
26
  out
56
27
  end
57
28
 
58
- def _server_count(input = @input)
29
+ def self._server_count(input)
59
30
  t12 = input["config"] || input[:config]
60
31
  t13 = t12["servers"] || t12[:servers]
61
32
  t13.length
62
33
  end
63
34
 
64
- def _total_ports(input = @input)
35
+ def self._total_ports(input)
65
36
  acc_15 = 0
66
37
  t16 = input["config"] || input[:config]
67
38
  t17 = t16["servers"] || t16[:servers]
@@ -14,7 +14,6 @@
14
14
  )
15
15
  (Declaration payroll_tax
16
16
  %t10 = load_input "departments" :: array
17
- %t14 = const 0.15 :: float
18
17
  loop departments id=L3 in %t10 as el=%departments_el_11, idx=%departments_i_12
19
18
  %acc40 = decl_acc :: integer
20
19
  %t41 = load_field departments_el_11["employees"] :: any
@@ -23,22 +22,19 @@
23
22
  %acc40 = acc_add agg.sum(%acc40, %t44) :: integer
24
23
  end_loop
25
24
  %t45 = acc_load %acc40 :: integer
26
- %t15 = call core.mul:numeric(%t45, %t14) :: float
25
+ %t15 = call core.mul:numeric(%t45, 0.15) :: float
27
26
  yield %t15
28
27
  end_loop
29
28
  )
30
29
  (Declaration manager_count
31
30
  %t16 = load_input "departments" :: array
32
- %t24 = const "manager" :: string
33
- %t26 = const 1 :: integer
34
- %t27 = const 0 :: integer
35
31
  loop departments id=L4 in %t16 as el=%departments_el_17, idx=%departments_i_18
36
32
  %acc_19 = decl_acc :: integer
37
33
  %t20 = load_field departments_el_17["employees"] :: any
38
34
  loop employees id=L5 in %t20 as el=%employees_el_21, idx=%employees_i_22
39
35
  %t23 = load_field employees_el_21["role"] :: string
40
- %t25 = call core.eq(%t23, %t24) :: boolean
41
- %t28 = select %t25, %t26, %t27 :: integer
36
+ %t25 = call core.eq(%t23, "manager") :: boolean
37
+ %t28 = select %t25, 1, 0 :: integer
42
38
  %acc_19 = acc_add agg.sum(%acc_19, %t28) :: integer
43
39
  end_loop
44
40
  %t29 = acc_load %acc_19 :: integer
@@ -47,10 +43,6 @@
47
43
  )
48
44
  (Declaration department_summary
49
45
  %t30 = load_input "departments" :: array
50
- %t56 = const 0.15 :: float
51
- %t73 = const "manager" :: string
52
- %t75 = const 1 :: integer
53
- %t76 = const 0 :: integer
54
46
  loop departments id=L6 in %t30 as el=%departments_el_31, idx=%departments_i_32
55
47
  %t33 = load_field departments_el_31["name"] :: string
56
48
  %acc48 = decl_acc :: integer
@@ -62,14 +54,14 @@
62
54
  %acc48 = acc_add agg.sum(%acc48, %t52) :: integer
63
55
  %acc60 = acc_add agg.sum(%acc60, %t52) :: integer
64
56
  %t72 = load_field t50["role"] :: string
65
- %t74 = call core.eq(%t72, %t73) :: boolean
66
- %t77 = select %t74, %t75, %t76 :: integer
57
+ %t74 = call core.eq(%t72, "manager") :: boolean
58
+ %t77 = select %t74, 1, 0 :: integer
67
59
  %acc68 = acc_add agg.sum(%acc68, %t77) :: integer
68
60
  end_loop
69
61
  %t53 = acc_load %acc48 :: integer
70
62
  %t65 = acc_load %acc60 :: integer
71
63
  %t78 = acc_load %acc68 :: integer
72
- %t57 = call core.mul:numeric(%t65, %t56) :: float
64
+ %t57 = call core.mul:numeric(%t65, 0.15) :: float
73
65
  %t37 = make_object{name: %t33, payroll: %t53, tax: %t57, managers: %t78} :: object
74
66
  yield %t37
75
67
  end_loop
@@ -16,7 +16,6 @@ export function _total_payroll(input) {
16
16
  export function _payroll_tax(input) {
17
17
  let out = [];
18
18
  let t10 = input["departments"];
19
- const t14 = 0.15;
20
19
  t10.forEach((departments_el_11, departments_i_12) => {
21
20
  let acc40 = 0;
22
21
  let t41 = departments_el_11["employees"];
@@ -24,7 +23,7 @@ export function _payroll_tax(input) {
24
23
  let t44 = t42["salary"];
25
24
  acc40 += t44;
26
25
  });
27
- let t15 = acc40 * t14;
26
+ let t15 = acc40 * 0.15;
28
27
  out.push(t15);
29
28
  });
30
29
  return out;
@@ -33,16 +32,13 @@ export function _payroll_tax(input) {
33
32
  export function _manager_count(input) {
34
33
  let out = [];
35
34
  let t16 = input["departments"];
36
- const t24 = "manager";
37
- const t26 = 1;
38
- const t27 = 0;
39
35
  t16.forEach((departments_el_17, departments_i_18) => {
40
36
  let acc_19 = 0;
41
37
  let t20 = departments_el_17["employees"];
42
38
  t20.forEach((employees_el_21, employees_i_22) => {
43
39
  let t23 = employees_el_21["role"];
44
- let t25 = t23 == t24;
45
- let t28 = t25 ? t26 : t27;
40
+ let t25 = t23 == "manager";
41
+ let t28 = t25 ? 1 : 0;
46
42
  acc_19 += t28;
47
43
  });
48
44
  out.push(acc_19);
@@ -53,10 +49,6 @@ export function _manager_count(input) {
53
49
  export function _department_summary(input) {
54
50
  let out = [];
55
51
  let t30 = input["departments"];
56
- const t56 = 0.15;
57
- const t73 = "manager";
58
- const t75 = 1;
59
- const t76 = 0;
60
52
  t30.forEach((departments_el_31, departments_i_32) => {
61
53
  let t33 = departments_el_31["name"];
62
54
  let acc48 = 0;
@@ -68,11 +60,11 @@ export function _department_summary(input) {
68
60
  acc48 += t52;
69
61
  acc60 += t52;
70
62
  let t72 = t50["role"];
71
- let t74 = t72 == t73;
72
- let t77 = t74 ? t75 : t76;
63
+ let t74 = t72 == "manager";
64
+ let t77 = t74 ? 1 : 0;
73
65
  acc68 += t77;
74
66
  });
75
- let t57 = acc60 * t56;
67
+ let t57 = acc60 * 0.15;
76
68
  let t37 = {
77
69
  "name": t33,
78
70
  "payroll": acc48,
@@ -1,34 +1,6 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_4323eb829f35622b045d2fd46bf95a877a7a4caa6feea5cfb6943797c4a90ff6
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 :total_payroll then _total_payroll
24
- when :payroll_tax then _payroll_tax
25
- when :manager_count then _manager_count
26
- when :department_summary then _department_summary
27
- else raise KeyError, "Unknown declaration"
28
- end
29
- end
30
-
31
- def _total_payroll(input = @input)
2
+ module Kumi::Compiled::KUMI_49c50f95b0a18544a5364cc73e6fc48d0d3047a41b6fcdd5317f0db224080a3c
3
+ def self._total_payroll(input)
32
4
  out = []
33
5
  t1 = input["departments"] || input[:departments]
34
6
  t1.each_with_index do |departments_el_2, departments_i_3|
@@ -44,10 +16,9 @@ module Kumi::Compiled::KUMI_4323eb829f35622b045d2fd46bf95a877a7a4caa6feea5cfb694
44
16
  out
45
17
  end
46
18
 
47
- def _payroll_tax(input = @input)
19
+ def self._payroll_tax(input)
48
20
  out = []
49
21
  t10 = input["departments"] || input[:departments]
50
- t14 = 0.15
51
22
  t10.each_with_index do |departments_el_11, departments_i_12|
52
23
  acc40 = 0
53
24
  t41 = departments_el_11["employees"] || departments_el_11[:employees]
@@ -56,25 +27,22 @@ module Kumi::Compiled::KUMI_4323eb829f35622b045d2fd46bf95a877a7a4caa6feea5cfb694
56
27
  acc40 += t44
57
28
  end
58
29
  t45 = acc40
59
- t15 = t45 * t14
30
+ t15 = t45 * 0.15
60
31
  out << t15
61
32
  end
62
33
  out
63
34
  end
64
35
 
65
- def _manager_count(input = @input)
36
+ def self._manager_count(input)
66
37
  out = []
67
38
  t16 = input["departments"] || input[:departments]
68
- t24 = "manager"
69
- t26 = 1
70
- t27 = 0
71
39
  t16.each_with_index do |departments_el_17, departments_i_18|
72
40
  acc_19 = 0
73
41
  t20 = departments_el_17["employees"] || departments_el_17[:employees]
74
42
  t20.each_with_index do |employees_el_21, employees_i_22|
75
43
  t23 = employees_el_21["role"] || employees_el_21[:role]
76
- t25 = t23 == t24
77
- t28 = t25 ? t26 : t27
44
+ t25 = t23 == "manager"
45
+ t28 = t25 ? 1 : 0
78
46
  acc_19 += t28
79
47
  end
80
48
  t29 = acc_19
@@ -83,13 +51,9 @@ module Kumi::Compiled::KUMI_4323eb829f35622b045d2fd46bf95a877a7a4caa6feea5cfb694
83
51
  out
84
52
  end
85
53
 
86
- def _department_summary(input = @input)
54
+ def self._department_summary(input)
87
55
  out = []
88
56
  t30 = input["departments"] || input[:departments]
89
- t56 = 0.15
90
- t73 = "manager"
91
- t75 = 1
92
- t76 = 0
93
57
  t30.each_with_index do |departments_el_31, departments_i_32|
94
58
  t33 = departments_el_31["name"] || departments_el_31[:name]
95
59
  acc48 = 0
@@ -101,14 +65,14 @@ module Kumi::Compiled::KUMI_4323eb829f35622b045d2fd46bf95a877a7a4caa6feea5cfb694
101
65
  acc48 += t52
102
66
  acc60 += t52
103
67
  t72 = t50["role"] || t50[:role]
104
- t74 = t72 == t73
105
- t77 = t74 ? t75 : t76
68
+ t74 = t72 == "manager"
69
+ t77 = t74 ? 1 : 0
106
70
  acc68 += t77
107
71
  end
108
72
  t53 = acc48
109
73
  t65 = acc60
110
74
  t78 = acc68
111
- t57 = t65 * t56
75
+ t57 = t65 * 0.15
112
76
  t37 = {
113
77
  "name" => t33,
114
78
  "payroll" => t53,
@@ -23,8 +23,7 @@
23
23
  %t25 = load_input "y" :: integer
24
24
  %t27 = call core.mul:numeric(%t25, %t25) :: integer
25
25
  %t21 = call core.add(%t24, %t27) :: integer
26
- %t11 = const 0.5 :: float
27
- %t12 = call core.pow(%t21, %t11) :: float
26
+ %t12 = call core.pow(%t21, 0.5) :: float
28
27
  yield %t12
29
28
  )
30
29
  )
@@ -4,8 +4,7 @@ export function _distance(input) {
4
4
  let t25 = input["y"];
5
5
  let t27 = t25 * t25;
6
6
  let t21 = t24 + t27;
7
- const t11 = 0.5;
8
- let t12 = Math.pow(t21, t11);
7
+ let t12 = Math.pow(t21, 0.5);
9
8
  return t12;
10
9
  }
11
10