Source code for policyengine_core.taxscales.marginal_amount_tax_scale
from __future__ import annotations
import typing
import numpy
from policyengine_core.taxscales import AmountTaxScaleLike
if typing.TYPE_CHECKING:
NumericalArray = typing.Union[numpy.int_, numpy.float_]
[docs]class MarginalAmountTaxScale(AmountTaxScaleLike):
[docs] def calc(
self,
tax_base: NumericalArray,
right: bool = False,
) -> numpy.float_:
"""
Matches the input amount to a set of brackets and returns the sum of
cell values from the lowest bracket to the one containing the input.
"""
base1 = numpy.tile(tax_base, (len(self.thresholds), 1)).T
thresholds1 = numpy.tile(
numpy.hstack((self.thresholds, numpy.inf)), (len(tax_base), 1)
)
a = numpy.maximum(
numpy.minimum(base1, thresholds1[:, 1:]) - thresholds1[:, :-1], 0
)
return numpy.dot(self.amounts, a.T > 0)