In Sage, the vertices of a graph must be hashable. You can test if this holds
by applying the function
hash() to whatever you propose to use as a vertex.
If it is not hashable you'll get an error message informing you of the fact, if it
is hashable you'll get back an integer.
Occasionally the experimental approach to determining hashability will be unsatisfactory, so I offer some comments.
The output of
matrix() is not hashable, but can
be made so by using
a may be a matrix
or a vector). The identity matrix is hashable, as you will find out the first
time you try to change an entry in it. Subspaces of vector
spaces over finite fields are hashable.
Sage has two classes of sets:
set() constructs the Python version and
Set() the Sage version. Sage
Sets are hashable, Python
sets are not.
The available operations differ (go figure).
vset is a list of things you want to use as vertices, and they are not
readily converted to something hashable, you can construct a graph as follows:
G = Graph( [[1..len(vset)], lambda i,j: adj_pred( vset[i],vset[j])])
adj_pred takes two elements of
vset and returns
False according as its two arguments are adjacent or not.
Note that many graph operations will go faster when the vertices are integers,
and we can always arrange this after the fact by using