def _expm1_value(e):
    (numbers, non_num) = sift(e.args, (lambda arg: arg.is_number), binary=True)
    (non_num_exp, non_num_other) = sift(non_num, (lambda arg: arg.has(exp)), binary=True)
    numsum = sum(numbers)
    (new_exp_terms, done) = ([], False)
    for exp_term in non_num_exp:
        if done:
            new_exp_terms.append(exp_term)
        else:
            looking_at = (exp_term + numsum)
            attempt = _try_expm1(looking_at)
            if (looking_at == attempt):
                new_exp_terms.append(exp_term)
            else:
                done = True
                new_exp_terms.append(attempt)
    if (not done):
        new_exp_terms.append(numsum)
    return e.func(*chain(new_exp_terms, non_num_other))
def _expm1_value(e):
    (numbers, non_num) = sift(e.args, (lambda arg: arg.is_number), binary=True)
    (non_num_exp, non_num_other) = sift(non_num, (lambda arg: arg.has(exp)), binary=True)
    numsum = sum(numbers)
    (new_exp_terms, done) = ([], False)
    for exp_term in non_num_exp:
        if done:
            new_exp_terms.append(exp_term)
        else:
            looking_at = (exp_term + numsum)
            attempt = _try_expm1(looking_at)
            if (looking_at == attempt):
                new_exp_terms.append(exp_term)
            else:
                done = True
                new_exp_terms.append(attempt)
    if (not done):
        new_exp_terms.append(numsum)
    return e.func(*chain(new_exp_terms, non_num_other))