Skip to content

Instantly share code, notes, and snippets.

@Upabjojr
Last active February 8, 2018 17:50
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Upabjojr/bc07c49262944f9c1eb0 to your computer and use it in GitHub Desktop.
Save Upabjojr/bc07c49262944f9c1eb0 to your computer and use it in GitHub Desktop.
A draft to transform some limited subset of Mathematica's FullForm expression into a SymPy expression.
import re
replacements = dict(
Times="Mul",
Plus="Add",
Power="Pow",
)
def parse_full_form(wmexpr):
out = []
stack = [out]
generator = re.finditer(r'[\[\],]', wmexpr)
last_pos = 0
for match in generator:
if match is None:
break
position = match.start()
last_expr = wmexpr[last_pos:position].replace(',', '').replace(']', '').replace('[', '').strip()
if match.group() == ',':
if last_expr != '':
stack[-1].append(last_expr)
elif match.group() == ']':
if last_expr != '':
stack[-1].append(last_expr)
stack.pop()
current_pos = stack[-1]
elif match.group() == '[':
stack[-1].append([last_expr])
stack.append(stack[-1][-1])
last_pos = match.end()
return out[0]
def generate_sympy_from_parsed(parsed, depth=0):
out = ""
if not isinstance(parsed, list):
return parsed
if parsed[0] == "If":
out += "\nif ("+generate_sympy_from_parsed(parsed[1])+"):\n"
out += shift4(generate_sympy_from_parsed(parsed[2]))
if len(parsed) > 2:
out += "\nelse:\n"
out += shift4(generate_sympy_from_parsed(parsed[3]))
else:
if parsed[0] in replacements:
out += replacements[parsed[0]]
else:
out += parsed[0]
if len(parsed) == 1:
return out
out += "("
out += ", ".join([generate_sympy_from_parsed(i) for i in parsed[1:]])
out += ")"
return out
def shift4(out):
return ' '*4 + re.sub(r'\n', '\n ', out)
A Mathematica expression should be exposed to both __HoldForm__ and __FullForm__, that is
FullForm[HoldForm[ expression ]]
after this, copy the result into a Python string, let's say _expr_, then call:
list_tree = parse_full_form(expr)
generate_sympy_from_parsed(list_tree)
@Upabjojr
Copy link
Author

Upabjojr commented Sep 8, 2014

