My OS doesn’t support Sage 5.4 so I’m stuck with 5.0 for now.
Defining this function registers no syntax errors in python, and I don’t think it makes errors in Sage 5.4 (I’d appreciate confirmation if possible.) I’d like to know why it is failing in 5.0.
def num_matchings(G):
if min(G.degree_sequence())== 0 or G.num_edges()==0:
return 0
elif G.num_edges()==1:
if G.edges()[0][2] ==None:
return 1
else:
return G.edges()[0][2]
else:
H = copy(G)
K = copy(G)
e = G.edges()[0]
if e[2] ==None:
w=1
else:
w = e[2]
H.delete_edge(e)
K.delete_vertices([e[0],e[1]])
return num_matchings(H) + w*num_matchings(K)
The first error I get when I try to define is
File "<ipython console>", line 4
==Integer(1):
^
SyntaxError: invalid syntax
and they pile on after that. To my eye, the syntax looks fine.
I’m on Mac OS 10.5 with GCC 4.0.1.
Any help much appreciated.
[Aside: typo in
.delete_vertives().]Your syntax itself is fine. From the error message, though, it looks like you’ve simply copied and pasted code into the console. That will only work in certain very simple cases. You’re also using tabs for indentation, which can cause a whole other set of headaches too. You should really switch to 4-space tabs instead.
If you want to insert code into a live console, you can use
%paste(which copies from the clipboard if it can), or%cpasteinstead.For example, if I copy and paste your code, I get:
but if I use
%cpastewith the 4-space equivalent (unfortunately%pasteisn’t working on my 5.4.1 install at the moment):