Пример #1
0
    def _print_Derivative(self, e):
        mrow = self.dom.createElement('mrow')
        x = self.dom.createElement('mo')
        if requires_partial(e):
            x.appendChild(self.dom.createTextNode('∂'))
            y = self.dom.createElement('mo')
            y.appendChild(self.dom.createTextNode('∂'))
        else:
            x.appendChild(self.dom.createTextNode(self.mathml_tag(e)))
            y = self.dom.createElement('mo')
            y.appendChild(self.dom.createTextNode(self.mathml_tag(e)))

        brac = self.dom.createElement('mfenced')
        brac.appendChild(self._print(e.expr))
        mrow = self.dom.createElement('mrow')
        mrow.appendChild(x)
        mrow.appendChild(brac)

        for sym in e.variables:
            frac = self.dom.createElement('mfrac')
            m = self.dom.createElement('mrow')
            x = self.dom.createElement('mo')
            if requires_partial(e):
                x.appendChild(self.dom.createTextNode('∂'))
            else:
                x.appendChild(self.dom.createTextNode(self.mathml_tag(e)))
            y = self._print(sym)
            m.appendChild(x)
            m.appendChild(y)
            frac.appendChild(mrow)
            frac.appendChild(m)
            mrow = frac

        return frac
Пример #2
0
    def _print_Derivative(self, e):
        mrow = self.dom.createElement('mrow')
        x = self.dom.createElement('mo')
        if requires_partial(e):
            x.appendChild(self.dom.createTextNode('∂'))
            y = self.dom.createElement('mo')
            y.appendChild(self.dom.createTextNode('∂'))
        else:
            x.appendChild(self.dom.createTextNode(self.mathml_tag(e)))
            y = self.dom.createElement('mo')
            y.appendChild(self.dom.createTextNode(self.mathml_tag(e)))

        brac = self.dom.createElement('mfenced')
        brac.appendChild(self._print(e.expr))
        mrow = self.dom.createElement('mrow')
        mrow.appendChild(x)
        mrow.appendChild(brac)

        for sym in e.variables:
            frac = self.dom.createElement('mfrac')
            m = self.dom.createElement('mrow')
            x = self.dom.createElement('mo')
            if requires_partial(e):
                x.appendChild(self.dom.createTextNode('∂'))
            else:
                x.appendChild(self.dom.createTextNode(self.mathml_tag(e)))
            y = self._print(sym)
            m.appendChild(x)
            m.appendChild(y)
            frac.appendChild(mrow)
            frac.appendChild(m)
            mrow = frac

        return frac
Пример #3
0
    def _print_Derivative(self, expr):
        if requires_partial(expr.expr):
            diff_symbol = r'\partial'
        else:
            diff_symbol = r'd'

        tex = []
        dim = 0
        for x, num in expr.variable_count:
            dim += num
            if num == 1:
                tex.append(r"%s" % self._print(x))
            else:
                tex.append(r"%s^{%s}" % (self.parenthesize_super(
                    self._print(x)), self._print(num)))

        if (isinstance(expr.expr, AppliedUndef)
                and self._settings["applied_no_args"]
                and self._settings["der_as_subscript"]):
            tex = ",".join(tex)
            return self._print_Function(expr.expr) + r"_{%s}" % tex

        tex = diff_symbol + " " + (diff_symbol + " ").join(reversed(tex))
        if (isinstance(expr.expr, AppliedUndef)
                and self._settings["applied_no_args"]):
            if dim == 1:
                return r"\frac{%s %s}{%s}" % (
                    diff_symbol, self._print_Function(expr.expr), tex)
            else:
                return r"\frac{%s^{%s} %s}{%s}" % (diff_symbol, self._print(
                    dim), self._print_Function(expr.expr), tex)

        return super()._print_Derivative(expr)
Пример #4
0
    def _print_Derivative(self, expr):
        if requires_partial(expr.expr):
            diff_symbol = r"\partial"
        else:
            diff_symbol = r"d"

        tex = r"%s_{" % (diff_symbol)
        for x, num in reversed(expr.variable_count):
            if num == 1:
                tex += r"%s " % (self._print(x))
            else:
                for i in range(num):
                    tex += r"%s " % (self._print(x))
        tex += r"}"

        # if dim == 1:
        #     tex = r"\frac{%s}{%s}" % (diff_symbol, tex)
        # else:
        #     tex = r"\frac{%s^{%s}}{%s}" % (diff_symbol, self._print(dim), tex)

        if any(_coeff_isneg(i) for i in expr.args):
            return r"%s %s" % (
                tex,
                self.parenthesize(
                    expr.expr, PRECEDENCE["Mul"], is_neg=True, strict=True),
            )

        return r"%s %s" % (
            tex,
            self.parenthesize(
                expr.expr, PRECEDENCE["Mul"], is_neg=False, strict=True),
        )
