kumi 0.0.27 → 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 (137) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +24 -9
  4. data/data/functions/core/arithmetic.yaml +28 -8
  5. data/data/functions/core/boolean.yaml +8 -3
  6. data/data/functions/core/comparison.yaml +12 -4
  7. data/data/kernels/javascript/core/arithmetic.yaml +6 -2
  8. data/data/kernels/ruby/core/arithmetic.yaml +7 -2
  9. data/golden/array_element/expected/schema_ruby.rb +1 -1
  10. data/golden/array_index/expected/lir_00_unoptimized.txt +2 -2
  11. data/golden/array_index/expected/lir_01_hoist_scalar_references.txt +2 -2
  12. data/golden/array_index/expected/lir_02_inlined.txt +2 -2
  13. data/golden/array_index/expected/lir_03_cse.txt +2 -2
  14. data/golden/array_index/expected/lir_04_1_loop_fusion.txt +2 -2
  15. data/golden/array_index/expected/lir_04_loop_invcm.txt +2 -2
  16. data/golden/array_index/expected/lir_06_const_prop.txt +2 -2
  17. data/golden/array_index/expected/schema_ruby.rb +1 -1
  18. data/golden/array_index/expected/snast.txt +2 -2
  19. data/golden/array_operations/expected/lir_00_unoptimized.txt +2 -2
  20. data/golden/array_operations/expected/lir_01_hoist_scalar_references.txt +2 -2
  21. data/golden/array_operations/expected/lir_02_inlined.txt +2 -2
  22. data/golden/array_operations/expected/lir_03_cse.txt +2 -2
  23. data/golden/array_operations/expected/lir_04_1_loop_fusion.txt +2 -2
  24. data/golden/array_operations/expected/lir_04_loop_invcm.txt +2 -2
  25. data/golden/array_operations/expected/lir_06_const_prop.txt +2 -2
  26. data/golden/array_operations/expected/schema_ruby.rb +1 -1
  27. data/golden/array_operations/expected/snast.txt +2 -2
  28. data/golden/cascade_logic/expected/schema_ruby.rb +1 -1
  29. data/golden/chained_fusion/expected/schema_ruby.rb +1 -1
  30. data/golden/decimal_explicit/expected/lir_00_unoptimized.txt +2 -2
  31. data/golden/decimal_explicit/expected/lir_01_hoist_scalar_references.txt +2 -2
  32. data/golden/decimal_explicit/expected/lir_02_inlined.txt +6 -6
  33. data/golden/decimal_explicit/expected/lir_03_cse.txt +5 -5
  34. data/golden/decimal_explicit/expected/lir_04_1_loop_fusion.txt +5 -5
  35. data/golden/decimal_explicit/expected/lir_04_loop_invcm.txt +5 -5
  36. data/golden/decimal_explicit/expected/lir_06_const_prop.txt +5 -5
  37. data/golden/decimal_explicit/expected/schema_ruby.rb +1 -1
  38. data/golden/decimal_explicit/expected/snast.txt +2 -2
  39. data/golden/element_arrays/expected/schema_ruby.rb +1 -1
  40. data/golden/empty_and_null_inputs/expected/schema_ruby.rb +1 -1
  41. data/golden/function_overload/expected/schema_ruby.rb +1 -1
  42. data/golden/game_of_life/expected/schema_ruby.rb +1 -1
  43. data/golden/hash_keys/expected/schema_ruby.rb +1 -1
  44. data/golden/hash_value/expected/schema_ruby.rb +1 -1
  45. data/golden/hierarchical_complex/expected/lir_00_unoptimized.txt +3 -3
  46. data/golden/hierarchical_complex/expected/lir_01_hoist_scalar_references.txt +3 -3
  47. data/golden/hierarchical_complex/expected/lir_02_inlined.txt +3 -3
  48. data/golden/hierarchical_complex/expected/lir_03_cse.txt +3 -3
  49. data/golden/hierarchical_complex/expected/lir_04_1_loop_fusion.txt +3 -3
  50. data/golden/hierarchical_complex/expected/lir_04_loop_invcm.txt +3 -3
  51. data/golden/hierarchical_complex/expected/lir_06_const_prop.txt +3 -3
  52. data/golden/hierarchical_complex/expected/schema_ruby.rb +1 -1
  53. data/golden/hierarchical_complex/expected/snast.txt +3 -3
  54. data/golden/inline_rename_scope_leak/expected/schema_ruby.rb +1 -1
  55. data/golden/input_reference/expected/schema_ruby.rb +1 -1
  56. data/golden/interleaved_fusion/expected/lir_00_unoptimized.txt +1 -1
  57. data/golden/interleaved_fusion/expected/lir_01_hoist_scalar_references.txt +1 -1
  58. data/golden/interleaved_fusion/expected/lir_02_inlined.txt +2 -2
  59. data/golden/interleaved_fusion/expected/lir_03_cse.txt +2 -2
  60. data/golden/interleaved_fusion/expected/lir_04_1_loop_fusion.txt +2 -2
  61. data/golden/interleaved_fusion/expected/lir_04_loop_invcm.txt +2 -2
  62. data/golden/interleaved_fusion/expected/lir_06_const_prop.txt +2 -2
  63. data/golden/interleaved_fusion/expected/schema_ruby.rb +1 -1
  64. data/golden/interleaved_fusion/expected/snast.txt +1 -1
  65. data/golden/let_inline/expected/lir_00_unoptimized.txt +2 -2
  66. data/golden/let_inline/expected/lir_01_hoist_scalar_references.txt +2 -2
  67. data/golden/let_inline/expected/lir_02_inlined.txt +6 -6
  68. data/golden/let_inline/expected/lir_03_cse.txt +6 -6
  69. data/golden/let_inline/expected/lir_04_1_loop_fusion.txt +6 -6
  70. data/golden/let_inline/expected/lir_04_loop_invcm.txt +6 -6
  71. data/golden/let_inline/expected/lir_06_const_prop.txt +6 -6
  72. data/golden/let_inline/expected/schema_ruby.rb +1 -1
  73. data/golden/let_inline/expected/snast.txt +2 -2
  74. data/golden/loop_fusion/expected/schema_ruby.rb +1 -1
  75. data/golden/min_reduce_scope/expected/schema_ruby.rb +1 -1
  76. data/golden/mixed_dimensions/expected/schema_ruby.rb +1 -1
  77. data/golden/multirank_hoisting/expected/lir_00_unoptimized.txt +2 -2
  78. data/golden/multirank_hoisting/expected/lir_01_hoist_scalar_references.txt +2 -2
  79. data/golden/multirank_hoisting/expected/lir_02_inlined.txt +7 -7
  80. data/golden/multirank_hoisting/expected/lir_03_cse.txt +7 -7
  81. data/golden/multirank_hoisting/expected/lir_04_1_loop_fusion.txt +7 -7
  82. data/golden/multirank_hoisting/expected/lir_04_loop_invcm.txt +7 -7
  83. data/golden/multirank_hoisting/expected/lir_06_const_prop.txt +7 -7
  84. data/golden/multirank_hoisting/expected/schema_ruby.rb +1 -1
  85. data/golden/multirank_hoisting/expected/snast.txt +2 -2
  86. data/golden/nested_hash/expected/lir_00_unoptimized.txt +1 -1
  87. data/golden/nested_hash/expected/lir_01_hoist_scalar_references.txt +1 -1
  88. data/golden/nested_hash/expected/lir_02_inlined.txt +1 -1
  89. data/golden/nested_hash/expected/lir_03_cse.txt +1 -1
  90. data/golden/nested_hash/expected/lir_04_1_loop_fusion.txt +1 -1
  91. data/golden/nested_hash/expected/lir_04_loop_invcm.txt +1 -1
  92. data/golden/nested_hash/expected/lir_06_const_prop.txt +1 -1
  93. data/golden/nested_hash/expected/schema_ruby.rb +1 -1
  94. data/golden/nested_hash/expected/snast.txt +1 -1
  95. data/golden/reduction_broadcast/expected/schema_ruby.rb +1 -1
  96. data/golden/roll/expected/schema_ruby.rb +1 -1
  97. data/golden/shift/expected/schema_ruby.rb +1 -1
  98. data/golden/shift_2d/expected/schema_ruby.rb +1 -1
  99. data/golden/simple_math/expected/lir_00_unoptimized.txt +2 -2
  100. data/golden/simple_math/expected/lir_01_hoist_scalar_references.txt +2 -2
  101. data/golden/simple_math/expected/lir_02_inlined.txt +2 -2
  102. data/golden/simple_math/expected/lir_03_cse.txt +2 -2
  103. data/golden/simple_math/expected/lir_04_1_loop_fusion.txt +2 -2
  104. data/golden/simple_math/expected/lir_04_loop_invcm.txt +2 -2
  105. data/golden/simple_math/expected/lir_06_const_prop.txt +2 -2
  106. data/golden/simple_math/expected/schema_ruby.rb +1 -1
  107. data/golden/simple_math/expected/snast.txt +2 -2
  108. data/golden/streaming_basics/expected/lir_00_unoptimized.txt +3 -3
  109. data/golden/streaming_basics/expected/lir_01_hoist_scalar_references.txt +3 -3
  110. data/golden/streaming_basics/expected/lir_02_inlined.txt +9 -9
  111. data/golden/streaming_basics/expected/lir_03_cse.txt +7 -7
  112. data/golden/streaming_basics/expected/lir_04_1_loop_fusion.txt +7 -7
  113. data/golden/streaming_basics/expected/lir_04_loop_invcm.txt +7 -7
  114. data/golden/streaming_basics/expected/lir_06_const_prop.txt +7 -7
  115. data/golden/streaming_basics/expected/schema_ruby.rb +1 -1
  116. data/golden/streaming_basics/expected/snast.txt +3 -3
  117. data/golden/tuples/expected/schema_ruby.rb +1 -1
  118. data/golden/tuples_and_arrays/expected/schema_ruby.rb +1 -1
  119. data/golden/us_tax_2024/expected/lir_00_unoptimized.txt +6 -6
  120. data/golden/us_tax_2024/expected/lir_01_hoist_scalar_references.txt +6 -6
  121. data/golden/us_tax_2024/expected/lir_02_inlined.txt +71 -71
  122. data/golden/us_tax_2024/expected/lir_03_cse.txt +43 -43
  123. data/golden/us_tax_2024/expected/lir_04_1_loop_fusion.txt +48 -48
  124. data/golden/us_tax_2024/expected/lir_04_loop_invcm.txt +43 -43
  125. data/golden/us_tax_2024/expected/lir_06_const_prop.txt +43 -43
  126. data/golden/us_tax_2024/expected/schema_ruby.rb +1 -1
  127. data/golden/us_tax_2024/expected/snast.txt +6 -6
  128. data/golden/with_constants/expected/schema_ruby.rb +1 -1
  129. data/lib/kumi/core/analyzer/passes/nast_dimensional_analyzer_pass.rb +1 -1
  130. data/lib/kumi/core/error_reporter.rb +1 -1
  131. data/lib/kumi/core/errors.rb +1 -1
  132. data/lib/kumi/core/functions/overload_resolver.rb +57 -11
  133. data/lib/kumi/core/functions/type_categories.rb +44 -0
  134. data/lib/kumi/frontends/text.rb +33 -5
  135. data/lib/kumi/syntax/location.rb +5 -1
  136. data/lib/kumi/version.rb +1 -1
  137. metadata +2 -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
