Ask Your Question

Revision history [back]

Attempting to enrich quiver class yields "unexpected keyword argument" error

I would like to do some computations with preprojective algebras, variations on the path algebra of a quiver in which every arrow has a partner going the other direction. I will want to construct representations of the "double quiver" in which I can conveniently compare the linear map associated to each arrow to that of its partner.

I figured I should create a class (something I haven't done in Python before) inheriting from DiGraph which has the extra data of a dictionary pairing the edges. My code to do this, with the constructor taking an arbitrary quiver and adding reversed copies of all the edges, is as follows:

class DoubleQuiver(sage.graphs.digraph.DiGraph):
def __init__(self, digraph):
    edges = []
    self._edgePairs = {}
    for e in digraph.edges():
        self._edgePairs[(e[0], e[1], e[2] + '0')] = (e[1], e[0], e[2] + '1')
        self._edgePairs[(e[1], e[0], e[2] + '1')] = (e[0], e[1], e[2] + '0')
        edges.append((e[0], e[1], e[2] + '0'))
        edges.append((e[1], e[0], e[2] + '1'))
    super(DoubleQuiver, self).__init__(edges, multiedges=True)

def flip(self, edge):
    assert edge in self.edges()
    return self._edgePairs[edge]

If I make a test digraph and run

DoubleQuiver(test)

it runs fine, and running methods like edges() or vertices() produces the results I expected. However, when I attempt to evaluate

DoubleQuiver(test).path_semigroup()

I get an error:

Error in lines 1-1
Traceback (most recent call last):
  File "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", line 1234, in execute
    flags=compile_flags), namespace, locals)
  File "", line 1, in <module>
  File "/ext/sage/sage-8.9_1804/local/lib/python2.7/site-packages/sage/graphs/digraph.py", line 2511, in path_semigroup
    return PathSemigroup(self)
  File "sage/misc/classcall_metaclass.pyx", line 335, in sage.misc.classcall_metaclass.ClasscallMetaclass.__call__ (build/cythonized/sage/misc/classcall_metaclass.c:1741)
    return cls.classcall(cls, *args, **kwds)
  File "/ext/sage/sage-8.9_1804/local/lib/python2.7/site-packages/sage/quivers/path_semigroup.py", line 118, in __classcall__
    Q = Q.copy(immutable=True, weighted=True)
  File "/ext/sage/sage-8.9_1804/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 1206, in copy
    data_structure=data_structure)
TypeError: __init__() got an unexpected keyword argument 'weighted'

How should I modify my class definition to avoid this error, or is there a better way of accomplishing what I'm trying to do? (Also, is it relevant that I'm trying this on CoCalc?)