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的包裝包。
請指教。
薩米嗨,你可能有更好的運氣[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
此外,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
最後,並非所有的sage graph對象都只是其他包的包裝。如果您從邊緣列表,鄰接矩陣等收縮圖形,那麼默認情況下會創建使用'SparseGraphBackend'或'DenseGraphBackend'的對象。 – Simon 2011-03-17 01:36:57