Example: given the expression:

  If[EqQ[n,0] || EqQ[b,0] || EqQ[d,0],
    (a+b*Sin[c+d*x])^n*x,
  If[EqQ[a,0],
    IntSin[c,d,b,n,x],
  If[EqQ[n,1],
    a*x + IntSin[c,d,b,n,x],
  If[EqQ[n,2],
    -b^2*Cos[c+d*x]*Sin[c+d*x]/(2*d) + IntSin[a^2+b^2/2,2*a*b,c,d,1,x],
  If[EqQ[a^2-b^2,0],
    If[IntegerQ[2*n],
      If[GtQ[n,0],
        If[EqQ[n,1/2],
          -2*b*Cos[c+d*x]/(d*Sqrt[a+b*Sin[c+d*x]]),
        -b*Cos[c+d*x]*(a+b*Sin[c+d*x])^(n-1)/(d*n) + a*(2*n-1)/n \[Star] IntSin[a,b,c,d,n-1,x]],
      If[EqQ[n,-1],
        -Cos[c+d*x]/(d*(b+a*Sin[c+d*x])),
      If[EqQ[n,-1/2],
        -2/d \[Star] ReplaceAll[Integrate[1/(2*a-x^2),x],x->b*Cos[c+d*x]/Sqrt[a+b*Sin[c+d*x]]],
      b*Cos[c+d*x]*(a+b*Sin[c+d*x])^n/(a*d*(2*n+1)) + (n+1)/(a*(2*n+1)) \[Star] IntSin[a,b,c,d,n+1,x]]]],
    a*Sqrt[2]*Cos[c+d*x]*(a+b*Sin[c+d*x])^n/(b*d*(2*n+1)*Sqrt[(a-b*Sin[c+d*x])/a])*Hypergeometric2F1[1/2,n+1/2,n+3/2,(a+b*Sin[c+d*x])/(2*a)]],
  If[IntegerQ[2*n],
    If[GtQ[n,0],
      If[EqQ[n,1/2],
        If[GtQ[a+b,0],
          -2*Sqrt[a+b]/d*EllipticE[Pi/4-(c+d*x)/2,2*b/(a+b)],
        If[GtQ[a-b,0],
          2*Sqrt[a-b]/d*EllipticE[Pi/4+(c+d*x)/2,-2*b/(a-b)],
        Sqrt[a+b*Sin[c+d*x]]/Sqrt[(a+b*Sin[c+d*x])/(a+b)] \[Star] IntSin[a/(a+b),b/(a+b),c,d,1/2,x]]],
      -b*Cos[c+d*x]*(a+b*Sin[c+d*x])^(n-1)/(d*n) + 1/n \[Star] IntSin[a,b,c,d,a^2*n+b^2*(n-1),a*b*(2*n-1),n-2,x]],
    If[EqQ[n,-1],
      2/d \[Star] ReplaceAll[Int[1/(a+2*b*e*x+a*x^2),x],x->Tan[(c+d*x)/2]],
    If[EqQ[n,-1/2],
      If[GtQ[a+b,0],
        -2/(d*Sqrt[a+b])*EllipticF[Pi/4-(c+d*x)/2,2*b/(a+b)],
      If[GtQ[a-b,0],
        2/(d*Sqrt[a-b])*EllipticF[Pi/4+(c+d*x)/2,-2*b/(a-b)],
      Sqrt[(a+b*Sin[c+d*x])/(a+b)]/Sqrt[a+b*Sin[c+d*x]] \[Star] IntSin[a/(a+b),b/(a+b),c,d,-1/2,x]]],
    -b*Cos[c+d*x]*(a+b*Sin[c+d*x])^(n+1)/(d*(n+1)*(a^2-b^2)) + 1/((n+1)*(a^2-b^2)) \[Star] IntSin[a,b,c,d,a*(n+1),-b*(n+2),n+1,x]]]],
  (a+b*Sin[c+d*x])^(n+1)*Sqrt[b*(1-Sin[c+d*x])/(a+b)]*Sqrt[-b*(1+Sin[c+d*x])/(a-b)]/(b*d*(n+1)*Cos[c+d*x])*
      AppellF1[n+1,1/2,1/2,n+2,(a+b*Sin[c+d*x])/(a-b),(a+b*Sin[c+d*x])/(a+b)]]]]]]]

FullForm[HoldForm [ ... ]] will reduce it to