Пример #5
0
    def _print_Derivative(self, e):
        x = self.dom.createElement('apply')
        diff_symbol = self.mathml_tag(e)
        if requires_partial(e):
            diff_symbol = 'partialdiff'
        x.appendChild(self.dom.createElement(diff_symbol))

        x_1 = self.dom.createElement('bvar')
        for sym in e.variables:
            x_1.appendChild(self._print(sym))

        x.appendChild(x_1)
        x.appendChild(self._print(e.expr))
        return x
Пример #6
0
    def _print_Derivative(self, e):
        x = self.dom.createElement('apply')
        diff_symbol = self.mathml_tag(e)
        if requires_partial(e):
            diff_symbol = 'partialdiff'
        x.appendChild(self.dom.createElement(diff_symbol))

        x_1 = self.dom.createElement('bvar')
        for sym in e.variables:
            x_1.appendChild(self._print(sym))

        x.appendChild(x_1)
        x.appendChild(self._print(e.expr))
        return x
Пример #7
0
    def _print_Derivative(self, e):

        if requires_partial(e):
            d = '∂'
        else:
            d = self.mathml_tag(e)

        # Determine denominator
        m = self.dom.createElement('mrow')
        dim = 0  # Total diff dimension, for numerator
        for sym, num in reversed(e.variable_count):
            dim += num
            if num >= 2:
                x = self.dom.createElement('msup')
                xx = self.dom.createElement('mo')
                xx.appendChild(self.dom.createTextNode(d))
                x.appendChild(xx)
                x.appendChild(self._print(num))
            else:
                x = self.dom.createElement('mo')
                x.appendChild(self.dom.createTextNode(d))
            m.appendChild(x)
            y = self._print(sym)
            m.appendChild(y)

        mnum = self.dom.createElement('mrow')
        if dim >= 2:
            x = self.dom.createElement('msup')
            xx = self.dom.createElement('mo')
            xx.appendChild(self.dom.createTextNode(d))
            x.appendChild(xx)
            x.appendChild(self._print(dim))
        else:
            x = self.dom.createElement('mo')
            x.appendChild(self.dom.createTextNode(d))

        mnum.appendChild(x)
        mrow = self.dom.createElement('mrow')
        frac = self.dom.createElement('mfrac')
        frac.appendChild(mnum)
        frac.appendChild(m)
        mrow.appendChild(frac)

        # Print function
        mrow.appendChild(self._print(e.expr))

        return mrow
Пример #8
0
    def _print_Derivative(self, e):

        if requires_partial(e):
            d = '∂'
        else:
            d = self.mathml_tag(e)

        # Determine denominator
        m = self.dom.createElement('mrow')
        dim = 0 # Total diff dimension, for numerator
        for sym, num in reversed(e.variable_count):
            dim += num
            if num >= 2:
                x = self.dom.createElement('msup')
                xx = self.dom.createElement('mo')
                xx.appendChild(self.dom.createTextNode(d))
                x.appendChild(xx)
                x.appendChild(self._print(num))
            else:
                x = self.dom.createElement('mo')
                x.appendChild(self.dom.createTextNode(d))
            m.appendChild(x)
            y = self._print(sym)
            m.appendChild(y)

        mnum = self.dom.createElement('mrow')
        if dim >= 2:
            x = self.dom.createElement('msup')
            xx = self.dom.createElement('mo')
            xx.appendChild(self.dom.createTextNode(d))
            x.appendChild(xx)
            x.appendChild(self._print(dim))
        else:
            x = self.dom.createElement('mo')
            x.appendChild(self.dom.createTextNode(d))

        mnum.appendChild(x)
        mrow = self.dom.createElement('mrow')
        frac = self.dom.createElement('mfrac')
        frac.appendChild(mnum)
        frac.appendChild(m)
        mrow.appendChild(frac)

        # Print function
        mrow.appendChild(self._print(e.expr))

        return mrow
Пример #9
0
    def _print_Derivative(self, e):
        x = self.dom.createElement('apply')
        diff_symbol = self.mathml_tag(e)
        if requires_partial(e):
            diff_symbol = 'partialdiff'
        x.appendChild(self.dom.createElement(diff_symbol))
        x_1 = self.dom.createElement('bvar')

        for sym, times in reversed(e.variable_count):
            x_1.appendChild(self._print(sym))
            if times > 1:
                degree = self.dom.createElement('degree')
                degree.appendChild(self._print(sympify(times)))
                x_1.appendChild(degree)

        x.appendChild(x_1)
        x.appendChild(self._print(e.expr))
        return x
