Quivers¶
Quivers and quivers with potentials
Define a Quiver class (with or without potental) as well as special subclasses ChainQuiver, CyclicQuiver, TranslationPQ (for translation potential quivers of quivers with automorphisms, see arXiv:1911.01788), and constructors KroneckerQuiver, JordanQuiver.
EXAMPLES:
sage: from msinvar.quivers import *
sage: Q=KroneckerQuiver(2); Q
Kronecker quiver: Quiver with 2 vertices and 2 arrows
sage: Q.vertices()
[1, 2]
sage: Q.arrows()
[(1, 2, 0), (1, 2, 1)]
sage: Q.prec([2,2]) # precision vector
sage: Q.simple().dict() # counting simple objects
{(0, 1): 1, (1, 0): 1}
sage: Q.Om([1,0]).dict() # integer DT invariants for stability (1,0)
{(0, 1): 1, (1, 0): 1, (1, 1): (-y^2 - 1)/y, (1, 2): 1, (2, 1): 1}
sage: Q.Om([0,1]).dict() # integer DT invariants for stability (0,1)
{(0, 1): 1, (1, 0): 1}
sage: Q=Quiver('1-2-3', prec=[2,2,2]); Q
Quiver with 3 vertices and 2 arrows
sage: Q.arrows()
[(1, 2, 1), (2, 3, 1)]
sage: Q.simple().dict() # counting simple objects
{(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1}
sage: Q=Quiver('1-2-3,1-3', prec=[2,2,2]); Q
Quiver with 3 vertices and 3 arrows
sage: Q.arrows()
[(1, 2, 1), (1, 3, 1), (2, 3, 1)]
sage: Q.simple().dict() # counting simple objects
{(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1}
sage: CQ=CyclicQuiver(3, prec=[2,2,2]); CQ
Cyclic quiver: Quiver with 3 vertices and 3 arrows
sage: CQ.arrows()
[(0, 1, 1), (1, 2, 1), (2, 0, 1)]
sage: CQ.simple().dict() # counting simple objects
{(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 1): y^2 - 1}
sage: CQ.intAtt().dict() # integer attractor invariants
{(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 1): -y}
sage: PQ=CQ.translation_PQ(1); PQ
Translation PQ: Quiver with 3 vertices, 9 arrows and potential with 6 terms
sage: PQ.arrows()
[(0, 1, 'a0'),
(0, 1, 'a1*'),
(0, 1, 'l0'),
(1, 2, 'a1'),
(1, 2, 'a2*'),
(1, 2, 'l1'),
(2, 0, 'a0*'),
(2, 0, 'a2'),
(2, 0, 'l2')]
sage: PQ.potential()
[[(0, 1, 'a0'), (1, 2, 'l1'), (2, 0, 'a0*')],
[(0, 1, 'l0'), (1, 2, 'a1'), (2, 0, 'a0*')],
[(1, 2, 'a1'), (2, 0, 'l2'), (0, 1, 'a1*')],
[(1, 2, 'l1'), (2, 0, 'a2'), (0, 1, 'a1*')],
[(2, 0, 'a2'), (0, 1, 'l0'), (1, 2, 'a2*')],
[(2, 0, 'l2'), (0, 1, 'a0'), (1, 2, 'a2*')]]
sage: PQ.intAtt().simp().dict() # integer attractor invariants
{(0, 0, 1): 1,
(0, 1, 0): 1,
(1, 0, 0): 1,
(1, 1, 1): (-2*y^2 - 1)/y,
(2, 2, 2): (-2*y^2 - 1)/y}
sage: PQ=CQ.translation_PQ(0, prec=[1,1,1]); PQ
Ginzburg PQ: Quiver with 3 vertices, 9 arrows and potential with 6 terms
sage: PQ.arrows()
[(0, 0, 'l0'),
(0, 1, 'a0'),
(0, 2, 'a2*'),
(1, 0, 'a0*'),
(1, 1, 'l1'),
(1, 2, 'a1'),
(2, 0, 'a2'),
(2, 1, 'a1*'),
(2, 2, 'l2')]
sage: PQ.intAtt().dict() # integer attractor invariants
{(0, 0, 1): -y,
(0, 1, 0): -y,
(0, 1, 1): -y,
(1, 0, 0): -y,
(1, 0, 1): -y,
(1, 1, 0): -y,
(1, 1, 1): -3*y}
-
class
msinvar.quivers.
Quiver
(data=None, potential=None, prec=None, loops=True, multiedges=True, name=None, pos=None, format=None, weighted=None, data_structure=None)[source]¶ Bases:
sage.graphs.digraph.DiGraph
,msinvar.wall_crossing.WallCrossingStructure
Create a quiver from a list of arrows or from a potential.
EXAMPLES:
sage: from msinvar.quivers import * sage: Q=Quiver('1-2-3,3-4'); Q Quiver with 4 vertices and 3 arrows sage: Q.arrows() [(1, 2, 1), (2, 3, 1), (3, 4, 1)]
sage: Q=Quiver(potential='a[1,2]a[2,3]a[3,1]'); Q.arrows() [(1, 2, 1), (2, 3, 1), (3, 1, 1)] sage: Q.potential() [[(1, 2, 1), (2, 3, 1), (3, 1, 1)]]
sage: Q=Quiver(potential=['1-2-3-1',[[1,2,2],[2,1]]]); Q.arrows() [(1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 3, 1), (3, 1, 1)] sage: Q.potential() [[(1, 2, 1), (2, 3, 1), (3, 1, 1)], [(1, 2, 2), (2, 1, 1)]]
-
vertex_num
(i=None)[source]¶ Return the index of a vertex
i
or the number of all vertices ifi
is None.
-
s
(a)[source]¶ Source of an arrow
a
, which can be an arrow or an index in the list self.arrows().EXAMPLES:
sage: from msinvar import * sage: Q=Quiver('1-2-3'); Q.arrows() [(1, 2, 1), (2, 3, 1)] sage: Q.s([1,2,1]) 1 sage: Q.s(0) 1
-
t
(a)[source]¶ Target of an arrow
a
, which can be an arrow or an index in the list self.arrows().EXAMPLES:
sage: from msinvar import * sage: Q=Quiver('1-2-3'); Q.arrows() [(1, 2, 1), (2, 3, 1)] sage: Q.t([1,2,1]) 2 sage: Q.t(0) 2
-
eform
(a, b)[source]¶ Euler form of the quiver.
EXAMPLES:
sage: from msinvar import * sage: Q=KroneckerQuiver(2); Q.arrows() [(1, 2, 0), (1, 2, 1)] sage: Q.eform([1,0],[0,1]) -2 sage: Q.eform([0,1],[1,0]) 0
-
sform
(a, b)[source]¶ Skew-symmetrized Euler form of the quiver.
EXAMPLES:
sage: from msinvar import * sage: Q=KroneckerQuiver(2); Q.arrows() [(1, 2, 0), (1, 2, 1)] sage: Q.sform([1,0],[0,1]) -2 sage: Q.sform([0,1],[1,0]) 2
-
total_default
()[source]¶ Total invariant of the quiver (stacky invariant for the trivial stability).
-
translation_PQ
(tau=None, ind_tau=None, prec=None)[source]¶ See
translation_PQ()
-
Ginzburg_PQ
(prec=None)[source]¶ Return the Ginzburg quiver (with potential) for the original quiver.
This construction corresponds to
translation_PQ()
for the trivial automorphism.
-
-
class
msinvar.quivers.
ChainQuiver
(n, prec=None)[source]¶ Bases:
msinvar.quivers.Quiver
Chain quiver with n vertices.
PARAMETERS:
n
– number of vertices.prec
– truncation vector for the quantum affine plane.
EXAMPLES:
sage: from msinvar import * sage: Q=ChainQuiver(3); Q.arrows() [(0, 1, 1), (1, 2, 1)] sage: Q.ind_list() [(0, 0), (0, 1), (0, 2), (1, 1), (1, 2), (2, 2)] sage: Q.ind_dim([0,2]) [1, 1, 1] sage: Q.ind_dim([2,2]) [0, 0, 1] sage: Q.ind_hom([2,2],[0,2]) 1
-
class
msinvar.quivers.
CyclicQuiver
(n, prec=None)[source]¶ Bases:
msinvar.quivers.Quiver
Cyclic quiver with n vertices.
PARAMETERS:
n
– number of vertices.prec
– truncation vector for the quantum affine plane.
EXAMPLES:
sage: from msinvar import * sage: Q=CyclicQuiver(3); Q.arrows() [(0, 1, 1), (1, 2, 1), (2, 0, 1)]
-
ind_list
(d)[source]¶ The list of nilpotent indecomposables up to dimension vector d, where indecomposables are parametrized by triples (i,j,n) with \(i, j\in Z_r\) and \(n\ge 0\).
-
ind_shift
(k=1)[source]¶ k-cyclic shift for indecomposable modules: \((SM)_i=M_{i-k}\).
EXAMPLES:
sage: from msinvar import * sage: Q=CyclicQuiver(3) sage: f=Q.ind_shift(1) sage: f((0,1,0)) (1, 2, 0)
-
shift
(k=1)[source]¶ Quiver automorphism given by the k-cyclic shift.
EXAMPLES:
sage: from msinvar import * sage: Q=CyclicQuiver(3) sage: f=Q.shift(2) sage: {i:f(i) for i in Q.vertices()} {0: 2, 1: 0, 2: 1} sage: {i:f(i) for i in Q.arrows()} {(0, 1, 1): (2, 0, 1), (1, 2, 1): (0, 1, 1), (2, 0, 1): (1, 2, 1)}
-
translation_PQ
(k=1, prec=None)[source]¶ Return translation potential quiver associated with the cyclic quiver and its k-cyclic shift.
EXAMPLES:
sage: from msinvar import * sage: Q=CyclicQuiver(3) sage: Q2=Q.translation_PQ(1); Q2 Translation PQ: Quiver with 3 vertices, 9 arrows and potential with 6 terms
-
class
msinvar.quivers.
TranslationPQ
(Q, tau=None, ind_tau=None, prec=None)[source]¶ Bases:
msinvar.quivers.Quiver
Construct a new quiver with potential based on a quiver
Q
and its automorphismtau
. See arXiv:1911.01788.If
tau
is None, we consider the trivial automorphism and return the Ginzburg quiver (with potential). The methodind_tau
should be the induced bijection on indecomposables.For any arrow a:i->j we add an arrow tau(j)->i.
For any vertex i we add an arrow i->tau(i).
We consider potential consisting of 3-cycles (for every arrow i->j):
i->j->tau(j)->i
-i->tau(i)->tau(j)->i
EXAMPLES:
sage: from msinvar import * sage: Q=CyclicQuiver(3, prec=[2,2,2]); Q Cyclic quiver: Quiver with 3 vertices and 3 arrows sage: PQ=Q.translation_PQ(1); PQ Translation PQ: Quiver with 3 vertices, 9 arrows and potential with 6 terms sage: PQ.intAtt().simp().dict() {(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 1): (-2*y^2 - 1)/y, (2, 2, 2): (-2*y^2 - 1)/y} sage: PQ=Q.translation_PQ(0); PQ Ginzburg PQ: Quiver with 3 vertices, 9 arrows and potential with 6 terms sage: PQ.intAtt().simp().dict() {(0, 0, 1): -y, (0, 1, 0): -y, (0, 1, 1): -y, (1, 0, 0): -y, (1, 0, 1): -y, (1, 1, 0): -y, (1, 1, 1): -3*y, (1, 1, 2): -y, (1, 2, 1): -y, (1, 2, 2): -y, (2, 1, 1): -y, (2, 1, 2): -y, (2, 2, 1): -y, (2, 2, 2): -3*y}
-
translation_PQ_total
(prec=None)[source]¶ See
msinvar.potential_quiver_invar.translation_PQ_total()
.EXAMPLES:
sage: from msinvar import * sage: Q=CyclicQuiver(3); Q Cyclic quiver: Quiver with 3 vertices and 3 arrows sage: PQ=Q.translation_PQ(1); PQ Translation PQ: Quiver with 3 vertices, 9 arrows and potential with 6 terms sage: I=PQ.translation_PQ_total([2,2,2]) sage: PQ.intAtt(I).simp().dict() {(0, 0, 1): 1, (0, 1, 0): 1, (1, 0, 0): 1, (1, 1, 1): (-2*y^2 - 1)/y, (2, 2, 2): (-2*y^2 - 1)/y}