If[Or[EqQ[n, 0], EqQ[b, 0], EqQ[d, 0]], Times[Power[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], n], x], If[EqQ[a, 0], IntSin[c, d, b, n, x], If[EqQ[n, 1], Plus[Times[a, x], IntSin[c, d, b, n, x]], If[EqQ[n, 2], Plus[Times[-1, Power[b, 2], Cos[Plus[c, Times[d, x]]], Times[Sin[Plus[c, Times[d, x]]], Power[Times[2, d], -1]]], IntSin[Plus[Power[a, 2], Times[Power[b, 2], Power[2, -1]]], Times[2, a, b], c, d, 1, x]], If[EqQ[Plus[Power[a, 2], Times[-1, Power[b, 2]]], 0], If[IntegerQ[Times[2, n]], If[GtQ[n, 0], If[EqQ[n, Times[1, Power[2, -1]]], Times[-2, b, Times[Cos[Plus[c, Times[d, x]]], Power[Times[d, Sqrt[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]]]], -1]]], Plus[Times[-1, b, Cos[Plus[c, Times[d, x]]], Times[Power[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Plus[n, Times[-1, 1]]], Power[Times[d, n], -1]]], Star[Times[a, Times[Plus[Times[2, n], Times[-1, 1]], Power[n, -1]]], IntSin[a, b, c, d, Plus[n, Times[-1, 1]], x]]]], If[EqQ[n, -1], Times[Times[-1, Cos[Plus[c, Times[d, x]]]], Power[Times[d, Plus[b, Times[a, Sin[Plus[c, Times[d, x]]]]]], -1]], If[EqQ[n, Times[-1, Power[2, -1]]], Star[Times[-2, Power[d, -1]], ReplaceAll[Integrate[Times[1, Power[Plus[Times[2, a], Times[-1, Power[x, 2]]], -1]], x], Rule[x, Times[b, Times[Cos[Plus[c, Times[d, x]]], Power[Sqrt[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]]], -1]]]]]], Plus[Times[b, Cos[Plus[c, Times[d, x]]], Times[Power[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], n], Power[Times[a, d, Plus[Times[2, n], 1]], -1]]], Star[Times[Plus[n, 1], Power[Times[a, Plus[Times[2, n], 1]], -1]], IntSin[a, b, c, d, Plus[n, 1], x]]]]]], Times[a, Sqrt[2], Cos[Plus[c, Times[d, x]]], Times[Power[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], n], Power[Times[b, d, Plus[Times[2, n], 1], Sqrt[Times[Plus[a, Times[-1, Times[b, Sin[Plus[c, Times[d, x]]]]]], Power[a, -1]]]], -1]], Hypergeometric2F1[Times[1, Power[2, -1]], Plus[n, Times[1, Power[2, -1]]], Plus[n, Times[3, Power[2, -1]]], Times[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Power[Times[2, a], -1]]]]], If[IntegerQ[Times[2, n]], If[GtQ[n, 0], If[EqQ[n, Times[1, Power[2, -1]]], If[GtQ[Plus[a, b], 0], Times[-2, Times[Sqrt[Plus[a, b]], Power[d, -1]], EllipticE[Plus[Times[Pi, Power[4, -1]], Times[-1, Times[Plus[c, Times[d, x]], Power[2, -1]]]], Times[2, Times[b, Power[Plus[a, b], -1]]]]], If[GtQ[Plus[a, Times[-1, b]], 0], Times[2, Times[Sqrt[Plus[a, Times[-1, b]]], Power[d, -1]], EllipticE[Plus[Times[Pi, Power[4, -1]], Times[Plus[c, Times[d, x]], Power[2, -1]]], Times[-2, Times[b, Power[Plus[a, Times[-1, b]], -1]]]]], Star[Times[Sqrt[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]]], Power[Sqrt[Times[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Power[Plus[a, b], -1]]], -1]], IntSin[Times[a, Power[Plus[a, b], -1]], Times[b, Power[Plus[a, b], -1]], c, d, Times[1, Power[2, -1]], x]]]], Plus[Times[-1, b, Cos[Plus[c, Times[d, x]]], Times[Power[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Plus[n, Times[-1, 1]]], Power[Times[d, n], -1]]], Star[Times[1, Power[n, -1]], IntSin[a, b, c, d, Plus[Times[Power[a, 2], n], Times[Power[b, 2], Plus[n, Times[-1, 1]]]], Times[a, b, Plus[Times[2, n], Times[-1, 1]]], Plus[n, Times[-1, 2]], x]]]], If[EqQ[n, -1], Star[Times[2, Power[d, -1]], ReplaceAll[Int[Times[1, Power[Plus[a, Times[2, b, e, x], Times[a, Power[x, 2]]], -1]], x], Rule[x, Tan[Times[Plus[c, Times[d, x]], Power[2, -1]]]]]], If[EqQ[n, Times[-1, Power[2, -1]]], If[GtQ[Plus[a, b], 0], Times[-2, Power[Times[d, Sqrt[Plus[a, b]]], -1], EllipticF[Plus[Times[Pi, Power[4, -1]], Times[-1, Times[Plus[c, Times[d, x]], Power[2, -1]]]], Times[2, Times[b, Power[Plus[a, b], -1]]]]], If[GtQ[Plus[a, Times[-1, b]], 0], Times[2, Power[Times[d, Sqrt[Plus[a, Times[-1, b]]]], -1], EllipticF[Plus[Times[Pi, Power[4, -1]], Times[Plus[c, Times[d, x]], Power[2, -1]]], Times[-2, Times[b, Power[Plus[a, Times[-1, b]], -1]]]]], Star[Times[Sqrt[Times[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Power[Plus[a, b], -1]]], Power[Sqrt[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]]], -1]], IntSin[Times[a, Power[Plus[a, b], -1]], Times[b, Power[Plus[a, b], -1]], c, d, Times[-1, Power[2, -1]], x]]]], Plus[Times[-1, b, Cos[Plus[c, Times[d, x]]], Times[Power[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Plus[n, 1]], Power[Times[d, Plus[n, 1], Plus[Power[a, 2], Times[-1, Power[b, 2]]]], -1]]], Star[Times[1, Power[Times[Plus[n, 1], Plus[Power[a, 2], Times[-1, Power[b, 2]]]], -1]], IntSin[a, b, c, d, Times[a, Plus[n, 1]], Times[-1, b, Plus[n, 2]], Plus[n, 1], x]]]]]], Times[Power[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Plus[n, 1]], Sqrt[Times[b, Times[Plus[1, Times[-1, Sin[Plus[c, Times[d, x]]]]], Power[Plus[a, b], -1]]]], Times[Sqrt[Times[-1, b, Times[Plus[1, Sin[Plus[c, Times[d, x]]]], Power[Plus[a, Times[-1, b]], -1]]]], Power[Times[b, d, Plus[n, 1], Cos[Plus[c, Times[d, x]]]], -1]], AppellF1[Plus[n, 1], Times[1, Power[2, -1]], Times[1, Power[2, -1]], Plus[n, 2], Times[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Power[Plus[a, Times[-1, b]], -1]], Times[Plus[a, Times[b, Sin[Plus[c, Times[d, x]]]]], Power[Plus[a, b], -1]]]]]]]]]]