Пример #10
0
    def _print_Derivative(self, e):
        x = self.dom.createElement('apply')
        diff_symbol = self.mathml_tag(e)
        if requires_partial(e):
            diff_symbol = 'partialdiff'
        x.appendChild(self.dom.createElement(diff_symbol))
        x_1 = self.dom.createElement('bvar')

        for sym, times in reversed(e.variable_count):
            x_1.appendChild(self._print(sym))
            if times > 1:
                degree = self.dom.createElement('degree')
                degree.appendChild(self._print(sympify(times)))
                x_1.appendChild(degree)

        x.appendChild(x_1)
        x.appendChild(self._print(e.expr))
        return x
Пример #11
0
def test_requires_partial():
    x, y, z, t, nu = symbols('x y z t nu')
    n = symbols('n', integer=True)

    f = x * y
    assert requires_partial(Derivative(f, x)) is True
    assert requires_partial(Derivative(f, y)) is True

    ## integrating out one of the variables
    assert requires_partial(
        Derivative(Integral(exp(-x * y),
                            (x, 0, oo)), y, evaluate=False)) is False

    ## bessel function with smooth parameter
    f = besselj(nu, x)
    assert requires_partial(Derivative(f, x)) is True
    assert requires_partial(Derivative(f, nu)) is True

    ## bessel function with integer parameter
    f = besselj(n, x)
    assert requires_partial(Derivative(f, x)) is False
    # this is not really valid (differentiating with respect to an integer)
    # but there's no reason to use the partial derivative symbol there. make
    # sure we don't throw an exception here, though
    assert requires_partial(Derivative(f, n)) is False

    ## bell polynomial
    f = bell(n, x)
    assert requires_partial(Derivative(f, x)) is False
    # again, invalid
    assert requires_partial(Derivative(f, n)) is False

    ## legendre polynomial
    f = legendre(0, x)
    assert requires_partial(Derivative(f, x)) is False

    f = legendre(n, x)
    assert requires_partial(Derivative(f, x)) is False
    # again, invalid
    assert requires_partial(Derivative(f, n)) is False

    f = x**n
    assert requires_partial(Derivative(f, x)) is False

    assert requires_partial(
        Derivative(
            Integral((x * y)**n * exp(-x * y),
                     (x, 0, oo)), y, evaluate=False)) is False

    # parametric equation
    f = (exp(t), cos(t))
    g = sum(f)
    assert requires_partial(Derivative(g, t)) is False

    # function of unspecified variables
    f = symbols('f', cls=Function)
    assert requires_partial(Derivative(f, x)) is False
    assert requires_partial(Derivative(f, x, y)) is True
Пример #12
0
def test_requires_partial_unspecified_variables():
    x, y = symbols('x y')
    # function of unspecified variables
    f = symbols('f', cls=Function)
    assert requires_partial(Derivative(f, x)) is False
    assert requires_partial(Derivative(f, x, y)) is True
Пример #13
0
def test_requires_partial():
    x, y, z, t, nu = symbols('x y z t nu')
    n = symbols('n', integer=True)

    f = x * y
    assert requires_partial(Derivative(f, x)) is True
    assert requires_partial(Derivative(f, y)) is True

    ## integrating out one of the variables
    assert requires_partial(Derivative(Integral(exp(-x * y), (x, 0, oo)), y, evaluate=False)) is False

    ## bessel function with smooth parameter
    f = besselj(nu, x)
    assert requires_partial(Derivative(f, x)) is True
    assert requires_partial(Derivative(f, nu)) is True

    ## bessel function with integer parameter
    f = besselj(n, x)
    assert requires_partial(Derivative(f, x)) is False
    # this is not really valid (differentiating with respect to an integer)
    # but there's no reason to use the partial derivative symbol there. make
    # sure we don't throw an exception here, though
    assert requires_partial(Derivative(f, n)) is False

    ## bell polynomial
    f = bell(n, x)
    assert requires_partial(Derivative(f, x)) is False
    # again, invalid
    assert requires_partial(Derivative(f, n)) is False

    ## legendre polynomial
    f = legendre(0, x)
    assert requires_partial(Derivative(f, x)) is False

    f = legendre(n, x)
    assert requires_partial(Derivative(f, x)) is False
    # again, invalid
    assert requires_partial(Derivative(f, n)) is False

    f = x ** n
    assert requires_partial(Derivative(f, x)) is False

    assert requires_partial(Derivative(Integral((x*y) ** n * exp(-x * y), (x, 0, oo)), y, evaluate=False)) is False

    # parametric equation
    f = (exp(t), cos(t))
    g = sum(f)
    assert requires_partial(Derivative(g, t)) is False

    f = symbols('f', cls=Function)
    assert requires_partial(Derivative(f(x), x)) is False
    assert requires_partial(Derivative(f(x), y)) is False
    assert requires_partial(Derivative(f(x, y), x)) is True
    assert requires_partial(Derivative(f(x, y), y)) is True
    assert requires_partial(Derivative(f(x, y), z)) is True
    assert requires_partial(Derivative(f(x, y), x, y)) is True