@@ -154,7 +154,7 @@
154
154
  %t277 = load_input "statuses" :: array
155
155
  %t278 = load_field statuses_el_65["rates"] :: any
156
156
  %t279 = load_field rates_el_69["rate"] :: float
157
- %t73 = call core.mul(%t249, %t279) :: float
157
+ %t73 = call core.mul:numeric(%t249, %t279) :: float
158
158
  %acc_67 = acc_add agg.sum(%acc_67, %t73) :: float
159
159
  end_loop
160
160
  %t74 = acc_load %acc_67 :: float
@@ -294,7 +294,7 @@
294
294
  %t401 = load_input "statuses" :: array
295
295
  %t402 = load_field statuses_el_101["rates"] :: any
296
296
  %t403 = load_field t358["rate"] :: float
297
- %t362 = call core.mul(%t373, %t403) :: float
297
+ %t362 = call core.mul:numeric(%t373, %t403) :: float
298
298
  %acc356 = acc_add agg.sum(%acc356, %t362) :: float
299
299
  end_loop
300
300
  %t363 = acc_load %acc356 :: float
@@ -320,7 +320,7 @@
320
320
  %t113 = make_tuple(%t111, %t112) :: tuple<float, float>
321
321
  %t114 = fold %t113 fn="agg.min" :: float