The variable list_tree will be

['If',
 ['Or', ['EqQ', 'n', '0'], ['EqQ', 'b', '0'], ['EqQ', 'd', '0']],
 ['Times',
  ['Power',
   ['Plus', 'a', ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
   'n'],
  'x'],
 ['If',
  ['EqQ', 'a', '0'],
  ['IntSin', 'c', 'd', 'b', 'n', 'x'],
  ['If',
   ['EqQ', 'n', '1'],
   ['Plus', ['Times', 'a', 'x'], ['IntSin', 'c', 'd', 'b', 'n', 'x']],
   ['If',
    ['EqQ', 'n', '2'],
    ['Plus',
     ['Times',
      '-1',
      ['Power', 'b', '2'],
      ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
      ['Times',
       ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]],
       ['Power', ['Times', '2', 'd'], '-1']]],
     ['IntSin',
      ['Plus',
       ['Power', 'a', '2'],
       ['Times', ['Power', 'b', '2'], ['Power', '2', '-1']]],
      ['Times', '2', 'a', 'b'],
      'c',
      'd',
      '1',
      'x']],
    ['If',
     ['EqQ',
      ['Plus', ['Power', 'a', '2'], ['Times', '-1', ['Power', 'b', '2']]],
      '0'],
     ['If',
      ['IntegerQ', ['Times', '2', 'n']],
      ['If',
       ['GtQ', 'n', '0'],
       ['If',
        ['EqQ', 'n', ['Times', '1', ['Power', '2', '-1']]],
        ['Times',
         '-2',
         'b',
         ['Times',
          ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
          ['Power',
           ['Times',
            'd',
            ['Sqrt',
             ['Plus',
              'a',
              ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]]]],
           '-1']]],
        ['Plus',
         ['Times',
          '-1',
          'b',
          ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
          ['Times',
           ['Power',
            ['Plus',
             'a',
             ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
            ['Plus', 'n', ['Times', '-1', '1']]],
           ['Power', ['Times', 'd', 'n'], '-1']]],
         ['Star',
          ['Times',
           'a',
           ['Times',
            ['Plus', ['Times', '2', 'n'], ['Times', '-1', '1']],
            ['Power', 'n', '-1']]],
          ['IntSin',
           'a',
           'b',
           'c',
           'd',
           ['Plus', 'n', ['Times', '-1', '1']],
           'x']]]],
       ['If',
        ['EqQ', 'n', '-1'],
        ['Times',
         ['Times', '-1', ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]]],
         ['Power',
          ['Times',
           'd',
           ['Plus',
            'b',
            ['Times', 'a', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]]],
          '-1']],
        ['If',
         ['EqQ', 'n', ['Times', '-1', ['Power', '2', '-1']]],
         ['Star',
          ['Times', '-2', ['Power', 'd', '-1']],
          ['ReplaceAll',
           ['Integrate',
            ['Times',
             '1',
             ['Power',
              ['Plus',
               ['Times', '2', 'a'],
               ['Times', '-1', ['Power', 'x', '2']]],
              '-1']],
            'x'],
           ['Rule',
            'x',
            ['Times',
             'b',
             ['Times',
              ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
              ['Power',
               ['Sqrt',
                ['Plus',
                 'a',
                 ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]]],
               '-1']]]]]],
         ['Plus',
          ['Times',
           'b',
           ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
           ['Times',
            ['Power',
             ['Plus',
              'a',
              ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
             'n'],
            ['Power',
             ['Times', 'a', 'd', ['Plus', ['Times', '2', 'n'], '1']],
             '-1']]],
          ['Star',
           ['Times',
            ['Plus', 'n', '1'],
            ['Power',
             ['Times', 'a', ['Plus', ['Times', '2', 'n'], '1']],
             '-1']],
           ['IntSin', 'a', 'b', 'c', 'd', ['Plus', 'n', '1'], 'x']]]]]],
      ['Times',
       'a',
       ['Sqrt', '2'],
       ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
       ['Times',
        ['Power',
         ['Plus',
          'a',
          ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
         'n'],
        ['Power',
         ['Times',
          'b',
          'd',
          ['Plus', ['Times', '2', 'n'], '1'],
          ['Sqrt',
           ['Times',
            ['Plus',
             'a',
             ['Times',
              '-1',
              ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]]],
            ['Power', 'a', '-1']]]],
         '-1']],
       ['Hypergeometric2F1',
        ['Times', '1', ['Power', '2', '-1']],
        ['Plus', 'n', ['Times', '1', ['Power', '2', '-1']]],
        ['Plus', 'n', ['Times', '3', ['Power', '2', '-1']]],
        ['Times',
         ['Plus',
          'a',
          ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
         ['Power', ['Times', '2', 'a'], '-1']]]]],
     ['If',
      ['IntegerQ', ['Times', '2', 'n']],
      ['If',
       ['GtQ', 'n', '0'],
       ['If',
        ['EqQ', 'n', ['Times', '1', ['Power', '2', '-1']]],
        ['If',
         ['GtQ', ['Plus', 'a', 'b'], '0'],
         ['Times',
          '-2',
          ['Times', ['Sqrt', ['Plus', 'a', 'b']], ['Power', 'd', '-1']],
          ['EllipticE',
           ['Plus',
            ['Times', 'Pi', ['Power', '4', '-1']],
            ['Times',
             '-1',
             ['Times',
              ['Plus', 'c', ['Times', 'd', 'x']],
              ['Power', '2', '-1']]]],
           ['Times',
            '2',
            ['Times', 'b', ['Power', ['Plus', 'a', 'b'], '-1']]]]],
         ['If',
          ['GtQ', ['Plus', 'a', ['Times', '-1', 'b']], '0'],
          ['Times',
           '2',
           ['Times',
            ['Sqrt', ['Plus', 'a', ['Times', '-1', 'b']]],
            ['Power', 'd', '-1']],
           ['EllipticE',
            ['Plus',
             ['Times', 'Pi', ['Power', '4', '-1']],
             ['Times',
              ['Plus', 'c', ['Times', 'd', 'x']],
              ['Power', '2', '-1']]],
            ['Times',
             '-2',
             ['Times',
              'b',
              ['Power', ['Plus', 'a', ['Times', '-1', 'b']], '-1']]]]],
          ['Star',
           ['Times',
            ['Sqrt',
             ['Plus',
              'a',
              ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]]],
            ['Power',
             ['Sqrt',
              ['Times',
               ['Plus',
                'a',
                ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
               ['Power', ['Plus', 'a', 'b'], '-1']]],
             '-1']],
           ['IntSin',
            ['Times', 'a', ['Power', ['Plus', 'a', 'b'], '-1']],
            ['Times', 'b', ['Power', ['Plus', 'a', 'b'], '-1']],
            'c',
            'd',
            ['Times', '1', ['Power', '2', '-1']],
            'x']]]],
        ['Plus',
         ['Times',
          '-1',
          'b',
          ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
          ['Times',
           ['Power',
            ['Plus',
             'a',
             ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
            ['Plus', 'n', ['Times', '-1', '1']]],
           ['Power', ['Times', 'd', 'n'], '-1']]],
         ['Star',
          ['Times', '1', ['Power', 'n', '-1']],
          ['IntSin',
           'a',
           'b',
           'c',
           'd',
           ['Plus',
            ['Times', ['Power', 'a', '2'], 'n'],
            ['Times',
             ['Power', 'b', '2'],
             ['Plus', 'n', ['Times', '-1', '1']]]],
           ['Times',
            'a',
            'b',
            ['Plus', ['Times', '2', 'n'], ['Times', '-1', '1']]],
           ['Plus', 'n', ['Times', '-1', '2']],
           'x']]]],
       ['If',
        ['EqQ', 'n', '-1'],
        ['Star',
         ['Times', '2', ['Power', 'd', '-1']],
         ['ReplaceAll',
          ['Int',
           ['Times',
            '1',
            ['Power',
             ['Plus',
              'a',
              ['Times', '2', 'b', 'e', 'x'],
              ['Times', 'a', ['Power', 'x', '2']]],
             '-1']],
           'x'],
          ['Rule',
           'x',
           ['Tan',
            ['Times',
             ['Plus', 'c', ['Times', 'd', 'x']],
             ['Power', '2', '-1']]]]]],
        ['If',
         ['EqQ', 'n', ['Times', '-1', ['Power', '2', '-1']]],
         ['If',
          ['GtQ', ['Plus', 'a', 'b'], '0'],
          ['Times',
           '-2',
           ['Power', ['Times', 'd', ['Sqrt', ['Plus', 'a', 'b']]], '-1'],
           ['EllipticF',
            ['Plus',
             ['Times', 'Pi', ['Power', '4', '-1']],
             ['Times',
              '-1',
              ['Times',
               ['Plus', 'c', ['Times', 'd', 'x']],
               ['Power', '2', '-1']]]],
            ['Times',
             '2',
             ['Times', 'b', ['Power', ['Plus', 'a', 'b'], '-1']]]]],
          ['If',
           ['GtQ', ['Plus', 'a', ['Times', '-1', 'b']], '0'],
           ['Times',
            '2',
            ['Power',
             ['Times', 'd', ['Sqrt', ['Plus', 'a', ['Times', '-1', 'b']]]],
             '-1'],
            ['EllipticF',
             ['Plus',
              ['Times', 'Pi', ['Power', '4', '-1']],
              ['Times',
               ['Plus', 'c', ['Times', 'd', 'x']],
               ['Power', '2', '-1']]],
             ['Times',
              '-2',
              ['Times',
               'b',
               ['Power', ['Plus', 'a', ['Times', '-1', 'b']], '-1']]]]],
           ['Star',
            ['Times',
             ['Sqrt',
              ['Times',
               ['Plus',
                'a',
                ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
               ['Power', ['Plus', 'a', 'b'], '-1']]],
             ['Power',
              ['Sqrt',
               ['Plus',
                'a',
                ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]]],
              '-1']],
            ['IntSin',
             ['Times', 'a', ['Power', ['Plus', 'a', 'b'], '-1']],
             ['Times', 'b', ['Power', ['Plus', 'a', 'b'], '-1']],
             'c',
             'd',
             ['Times', '-1', ['Power', '2', '-1']],
             'x']]]],
         ['Plus',
          ['Times',
           '-1',
           'b',
           ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]],
           ['Times',
            ['Power',
             ['Plus',
              'a',
              ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
             ['Plus', 'n', '1']],
            ['Power',
             ['Times',
              'd',
              ['Plus', 'n', '1'],
              ['Plus',
               ['Power', 'a', '2'],
               ['Times', '-1', ['Power', 'b', '2']]]],
             '-1']]],
          ['Star',
           ['Times',
            '1',
            ['Power',
             ['Times',
              ['Plus', 'n', '1'],
              ['Plus',
               ['Power', 'a', '2'],
               ['Times', '-1', ['Power', 'b', '2']]]],
             '-1']],
           ['IntSin',
            'a',
            'b',
            'c',
            'd',
            ['Times', 'a', ['Plus', 'n', '1']],
            ['Times', '-1', 'b', ['Plus', 'n', '2']],
            ['Plus', 'n', '1'],
            'x']]]]]],
      ['Times',
       ['Power',
        ['Plus',
         'a',
         ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
        ['Plus', 'n', '1']],
       ['Sqrt',
        ['Times',
         'b',
         ['Times',
          ['Plus',
           '1',
           ['Times', '-1', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
          ['Power', ['Plus', 'a', 'b'], '-1']]]],
       ['Times',
        ['Sqrt',
         ['Times',
          '-1',
          'b',
          ['Times',
           ['Plus', '1', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]],
           ['Power', ['Plus', 'a', ['Times', '-1', 'b']], '-1']]]],
        ['Power',
         ['Times',
          'b',
          'd',
          ['Plus', 'n', '1'],
          ['Cos', ['Plus', 'c', ['Times', 'd', 'x']]]],
         '-1']],
       ['AppellF1',
        ['Plus', 'n', '1'],
        ['Times', '1', ['Power', '2', '-1']],
        ['Times', '1', ['Power', '2', '-1']],
        ['Plus', 'n', '2'],
        ['Times',
         ['Plus',
          'a',
          ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
         ['Power', ['Plus', 'a', ['Times', '-1', 'b']], '-1']],
        ['Times',
         ['Plus',
          'a',
          ['Times', 'b', ['Sin', ['Plus', 'c', ['Times', 'd', 'x']]]]],
         ['Power', ['Plus', 'a', 'b'], '-1']]]]]]]]]]

and the (currently wrong) SymPy expression

if (Or(EqQ(n, 0), EqQ(b, 0), EqQ(d, 0))):
    Mul(Pow(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), n), x)
