我調試上如何表現得到評估 sympy模塊,我用下面給出一個簡單的代碼:哪裏有表達式轉換爲表達式樹並解決?
from sympy.abc import x,y,z
ee = x+y+x
print(ee)
,並在第二行保持一個斷點,它前進到下一個功能是
def __sympifyit_wrapper(a, b):
在decorators.py中,'a'爲x,'b'爲y,func爲Add。 任何人都可以告訴我哪個文件在這裏分配a和b以及在後臺運行什麼。
我調試上如何表現得到評估 sympy模塊,我用下面給出一個簡單的代碼:哪裏有表達式轉換爲表達式樹並解決?
from sympy.abc import x,y,z
ee = x+y+x
print(ee)
,並在第二行保持一個斷點,它前進到下一個功能是
def __sympifyit_wrapper(a, b):
在decorators.py中,'a'爲x,'b'爲y,func爲Add。 任何人都可以告訴我哪個文件在這裏分配a和b以及在後臺運行什麼。
x
,y
和z
都是sympy.core.symbol.Symbol
對象。 Symbol
s源自sympy.core.expr.AtomicExpr
,其繼而衍生自sympy.core.expr.Expr
。
調用x+_
(其中_
是任何東西)調用相關__add__
功能,裝飾有sympy.core.decorators._simpyfyit
,這又是一個簡單的包裝圍繞sympy.core.decorators.__simpyfyit
,這是你看到你的斷點運行的功能(第一位的執行代碼)
這裏唯一的邏輯跳躍就是知道'foo + bar'調用'foo .__ add __(bar)'。你試圖做的是什麼,你要麼無法挖掘源代碼,要麼沒有了解dunder方法,但是你試圖解開sympy的內在魔力? –
是的,先生,現在你解釋它是非常簡單的。但是,正如它在文檔中給出的,每個表達式都轉換爲表達式樹,我認爲表達式將首先轉換爲樹,並且代碼遍歷樹來簡化它或將其轉換爲規範形式。所以,我牢記這一點,並不瞭解基本的東西。 –
開始閱讀'sympy.abc'中'x','y'和'z'的定義(我假設它們都是抽象基類的所有實例) –
那些被初始化爲符號類我可以用x,y = symbols('x y')手動做它 –