322
322
  %t115 = const 0.062 :: float
323
- %t116 = call core.mul(%t114, %t115) :: float
323
+ %t116 = call core.mul:numeric(%t114, %t115) :: float
324
324
  yield %t116
325
325
  )
326
326
  (Declaration med_base_rate
@@ -330,7 +330,7 @@
330
330
  (Declaration med_tax
331
331
  %t118 = load_input "income" :: float
332
332
  %t119 = const 0.0145 :: float
333
- %t120 = call core.mul(%t118, %t119) :: float
333
+ %t120 = call core.mul:numeric(%t118, %t119) :: float
334
334
  yield %t120
335
335
  )
336
336
  (Declaration addl_med_rate
@@ -347,7 +347,7 @@
347
347
  %t129 = make_tuple(%t127, %t128) :: tuple<float, integer>
348
348
  %t130 = fold %t129 fn="agg.max" :: float
349
349
  %t131 = const 0.009 :: float
350
- %t132 = call core.mul(%t130, %t131) :: float
350
+ %t132 = call core.mul:numeric(%t130, %t131) :: float
351
351
  yield %t132
352
352
  end_loop
353
353
  )
@@ -358,10 +358,10 @@
358
358
  %t406 = make_tuple(%t404, %t405) :: tuple<float, float>
359
359
  %t407 = fold %t406 fn="agg.min" :: float
360
360
  %t408 = const 0.062 :: float
361
- %t409 = call core.mul(%t407, %t408) :: float
361
+ %t409 = call core.mul:numeric(%t407, %t408) :: float
362
362
  %t410 = load_input "income" :: float
363
363
  %t411 = const 0.0145 :: float
364
- %t412 = call core.mul(%t410, %t411) :: float
364
+ %t412 = call core.mul:numeric(%t410, %t411) :: float
365
365
  loop statuses id=L20 in %t133 as el=%statuses_el_134, idx=%statuses_i_135
366
366
  %t138 = call core.add(%t409, %t412) :: float
367
367
  %t413 = load_input "statuses" :: array
@@ -372,7 +372,7 @@
372
372
  %t418 = make_tuple(%t416, %t417) :: tuple<float, integer>
373
373
  %t419 = fold %t418 fn="agg.max" :: float
374
374
  %t420 = const 0.009 :: float
375
- %t421 = call core.mul(%t419, %t420) :: float
375
+ %t421 = call core.mul:numeric(%t419, %t420) :: float
376
376
  %t140 = call core.add(%t138, %t421) :: float
377
377
  yield %t140
378
378
  end_loop
@@ -383,10 +383,10 @@
383
383
  %t430 = make_tuple(%t428, %t429) :: tuple<float, float>
384
384
  %t431 = fold %t430 fn="agg.min" :: float
385
385
  %t432 = const 0.062 :: float
386
- %t433 = call core.mul(%t431, %t432) :: float
386
+ %t433 = call core.mul:numeric(%t431, %t432) :: float
387
387
  %t434 = load_input "income" :: float
388
388
  %t435 = const 0.0145 :: float
389
- %t436 = call core.mul(%t434, %t435) :: float
389
+ %t436 = call core.mul:numeric(%t434, %t435) :: float
390
390
  %t141 = load_input "statuses" :: array
391
391
  loop statuses id=L21 in %t141 as el=%statuses_el_142, idx=%statuses_i_143
392
392
  %t422 = load_input "statuses" :: array
@@ -399,7 +399,7 @@
399
399
  %t442 = make_tuple(%t440, %t441) :: tuple<float, integer>
400
400
  %t443 = fold %t442 fn="agg.max" :: float
401
401
  %t444 = const 0.009 :: float
402
- %t445 = call core.mul(%t443, %t444) :: float
402
+ %t445 = call core.mul:numeric(%t443, %t444) :: float
403
403
  %t427 = call core.add(%t425, %t445) :: float
404
404
  %t145 = load_input "income" :: float
405
405
  %t146 = const 1.0 :: float
@@ -415,17 +415,17 @@
415
415
  %t510 = make_tuple(%t508, %t509) :: tuple<float, float>
416
416
  %t511 = fold %t510 fn="agg.min" :: float
417
417
  %t512 = const 0.062 :: float
418
- %t513 = call core.mul(%t511, %t512) :: float
418
+ %t513 = call core.mul:numeric(%t511, %t512) :: float
419
419
  %t514 = load_input "income" :: float
420
420
  %t515 = const 0.0145 :: float
421
- %t516 = call core.mul(%t514, %t515) :: float
421
+ %t516 = call core.mul:numeric(%t514, %t515) :: float
422
422
  %t150 = load_input "statuses" :: array
423
423
  %t446 = load_input "income" :: float
424
424
  %t447 = load_input "state_rate" :: float
425
- %t448 = call core.mul(%t446, %t447) :: float
425
+ %t448 = call core.mul:numeric(%t446, %t447) :: float
426
426
  %t449 = load_input "income" :: float
427
427
  %t450 = load_input "local_rate" :: float
428
- %t451 = call core.mul(%t449, %t450) :: float
428
+ %t451 = call core.mul:numeric(%t449, %t450) :: float
429
429
  loop statuses id=L22 in %t150 as el=%statuses_el_151, idx=%statuses_i_152
430
430
  %t472 = load_input "statuses" :: array
431
431
  %t473 = load_input "income" :: float
@@ -465,7 +465,7 @@
465
465
  %t499 = load_input "statuses" :: array
466
466
  %t500 = load_field statuses_el_151["rates"] :: any
467
467
  %t501 = load_field t456["rate"] :: float
468
- %t460 = call core.mul(%t471, %t501) :: float
468
+ %t460 = call core.mul:numeric(%t471, %t501) :: float
469
469
  %acc454 = acc_add agg.sum(%acc454, %t460) :: float
470
470
  end_loop
471
471
  %t461 = acc_load %acc454 :: float
@@ -479,7 +479,7 @@
479
479
  %t522 = make_tuple(%t520, %t521) :: tuple<float, integer>
480
480
  %t523 = fold %t522 fn="agg.max" :: float
481
481
  %t524 = const 0.009 :: float
482
- %t525 = call core.mul(%t523, %t524) :: float
482
+ %t525 = call core.mul:numeric(%t523, %t524) :: float
483
483
  %t507 = call core.add(%t505, %t525) :: float
484
484
  %t155 = call core.add(%t461, %t507) :: float
485
485
  %t157 = call core.add(%t155, %t448) :: float
@@ -490,19 +490,19 @@
490
490
  (Declaration total_eff
491
491
  %t534 = load_input "income" :: float
492
492
  %t535 = load_input "state_rate" :: float
493
- %t536 = call core.mul(%t534, %t535) :: float
493
+ %t536 = call core.mul:numeric(%t534, %t535) :: float
494
494
  %t537 = load_input "income" :: float
495
495
  %t538 = load_input "local_rate" :: float
496
- %t539 = call core.mul(%t537, %t538) :: float
496
+ %t539 = call core.mul:numeric(%t537, %t538) :: float
497
497
  %t596 = load_input "income" :: float
498
498
  %t597 = const 168600.0 :: float
499
499
  %t598 = make_tuple(%t596, %t597) :: tuple<float, float>
500
500
  %t599 = fold %t598 fn="agg.min" :: float
501
501
  %t600 = const 0.062 :: float
502
- %t601 = call core.mul(%t599, %t600) :: float
502
+ %t601 = call core.mul:numeric(%t599, %t600) :: float
503
503
  %t602 = load_input "income" :: float
504
504
  %t603 = const 0.0145 :: float
505
- %t604 = call core.mul(%t602, %t603) :: float
505
+ %t604 = call core.mul:numeric(%t602, %t603) :: float
506
506
  %t160 = load_input "statuses" :: array
507
507
  loop statuses id=L23 in %t160 as el=%statuses_el_161, idx=%statuses_i_162
508
508
  %t526 = load_input "statuses" :: array
@@ -544,7 +544,7 @@
544
544
  %t587 = load_input "statuses" :: array
545
545
  %t588 = load_field statuses_el_161["rates"] :: any
546
546
  %t589 = load_field t544["rate"] :: float
547
- %t548 = call core.mul(%t559, %t589) :: float
547
+ %t548 = call core.mul:numeric(%t559, %t589) :: float
548
548
  %acc542 = acc_add agg.sum(%acc542, %t548) :: float
549
549
  end_loop
550
550
  %t549 = acc_load %acc542 :: float
@@ -558,7 +558,7 @@
558
558
  %t610 = make_tuple(%t608, %t609) :: tuple<float, integer>
559
559
  %t611 = fold %t610 fn="agg.max" :: float
560
560
  %t612 = const 0.009 :: float
561
- %t613 = call core.mul(%t611, %t612) :: float
561
+ %t613 = call core.mul:numeric(%t611, %t612) :: float
562
562
  %t595 = call core.add(%t593, %t613) :: float
563
563
  %t531 = call core.add(%t549, %t595) :: float
564
564
  %t532 = call core.add(%t531, %t536) :: float
@@ -574,19 +574,19 @@
574
574
  (Declaration after_tax
575
575
  %t622 = load_input "income" :: float
576
576
  %t623 = load_input "state_rate" :: float
577
- %t624 = call core.mul(%t622, %t623) :: float
577
+ %t624 = call core.mul:numeric(%t622, %t623) :: float
578
578
  %t625 = load_input "income" :: float
579
579
  %t626 = load_input "local_rate" :: float
580
- %t627 = call core.mul(%t625, %t626) :: float
580
+ %t627 = call core.mul:numeric(%t625, %t626) :: float
581
581
  %t684 = load_input "income" :: float
582
582
  %t685 = const 168600.0 :: float
583
583
  %t686 = make_tuple(%t684, %t685) :: tuple<float, float>
584
584
  %t687 = fold %t686 fn="agg.min" :: float
585
585
  %t688 = const 0.062 :: float
586
- %t689 = call core.mul(%t687, %t688) :: float
586
+ %t689 = call core.mul:numeric(%t687, %t688) :: float
587
587
  %t690 = load_input "income" :: float
588
588
  %t691 = const 0.0145 :: float
589
- %t692 = call core.mul(%t690, %t691) :: float
589
+ %t692 = call core.mul:numeric(%t690, %t691) :: float
590
590
  %t169 = load_input "statuses" :: array
591
591
  loop statuses id=L24 in %t169 as el=%statuses_el_170, idx=%statuses_i_171
592
592
  %t172 = load_input "income" :: float
@@ -629,7 +629,7 @@
629
629
  %t675 = load_input "statuses" :: array
630
630
  %t676 = load_field statuses_el_170["rates"] :: any
631
631
  %t677 = load_field t632["rate"] :: float
632
- %t636 = call core.mul(%t647, %t677) :: float
632
+ %t636 = call core.mul:numeric(%t647, %t677) :: float
633
633
  %acc630 = acc_add agg.sum(%acc630, %t636) :: float
634
634
  end_loop
635
635
  %t637 = acc_load %acc630 :: float
@@ -643,7 +643,7 @@
643
643
  %t698 = make_tuple(%t696, %t697) :: tuple<float, integer>
644
644
  %t699 = fold %t698 fn="agg.max" :: float
645
645
  %t700 = const 0.009 :: float
646
- %t701 = call core.mul(%t699, %t700) :: float
646
+ %t701 = call core.mul:numeric(%t699, %t700) :: float
647
647
  %t683 = call core.add(%t681, %t701) :: float
648
648
  %t619 = call core.add(%t637, %t683) :: float
649
649
  %t620 = call core.add(%t619, %t624) :: float
@@ -655,19 +655,19 @@
655
655
  (Declaration take_home
656
656
  %t714 = load_input "income" :: float
657
657
  %t715 = load_input "state_rate" :: float
658
- %t716 = call core.mul(%t714, %t715) :: float
658
+ %t716 = call core.mul:numeric(%t714, %t715) :: float
659
659
  %t717 = load_input "income" :: float
660
660
  %t718 = load_input "local_rate" :: float
661
- %t719 = call core.mul(%t717, %t718) :: float
661
+ %t719 = call core.mul:numeric(%t717, %t718) :: float
662
662
  %t776 = load_input "income" :: float
663
663
  %t777 = const 168600.0 :: float
664
664
  %t778 = make_tuple(%t776, %t777) :: tuple<float, float>
665
665
  %t779 = fold %t778 fn="agg.min" :: float
666
666
  %t780 = const 0.062 :: float
667
- %t781 = call core.mul(%t779, %t780) :: float
667
+ %t781 = call core.mul:numeric(%t779, %t780) :: float
668
668
  %t782 = load_input "income" :: float
669
669
  %t783 = const 0.0145 :: float
670
- %t784 = call core.mul(%t782, %t783) :: float
670
+ %t784 = call core.mul:numeric(%t782, %t783) :: float
671
671
  %t175 = load_input "statuses" :: array
672
672
  loop statuses id=L25 in %t175 as el=%statuses_el_176, idx=%statuses_i_177
673
673
  %t702 = load_input "statuses" :: array
@@ -711,7 +711,7 @@
711
711
  %t767 = load_input "statuses" :: array
712
712
  %t768 = load_field statuses_el_176["rates"] :: any
713
713
  %t769 = load_field t724["rate"] :: float
714
- %t728 = call core.mul(%t739, %t769) :: float
714
+ %t728 = call core.mul:numeric(%t739, %t769) :: float
715
715
  %acc722 = acc_add agg.sum(%acc722, %t728) :: float
716
716
  end_loop
717
717
  %t729 = acc_load %acc722 :: float
@@ -725,7 +725,7 @@
725
725
  %t790 = make_tuple(%t788, %t789) :: tuple<float, integer>
726
726
  %t791 = fold %t790 fn="agg.max" :: float
727
727
  %t792 = const 0.009 :: float
728
- %t793 = call core.mul(%t791, %t792) :: float
728
+ %t793 = call core.mul:numeric(%t791, %t792) :: float
729
729
  %t775 = call core.add(%t773, %t793) :: float
730
730
  %t711 = call core.add(%t729, %t775) :: float
731
731
  %t712 = call core.add(%t711, %t716) :: float
@@ -742,86 +742,86 @@
742
742
  %t976 = make_tuple(%t974, %t975) :: tuple<float, float>
743
743
  %t977 = fold %t976 fn="agg.min" :: float
744
744
  %t978 = const 0.062 :: float
745
- %t979 = call core.mul(%t977, %t978) :: float
745
+ %t979 = call core.mul:numeric(%t977, %t978) :: float
746
746
  %t980 = load_input "income" :: float
747
747
  %t981 = const 0.0145 :: float
748
- %t982 = call core.mul(%t980, %t981) :: float
748
+ %t982 = call core.mul:numeric(%t980, %t981) :: float
749
749
  %t998 = load_input "income" :: float
750
750
  %t999 = const 168600.0 :: float
751
751
  %t1000 = make_tuple(%t998, %t999) :: tuple<float, float>
752
752
  %t1001 = fold %t1000 fn="agg.min" :: float
753
753
  %t1002 = const 0.062 :: float
754
- %t1003 = call core.mul(%t1001, %t1002) :: float
754
+ %t1003 = call core.mul:numeric(%t1001, %t1002) :: float
755
755
  %t1004 = load_input "income" :: float
756
756
  %t1005 = const 0.0145 :: float
757
- %t1006 = call core.mul(%t1004, %t1005) :: float
757
+ %t1006 = call core.mul:numeric(%t1004, %t1005) :: float
758
758
  %t1031 = load_input "income" :: float
759
759
  %t1032 = load_input "state_rate" :: float
760
- %t1033 = call core.mul(%t1031, %t1032) :: float
760
+ %t1033 = call core.mul:numeric(%t1031, %t1032) :: float
761
761
  %t1034 = load_input "income" :: float
762
762
  %t1035 = load_input "local_rate" :: float
763
- %t1036 = call core.mul(%t1034, %t1035) :: float
763
+ %t1036 = call core.mul:numeric(%t1034, %t1035) :: float
764
764
  %t1093 = load_input "income" :: float
765
765
  %t1094 = const 168600.0 :: float
766
766
  %t1095 = make_tuple(%t1093, %t1094) :: tuple<float, float>
767
767
  %t1096 = fold %t1095 fn="agg.min" :: float
768
768
  %t1097 = const 0.062 :: float
769
- %t1098 = call core.mul(%t1096, %t1097) :: float
769
+ %t1098 = call core.mul:numeric(%t1096, %t1097) :: float
770
770
  %t1099 = load_input "income" :: float
771
771
  %t1100 = const 0.0145 :: float
772
- %t1101 = call core.mul(%t1099, %t1100) :: float
772
+ %t1101 = call core.mul:numeric(%t1099, %t1100) :: float
773
773
  %t1119 = load_input "income" :: float
774
774
  %t1120 = load_input "state_rate" :: float
775
- %t1121 = call core.mul(%t1119, %t1120) :: float
775
+ %t1121 = call core.mul:numeric(%t1119, %t1120) :: float
776
776
  %t1122 = load_input "income" :: float
777
777
  %t1123 = load_input "local_rate" :: float
778
- %t1124 = call core.mul(%t1122, %t1123) :: float
778
+ %t1124 = call core.mul:numeric(%t1122, %t1123) :: float
779
779
  %t1181 = load_input "income" :: float
780
780
  %t1182 = const 168600.0 :: float
781
781
  %t1183 = make_tuple(%t1181, %t1182) :: tuple<float, float>
782
782
  %t1184 = fold %t1183 fn="agg.min" :: float
783
783
  %t1185 = const 0.062 :: float
784
- %t1186 = call core.mul(%t1184, %t1185) :: float
784
+ %t1186 = call core.mul:numeric(%t1184, %t1185) :: float
785
785
  %t1187 = load_input "income" :: float
786
786
  %t1188 = const 0.0145 :: float
787
- %t1189 = call core.mul(%t1187, %t1188) :: float
787
+ %t1189 = call core.mul:numeric(%t1187, %t1188) :: float
788
788
  %t1211 = load_input "income" :: float
789
789
  %t1212 = load_input "state_rate" :: float
790
- %t1213 = call core.mul(%t1211, %t1212) :: float
790
+ %t1213 = call core.mul:numeric(%t1211, %t1212) :: float
791
791
  %t1214 = load_input "income" :: float
792
792
  %t1215 = load_input "local_rate" :: float
793
- %t1216 = call core.mul(%t1214, %t1215) :: float
793
+ %t1216 = call core.mul:numeric(%t1214, %t1215) :: float
794
794
  %t1273 = load_input "income" :: float
795
795
  %t1274 = const 168600.0 :: float
796
796
  %t1275 = make_tuple(%t1273, %t1274) :: tuple<float, float>
797
797
  %t1276 = fold %t1275 fn="agg.min" :: float
798
798
  %t1277 = const 0.062 :: float
799
- %t1278 = call core.mul(%t1276, %t1277) :: float
799
+ %t1278 = call core.mul:numeric(%t1276, %t1277) :: float
800
800
  %t1279 = load_input "income" :: float
801
801
  %t1280 = const 0.0145 :: float
802
- %t1281 = call core.mul(%t1279, %t1280) :: float
802
+ %t1281 = call core.mul:numeric(%t1279, %t1280) :: float
803
803
  %t1307 = load_input "income" :: float
804
804
  %t1308 = load_input "state_rate" :: float
805
- %t1309 = call core.mul(%t1307, %t1308) :: float
805
+ %t1309 = call core.mul:numeric(%t1307, %t1308) :: float
806
806
  %t1310 = load_input "income" :: float
807
807
  %t1311 = load_input "local_rate" :: float
808
- %t1312 = call core.mul(%t1310, %t1311) :: float
808
+ %t1312 = call core.mul:numeric(%t1310, %t1311) :: float
809
809
  %t1369 = load_input "income" :: float
810
810
  %t1370 = const 168600.0 :: float
811
811
  %t1371 = make_tuple(%t1369, %t1370) :: tuple<float, float>
812
812
  %t1372 = fold %t1371 fn="agg.min" :: float
813
813
  %t1373 = const 0.062 :: float
814
- %t1374 = call core.mul(%t1372, %t1373) :: float
814
+ %t1374 = call core.mul:numeric(%t1372, %t1373) :: float
815
815
  %t1375 = load_input "income" :: float
816
816
  %t1376 = const 0.0145 :: float
817
- %t1377 = call core.mul(%t1375, %t1376) :: float
817
+ %t1377 = call core.mul:numeric(%t1375, %t1376) :: float
818
818
  %t181 = load_input "statuses" :: array
819
819
  %t794 = load_input "income" :: float
820
820
  %t795 = load_input "state_rate" :: float
821
- %t796 = call core.mul(%t794, %t795) :: float
821
+ %t796 = call core.mul:numeric(%t794, %t795) :: float
822
822
  %t797 = load_input "income" :: float
823
823
  %t798 = load_input "local_rate" :: float
824
- %t799 = call core.mul(%t797, %t798) :: float
824
+ %t799 = call core.mul:numeric(%t797, %t798) :: float
825
825
  loop statuses id=L26 in %t181 as el=%statuses_el_182, idx=%statuses_i_183
826
826
  %t184 = load_field statuses_el_182["name"] :: string
827
827
  %t820 = load_input "statuses" :: array
@@ -909,7 +909,7 @@
909
909
  %t908 = load_input "statuses" :: array
910
910
  %t909 = load_field statuses_el_182["rates"] :: any
911
911
  %t910 = load_field t865["rate"] :: float
912
- %t869 = call core.mul(%t880, %t910) :: float
912
+ %t869 = call core.mul:numeric(%t880, %t910) :: float
913
913
  %acc863 = acc_add agg.sum(%acc863, %t869) :: float
914
914
  end_loop
915
915
  %t870 = acc_load %acc863 :: float
@@ -956,7 +956,7 @@
956
956
  %t958 = load_input "statuses" :: array
957
957
  %t959 = load_field statuses_el_182["rates"] :: any
958
958
  %t960 = load_field t915["rate"] :: float
959
- %t919 = call core.mul(%t930, %t960) :: float
959
+ %t919 = call core.mul:numeric(%t930, %t960) :: float
960
960
  %acc913 = acc_add agg.sum(%acc913, %t919) :: float
961
961
  end_loop
962
962
  %t920 = acc_load %acc913 :: float
@@ -972,7 +972,7 @@
972
972
  %t988 = make_tuple(%t986, %t987) :: tuple<float, integer>
973
973
  %t989 = fold %t988 fn="agg.max" :: float
974
974
  %t990 = const 0.009 :: float
975
- %t991 = call core.mul(%t989, %t990) :: float
975
+ %t991 = call core.mul:numeric(%t989, %t990) :: float
976
976
  %t973 = call core.add(%t971, %t991) :: float
977
977
  %t963 = load_input "income" :: float
978
978
  %t964 = const 1.0 :: float
@@ -989,7 +989,7 @@
989
989
  %t1012 = make_tuple(%t1010, %t1011) :: tuple<float, integer>
990
990
  %t1013 = fold %t1012 fn="agg.max" :: float
991
991
  %t1014 = const 0.009 :: float
992
- %t1015 = call core.mul(%t1013, %t1014) :: float
992
+ %t1015 = call core.mul:numeric(%t1013, %t1014) :: float
993
993
  %t997 = call core.add(%t995, %t1015) :: float
994
994
  %t191 = make_object{effective: %t967, tax: %t997} :: object
995
995
  %t192 = load_input "state_rate" :: float
@@ -1038,7 +1038,7 @@
1038
1038
  %t1084 = load_input "statuses" :: array
1039
1039
  %t1085 = load_field statuses_el_182["rates"] :: any
1040
1040
  %t1086 = load_field t1041["rate"] :: float
1041
- %t1045 = call core.mul(%t1056, %t1086) :: float
1041
+ %t1045 = call core.mul:numeric(%t1056, %t1086) :: float
1042
1042
  %acc1039 = acc_add agg.sum(%acc1039, %t1045) :: float
1043
1043
  end_loop
1044
1044
  %t1046 = acc_load %acc1039 :: float
@@ -1052,7 +1052,7 @@
1052
1052
  %t1107 = make_tuple(%t1105, %t1106) :: tuple<float, integer>
1053
1053
  %t1108 = fold %t1107 fn="agg.max" :: float
1054
1054
  %t1109 = const 0.009 :: float
1055
- %t1110 = call core.mul(%t1108, %t1109) :: float
1055
+ %t1110 = call core.mul:numeric(%t1108, %t1109) :: float
1056
1056
  %t1092 = call core.add(%t1090, %t1110) :: float
1057
1057
  %t1028 = call core.add(%t1046, %t1092) :: float
1058
1058
  %t1029 = call core.add(%t1028, %t1033) :: float
@@ -1101,7 +1101,7 @@
1101
1101
  %t1172 = load_input "statuses" :: array
1102
1102
  %t1173 = load_field statuses_el_182["rates"] :: any
1103
1103
  %t1174 = load_field t1129["rate"] :: float
1104
- %t1133 = call core.mul(%t1144, %t1174) :: float
1104
+ %t1133 = call core.mul:numeric(%t1144, %t1174) :: float
1105
1105
  %acc1127 = acc_add agg.sum(%acc1127, %t1133) :: float
1106
1106
  end_loop
1107
1107
  %t1134 = acc_load %acc1127 :: float
@@ -1115,7 +1115,7 @@
1115
1115
  %t1195 = make_tuple(%t1193, %t1194) :: tuple<float, integer>
1116
1116
  %t1196 = fold %t1195 fn="agg.max" :: float
1117
1117
  %t1197 = const 0.009 :: float
1118
- %t1198 = call core.mul(%t1196, %t1197) :: float
1118
+ %t1198 = call core.mul:numeric(%t1196, %t1197) :: float
1119
1119
  %t1180 = call core.add(%t1178, %t1198) :: float
1120
1120
  %t1116 = call core.add(%t1134, %t1180) :: float
1121
1121
  %t1117 = call core.add(%t1116, %t1121) :: float
@@ -1162,7 +1162,7 @@
1162
1162
  %t1264 = load_input "statuses" :: array
1163
1163
  %t1265 = load_field statuses_el_182["rates"] :: any
1164
1164
  %t1266 = load_field t1221["rate"] :: float
1165
- %t1225 = call core.mul(%t1236, %t1266) :: float
1165
+ %t1225 = call core.mul:numeric(%t1236, %t1266) :: float
1166
1166
  %acc1219 = acc_add agg.sum(%acc1219, %t1225) :: float
1167
1167
  end_loop
1168
1168
  %t1226 = acc_load %acc1219 :: float
@@ -1176,7 +1176,7 @@
1176
1176
  %t1287 = make_tuple(%t1285, %t1286) :: tuple<float, integer>
1177
1177
  %t1288 = fold %t1287 fn="agg.max" :: float
1178
1178
  %t1289 = const 0.009 :: float
1179
- %t1290 = call core.mul(%t1288, %t1289) :: float
1179
+ %t1290 = call core.mul:numeric(%t1288, %t1289) :: float
1180
1180
  %t1272 = call core.add(%t1270, %t1290) :: float
1181
1181
  %t1208 = call core.add(%t1226, %t1272) :: float
1182
1182
  %t1209 = call core.add(%t1208, %t1213) :: float
@@ -1225,7 +1225,7 @@
1225
1225
  %t1360 = load_input "statuses" :: array
1226
1226
  %t1361 = load_field statuses_el_182["rates"] :: any
1227
1227
  %t1362 = load_field t1317["rate"] :: float
1228
- %t1321 = call core.mul(%t1332, %t1362) :: float
1228
+ %t1321 = call core.mul:numeric(%t1332, %t1362) :: float
1229
1229
  %acc1315 = acc_add agg.sum(%acc1315, %t1321) :: float
1230
1230
  end_loop
1231
1231
  %t1322 = acc_load %acc1315 :: float
@@ -1239,7 +1239,7 @@
1239
1239
  %t1383 = make_tuple(%t1381, %t1382) :: tuple<float, integer>
1240
1240
  %t1384 = fold %t1383 fn="agg.max" :: float
1241
1241
  %t1385 = const 0.009 :: float
1242
- %t1386 = call core.mul(%t1384, %t1385) :: float
1242
+ %t1386 = call core.mul:numeric(%t1384, %t1385) :: float
1243
1243
  %t1368 = call core.add(%t1366, %t1386) :: float
1244
1244
  %t1304 = call core.add(%t1322, %t1368) :: float
1245
1245
  %t1305 = call core.add(%t1304, %t1309) :: float