kumi 0.0.26 → 0.0.28

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 (177) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/CLAUDE.md +4 -0
  4. data/README.md +36 -12
  5. data/data/functions/core/arithmetic.yaml +28 -8
  6. data/data/functions/core/boolean.yaml +8 -3
  7. data/data/functions/core/comparison.yaml +12 -4
  8. data/data/functions/core/conversion.yaml +32 -0
  9. data/data/kernels/javascript/core/arithmetic.yaml +6 -2
  10. data/data/kernels/javascript/core/coercion.yaml +20 -0
  11. data/data/kernels/ruby/core/arithmetic.yaml +7 -2
  12. data/data/kernels/ruby/core/coercion.yaml +20 -0
  13. data/docs/ARCHITECTURE.md +277 -0
  14. data/docs/DEVELOPMENT.md +62 -0
  15. data/docs/FUNCTIONS.md +955 -0
  16. data/docs/SYNTAX.md +8 -0
  17. data/docs/VSCODE_EXTENSION.md +114 -0
  18. data/docs/functions-reference.json +1821 -0
  19. data/golden/array_element/expected/schema_ruby.rb +1 -1
  20. data/golden/array_index/expected/lir_00_unoptimized.txt +2 -2
  21. data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +2 -2
  22. data/golden/array_index/expected/lir_02_inlined.txt +2 -2
  23. data/golden/array_index/expected/lir_03_cse.txt +2 -2
  24. data/golden/array_index/expected/lir_04_1_loop_fusion.txt +2 -2
  25. data/golden/array_index/expected/lir_04_loop_invcm.txt +2 -2
  26. data/golden/array_index/expected/lir_06_const_prop.txt +2 -2
  27. data/golden/array_index/expected/schema_ruby.rb +1 -1
  28. data/golden/array_index/expected/snast.txt +2 -2
  29. data/golden/array_operations/expected/lir_00_unoptimized.txt +2 -2
  30. data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +2 -2
  31. data/golden/array_operations/expected/lir_02_inlined.txt +2 -2
  32. data/golden/array_operations/expected/lir_03_cse.txt +2 -2
  33. data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +2 -2
  34. data/golden/array_operations/expected/lir_04_loop_invcm.txt +2 -2
  35. data/golden/array_operations/expected/lir_06_const_prop.txt +2 -2
  36. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  37. data/golden/array_operations/expected/snast.txt +2 -2
  38. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  39. data/golden/chained_fusion/expected/schema_ruby.rb +1 -1
  40. data/golden/decimal_explicit/expected/ast.txt +38 -0
  41. data/golden/decimal_explicit/expected/input_plan.txt +3 -0
  42. data/golden/decimal_explicit/expected/lir_00_unoptimized.txt +30 -0
  43. data/golden/decimal_explicit/expected/lir_01_hoist_scalar_references.txt +30 -0
  44. data/golden/decimal_explicit/expected/lir_02_inlined.txt +44 -0
  45. data/golden/decimal_explicit/expected/lir_03_cse.txt +40 -0
  46. data/golden/decimal_explicit/expected/lir_04_1_loop_fusion.txt +40 -0
  47. data/golden/decimal_explicit/expected/lir_04_loop_invcm.txt +40 -0
  48. data/golden/decimal_explicit/expected/lir_06_const_prop.txt +40 -0
  49. data/golden/decimal_explicit/expected/nast.txt +30 -0
  50. data/golden/decimal_explicit/expected/schema_javascript.mjs +31 -0
  51. data/golden/decimal_explicit/expected/schema_ruby.rb +57 -0
  52. data/golden/decimal_explicit/expected/snast.txt +30 -0
  53. data/golden/decimal_explicit/expected.json +1 -0
  54. data/golden/decimal_explicit/input.json +5 -0
  55. data/golden/decimal_explicit/schema.kumi +14 -0
  56. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  57. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +1 -1
  58. data/golden/function_overload/expected/schema_ruby.rb +1 -1
  59. data/golden/game_of_life/expected/schema_ruby.rb +1 -1
  60. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  61. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  62. data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +3 -3
  63. data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +3 -3
  64. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +3 -3
  65. data/golden/hierarchical_complex/expected/lir_03_cse.txt +3 -3
  66. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +3 -3
  67. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +3 -3
  68. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +3 -3
  69. data/golden/hierarchical_complex/expected/schema_ruby.rb +1 -1
  70. data/golden/hierarchical_complex/expected/snast.txt +3 -3
  71. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +1 -1
  72. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  73. data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +1 -1
  74. data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +1 -1
  75. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +2 -2
  76. data/golden/interleaved_fusion/expected/lir_03_cse.txt +2 -2
  77. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +2 -2
  78. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +2 -2
  79. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +2 -2
  80. data/golden/interleaved_fusion/expected/schema_ruby.rb +1 -1
  81. data/golden/interleaved_fusion/expected/snast.txt +1 -1
  82. data/golden/let_inline/expected/lir_00_unoptimized.txt +2 -2
  83. data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +2 -2
  84. data/golden/let_inline/expected/lir_02_inlined.txt +6 -6
  85. data/golden/let_inline/expected/lir_03_cse.txt +6 -6
  86. data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +6 -6
  87. data/golden/let_inline/expected/lir_04_loop_invcm.txt +6 -6
  88. data/golden/let_inline/expected/lir_06_const_prop.txt +6 -6
  89. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  90. data/golden/let_inline/expected/snast.txt +2 -2
  91. data/golden/loop_fusion/expected/schema_ruby.rb +1 -1
  92. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  93. data/golden/mixed_dimensions/expected/schema_ruby.rb +1 -1
  94. data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +2 -2
  95. data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +2 -2
  96. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +7 -7
  97. data/golden/multirank_hoisting/expected/lir_03_cse.txt +7 -7
  98. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +7 -7
  99. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +7 -7
  100. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +7 -7
  101. data/golden/multirank_hoisting/expected/schema_ruby.rb +1 -1
  102. data/golden/multirank_hoisting/expected/snast.txt +2 -2
  103. data/golden/nested_hash/expected/lir_00_unoptimized.txt +1 -1
  104. data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +1 -1
  105. data/golden/nested_hash/expected/lir_02_inlined.txt +1 -1
  106. data/golden/nested_hash/expected/lir_03_cse.txt +1 -1
  107. data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +1 -1
  108. data/golden/nested_hash/expected/lir_04_loop_invcm.txt +1 -1
  109. data/golden/nested_hash/expected/lir_06_const_prop.txt +1 -1
  110. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  111. data/golden/nested_hash/expected/snast.txt +1 -1
  112. data/golden/reduction_broadcast/expected/schema_ruby.rb +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 +2 -2
  117. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +2 -2
  118. data/golden/simple_math/expected/lir_02_inlined.txt +2 -2
  119. data/golden/simple_math/expected/lir_03_cse.txt +2 -2
  120. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +2 -2
  121. data/golden/simple_math/expected/lir_04_loop_invcm.txt +2 -2
  122. data/golden/simple_math/expected/lir_06_const_prop.txt +2 -2
  123. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  124. data/golden/simple_math/expected/snast.txt +2 -2
  125. data/golden/streaming_basics/expected/lir_00_unoptimized.txt +3 -3
  126. data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +3 -3
  127. data/golden/streaming_basics/expected/lir_02_inlined.txt +9 -9
  128. data/golden/streaming_basics/expected/lir_03_cse.txt +7 -7
  129. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +7 -7
  130. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +7 -7
  131. data/golden/streaming_basics/expected/lir_06_const_prop.txt +7 -7
  132. data/golden/streaming_basics/expected/schema_ruby.rb +1 -1
  133. data/golden/streaming_basics/expected/snast.txt +3 -3
  134. data/golden/tuples/expected/schema_ruby.rb +1 -1
  135. data/golden/tuples_and_arrays/expected/schema_ruby.rb +1 -1
  136. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +6 -6
  137. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +6 -6
  138. data/golden/us_tax_2024/expected/lir_02_inlined.txt +71 -71
  139. data/golden/us_tax_2024/expected/lir_03_cse.txt +43 -43
  140. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +48 -48
  141. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +43 -43
  142. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +43 -43
  143. data/golden/us_tax_2024/expected/schema_ruby.rb +1 -1
  144. data/golden/us_tax_2024/expected/snast.txt +6 -6
  145. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  146. data/lib/kumi/configuration.rb +6 -0
  147. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +1 -1
  148. data/lib/kumi/core/error_reporter.rb +1 -1
  149. data/lib/kumi/core/errors.rb +1 -1
  150. data/lib/kumi/core/functions/overload_resolver.rb +57 -11
  151. data/lib/kumi/core/functions/type_categories.rb +44 -0
  152. data/lib/kumi/core/input/type_matcher.rb +8 -1
  153. data/lib/kumi/core/ruby_parser/input_builder.rb +2 -2
  154. data/lib/kumi/core/types/normalizer.rb +1 -0
  155. data/lib/kumi/core/types/validator.rb +2 -2
  156. data/lib/kumi/core/types.rb +2 -2
  157. data/lib/kumi/dev/golden/reporter.rb +9 -0
  158. data/lib/kumi/dev/golden/result.rb +3 -1
  159. data/lib/kumi/dev/golden/runtime_test.rb +25 -0
  160. data/lib/kumi/dev/golden/suite.rb +4 -4
  161. data/lib/kumi/dev/golden/value_normalizer.rb +80 -0
  162. data/lib/kumi/dev/golden.rb +21 -12
  163. data/lib/kumi/doc_generator/formatters/json.rb +39 -0
  164. data/lib/kumi/doc_generator/formatters/markdown.rb +175 -0
  165. data/lib/kumi/doc_generator/loader.rb +37 -0
  166. data/lib/kumi/doc_generator/merger.rb +54 -0
  167. data/lib/kumi/doc_generator.rb +4 -0
  168. data/lib/kumi/frontends/text.rb +33 -5
  169. data/lib/kumi/syntax/location.rb +5 -1
  170. data/lib/kumi/version.rb +1 -1
  171. data/vscode-extension/.gitignore +4 -0
  172. data/vscode-extension/README.md +59 -0
  173. data/vscode-extension/TESTING.md +151 -0
  174. data/vscode-extension/package.json +51 -0
  175. data/vscode-extension/src/extension.ts +295 -0
  176. data/vscode-extension/tsconfig.json +15 -0
  177. metadata +38 -1