else:

    if (EqQ(a, 0)):
        IntSin(c, d, b, n, x)
    else:

        if (EqQ(n, 1)):
            Add(Mul(a, x), IntSin(c, d, b, n, x))
        else:

            if (EqQ(n, 2)):
                Add(Mul(-1, Pow(b, 2), Cos(Add(c, Mul(d, x))), Mul(Sin(Add(c, Mul(d, x))), Pow(Mul(2, d), -1))), IntSin(Add(Pow(a, 2), Mul(Pow(b, 2), Pow(2, -1))), Mul(2, a, b), c, d, 1, x))
            else:

                if (EqQ(Add(Pow(a, 2), Mul(-1, Pow(b, 2))), 0)):

                    if (IntegerQ(Mul(2, n))):

                        if (GtQ(n, 0)):

                            if (EqQ(n, Mul(1, Pow(2, -1)))):
                                Mul(-2, b, Mul(Cos(Add(c, Mul(d, x))), Pow(Mul(d, Sqrt(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))))), -1)))
                            else:
                                Add(Mul(-1, b, Cos(Add(c, Mul(d, x))), Mul(Pow(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Add(n, Mul(-1, 1))), Pow(Mul(d, n), -1))), Star(Mul(a, Mul(Add(Mul(2, n), Mul(-1, 1)), Pow(n, -1))), IntSin(a, b, c, d, Add(n, Mul(-1, 1)), x)))
                        else:

                            if (EqQ(n, -1)):
                                Mul(Mul(-1, Cos(Add(c, Mul(d, x)))), Pow(Mul(d, Add(b, Mul(a, Sin(Add(c, Mul(d, x)))))), -1))
                            else:

                                if (EqQ(n, Mul(-1, Pow(2, -1)))):
                                    Star(Mul(-2, Pow(d, -1)), ReplaceAll(Integrate(Mul(1, Pow(Add(Mul(2, a), Mul(-1, Pow(x, 2))), -1)), x), Rule(x, Mul(b, Mul(Cos(Add(c, Mul(d, x))), Pow(Sqrt(Add(a, Mul(b, Sin(Add(c, Mul(d, x)))))), -1))))))
                                else:
                                    Add(Mul(b, Cos(Add(c, Mul(d, x))), Mul(Pow(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), n), Pow(Mul(a, d, Add(Mul(2, n), 1)), -1))), Star(Mul(Add(n, 1), Pow(Mul(a, Add(Mul(2, n), 1)), -1)), IntSin(a, b, c, d, Add(n, 1), x)))
                    else:
                        Mul(a, Sqrt(2), Cos(Add(c, Mul(d, x))), Mul(Pow(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), n), Pow(Mul(b, d, Add(Mul(2, n), 1), Sqrt(Mul(Add(a, Mul(-1, Mul(b, Sin(Add(c, Mul(d, x)))))), Pow(a, -1)))), -1)), Hypergeometric2F1(Mul(1, Pow(2, -1)), Add(n, Mul(1, Pow(2, -1))), Add(n, Mul(3, Pow(2, -1))), Mul(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Pow(Mul(2, a), -1))))
                else:

                    if (IntegerQ(Mul(2, n))):

                        if (GtQ(n, 0)):

                            if (EqQ(n, Mul(1, Pow(2, -1)))):

                                if (GtQ(Add(a, b), 0)):
                                    Mul(-2, Mul(Sqrt(Add(a, b)), Pow(d, -1)), EllipticE(Add(Mul(Pi, Pow(4, -1)), Mul(-1, Mul(Add(c, Mul(d, x)), Pow(2, -1)))), Mul(2, Mul(b, Pow(Add(a, b), -1)))))
                                else:

                                    if (GtQ(Add(a, Mul(-1, b)), 0)):
                                        Mul(2, Mul(Sqrt(Add(a, Mul(-1, b))), Pow(d, -1)), EllipticE(Add(Mul(Pi, Pow(4, -1)), Mul(Add(c, Mul(d, x)), Pow(2, -1))), Mul(-2, Mul(b, Pow(Add(a, Mul(-1, b)), -1)))))
                                    else:
                                        Star(Mul(Sqrt(Add(a, Mul(b, Sin(Add(c, Mul(d, x)))))), Pow(Sqrt(Mul(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Pow(Add(a, b), -1))), -1)), IntSin(Mul(a, Pow(Add(a, b), -1)), Mul(b, Pow(Add(a, b), -1)), c, d, Mul(1, Pow(2, -1)), x))
                            else:
                                Add(Mul(-1, b, Cos(Add(c, Mul(d, x))), Mul(Pow(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Add(n, Mul(-1, 1))), Pow(Mul(d, n), -1))), Star(Mul(1, Pow(n, -1)), IntSin(a, b, c, d, Add(Mul(Pow(a, 2), n), Mul(Pow(b, 2), Add(n, Mul(-1, 1)))), Mul(a, b, Add(Mul(2, n), Mul(-1, 1))), Add(n, Mul(-1, 2)), x)))
                        else:

                            if (EqQ(n, -1)):
                                Star(Mul(2, Pow(d, -1)), ReplaceAll(Int(Mul(1, Pow(Add(a, Mul(2, b, e, x), Mul(a, Pow(x, 2))), -1)), x), Rule(x, Tan(Mul(Add(c, Mul(d, x)), Pow(2, -1))))))
                            else:

                                if (EqQ(n, Mul(-1, Pow(2, -1)))):

                                    if (GtQ(Add(a, b), 0)):
                                        Mul(-2, Pow(Mul(d, Sqrt(Add(a, b))), -1), EllipticF(Add(Mul(Pi, Pow(4, -1)), Mul(-1, Mul(Add(c, Mul(d, x)), Pow(2, -1)))), Mul(2, Mul(b, Pow(Add(a, b), -1)))))
                                    else:

                                        if (GtQ(Add(a, Mul(-1, b)), 0)):
                                            Mul(2, Pow(Mul(d, Sqrt(Add(a, Mul(-1, b)))), -1), EllipticF(Add(Mul(Pi, Pow(4, -1)), Mul(Add(c, Mul(d, x)), Pow(2, -1))), Mul(-2, Mul(b, Pow(Add(a, Mul(-1, b)), -1)))))
                                        else:
                                            Star(Mul(Sqrt(Mul(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Pow(Add(a, b), -1))), Pow(Sqrt(Add(a, Mul(b, Sin(Add(c, Mul(d, x)))))), -1)), IntSin(Mul(a, Pow(Add(a, b), -1)), Mul(b, Pow(Add(a, b), -1)), c, d, Mul(-1, Pow(2, -1)), x))
                                else:
                                    Add(Mul(-1, b, Cos(Add(c, Mul(d, x))), Mul(Pow(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Add(n, 1)), Pow(Mul(d, Add(n, 1), Add(Pow(a, 2), Mul(-1, Pow(b, 2)))), -1))), Star(Mul(1, Pow(Mul(Add(n, 1), Add(Pow(a, 2), Mul(-1, Pow(b, 2)))), -1)), IntSin(a, b, c, d, Mul(a, Add(n, 1)), Mul(-1, b, Add(n, 2)), Add(n, 1), x)))
                    else:
                        Mul(Pow(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Add(n, 1)), Sqrt(Mul(b, Mul(Add(1, Mul(-1, Sin(Add(c, Mul(d, x))))), Pow(Add(a, b), -1)))), Mul(Sqrt(Mul(-1, b, Mul(Add(1, Sin(Add(c, Mul(d, x)))), Pow(Add(a, Mul(-1, b)), -1)))), Pow(Mul(b, d, Add(n, 1), Cos(Add(c, Mul(d, x)))), -1)), AppellF1(Add(n, 1), Mul(1, Pow(2, -1)), Mul(1, Pow(2, -1)), Add(n, 2), Mul(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Pow(Add(a, Mul(-1, b)), -1)), Mul(Add(a, Mul(b, Sin(Add(c, Mul(d, x))))), Pow(Add(a, b), -1))))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment