def METHOD_NAME(
    self,
    tax_base: NumericalArray,
    factor: float = 1.0,
    round_decimals: typing.Optional[int] = None,
) -> numpy.int_:
    """
    Compute the relevant bracket indices for the given tax bases.
    :param ndarray tax_base: Array of the tax bases.
    :param float factor: Factor to apply to the thresholds.
    :param int round_decimals: Decimals to keep when rounding thresholds.
    :returns: Integer array with relevant bracket indices for the given tax
              bases.
    For instance:
    >>> tax_scale = LinearAverageRateTaxScale()
    >>> tax_scale.add_bracket(0, 0)
    >>> tax_scale.add_bracket(100, 0.1)
    >>> tax_base = array([0, 150])
    >>> tax_scale.bracket_indices(tax_base)
    [0, 1]
    """
    if not numpy.size(numpy.array(self.thresholds)):
        raise EmptyArgumentError(
            self.__class__.__name__,
            "bracket_indices",
            "self.thresholds",
            self.thresholds,
        )
    if not numpy.size(numpy.asarray(tax_base)):
        raise EmptyArgumentError(
            self.__class__.__name__,
            "bracket_indices",
            "tax_base",
            tax_base,
        )
    base1 = numpy.tile(tax_base, (len(self.thresholds), 1)).T
    factor = numpy.ones(len(tax_base)) * factor
    # To avoid the creation of:
    #
    #   numpy.nan = 0 * numpy.inf
    #
    # We use:
    #
    #   numpy.finfo(float_).eps
    thresholds1 = numpy.outer(
        +factor + numpy.finfo(numpy.float_).eps, numpy.array(self.thresholds)
    )
    if round_decimals is not None:
        thresholds1 = numpy.round_(thresholds1, round_decimals)
    return (base1 - thresholds1 >= 0).sum(axis=1) - 1