<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _coefficient_handler_factory(trans_table, parse_func, assertion=lambda c, ctx: True, ion_type=None, append_first_if_not=None):
 """Generates a handler co-routine which tokenizes a numeric coefficient. Args: trans_table (dict):
 lookup table for the handler for the next component of this numeric token, given the ordinal of the first character in that component. parse_func (callable):
 Called upon ending the numeric value. Accepts the current token value and returns a thunk that lazily parses the token. assertion (callable):
 Accepts the first character's ordinal and the current context. Returns True if this is a legal start to the component. ion_type (Optional[IonType]):
 The type of the value if it were to end on this coefficient. append_first_if_not (Optional[int]):
 The ordinal of a character that should not be appended to the token if it occurs first in this component (e.g. an underscore in many cases). """

    def transition(prev, c, ctx, trans):
        if prev == _UNDERSCORE:
            _illegal_character(c, ctx, 'Underscore before %s.' % (_chr(c),))
        return ctx.immediate_transition(trans_table[c](c, ctx))
    return _numeric_handler_factory(_DIGITS, transition, assertion, (_DOT,), parse_func,
                                    ion_type=ion_type, append_first_if_not=append_first_if_not)