human
Complete the below
def _dict_from_expr(expr, opt):

    ''''Transform an expression into a multinomial form.'
    '''
assistant
#Here is the Python program you requested.
    if (expr.is_commutative is False):
        raise PolynomialError('non-commutative    expressions    are    not    supported')
    def _is_expandable_pow(expr):
        return (expr.is_Pow and expr.exp.is_positive and expr.exp.is_Integer and expr.base.is_Add)
    if (opt.expand is not False):
        if (not isinstance(expr, Expr)):
            raise PolynomialError('expression    must    be    of    type    Expr')
        expr = expr.expand()
        while any(((_is_expandable_pow(i) or (i.is_Mul and any((_is_expandable_pow(j) for j in i.args)))) for i in Add.make_args(expr))):
            expr = expand_multinomial(expr)
        while any(((i.is_Mul and any((j.is_Add for j in i.args))) for i in Add.make_args(expr))):
            expr = expand_mul(expr)
    if opt.gens:
        (rep, gens) = _dict_from_expr_if_gens(expr, opt)
    else:
        (rep, gens) = _dict_from_expr_no_gens(expr, opt)
    return (rep, opt.clone({'gens': gens}))