2017-05-30 110 views
0

我調試上如何表現得到評估 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以及在後臺運行什麼。

+0

開始閱讀'sympy.abc'中'x','y'和'z'的定義(我假設它們都是抽象基類的所有實例) –

+0

那些被初始化爲符號類我可以用x,y = symbols('x y')手動做它 –

回答

0

x,yz都是sympy.core.symbol.Symbol對象。 Symbols源自sympy.core.expr.AtomicExpr,其繼而衍生自sympy.core.expr.Expr

調用x+_(其中_是任何東西)調用相關__add__功能,裝飾有sympy.core.decorators._simpyfyit,這又是一個簡單的包裝圍繞sympy.core.decorators.__simpyfyit,這是你看到你的斷點運行的功能(第一位的執行代碼)

+0

這裏唯一的邏輯跳躍就是知道'foo + bar'調用'foo .__ add __(bar)'。你試圖做的是什麼,你要麼無法挖掘源代碼,要麼沒有了解dunder方法,但是你試圖解開sympy的內在魔力? –

+0

是的,先生,現在你解釋它是非常簡單的。但是,正如它在文檔中給出的,每個表達式都轉換爲表達式樹,我認爲表達式將首先轉換爲樹,並且代碼遍歷樹來簡化它或將其轉換爲規範形式。所以,我牢記這一點,並不瞭解基本的東西。 –