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
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)
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), )
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
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
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
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
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
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