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
@@ -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
  loop statuses id=L20 in %t133 as el=%statuses_el_134, idx=%statuses_i_135
269
269
  %t138 = call core.add(%t409, %t412) :: float
270
270
  %t415 = load_field statuses_el_134["addl_threshold"] :: 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
  loop statuses id=L21 in %t141 as el=%statuses_el_142, idx=%statuses_i_143
292
292
  %t425 = call core.add(%t433, %t436) :: float
@@ -299,7 +299,7 @@
299
299
  %t442 = make_tuple(%t440, %t441) :: tuple<float, integer>
300
300
  %t148 = fold %t147 fn="agg.max" :: float
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
  loop statuses id=L22 in %t150 as el=%statuses_el_151, idx=%statuses_i_152
323
323
  %t474 = load_field statuses_el_151["std"] :: float
324
324
  %t476 = const 0 :: integer
@@ -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
  loop statuses id=L23 in %t160 as el=%statuses_el_161, idx=%statuses_i_162
374
374
  %t562 = load_field statuses_el_161["std"] :: 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
  loop statuses id=L24 in %t169 as el=%statuses_el_170, idx=%statuses_i_171
429
429
  %t650 = load_field statuses_el_170["std"] :: 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
  loop statuses id=L25 in %t175 as el=%statuses_el_176, idx=%statuses_i_177
481
481
  %t742 = load_field statuses_el_176["std"] :: 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
  loop statuses id=L26 in %t181 as el=%statuses_el_182, idx=%statuses_i_183
535
535
  %t184 = load_field statuses_el_182["name"] :: string
@@ -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
  loop statuses id=L20 in %t133 as el=%statuses_el_134, idx=%statuses_i_135
269
269
  %t138 = call core.add(%t409, %t412) :: float
270
270
  %t415 = load_field statuses_el_134["addl_threshold"] :: 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
  loop statuses id=L21 in %t141 as el=%statuses_el_142, idx=%statuses_i_143
292
292
  %t425 = call core.add(%t433, %t436) :: float
@@ -299,7 +299,7 @@
299
299
  %t442 = make_tuple(%t440, %t441) :: tuple<float, integer>
300
300
  %t148 = fold %t147 fn="agg.max" :: float
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
  loop statuses id=L22 in %t150 as el=%statuses_el_151, idx=%statuses_i_152
323
323
  %t474 = load_field statuses_el_151["std"] :: float
324
324
  %t476 = const 0 :: integer
@@ -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
  loop statuses id=L23 in %t160 as el=%statuses_el_161, idx=%statuses_i_162
374
374
  %t562 = load_field statuses_el_161["std"] :: 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
  loop statuses id=L24 in %t169 as el=%statuses_el_170, idx=%statuses_i_171
429
429
  %t650 = load_field statuses_el_170["std"] :: 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
  loop statuses id=L25 in %t175 as el=%statuses_el_176, idx=%statuses_i_177
481
481
  %t742 = load_field statuses_el_176["std"] :: 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
  loop statuses id=L26 in %t181 as el=%statuses_el_182, idx=%statuses_i_183
535
535
  %t184 = load_field statuses_el_182["name"] :: string
@@ -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
  %t940 = load_field t865["lo"] :: float
589
589
  %t925 = call core.sub(%t826, %t940) :: float
@@ -593,7 +593,7 @@
593
593
  %t929 = call core.sub(%t948, %t940) :: float
594
594
  %t930 = call core.clamp(%t925, %t824, %t929) :: float
595
595
  %t960 = load_field t865["rate"] :: float
596
- %t919 = call core.mul(%t930, %t960) :: float
596
+ %t919 = call core.mul:numeric(%t930, %t960) :: float
597
597
  %acc913 = acc_add agg.sum(%acc913, %t919) :: float
598
598
  %t1066 = load_field t865["lo"] :: float
599
599
  %t1051 = call core.sub(%t826, %t1066) :: float
@@ -603,7 +603,7 @@
603
603
  %t1055 = call core.sub(%t1074, %t1066) :: float
604
604
  %t1056 = call core.clamp(%t1051, %t824, %t1055) :: float
605
605
  %t1086 = load_field t865["rate"] :: float
606
- %t1045 = call core.mul(%t1056, %t1086) :: float
606
+ %t1045 = call core.mul:numeric(%t1056, %t1086) :: float
607
607
  %acc1039 = acc_add agg.sum(%acc1039, %t1045) :: float
608
608
  %t1154 = load_field t865["lo"] :: float
609
609
  %t1139 = call core.sub(%t826, %t1154) :: float
@@ -613,7 +613,7 @@
613
613
  %t1143 = call core.sub(%t1162, %t1154) :: float
614
614
  %t1144 = call core.clamp(%t1139, %t824, %t1143) :: float
615
615
  %t1174 = load_field t865["rate"] :: float
616
- %t1133 = call core.mul(%t1144, %t1174) :: float
616
+ %t1133 = call core.mul:numeric(%t1144, %t1174) :: float
617
617
  %acc1127 = acc_add agg.sum(%acc1127, %t1133) :: float
618
618
  %t1246 = load_field t865["lo"] :: float
619
619
  %t1231 = call core.sub(%t826, %t1246) :: float
@@ -623,7 +623,7 @@
623
623
  %t1235 = call core.sub(%t1254, %t1246) :: float
624
624
  %t1236 = call core.clamp(%t1231, %t824, %t1235) :: float
625
625
  %t1266 = load_field t865["rate"] :: float
626
- %t1225 = call core.mul(%t1236, %t1266) :: float
626
+ %t1225 = call core.mul:numeric(%t1236, %t1266) :: float
627
627
  %acc1219 = acc_add agg.sum(%acc1219, %t1225) :: float
628
628
  %t1342 = load_field t865["lo"] :: float
629
629
  %t1327 = call core.sub(%t826, %t1342) :: float
@@ -633,7 +633,7 @@
633
633
  %t1331 = call core.sub(%t1350, %t1342) :: float
634
634
  %t1332 = call core.clamp(%t1327, %t824, %t1331) :: float
635
635
  %t1362 = load_field t865["rate"] :: float
636
- %t1321 = call core.mul(%t1332, %t1362) :: float
636
+ %t1321 = call core.mul:numeric(%t1332, %t1362) :: float
637
637
  %acc1315 = acc_add agg.sum(%acc1315, %t1321) :: float
638
638
  end_loop
639
639
  %t973 = call core.add(%t971, %t991) :: float