2011-03-11 19 views
1

我在Sage中編寫了一些代碼,用費曼圖進行了一些計算,這些圖只是有限的,不具有邊緣標籤的非定向多圖。我需要實現邊緣收縮等方法,這些方法在類sage.graphs.graph.Graph中很奇怪。但是我也想繼承所有現有的圖形方法,例如is_tree如何使用額外的方法在Sage中創建一個新的Graph類?

這裏是模塊Feynman.sage的頂部應該附加新類。

from sage.graphs.graph import Graph 

class FeynmanGraph(Graph): 
    """An unoriented multi-graph with labeled edges""" 
    def __init__(self, E=[]): 
     self._edges = len(E) 

    def __repr__(self): 
     return 'A Feynman graph with ' + str(self._edges) + ' edges.' 

我沒有做正確的事。儘管該類的實例化產生的方法,正確的目錄,其中許多人沒有工作,因爲

'FeynmanGraph' object has no attribute '_backend' 

我覺得這事做的方式,賢者僅僅是一些其他的圖論Python的包裝包。

請指教。

+0

薩米嗨,你可能有更好的運氣[ask.sagemath.org]發佈您的問題(http://ask.sagemath.org/)。 (我只知道如何在Mathematica中做這樣的事情:如果你原諒了一些自我廣告,請參見[Feynman Diagrams and Symanzik Polynomials](http://demonstrations.wolfram.com/ScalarFeynmanDiagramsAndSymanzikPolynomials/) – Simon 2011-03-15 05:15:23

+0

此外,Edge收縮只是一個頂點合併的特例,您只合並2個頂點並保留多重點。所以請參見[generic_graph.py](http://hg.sagemath.org/sage-main/file/361a4ad7d52c/sage/graphs/generic_graph.py)中的merge_vertices(與'is_tree'一起)。還有一個[關於'edge_contract'的trac](http://trac.sagemath.org/sage_trac/ticket/7304),所以請參閱那裏的討論。 – Simon 2011-03-17 01:30:48

+1

最後,並非所有的sage graph對象都只是其他包的包裝。如果您從邊緣列表,鄰接矩陣等收縮圖形,那麼默認情況下會創建使用'SparseGraphBackend'或'DenseGraphBackend'的對象。 – Simon 2011-03-17 01:36:57

回答

3

你可能根本就沒有正確地繼承事物。嘗試在__init__()開頭插入這樣的:

super().__init__() 
相關問題