def mutation_possible(known_factors, composite, forms=None):
target_tau = known_factors[<NUM_LIT:2>] - twos_count(known_factors)<EOL>if target_tau < <NUM_LIT:2>:<EOL><INDENT>return []<EOL><DEDENT>if forms is None:<EOL><INDENT>forms = [(<NUM_LIT:1>,)*i for i in range(<NUM_LIT:2>, target_tau+<NUM_LIT:1>)]<EOL><DEDENT>else:<EOL><INDENT>forms = tuple(filter(lambda f: len(f) <= target_tau, forms)) <EOL><DEDENT>return [allowed_res for form in forms for allowed_res in composite_tau_lte(composite, target_tau, form)]<EOL>
Given an aliquot term in the form `known_factors` * `composite` (where the
    former is an `nt.Factors` instance), then test if a mutation is possible
    depending on how the composite factors. Returning an empty list guarantees
    that a mutation won't happen, but a non-empty list (which comprises the
    conditions on the component primes in the composite) does not guarantee that
    a mutation will occur.

    If `forms` is not passed, then all possible square-free forms will be tried.

    Use mutation_possible_to_str to interpret the results.