Example #1
0
    def apply(self, f, i, evaluation):
        'Root[f_, i_]'

        try:
            if not f.has_form('Function', 1):
                raise sympy.PolynomialError

            body = f.leaves[0]
            poly = body.replace_slots([f, Symbol('_1')], evaluation)
            idx = i.to_sympy() - 1

            # Check for negative indeces (they are not allowed in Mathematica)
            if idx < 0:
                evaluation.message('Root', 'iidx', i)
                return

            r = sympy.CRootOf(poly.to_sympy(), idx)
        except sympy.PolynomialError:
            evaluation.message('Root', 'nuni', f)
            return
        except TypeError:
            evaluation.message('Root', 'nint', i)
            return
        except IndexError:
            evaluation.message('Root', 'iidx', i)
            return

        return from_sympy(r)
Example #2
0
    def to_sympy(self, expr, **kwargs):
        try:
            if not expr.has_form('Root', 2):
                return None

            f = expr.leaves[0]

            if not f.has_form('Function', 1):
                return None

            body = f.leaves[0].replace_slots([f, Symbol('_1')], None)
            poly = body.to_sympy(**kwargs)

            i = expr.leaves[1].get_int_value(**kwargs)
            
            if i is None:
                return None

            return sympy.CRootOf(poly, i)
        except:
            return None