@@ -2,13 +2,13 @@
2
2
  (Declaration state_tax
3
3
  %t1 = load_input "income" :: float
4
4
  %t2 = load_input "state_rate" :: float
5
- %t3 = call core.mul(%t1, %t2) :: float
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: float
6
6
  yield %t3
7
7
  )
8
8
  (Declaration local_tax
9
9
  %t4 = load_input "income" :: float
10
10
  %t5 = load_input "local_rate" :: float
11
- %t6 = call core.mul(%t4, %t5) :: float
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: float
12
12
  yield %t6
13
13
  )
14
14
  (Declaration taxable
@@ -117,7 +117,7 @@
117
117
  %t248 = call core.sub(%t267, %t259) :: float
118
118
  %t249 = call core.clamp(%t244, %t254, %t248) :: float
119
119
  %t279 = load_field rates_el_69["rate"] :: float
120
- %t73 = call core.mul(%t249, %t279) :: float
120
+ %t73 = call core.mul:numeric(%t249, %t279) :: float
121
121
  %acc_67 = acc_add agg.sum(%acc_67, %t73) :: float
122
122
  end_loop
123
123
  %t74 = acc_load %acc_67 :: float
@@ -202,7 +202,7 @@
202
202
  %t372 = call core.sub(%t391, %t383) :: float
203
203
  %t373 = call core.clamp(%t368, %t378, %t372) :: float
204
204
  %t403 = load_field t358["rate"] :: float
205
- %t362 = call core.mul(%t373, %t403) :: float
205
+ %t362 = call core.mul:numeric(%t373, %t403) :: float
206
206
  %acc356 = acc_add agg.sum(%acc356, %t362) :: float
207
207
  end_loop
208
208
  %t363 = acc_load %acc356 :: float
@@ -224,7 +224,7 @@
224
224
  %t113 = make_tuple(%t111, %t112) :: tuple<float, float>
225
225
  %t114 = fold %t113 fn="agg.min" :: float
226
226
  %t115 = const 0.062 :: float
227
- %t116 = call core.mul(%t114, %t115) :: float
227
+ %t116 = call core.mul:numeric(%t114, %t115) :: float
228
228
  yield %t116
229
229
  )
