将 Mathematica 表达式正确导入 Python

Importing Mathematica expression to Python correctly

我正在尝试将一个冗长的表达式从 Mathematica 导入到 Python。我将 Mathematica 表达式的 FortranForm 复制粘贴到 Python,并将所有行设置为具有相同的缩进。但是我收到一个我不明白的错误。我猜这是缩进的问题,但我不确定。请帮忙。

这是 Python 中的代码,缩进:

def f2(x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3):
    return ((x2*(y - y1) + x*(y1 - y2) + x1*(-y + y2))*(y2 - y3) + (-y1 + y2)*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(z - z1) + x*(z1 - z2) + x1*(-z + z2))*(z2 - z3) + (-z1 + z2)*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)))/
    (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
    ((x - x3)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
    (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
    (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*((x - x3)**2 + (y - y3)**2 + (z - z3)**2)**1.5) - 
    (2*(x - x2)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
    (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
    (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)**2*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
    ((x - x1)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
    (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
    (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
    (((x - x1)**2 + (y - y1)**2 + (z - z1)**2)**1.5*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2))

这是我得到的错误:

File "<ipython-input-87-f30bebfee3b2>", line 4
x2*(z - z1) + x*(z1 - z2) + x1*(-z + z2))*(z2 - z3) + (-z1 + z2)*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)))/
SyntaxError: invalid syntax

无效语法是表达式中的换行符。例如,

def invalid_break():
    return 1 /
           2

无效。一个简单的修复方法是将表达式括在方括号中:

def valid_break():
    return (1 / 
            2)

参见 How can I do a line break (line continuation) in Python? 为清楚起见,crystal 一种解决方法是将长表达式括在方括号中,即

def f2(x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3):
        return (((x2*(y - y1) + x*(y1 - y2) + x1*(-y + y2))*(y2 - y3) + (-y1 + y2)*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(z - z1) + x*(z1 - z2) + x1*(-z + z2))*(z2 - z3) + (-z1 + z2)*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)))/
        (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
        ((x - x3)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
        (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
        (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*((x - x3)**2 + (y - y3)**2 + (z - z3)**2)**1.5) - 
        (2*(x - x2)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
        (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
        (np.sqrt((x - x1)**2 + (y - y1)**2 + (z - z1)**2)*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)**2*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)) - 
        ((x - x1)*((x2*(-y + y1) + x1*(y - y2) + x*(-y1 + y2))*(x3*(-y + y2) + x2*(y - y3) + x*(-y2 + y3)) + 
        (x2*(-z + z1) + x1*(z - z2) + x*(-z1 + z2))*(x3*(-z + z2) + x2*(z - z3) + x*(-z2 + z3)) + 
        (y2*(-z + z1) + y1*(z - z2) + y*(-z1 + z2))*(y3*(-z + z2) + y2*(z - z3) + y*(-z2 + z3))))/
        (((x - x1)**2 + (y - y1)**2 + (z - z1)**2)**1.5*((x - x2)**2 + (y - y2)**2 + (z - z2)**2)*np.sqrt((x - x3)**2 + (y - y3)**2 + (z - z3)**2)))