AUTHORS:
Quiver mutation types can be seen as a slight generalization of generalized Cartan types.
Background on generalized Cartan types can be found at
For the compendium on the cluster algebra and quiver package in Sage see
A -matrix is a skew-symmetrizable
-matrix
.
I.e., there exists an invertible diagonal matrix
such that
is skew-symmetric.
can be encoded as a quiver by having a directed edge from vertex
to vertex
with label
if
and
.
We consider quivers up to mutation equivalence.
To a quiver mutation type we can associate a generalized Cartan type
by sending to the generalized Cartan matrix
obtained by replacing all
positive entries by their negatives and adding
‘s on the main diagonal.
QuiverMutationType constructs a quiver mutation type object. For more detail on the possible different types, please see the compendium.
INPUT:
The input consists either of a quiver mutation type, or of a letter (a string), a rank (one integer or a list/tuple of integers), and an optional twist (an integer or a list of integers). There are several different naming conventions for quiver mutation types.
Finite type – letter is a Dynkin type (A-G), and rank is the rank.
Elliptic type – letter is a Dynkin type, rank is the rank of the finite Dynkin diagram, and twist is a tuple of two integers. We follow Saito’s notation.
Other shapes:
- Rank 2: letter is ‘R2’, and rank is a pair of integers specifying the label on the unique edge.
- Triangle: letter is TR, and rank is the number of vertices along a side.
- T: This defines a quiver shaped like a T. letter is ‘T’, and the rank is a triple, whose entries specify the number of vertices along each path from the branch point (counting the branch point).
- Grassmannian: This defines the cluster algebra (without coefficients) corresponding to the cluster algebra with coefficients which is the co-ordinate ring of a Grassmannian. letter is ‘GR’. rank is a pair of integers (
,
) with ‘k’ < ‘n’ specifying the Grassmannian of
-planes in
-space. This defines a quiver given by a (k-1) x (n-k-1) grid where each square is cyclically oriented.
- Exceptional mutation finite quivers: The two exceptional mutation finite quivers, found by Derksen-Owen, have letter as ‘X’ and rank 6 or 7, equal to the number of vertices.
- AE, BE, CE, DE: Quivers are built of one end which looks like type (affine A), B, C, or D, and the other end which looks like type E (i.e., it consists of two antennae, one of length one, and one of length two). letter is ‘AE’, ‘BE’, ‘CE’, or ‘DE’, and rank is the total number of vertices. Note that ‘AE’ is of a slightly different form and requires rank to be a pair of integers (i,j) just as in the case of affine type A. See Exercise 4.3 in Kac’s book Infinite Dimensional Lie Algebras for more details.
- Infinite type E: It is also possible to obtain infinite-type E quivers by specifying letter as ‘E’ and rank as the number of vertices.
REFERENCES:
EXAMPLES:
Finite types:
sage: QuiverMutationType('A',1)
['A', 1]
sage: QuiverMutationType('A',5)
['A', 5]
sage: QuiverMutationType('B',2)
['B', 2]
sage: QuiverMutationType('B',5)
['B', 5]
sage: QuiverMutationType('C',2)
['B', 2]
sage: QuiverMutationType('C',5)
['C', 5]
sage: QuiverMutationType('D',2)
[ ['A', 1], ['A', 1] ]
sage: QuiverMutationType('D',3)
['A', 3]
sage: QuiverMutationType('D',4)
['D', 4]
sage: QuiverMutationType('E',6)
['E', 6]
sage: QuiverMutationType('G',2)
['G', 2]
sage: QuiverMutationType('A',(1,0),1)
['A', 1]
sage: QuiverMutationType('A',(2,0),1)
[ ['A', 1], ['A', 1] ]
sage: QuiverMutationType('A',(7,0),1)
['D', 7]
Affine types:
sage: QuiverMutationType('A',(1,1),1)
['A', [1, 1], 1]
sage: QuiverMutationType('A',(2,4),1)
['A', [2, 4], 1]
sage: QuiverMutationType('BB',2,1)
['BB', 2, 1]
sage: QuiverMutationType('BB',4,1)
['BB', 4, 1]
sage: QuiverMutationType('CC',2,1)
['CC', 2, 1]
sage: QuiverMutationType('CC',4,1)
['CC', 4, 1]
sage: QuiverMutationType('BC',1,1)
['BC', 1, 1]
sage: QuiverMutationType('BC',5,1)
['BC', 5, 1]
sage: QuiverMutationType('BD',3,1)
['BD', 3, 1]
sage: QuiverMutationType('BD',5,1)
['BD', 5, 1]
sage: QuiverMutationType('CD',3,1)
['CD', 3, 1]
sage: QuiverMutationType('CD',5,1)
['CD', 5, 1]
sage: QuiverMutationType('D',4,1)
['D', 4, 1]
sage: QuiverMutationType('D',6,1)
['D', 6, 1]
sage: QuiverMutationType('E',6,1)
['E', 6, 1]
sage: QuiverMutationType('E',7,1)
['E', 7, 1]
sage: QuiverMutationType('E',8,1)
['E', 8, 1]
sage: QuiverMutationType('F',4,1)
['F', 4, 1]
sage: QuiverMutationType('F',4,-1)
['F', 4, -1]
sage: QuiverMutationType('G',2,1)
['G', 2, 1]
sage: QuiverMutationType('G',2,-1)
['G', 2, -1]
sage: QuiverMutationType('A',3,2) == QuiverMutationType('D',3,2)
True
Affine types using Kac’s Notation:
sage: QuiverMutationType('A',1,1)
['A', [1, 1], 1]
sage: QuiverMutationType('B',5,1)
['BD', 5, 1]
sage: QuiverMutationType('C',5,1)
['CC', 5, 1]
sage: QuiverMutationType('A',2,2)
['BC', 1, 1]
sage: QuiverMutationType('A',7,2)
['CD', 4, 1]
sage: QuiverMutationType('A',8,2)
['BC', 4, 1]
sage: QuiverMutationType('D',6,2)
['BB', 5, 1]
sage: QuiverMutationType('E',6,2)
['F', 4, -1]
sage: QuiverMutationType('D',4,3)
['G', 2, -1]
Elliptic types:
sage: QuiverMutationType('E',6,[1,1])
['E', 6, [1, 1]]
sage: QuiverMutationType('F',4,[2,1])
['F', 4, [1, 2]]
sage: QuiverMutationType('G',2,[3,3])
['G', 2, [3, 3]]
Mutation finite types:
rank 2 cases:
sage: QuiverMutationType('R2',(1,1)) ['A', 2] sage: QuiverMutationType('R2',(1,2)) ['B', 2] sage: QuiverMutationType('R2',(1,3)) ['G', 2] sage: QuiverMutationType('R2',(1,4)) ['BC', 1, 1] sage: QuiverMutationType('R2',(1,5)) ['R2', [1, 5]] sage: QuiverMutationType('R2',(2,2)) ['A', [1, 1], 1] sage: QuiverMutationType('R2',(3,5)) ['R2', [3, 5]]Exceptional Derksen-Owen quivers:
sage: QuiverMutationType('X',6) ['X', 6]
(Mainly) mutation infinite types:
Infinite type E:
sage: QuiverMutationType('E',9) ['E', 8, 1] sage: QuiverMutationType('E',10) ['E', 10] sage: QuiverMutationType('E',12) ['E', 12] sage: QuiverMutationType('AE',(2,3)) ['AE', [2, 3]] sage: QuiverMutationType('BE',5) ['BE', 5] sage: QuiverMutationType('CE',5) ['CE', 5] sage: QuiverMutationType('DE',6) ['DE', 6]Grassmannian types:
sage: QuiverMutationType('GR',(2,4)) ['A', 1] sage: QuiverMutationType('GR',(2,6)) ['A', 3] sage: QuiverMutationType('GR',(3,6)) ['D', 4] sage: QuiverMutationType('GR',(3,7)) ['E', 6] sage: QuiverMutationType('GR',(3,8)) ['E', 8] sage: QuiverMutationType('GR',(3,10)) ['GR', [3, 10]]Triangular types:
sage: QuiverMutationType('TR',2) ['A', 3] sage: QuiverMutationType('TR',3) ['D', 6] sage: QuiverMutationType('TR',4) ['E', 8, [1, 1]] sage: QuiverMutationType('TR',5) ['TR', 5]T types:
sage: QuiverMutationType('T',(1,1,1)) ['A', 1] sage: QuiverMutationType('T',(1,1,4)) ['A', 4] sage: QuiverMutationType('T',(1,4,4)) ['A', 7] sage: QuiverMutationType('T',(2,2,2)) ['D', 4] sage: QuiverMutationType('T',(2,2,4)) ['D', 6] sage: QuiverMutationType('T',(2,3,3)) ['E', 6] sage: QuiverMutationType('T',(2,3,4)) ['E', 7] sage: QuiverMutationType('T',(2,3,5)) ['E', 8] sage: QuiverMutationType('T',(2,3,6)) ['E', 8, 1] sage: QuiverMutationType('T',(2,3,7)) ['E', 10] sage: QuiverMutationType('T',(3,3,3)) ['E', 6, 1] sage: QuiverMutationType('T',(3,3,4)) ['T', [3, 3, 4]]
Reducible types:
sage: QuiverMutationType(['A',3],['B',4])
[ ['A', 3], ['B', 4] ]
Bases: sage.structure.sage_object.SageObject
x.__init__(...) initializes x; see help(type(x)) for signature
Returns a sample of the available quiver mutations types.
EXAMPLES:
sage: QuiverMutationType.samples()
[['A', 1], ['A', 5], ['B', 2], ['B', 5], ['C', 3],
['C', 5], [ ['A', 1], ['A', 1] ], ['D', 5], ['E', 6],
['E', 7], ['E', 8], ['F', 4], ['G', 2],
['A', [1, 1], 1], ['A', [4, 5], 1], ['D', 4, 1],
['BB', 5, 1], ['E', 6, [1, 1]], ['E', 7, [1, 1]],
['R2', [1, 5]], ['R2', [3, 5]], ['E', 10], ['BE', 5],
['GR', [3, 10]], ['T', [3, 3, 4]]]
sage: QuiverMutationType.samples(finite=True)
[['A', 1], ['A', 5], ['B', 2], ['B', 5], ['C', 3],
['C', 5], [ ['A', 1], ['A', 1] ], ['D', 5], ['E', 6],
['E', 7], ['E', 8], ['F', 4], ['G', 2]]
sage: QuiverMutationType.samples(affine=True)
[['A', [1, 1], 1], ['A', [4, 5], 1], ['D', 4, 1], ['BB', 5, 1]]
sage: QuiverMutationType.samples(elliptic=True)
[['E', 6, [1, 1]], ['E', 7, [1, 1]]]
sage: QuiverMutationType.samples(mutation_finite=False)
[['R2', [1, 5]], ['R2', [3, 5]], ['E', 10], ['BE', 5],
['GR', [3, 10]], ['T', [3, 3, 4]]]
Bases: sage.combinat.cluster_algebra_quiver.quiver_mutation_type.QuiverMutationType_abstract, sage.structure.unique_representation.UniqueRepresentation, sage.structure.sage_object.SageObject
The mutation type for a cluster algebra or a quiver. Should not be called directly, but through QuiverMutationType.
If it is known, the size of the mutation class of all quivers which are mutation equivalent to the standard quiver of self (up to isomorphism) is returned. Otherwise, NotImplemented is returned.
Formula for finite type A is taken from Torkildsen - Counting
cluster-tilted algebras of type .
Formulas for affine type A and finite type D are taken from Bastian,
Prellberg, Rubey, Stump - Counting the number of elements in the
mutation classes of
quivers.
Formulas for finite and affine types B and C are
proven but not yet published.
Conjectural formulas for several other non-simply-laced affine types
are implemented.
Exceptional Types (finite, affine, and elliptic) E, F, G, and X are
hardcoded.
EXAMPLES:
sage: mut_type = QuiverMutationType( ['A',5] ); mut_type
['A', 5]
sage: mut_type.class_size()
19
sage: mut_type = QuiverMutationType( ['A',[10,3],1] ); mut_type
['A', [3, 10], 1]
sage: mut_type.class_size()
142120
sage: mut_type = QuiverMutationType( ['B',6] ); mut_type
['B', 6]
sage: mut_type.class_size()
132
sage: mut_type = QuiverMutationType( ['BD',6,1] ); mut_type
['BD', 6, 1]
sage: mut_type.class_size()
Warning: This method uses a formula which has not been proved correct.
504
Check that trac ticket #14048 is fixed:
sage: mut_type = QuiverMutationType( ['F',4,(2,1)] )
sage: mut_type.class_size()
90
Returns the QuiverMutationType which is dual to self.
EXAMPLES:
sage: mut_type = QuiverMutationType('A',5); mut_type
['A', 5]
sage: mut_type.dual()
['A', 5]
sage: mut_type = QuiverMutationType('B',5); mut_type
['B', 5]
sage: mut_type.dual()
['C', 5]
sage: mut_type.dual().dual()
['B', 5]
sage: mut_type.dual().dual() == mut_type
True
Returns a list of all irreducible components of self.
EXAMPLES:
sage: mut_type = QuiverMutationType('A',3); mut_type
['A', 3]
sage: mut_type.irreducible_components()
(['A', 3],)
Bases: sage.combinat.cluster_algebra_quiver.quiver_mutation_type.QuiverMutationType_abstract, sage.structure.unique_representation.UniqueRepresentation, sage.structure.sage_object.SageObject
The mutation type for a cluster algebra or a quiver. Should not be called directly, but through QuiverMutationType. Inherits from QuiverMutationType_abstract.
If it is known, the size of the mutation class of all quivers which are mutation equivalent to the standard quiver of self (up to isomorphism) is returned.
Otherwise, NotImplemented is returned.
EXAMPLES:
sage: mut_type = QuiverMutationType(['A',3],['B',3]); mut_type
[ ['A', 3], ['B', 3] ]
sage: mut_type.class_size()
20
sage: mut_type = QuiverMutationType(['A',3],['B',3],['X',6]); mut_type
[ ['A', 3], ['B', 3], ['X', 6] ]
sage: mut_type.class_size()
100
Returns the QuiverMutationType which is dual to self.
EXAMPLES:
sage: mut_type = QuiverMutationType(['A',5],['B',6],['C',5],['D',4]); mut_type
[ ['A', 5], ['B', 6], ['C', 5], ['D', 4] ]
sage: mut_type.dual()
[ ['A', 5], ['C', 6], ['B', 5], ['D', 4] ]
Returns a list of all irreducible components of self.
EXAMPLES:
sage: mut_type = QuiverMutationType('A',3); mut_type
['A', 3]
sage: mut_type.irreducible_components()
(['A', 3],)
sage: mut_type = QuiverMutationType(['A',3],['B',3]); mut_type
[ ['A', 3], ['B', 3] ]
sage: mut_type.irreducible_components()
(['A', 3], ['B', 3])
sage: mut_type = QuiverMutationType(['A',3],['B',3],['X',6]); mut_type
[ ['A', 3], ['B', 3], ['X', 6] ]
sage: mut_type.irreducible_components()
(['A', 3], ['B', 3], ['X', 6])
Bases: sage.structure.unique_representation.UniqueRepresentation, sage.structure.sage_object.SageObject
x.__init__(...) initializes x; see help(type(x)) for signature
Returns the B-matrix of the standard quiver of self. The conventions for B-matrices agree with Fomin-Zelevinsky (up to a reordering of the simple roots).
EXAMPLES:
sage: mut_type = QuiverMutationType( ['A',5] ); mut_type
['A', 5]
sage: mut_type.b_matrix()
[ 0 1 0 0 0]
[-1 0 -1 0 0]
[ 0 1 0 1 0]
[ 0 0 -1 0 -1]
[ 0 0 0 1 0]
sage: mut_type = QuiverMutationType(['A',3],['B',3]); mut_type
[ ['A', 3], ['B', 3] ]
sage: mut_type.b_matrix()
[ 0 1 0 0 0 0]
[-1 0 -1 0 0 0]
[ 0 1 0 0 0 0]
[ 0 0 0 0 1 0]
[ 0 0 0 -1 0 -1]
[ 0 0 0 0 2 0]
Returns the Cartan matrix of self.
Note that (up to a reordering of the simple roots) the convention for
the definition of Cartan matrix, used here and elsewhere in Sage,
agrees with the conventions of Kac, Fulton-Harris, and
Fomin-Zelevinsky, but disagrees with the convention of Bourbaki.
The entry is
.
EXAMPLES:
sage: mut_type = QuiverMutationType(['A',5]); mut_type
['A', 5]
sage: mut_type.cartan_matrix()
[ 2 -1 0 0 0]
[-1 2 -1 0 0]
[ 0 -1 2 -1 0]
[ 0 0 -1 2 -1]
[ 0 0 0 -1 2]
sage: mut_type = QuiverMutationType(['A',3],['B',3]); mut_type
[ ['A', 3], ['B', 3] ]
sage: mut_type.cartan_matrix()
[ 2 -1 0 0 0 0]
[-1 2 -1 0 0 0]
[ 0 -1 2 0 0 0]
[ 0 0 0 2 -1 0]
[ 0 0 0 -1 2 -1]
[ 0 0 0 0 -2 2]
Returns True if self is of affine type.
EXAMPLES:
sage: mt = QuiverMutationType(['A',2])
sage: mt.is_affine()
False
sage: mt = QuiverMutationType(['A',[4,2],1])
sage: mt.is_affine()
True
Returns True if self is of elliptic type.
EXAMPLES:
sage: mt = QuiverMutationType(['A',2])
sage: mt.is_elliptic()
False
sage: mt = QuiverMutationType(['E',6,[1,1]])
sage: mt.is_elliptic()
True
Returns True if self is of finite type (i.e., the cluster algebra associated to self has only a finite number of cluster variables).
EXAMPLES:
sage: mt = QuiverMutationType(['A',2])
sage: mt.is_finite()
True
sage: mt = QuiverMutationType(['A',[4,2],1])
sage: mt.is_finite()
False
Returns True if self is irreducible.
EXAMPLES:
sage: mt = QuiverMutationType(['A',2])
sage: mt.is_irreducible()
True
Returns True if self is of finite mutation type (i.e. its mutation class has only finitely many different B-matrices).
EXAMPLES:
sage: mt = QuiverMutationType(['D',5,1])
sage: mt.is_mutation_finite()
True
Returns True if self is simply laced (i.e., the only arrows that appear in the quiver of self are single unlabelled arrows).
EXAMPLES:
sage: mt = QuiverMutationType(['A',2])
sage: mt.is_simply_laced()
True
sage: mt = QuiverMutationType(['B',2])
sage: mt.is_simply_laced()
False
sage: mt = QuiverMutationType(['A',(1,1),1])
sage: mt.is_simply_laced()
False
Returns True if the B-matrix of self is skew-symmetric.
EXAMPLES:
sage: mt = QuiverMutationType(['A',2])
sage: mt.is_skew_symmetric()
True
sage: mt = QuiverMutationType(['B',2])
sage: mt.is_skew_symmetric()
False
sage: mt = QuiverMutationType(['A',(1,1),1])
sage: mt.is_skew_symmetric()
True
Returns the classification letter of self.
EXAMPLES:
sage: mut_type = QuiverMutationType( ['A',5] ); mut_type
['A', 5]
sage: mut_type.letter()
'A'
sage: mut_type = QuiverMutationType( ['BC',5,1] ); mut_type
['BC', 5, 1]
sage: mut_type.letter()
'BC'
sage: mut_type = QuiverMutationType(['A',3],['B',3]); mut_type
[ ['A', 3], ['B', 3] ]
sage: mut_type.letter()
'A x B'
sage: mut_type = QuiverMutationType(['A',3],['B',3],['X',6]); mut_type
[ ['A', 3], ['B', 3], ['X', 6] ]
sage: mut_type.letter()
'A x B x X'
Returns the plot of the underlying graph or digraph of self.
INPUT:
EXAMPLES:
sage: QMT = QuiverMutationType(['A',5])
sage: pl = QMT.plot()
sage: pl = QMT.plot(circular=True)
Prints a scheme of all properties of self.
Most properties have natural definitions for either irreducible or reducible types. affine and elliptic are only defined for irreducible types.
EXAMPLES:
sage: mut_type = QuiverMutationType(['A',3]); mut_type
['A', 3]
sage: mut_type.properties()
['A', 3] has rank 3 and the following properties:
- irreducible: True
- mutation finite: True
- simply-laced: True
- skew-symmetric: True
- finite: True
- affine: False
- elliptic: False
sage: mut_type = QuiverMutationType(['B',3]); mut_type
['B', 3]
sage: mut_type.properties()
['B', 3] has rank 3 and the following properties:
- irreducible: True
- mutation finite: True
- simply-laced: False
- skew-symmetric: False
- finite: True
- affine: False
- elliptic: False
sage: mut_type = QuiverMutationType(['B',3,1]); mut_type
['BD', 3, 1]
sage: mut_type.properties()
['BD', 3, 1] has rank 4 and the following properties:
- irreducible: True
- mutation finite: True
- simply-laced: False
- skew-symmetric: False
- finite: False
- affine: True
- elliptic: False
sage: mut_type = QuiverMutationType(['E',6,[1,1]]); mut_type
['E', 6, [1, 1]]
sage: mut_type.properties()
['E', 6, [1, 1]] has rank 8 and the following properties:
- irreducible: True
- mutation finite: True
- simply-laced: False
- skew-symmetric: True
- finite: False
- affine: False
- elliptic: True
sage: mut_type = QuiverMutationType(['A',3],['B',3]); mut_type
[ ['A', 3], ['B', 3] ]
sage: mut_type.properties()
[ ['A', 3], ['B', 3] ] has rank 6 and the following properties:
- irreducible: False
- mutation finite: True
- simply-laced: False
- skew-symmetric: False
- finite: True
sage: mut_type = QuiverMutationType('GR',[4,9]); mut_type
['GR', [4, 9]]
sage: mut_type.properties()
['GR', [4, 9]] has rank 12 and the following properties:
- irreducible: True
- mutation finite: False
- simply-laced: True
- skew-symmetric: True
- finite: False
- affine: False
- elliptic: False
Returns the rank, i.e., the number of vertices in the standard quiver of self.
EXAMPLES:
sage: mut_type = QuiverMutationType( ['A',5] ); mut_type
['A', 5]
sage: mut_type.rank()
5
sage: mut_type = QuiverMutationType( ['A',[4,5],1] ); mut_type
['A', [4, 5], 1]
sage: mut_type.rank()
9
sage: mut_type = QuiverMutationType( ['BC',5,1] ); mut_type
['BC', 5, 1]
sage: mut_type.rank()
6
sage: mut_type = QuiverMutationType(['A',3],['B',3]); mut_type
[ ['A', 3], ['B', 3] ]
sage: mut_type.rank()
6
sage: mut_type = QuiverMutationType(['A',3],['B',3],['X',6]); mut_type
[ ['A', 3], ['B', 3], ['X', 6] ]
sage: mut_type.rank()
12
Shows the plot of the underlying digraph of self.
INPUT:
Returns the standard quiver of self.
sage: mut_type = QuiverMutationType( [‘A’,5] ); mut_type [‘A’, 5] sage: mut_type.standard_quiver() Quiver on 5 vertices of type [‘A’, 5]
sage: mut_type = QuiverMutationType( [‘A’,[5,3],1] ); mut_type [‘A’, [3, 5], 1] sage: mut_type.standard_quiver() Quiver on 8 vertices of type [‘A’, [3, 5], 1]
sage: mut_type = QuiverMutationType([‘A’,3],[‘B’,3]); mut_type [ [‘A’, 3], [‘B’, 3] ] sage: mut_type.standard_quiver() Quiver on 6 vertices of type [ [‘A’, 3], [‘B’, 3] ]
sage: mut_type = QuiverMutationType([‘A’,3],[‘B’,3],[‘X’,6]); mut_type [ [‘A’, 3], [‘B’, 3], [‘X’, 6] ] sage: mut_type.standard_quiver() Quiver on 12 vertices of type [ [‘A’, 3], [‘B’, 3], [‘X’, 6] ]
Saves mutation classes of certain quivers of ranks up to and equal to n or equal to n to DOT_SAGE/cluster_algebra_quiver/mutation_classes_n.dig6.
This data will then be used to determine quiver mutation types.
INPUT:
TESTS:
sage: from sage.combinat.cluster_algebra_quiver.quiver_mutation_type import save_quiver_data
sage: save_quiver_data(2)
The following types are saved to file ... and will now be used to determine quiver mutation types:
[('A', 1)]
The following types are saved to file ... and will now be used to determine quiver mutation types:
[('A', (1, 1), 1), ('A', 2), ('B', 2), ('BC', 1, 1), ('G', 2)]
sage: save_quiver_data(2,up_to=False)
The following types are saved to file ... and will now be used to determine quiver mutation types:
[('A', (1, 1), 1), ('A', 2), ('B', 2), ('BC', 1, 1), ('G', 2)]
sage: save_quiver_data(2,up_to=False, types='Classical')
The following types are saved to file ... and will now be used to determine quiver mutation types:
[('A', (1, 1), 1), ('A', 2), ('B', 2), ('BC', 1, 1)]
sage: save_quiver_data(2,up_to=False, types='Exceptional')
The following types are saved to file ... and will now be used to determine quiver mutation types:
[('G', 2)]
sage: save_quiver_data(2,up_to=False, verbose=False)