230
230
  (Declaration med_base_rate
@@ -234,7 +234,7 @@
234
234
  (Declaration med_tax
235
235
  %t118 = load_input "income" :: float
236
236
  %t119 = const 0.0145 :: float
237
- %t120 = call core.mul(%t118, %t119) :: float
237
+ %t120 = call core.mul:numeric(%t118, %t119) :: float
238
238
  yield %t120
239
239
  )
240
240
  (Declaration addl_med_rate
@@ -251,7 +251,7 @@
251
251
  %t127 = call core.sub(%t125, %t126) :: float
252
252
  %t129 = make_tuple(%t127, %t128) :: tuple<float, integer>
253
253
  %t130 = fold %t129 fn="agg.max" :: float
254
- %t132 = call core.mul(%t130, %t131) :: float
254
+ %t132 = call core.mul:numeric(%t130, %t131) :: float
255
255
  yield %t132
256
256
  end_loop
257
257
  )
@@ -262,9 +262,9 @@
262
262
  %t406 = make_tuple(%t404, %t405) :: tuple<float, float>
263
263
  %t407 = fold %t406 fn="agg.min" :: float
264
264
  %t408 = const 0.062 :: float
265
- %t409 = call core.mul(%t407, %t408) :: float
265
+ %t409 = call core.mul:numeric(%t407, %t408) :: float
266
266
  %t411 = const 0.0145 :: float
267
- %t412 = call core.mul(%t404, %t411) :: float
267
+ %t412 = call core.mul:numeric(%t404, %t411) :: float
268
268
  %t138 = call core.add(%t409, %t412) :: float
269
269
  %t417 = const 0 :: integer
270
270
  %t420 = const 0.009 :: float
@@ -273,7 +273,7 @@
273
273
  %t416 = call core.sub(%t404, %t415) :: float
274
274
  %t418 = make_tuple(%t416, %t417) :: tuple<float, integer>
275
275
  %t419 = fold %t418 fn="agg.max" :: float
276
- %t421 = call core.mul(%t419, %t420) :: float
276
+ %t421 = call core.mul:numeric(%t419, %t420) :: float
277
277
  %t140 = call core.add(%t138, %t421) :: float
278
278
  yield %t140
279
279
  end_loop
@@ -284,9 +284,9 @@
284
284
  %t430 = make_tuple(%t428, %t429) :: tuple<float, float>
285
285
  %t431 = fold %t430 fn="agg.min" :: float
286
286
  %t432 = const 0.062 :: float
287
- %t433 = call core.mul(%t431, %t432) :: float
287
+ %t433 = call core.mul:numeric(%t431, %t432) :: float
288
288
  %t435 = const 0.0145 :: float
289
- %t436 = call core.mul(%t428, %t435) :: float
289
+ %t436 = call core.mul:numeric(%t428, %t435) :: float
290
290
  %t141 = load_input "statuses" :: array
291
291
  %t425 = call core.add(%t433, %t436) :: float
292
292
  %t441 = const 0 :: integer
@@ -299,7 +299,7 @@
299
299
  %t440 = call core.sub(%t428, %t439) :: float
300
300
  %t442 = make_tuple(%t440, %t441) :: tuple<float, integer>
301
301
  %t443 = fold %t442 fn="agg.max" :: float
302
- %t445 = call core.mul(%t443, %t444) :: float
302
+ %t445 = call core.mul:numeric(%t443, %t444) :: float
303
303
  %t427 = call core.add(%t425, %t445) :: float
304
304
  %t149 = call core.div(%t427, %t148) :: float
305
305
  yield %t149
@@ -311,14 +311,14 @@
311
311
  %t510 = make_tuple(%t508, %t509) :: tuple<float, float>
312
312
  %t511 = fold %t510 fn="agg.min" :: float
313
313
  %t512 = const 0.062 :: float
314
- %t513 = call core.mul(%t511, %t512) :: float
314
+ %t513 = call core.mul:numeric(%t511, %t512) :: float
315
315
  %t515 = const 0.0145 :: float
316
- %t516 = call core.mul(%t508, %t515) :: float
316
+ %t516 = call core.mul:numeric(%t508, %t515) :: float
317
317
  %t150 = load_input "statuses" :: array
318
318
  %t447 = load_input "state_rate" :: float
319
- %t448 = call core.mul(%t508, %t447) :: float
319
+ %t448 = call core.mul:numeric(%t508, %t447) :: float
320
320
  %t450 = load_input "local_rate" :: float
321
- %t451 = call core.mul(%t508, %t450) :: float
321
+ %t451 = call core.mul:numeric(%t508, %t450) :: float
322
322
  %t476 = const 0 :: integer
323
323
  %t505 = call core.add(%t513, %t516) :: float
324
324
  %t524 = const 0.009 :: float
@@ -344,10 +344,10 @@
344
344
  %t470 = call core.sub(%t489, %t481) :: float
345
345
  %t471 = call core.clamp(%t466, %t476, %t470) :: float
346
346
  %t501 = load_field t456["rate"] :: float
347
- %t460 = call core.mul(%t471, %t501) :: float
347
+ %t460 = call core.mul:numeric(%t471, %t501) :: float
348
348
  %acc454 = acc_add agg.sum(%acc454, %t460) :: float
349
349
  end_loop
350
- %t525 = call core.mul(%t523, %t524) :: float
350
+ %t525 = call core.mul:numeric(%t523, %t524) :: float
351
351
  %t461 = acc_load %acc454 :: float
352
352
  %t507 = call core.add(%t505, %t525) :: float
353
353
  %t155 = call core.add(%t461, %t507) :: float
@@ -359,16 +359,16 @@
359
359
  (Declaration total_eff
360
360
  %t534 = load_input "income" :: float
361
361
  %t535 = load_input "state_rate" :: float
362
- %t536 = call core.mul(%t534, %t535) :: float
362
+ %t536 = call core.mul:numeric(%t534, %t535) :: float
363
363
  %t538 = load_input "local_rate" :: float
364
- %t539 = call core.mul(%t534, %t538) :: float
364
+ %t539 = call core.mul:numeric(%t534, %t538) :: float
365
365
  %t597 = const 168600.0 :: float
366
366
  %t598 = make_tuple(%t534, %t597) :: tuple<float, float>
367
367
  %t599 = fold %t598 fn="agg.min" :: float
368
368
  %t600 = const 0.062 :: float
369
- %t601 = call core.mul(%t599, %t600) :: float
369
+ %t601 = call core.mul:numeric(%t599, %t600) :: float
370
370
  %t603 = const 0.0145 :: float
371
- %t604 = call core.mul(%t534, %t603) :: float
371
+ %t604 = call core.mul:numeric(%t534, %t603) :: float
372
372
  %t160 = load_input "statuses" :: array
373
373
  %t564 = const 0 :: integer
374
374
  %t593 = call core.add(%t601, %t604) :: float
@@ -398,10 +398,10 @@
398
398
  %t558 = call core.sub(%t577, %t569) :: float
399
399
  %t559 = call core.clamp(%t554, %t564, %t558) :: float
400
400
  %t589 = load_field t544["rate"] :: float
401
- %t548 = call core.mul(%t559, %t589) :: float
401
+ %t548 = call core.mul:numeric(%t559, %t589) :: float
402
402
  %acc542 = acc_add agg.sum(%acc542, %t548) :: float
403
403
  end_loop
404
- %t613 = call core.mul(%t611, %t612) :: float
404
+ %t613 = call core.mul:numeric(%t611, %t612) :: float
405
405
  %t549 = acc_load %acc542 :: float
406
406
  %t595 = call core.add(%t593, %t613) :: float
407
407
  %t531 = call core.add(%t549, %t595) :: float
@@ -414,16 +414,16 @@
414
414
  (Declaration after_tax
415
415
  %t622 = load_input "income" :: float
416
416
  %t623 = load_input "state_rate" :: float
417
- %t624 = call core.mul(%t622, %t623) :: float
417
+ %t624 = call core.mul:numeric(%t622, %t623) :: float
418
418
  %t626 = load_input "local_rate" :: float
419
- %t627 = call core.mul(%t622, %t626) :: float
419
+ %t627 = call core.mul:numeric(%t622, %t626) :: float
420
420
  %t685 = const 168600.0 :: float
421
421
  %t686 = make_tuple(%t622, %t685) :: tuple<float, float>
422
422
  %t687 = fold %t686 fn="agg.min" :: float
423
423
  %t688 = const 0.062 :: float
424
- %t689 = call core.mul(%t687, %t688) :: float
424
+ %t689 = call core.mul:numeric(%t687, %t688) :: float
425
425
  %t691 = const 0.0145 :: float
426
- %t692 = call core.mul(%t622, %t691) :: float
426
+ %t692 = call core.mul:numeric(%t622, %t691) :: float
427
427
  %t169 = load_input "statuses" :: array
428
428
  %t652 = const 0 :: integer
429
429
  %t681 = call core.add(%t689, %t692) :: float
@@ -450,10 +450,10 @@
450
450
  %t646 = call core.sub(%t665, %t657) :: float
451
451
  %t647 = call core.clamp(%t642, %t652, %t646) :: float
452
452
  %t677 = load_field t632["rate"] :: float
453
- %t636 = call core.mul(%t647, %t677) :: float
453
+ %t636 = call core.mul:numeric(%t647, %t677) :: float
454
454
  %acc630 = acc_add agg.sum(%acc630, %t636) :: float
455
455
  end_loop
456
- %t701 = call core.mul(%t699, %t700) :: float
456
+ %t701 = call core.mul:numeric(%t699, %t700) :: float
457
457
  %t637 = acc_load %acc630 :: float
458
458
  %t683 = call core.add(%t681, %t701) :: float
459
459
  %t619 = call core.add(%t637, %t683) :: float
@@ -466,16 +466,16 @@
466
466
  (Declaration take_home
467
467
  %t714 = load_input "income" :: float
468
468
  %t715 = load_input "state_rate" :: float
469
- %t716 = call core.mul(%t714, %t715) :: float
469
+ %t716 = call core.mul:numeric(%t714, %t715) :: float
470
470
  %t718 = load_input "local_rate" :: float
471
- %t719 = call core.mul(%t714, %t718) :: float
471
+ %t719 = call core.mul:numeric(%t714, %t718) :: float
472
472
  %t777 = const 168600.0 :: float
473
473
  %t778 = make_tuple(%t714, %t777) :: tuple<float, float>
474
474
  %t779 = fold %t778 fn="agg.min" :: float
475
475
  %t780 = const 0.062 :: float
476
- %t781 = call core.mul(%t779, %t780) :: float
476
+ %t781 = call core.mul:numeric(%t779, %t780) :: float
477
477
  %t783 = const 0.0145 :: float
478
- %t784 = call core.mul(%t714, %t783) :: float
478
+ %t784 = call core.mul:numeric(%t714, %t783) :: float
479
479
  %t175 = load_input "statuses" :: array
480
480
  %t744 = const 0 :: integer
481
481
  %t773 = call core.add(%t781, %t784) :: float
@@ -503,10 +503,10 @@
503
503
  %t738 = call core.sub(%t757, %t749) :: float
504
504
  %t739 = call core.clamp(%t734, %t744, %t738) :: float
505
505
  %t769 = load_field t724["rate"] :: float
506
- %t728 = call core.mul(%t739, %t769) :: float
506
+ %t728 = call core.mul:numeric(%t739, %t769) :: float
507
507
  %acc722 = acc_add agg.sum(%acc722, %t728) :: float
508
508
  end_loop
509
- %t793 = call core.mul(%t791, %t792) :: float
509
+ %t793 = call core.mul:numeric(%t791, %t792) :: float
510
510
  %t729 = acc_load %acc722 :: float
511
511
  %t775 = call core.add(%t773, %t793) :: float
512
512
  %t711 = call core.add(%t729, %t775) :: float
@@ -523,13 +523,13 @@
523
523
  %t976 = make_tuple(%t974, %t975) :: tuple<float, float>
524
524
  %t977 = fold %t976 fn="agg.min" :: float
525
525
  %t978 = const 0.062 :: float
526
- %t979 = call core.mul(%t977, %t978) :: float
526
+ %t979 = call core.mul:numeric(%t977, %t978) :: float
527
527
  %t981 = const 0.0145 :: float
528
- %t982 = call core.mul(%t974, %t981) :: float
528
+ %t982 = call core.mul:numeric(%t974, %t981) :: float
529
529
  %t1032 = load_input "state_rate" :: float
530
- %t1033 = call core.mul(%t974, %t1032) :: float
530
+ %t1033 = call core.mul:numeric(%t974, %t1032) :: float
531
531
  %t1035 = load_input "local_rate" :: float
532
- %t1036 = call core.mul(%t974, %t1035) :: float
532
+ %t1036 = call core.mul:numeric(%t974, %t1035) :: float
533
533
  %t181 = load_input "statuses" :: array
534
534
  %t824 = const 0 :: integer
535
535
  %t857 = const 1.0 :: float
@@ -572,7 +572,7 @@
572
572
  %t809 = select %t819, %t853, %t824 :: float
573
573
  %acc802 = acc_add agg.sum(%acc802, %t809) :: float
574
574
  end_loop
575
- %t991 = call core.mul(%t989, %t990) :: float
575
+ %t991 = call core.mul:numeric(%t989, %t990) :: float
576
576
  %t810 = acc_load %acc802 :: float
577
577
  loop rates id=L33 in %t803 as el=%t865, idx=%t866
578
578
  %t890 = load_field t865["lo"] :: float
@@ -583,7 +583,7 @@
583
583
  %t879 = call core.sub(%t898, %t890) :: float
584
584
  %t880 = call core.clamp(%t875, %t824, %t879) :: float
585
585
  %t910 = load_field t865["rate"] :: float
586
- %t869 = call core.mul(%t880, %t910) :: float
586
+ %t869 = call core.mul:numeric(%t880, %t910) :: float
587
587
  %acc863 = acc_add agg.sum(%acc863, %t869) :: float
588
588
  %acc913 = acc_add agg.sum(%acc913, %t869) :: float
589
589
  %acc1039 = acc_add agg.sum(%acc1039, %t869) :: float
@@ -2,13 +2,13 @@
2
2
  (Declaration state_tax
3
3
  %t1 = load_input "income" :: float
4
4
  %t2 = load_input "state_rate" :: float
5
- %t3 = call core.mul(%t1, %t2) :: float
5
+ %t3 = call core.mul:numeric(%t1, %t2) :: float
6
6
  yield %t3
7
7
  )
8
8
  (Declaration local_tax
9
9
  %t4 = load_input "income" :: float
10
10
  %t5 = load_input "local_rate" :: float
11
- %t6 = call core.mul(%t4, %t5) :: float
11
+ %t6 = call core.mul:numeric(%t4, %t5) :: float
12
12
  yield %t6
13
13
  )
14
14
  (Declaration taxable
@@ -117,7 +117,7 @@
117
117
  %t248 = call core.sub(%t267, %t259) :: float
118
118
  %t249 = call core.clamp(%t244, %t254, %t248) :: float
119
119
  %t279 = load_field rates_el_69["rate"] :: float
120
- %t73 = call core.mul(%t249, %t279) :: float
120
+ %t73 = call core.mul:numeric(%t249, %t279) :: float
121
121
  %acc_67 = acc_add agg.sum(%acc_67, %t73) :: float
122
122
  end_loop
123
123
  %t74 = acc_load %acc_67 :: float
@@ -202,7 +202,7 @@
202
202
  %t372 = call core.sub(%t391, %t383) :: float
203
203
  %t373 = call core.clamp(%t368, %t378, %t372) :: float
204
204
  %t403 = load_field t358["rate"] :: float
205
- %t362 = call core.mul(%t373, %t403) :: float
205
+ %t362 = call core.mul:numeric(%t373, %t403) :: float
206
206
  %acc356 = acc_add agg.sum(%acc356, %t362) :: float
207
207
  end_loop
208
208
  %t363 = acc_load %acc356 :: float
@@ -224,7 +224,7 @@
224
224
  %t113 = make_tuple(%t111, %t112) :: tuple<float, float>
225
225
  %t114 = fold %t113 fn="agg.min" :: float
226
226
  %t115 = const 0.062 :: float
227
- %t116 = call core.mul(%t114, %t115) :: float
227
+ %t116 = call core.mul:numeric(%t114, %t115) :: float
228
228
  yield %t116
229
229
  )
230
230
  (Declaration med_base_rate
@@ -234,7 +234,7 @@
234
234
  (Declaration med_tax
235
235
  %t118 = load_input "income" :: float
236
236
  %t119 = const 0.0145 :: float
237
- %t120 = call core.mul(%t118, %t119) :: float
237
+ %t120 = call core.mul:numeric(%t118, %t119) :: float
238
238
  yield %t120
239
239
  )
240
240
  (Declaration addl_med_rate
@@ -251,7 +251,7 @@
251
251
  %t127 = call core.sub(%t125, %t126) :: float
252
252
  %t129 = make_tuple(%t127, %t128) :: tuple<float, integer>
253
253
  %t130 = fold %t129 fn="agg.max" :: float
254
- %t132 = call core.mul(%t130, %t131) :: float
254
+ %t132 = call core.mul:numeric(%t130, %t131) :: float
255
255
  yield %t132
256
256
  end_loop
257
257
  )
@@ -262,9 +262,9 @@
262
262
  %t406 = make_tuple(%t404, %t405) :: tuple<float, float>
263
263
  %t407 = fold %t406 fn="agg.min" :: float
264
264
  %t408 = const 0.062 :: float
265
- %t409 = call core.mul(%t407, %t408) :: float
265
+ %t409 = call core.mul:numeric(%t407, %t408) :: float
266
266
  %t411 = const 0.0145 :: float
267
- %t412 = call core.mul(%t404, %t411) :: float
267
+ %t412 = call core.mul:numeric(%t404, %t411) :: float
268
268
  %t138 = call core.add(%t409, %t412) :: float
269
269
  %t417 = const 0 :: integer
270
270
  %t420 = const 0.009 :: float
@@ -273,7 +273,7 @@
273
273
  %t416 = call core.sub(%t404, %t415) :: float
274
274
  %t418 = make_tuple(%t416, %t417) :: tuple<float, integer>
275
275
  %t419 = fold %t418 fn="agg.max" :: float
276
- %t421 = call core.mul(%t419, %t420) :: float
276
+ %t421 = call core.mul:numeric(%t419, %t420) :: float
277
277
  %t140 = call core.add(%t138, %t421) :: float
278
278
  yield %t140
279
279
  end_loop
@@ -284,9 +284,9 @@
284
284
  %t430 = make_tuple(%t428, %t429) :: tuple<float, float>
285
285
  %t431 = fold %t430 fn="agg.min" :: float
286
286
  %t432 = const 0.062 :: float
287
- %t433 = call core.mul(%t431, %t432) :: float
287
+ %t433 = call core.mul:numeric(%t431, %t432) :: float
288
288
  %t435 = const 0.0145 :: float
289
- %t436 = call core.mul(%t428, %t435) :: float
289
+ %t436 = call core.mul:numeric(%t428, %t435) :: float
290
290
  %t141 = load_input "statuses" :: array
291
291
  %t425 = call core.add(%t433, %t436) :: float
292
292
  %t441 = const 0 :: integer
@@ -299,7 +299,7 @@
299
299
  %t440 = call core.sub(%t428, %t439) :: float
300
300
  %t442 = make_tuple(%t440, %t441) :: tuple<float, integer>
301
301
  %t443 = fold %t442 fn="agg.max" :: float
302
- %t445 = call core.mul(%t443, %t444) :: float
302
+ %t445 = call core.mul:numeric(%t443, %t444) :: float
303
303
  %t427 = call core.add(%t425, %t445) :: float
304
304
  %t149 = call core.div(%t427, %t148) :: float
305
305
  yield %t149
@@ -311,14 +311,14 @@
311
311
  %t510 = make_tuple(%t508, %t509) :: tuple<float, float>
312
312
  %t511 = fold %t510 fn="agg.min" :: float
313
313
  %t512 = const 0.062 :: float
314
- %t513 = call core.mul(%t511, %t512) :: float
314
+ %t513 = call core.mul:numeric(%t511, %t512) :: float
315
315
  %t515 = const 0.0145 :: float
316
- %t516 = call core.mul(%t508, %t515) :: float
316
+ %t516 = call core.mul:numeric(%t508, %t515) :: float
317
317
  %t150 = load_input "statuses" :: array
318
318
  %t447 = load_input "state_rate" :: float
319
- %t448 = call core.mul(%t508, %t447) :: float
319
+ %t448 = call core.mul:numeric(%t508, %t447) :: float
320
320
  %t450 = load_input "local_rate" :: float
321
- %t451 = call core.mul(%t508, %t450) :: float
321
+ %t451 = call core.mul:numeric(%t508, %t450) :: float
322
322
  %t476 = const 0 :: integer
323
323
  %t505 = call core.add(%t513, %t516) :: float
324
324
  %t524 = const 0.009 :: float
@@ -344,10 +344,10 @@
344
344
  %t470 = call core.sub(%t489, %t481) :: float
345
345
  %t471 = call core.clamp(%t466, %t476, %t470) :: float
346
346
  %t501 = load_field t456["rate"] :: float
347
- %t460 = call core.mul(%t471, %t501) :: float
347
+ %t460 = call core.mul:numeric(%t471, %t501) :: float
348
348
  %acc454 = acc_add agg.sum(%acc454, %t460) :: float
349
349
  end_loop
350
- %t525 = call core.mul(%t523, %t524) :: float
350
+ %t525 = call core.mul:numeric(%t523, %t524) :: float
351
351
  %t461 = acc_load %acc454 :: float
352
352
  %t507 = call core.add(%t505, %t525) :: float
353
353
  %t155 = call core.add(%t461, %t507) :: float
@@ -359,16 +359,16 @@
359
359
  (Declaration total_eff
360
360
  %t534 = load_input "income" :: float
361
361
  %t535 = load_input "state_rate" :: float
362
- %t536 = call core.mul(%t534, %t535) :: float
362
+ %t536 = call core.mul:numeric(%t534, %t535) :: float
363
363
  %t538 = load_input "local_rate" :: float
364
- %t539 = call core.mul(%t534, %t538) :: float
364
+ %t539 = call core.mul:numeric(%t534, %t538) :: float
365
365
  %t597 = const 168600.0 :: float
366
366
  %t598 = make_tuple(%t534, %t597) :: tuple<float, float>
367
367
  %t599 = fold %t598 fn="agg.min" :: float
368
368
  %t600 = const 0.062 :: float
369
- %t601 = call core.mul(%t599, %t600) :: float
369
+ %t601 = call core.mul:numeric(%t599, %t600) :: float
370
370
  %t603 = const 0.0145 :: float
371
- %t604 = call core.mul(%t534, %t603) :: float
371
+ %t604 = call core.mul:numeric(%t534, %t603) :: float
372
372
  %t160 = load_input "statuses" :: array
373
373
  %t564 = const 0 :: integer
374
374
  %t593 = call core.add(%t601, %t604) :: float
@@ -398,10 +398,10 @@
398
398
  %t558 = call core.sub(%t577, %t569) :: float
399
399
  %t559 = call core.clamp(%t554, %t564, %t558) :: float
400
400
  %t589 = load_field t544["rate"] :: float
401
- %t548 = call core.mul(%t559, %t589) :: float
401
+ %t548 = call core.mul:numeric(%t559, %t589) :: float
402
402
  %acc542 = acc_add agg.sum(%acc542, %t548) :: float
403
403
  end_loop
404
- %t613 = call core.mul(%t611, %t612) :: float
404
+ %t613 = call core.mul:numeric(%t611, %t612) :: float
405
405
  %t549 = acc_load %acc542 :: float
406
406
  %t595 = call core.add(%t593, %t613) :: float
407
407
  %t531 = call core.add(%t549, %t595) :: float
@@ -414,16 +414,16 @@
414
414
  (Declaration after_tax
415
415
  %t622 = load_input "income" :: float
416
416
  %t623 = load_input "state_rate" :: float
417
- %t624 = call core.mul(%t622, %t623) :: float
417
+ %t624 = call core.mul:numeric(%t622, %t623) :: float
418
418
  %t626 = load_input "local_rate" :: float
419
- %t627 = call core.mul(%t622, %t626) :: float
419
+ %t627 = call core.mul:numeric(%t622, %t626) :: float
420
420
  %t685 = const 168600.0 :: float
421
421
  %t686 = make_tuple(%t622, %t685) :: tuple<float, float>
422
422
  %t687 = fold %t686 fn="agg.min" :: float
423
423
  %t688 = const 0.062 :: float
424
- %t689 = call core.mul(%t687, %t688) :: float
424
+ %t689 = call core.mul:numeric(%t687, %t688) :: float
425
425
  %t691 = const 0.0145 :: float
426
- %t692 = call core.mul(%t622, %t691) :: float
426
+ %t692 = call core.mul:numeric(%t622, %t691) :: float
427
427
  %t169 = load_input "statuses" :: array
428
428
  %t652 = const 0 :: integer
429
429
  %t681 = call core.add(%t689, %t692) :: float
@@ -450,10 +450,10 @@
450
450
  %t646 = call core.sub(%t665, %t657) :: float
451
451
  %t647 = call core.clamp(%t642, %t652, %t646) :: float
452
452
  %t677 = load_field t632["rate"] :: float
453
- %t636 = call core.mul(%t647, %t677) :: float
453
+ %t636 = call core.mul:numeric(%t647, %t677) :: float
454
454
  %acc630 = acc_add agg.sum(%acc630, %t636) :: float
455
455
  end_loop
456
- %t701 = call core.mul(%t699, %t700) :: float
456
+ %t701 = call core.mul:numeric(%t699, %t700) :: float
457
457
  %t637 = acc_load %acc630 :: float
458
458
  %t683 = call core.add(%t681, %t701) :: float
459
459
  %t619 = call core.add(%t637, %t683) :: float
@@ -466,16 +466,16 @@
466
466
  (Declaration take_home
467
467
  %t714 = load_input "income" :: float
468
468
  %t715 = load_input "state_rate" :: float
469
- %t716 = call core.mul(%t714, %t715) :: float
469
+ %t716 = call core.mul:numeric(%t714, %t715) :: float
470
470
  %t718 = load_input "local_rate" :: float
471
- %t719 = call core.mul(%t714, %t718) :: float
471
+ %t719 = call core.mul:numeric(%t714, %t718) :: float
472
472
  %t777 = const 168600.0 :: float
473
473
  %t778 = make_tuple(%t714, %t777) :: tuple<float, float>
474
474
  %t779 = fold %t778 fn="agg.min" :: float
475
475
  %t780 = const 0.062 :: float
476
- %t781 = call core.mul(%t779, %t780) :: float
476
+ %t781 = call core.mul:numeric(%t779, %t780) :: float
477
477
  %t783 = const 0.0145 :: float
478
- %t784 = call core.mul(%t714, %t783) :: float
478
+ %t784 = call core.mul:numeric(%t714, %t783) :: float
479
479
  %t175 = load_input "statuses" :: array
480
480
  %t744 = const 0 :: integer
481
481
  %t773 = call core.add(%t781, %t784) :: float
@@ -503,10 +503,10 @@
503
503
  %t738 = call core.sub(%t757, %t749) :: float
504
504
  %t739 = call core.clamp(%t734, %t744, %t738) :: float
505
505
  %t769 = load_field t724["rate"] :: float
506
- %t728 = call core.mul(%t739, %t769) :: float
506
+ %t728 = call core.mul:numeric(%t739, %t769) :: float
507
507
  %acc722 = acc_add agg.sum(%acc722, %t728) :: float
508
508
  end_loop
509
- %t793 = call core.mul(%t791, %t792) :: float
509
+ %t793 = call core.mul:numeric(%t791, %t792) :: float
510
510
  %t729 = acc_load %acc722 :: float
511
511
  %t775 = call core.add(%t773, %t793) :: float
512
512
  %t711 = call core.add(%t729, %t775) :: float
@@ -523,13 +523,13 @@
523
523
  %t976 = make_tuple(%t974, %t975) :: tuple<float, float>
524
524
  %t977 = fold %t976 fn="agg.min" :: float
525
525
  %t978 = const 0.062 :: float
526
- %t979 = call core.mul(%t977, %t978) :: float
526
+ %t979 = call core.mul:numeric(%t977, %t978) :: float
527
527
  %t981 = const 0.0145 :: float
528
- %t982 = call core.mul(%t974, %t981) :: float
528
+ %t982 = call core.mul:numeric(%t974, %t981) :: float
529
529
  %t1032 = load_input "state_rate" :: float
530
- %t1033 = call core.mul(%t974, %t1032) :: float
530
+ %t1033 = call core.mul:numeric(%t974, %t1032) :: float
531
531
  %t1035 = load_input "local_rate" :: float
532
- %t1036 = call core.mul(%t974, %t1035) :: float
532
+ %t1036 = call core.mul:numeric(%t974, %t1035) :: float
533
533
  %t181 = load_input "statuses" :: array
534
534
  %t824 = const 0 :: integer
535
535
  %t857 = const 1.0 :: float
@@ -572,7 +572,7 @@
572
572
  %t809 = select %t819, %t853, %t824 :: float
573
573
  %acc802 = acc_add agg.sum(%acc802, %t809) :: float
574
574
  end_loop
575
- %t991 = call core.mul(%t989, %t990) :: float
575
+ %t991 = call core.mul:numeric(%t989, %t990) :: float
576
576
  %t810 = acc_load %acc802 :: float
577
577
  loop rates id=L33 in %t803 as el=%t865, idx=%t866
578
578
  %t890 = load_field t865["lo"] :: float
@@ -583,7 +583,7 @@
583
583
  %t879 = call core.sub(%t898, %t890) :: float
584
584
  %t880 = call core.clamp(%t875, %t824, %t879) :: float
585
585
  %t910 = load_field t865["rate"] :: float
586
- %t869 = call core.mul(%t880, %t910) :: float
586
+ %t869 = call core.mul:numeric(%t880, %t910) :: float
587
587
  %acc863 = acc_add agg.sum(%acc863, %t869) :: float
588
588
  %acc913 = acc_add agg.sum(%acc913, %t869) :: float
589
589
  %acc1039 = acc_add agg.sum(%acc1039, %t869) :: float
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_c9608112fc116466a01eeee25616ed8f4e011b48728f579b0bff1761f145e9ba
2
+ module Kumi::Compiled::KUMI_6b3029186d9b3c61fe69d9ceb9fc1d33177f973d83d0fb228ab8b2088fcb7cf2
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -1,12 +1,12 @@
1
1
  (SNAST
2
2
  (VALUE state_tax
3
- (Call :core.mul
3
+ (Call :core.mul:numeric
4
4
  (InputRef income key_chain=[]) :: [] -> float
5
5
  (InputRef state_rate key_chain=[]) :: [] -> float
6
6
  ) :: [] -> float
7
7
  ) :: [] -> float
8
8
  (VALUE local_tax
9
- (Call :core.mul
9
+ (Call :core.mul:numeric
10
10
  (InputRef income key_chain=[]) :: [] -> float
11
11
  (InputRef local_rate key_chain=[]) :: [] -> float
12
12
  ) :: [] -> float
@@ -59,7 +59,7 @@
59
59
  ) :: [statuses, rates] -> float
60
60
  (VALUE fed_tax
61
61
  (Reduce :agg.sum over [rates]
62
- (Call :core.mul
62
+ (Call :core.mul:numeric
63
63
  (Ref amt) :: [statuses, rates] -> float
64
64
  (Ref rate) :: [statuses, rates] -> float
65
65
  ) :: [statuses, rates] -> float
@@ -104,7 +104,7 @@
104
104
  (Const 0.062) :: [] -> float
105
105
  ) :: [] -> float
106
106
  (VALUE ss_tax
107
- (Call :core.mul
107
+ (Call :core.mul:numeric
108
108
  (Fold :agg.min
109
109
  (Tuple
110
110
  (InputRef income key_chain=[]) :: [] -> float
@@ -118,7 +118,7 @@
118
118
  (Const 0.0145) :: [] -> float
119
119
  ) :: [] -> float
120
120
  (VALUE med_tax
121
- (Call :core.mul
121
+ (Call :core.mul:numeric
122
122
  (InputRef income key_chain=[]) :: [] -> float
123
123
  (Const 0.0145) :: [] -> float
124
124
  ) :: [] -> float
@@ -127,7 +127,7 @@
127
127
  (Const 0.009) :: [] -> float
128
128
  ) :: [] -> float
129
129
  (VALUE addl_med_tax
130
- (Call :core.mul
130
+ (Call :core.mul:numeric
131
131
  (Fold :agg.max
132
132
  (Tuple
133
133
  (Call :core.sub
@@ -1,5 +1,5 @@
1
1
  # Autogenerated by Kumi Codegen
2
- module Kumi::Compiled::KUMI_57ccd5ab1fc1187ce0abd20aa81d60fe4c33ce2438cccd991cd4fbd32e5a67e8
2
+ module Kumi::Compiled::KUMI_7e3d95df01d361f5adc0bf6b1990b0d5cccfba056716e6870c570d205196a924
3
3
  def self.from(input_data = nil)
4
4
  instance = Object.new
5
5
  instance.extend(self)
@@ -22,11 +22,17 @@ module Kumi
22
22
  # Useful for debugging the compiler itself.
23
23
  attr_accessor :force_recompile
24
24
 
25
+ # Decimal coercion behavior for inputs declared as `decimal` type.
26
+ # :automatic (default): Automatically coerce inputs to BigDecimal in Ruby
27
+ # :explicit: User must explicitly call to_decimal() in the schema
28
+ attr_accessor :decimal_coercion_mode
29
+
25
30
  def initialize
26
31
  # Set smart, environment-aware defaults.
27
32
  @cache_path = default_cache_path
28
33
  @compilation_mode = default_compilation_mode
29
34
  @force_recompile = false
35
+ @decimal_coercion_mode = :automatic
30
36
  end
31
37
 
32
38
  private
@@ -110,7 +110,7 @@ module Kumi
110
110
  arg_types: arg_types
111
111
  }
112
112
  )
113
- raise Kumi::Core::Errors::TypeError, e.message
113
+ raise Kumi::Core::Errors::TypeError.new(e.message, call.loc)
114
114
  rescue StandardError => e
115
115
  # Other function resolution errors
116
116
  report_semantic_error(
@@ -66,7 +66,7 @@ module Kumi
66
66
  when Symbol
67
67
  "at #{loc}"
68
68
  when Syntax::Location
69
- "at #{loc.file}:#{loc.line}:#{loc.column}"
69
+ "at #{loc.file} line=#{loc.line} column=#{loc.column}"
70
70
  else
71
71
  "at <unknown>"
72
72
  end
@@ -39,7 +39,7 @@ module Kumi
39
39
  # Format location for error messages
40
40
  def format_location
41
41
  if @location
42
- "at #{@location.file}:#{@location.line}:#{@location.column}"
42
+ "at #{@location.file} line=#{@location.line} column=#{@location.column}"
43
43
  else
44
44
  "at ?"
45
45
  end