def METHOD_NAME(self, norm_name: str) -> Iterable[str]:
    baseform = '^ ' + norm_name + ' ^'
    baselen = len(baseform)
    partials = ['']
    startpos = 0
    if self.replacements is not None:
        pos = 0
        force_space = False
        while pos < baselen:
            full, repl = self.replacements.longest_prefix_item(baseform[pos:],
                                                               (None, None))
            if full is not None:
                done = baseform[startpos:pos]
                partials = [v + done + r
                            for v, r in itertools.product(partials, repl)
                            if not force_space or r.startswith(' ')]
                if len(partials) > 128:
                    # If too many variants are produced, they are unlikely
                    # to be helpful. Only use the original term.
                    startpos = 0
                    break
                startpos = pos + len(full)
                if full[-1] == ' ':
                    startpos -= 1
                    force_space = True
                pos = startpos
            else:
                pos += 1
                force_space = False
    # No variants detected? Fast return.
    if startpos == 0:
        return (norm_name, )
    if startpos < baselen:
        return (part[1:] + baseform[startpos:-1] for part in partials)
    return (part[1:-1] for part in partials)