Helper functions for mutation types of quivers - Combinatorics

Skip to content
Back to top
View this page
Edit this page

# Helper functions for mutation types of quivers

This file contains helper functions for detecting the mutation type of a cluster algebra or quiver.

For the compendium on the cluster algebra and quiver package see [MS2011]

AUTHORS:

- Gregg Musiker

- Christian Stump

sage.combinat.cluster_algebra_quiver.mutation_type.is_mutation_finite(M, nr_of_checks=None)

  Use a non-deterministic method by random mutations in various directions.

  This can result in a wrong answer.

  Warning

  This method modifies the input matrix `M`!

  INPUT:

  - `nr_of_checks` – number of mutations applied (default: `None`); standard is 500*(number of vertices of self)

  ALGORITHM:

  A quiver is mutation infinite if and only if every edge label (a, -b) satisfy a*b > 4. Thus, we apply random mutations in random directions

  EXAMPLES:

  Sage

      sage: from sage.combinat.cluster_algebra_quiver.mutation_type import is_mutation_finite

      sage: Q = ClusterQuiver(['A', 10])                                               # needs sage.modules
      sage: M = Q.b_matrix()                                                          # needs sage.modules
      sage: is_mutation_finite(M)                                                     # needs sage.modules
      (True, None)

      sage: # needs sage.modules
      sage: Q = ClusterQuiver([(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (2, 9)])
      sage: M = Q.b_matrix()
      sage: is_mutation_finite(M)  # random
      (False, [9, 6, 9, 8, 9, 4, 0, 4, 5, 2, 1, 0, 1, 0, 7, 1, 9, 2, 5, 7, 8, 6, 3, 0, 2, 5, 4, 2, 6, 9, 2, 7, 3, 5, 3, 7, 9, 5, 9, 0, 2, 7, 9, 2, 4, 2, 1, 6, 9, 4, 3, 5, 0, 8, 2, 9, 5, 3, 7, 0, 1, 8, 3, 7, 2, 7, 3, 4, 8, 0, 4, 9, 5, 2, 8, 4, 8, 1, 7, 8, 9, 1, 5, 0, 8, 7, 4, 8, 9, 8, 0, 7, 4, 7, 1, 2, 8, 6, 1, 3, 9, 3, 9, 1, 3, 2, 4, 9, 5, 1, 2, 9, 4, 8, 5, 3, 4, 6, 8, 9, 2, 5, 9, 4, 6, 2, 1, 4, 9, 6, 0, 9, 8, 0, 4, 7, 9, 2, 1, 6])

  Python

      >>> from sage.all import *
      >>> from sage.combinat.cluster_algebra_quiver.mutation_type import is_mutation_finite

      >>> Q = ClusterQuiver(['A', Integer(10)])                                               # needs sage.modules
      >>> M = Q.b_matrix()                                                          # needs sage.modules
      >>> is_mutation_finite(M)                                                     # needs sage.modules
      (True, None)

      >>> # needs sage.modules
      >>> Q = ClusterQuiver([(Integer(0), Integer(1)), (Integer(1), Integer(2)), (Integer(2), Integer(3)), (Integer(3), Integer(4)), (Integer(4), Integer(5)), (Integer(5), Integer(6)), (Integer(6), Integer(7)), (Integer(7), Integer(8)), (Integer(2), Integer(9))])
      >>> M = Q.b_matrix()
      >>> is_mutation_finite(M)  # random
      (False, [9, 6, 9, 8, 9, 4, 0, 4, 5, 2, 1, 0, 1, 0, 7, 1, 9, 2, 5, 7, 8, 6, 3, 0, 2, 5, 4, 2, 6, 9, 2, 7, 3, 5, 3, 7, 9, 5, 9, 0, 2, 7, 9, 2, 4, 2, 1, 6, 9, 4, 3, 5, 0, 8, 2, 9, 5, 3, 7, 0, 1, 8, 3, 7, 2, 7, 3, 4, 8, 0, 4, 9, 5, 2, 8, 4, 8, 1, 7, 8, 9, 1, 5, 0, 8, 7, 4, 8, 9, 8, 0, 7, 4, 7, 1, 2, 8, 6, 1, 3, 9, 3, 9, 1, 3, 2, 4, 9, 5, 1, 2, 9, 4, 8, 5, 3, 4, 6, 8, 9, 2, 5, 9, 4, 6, 2, 1, 4, 9, 6, 0, 9, 8, 0, 4, 7, 9, 2, 1, 6])

  Check that Issue #19495 is fixed:

  Sage

      sage: dg = DiGraph(); dg.add_vertex(0); S = ClusterSeed(dg); S                  # needs sage.modules
      A seed for a cluster algebra of rank 1
      sage: S.is_mutation_finite()                                                    # needs sage.modules
      True

  [Python]

      >>> from sage.all import *
      >>> dg = DiGraph(); dg.add_vertex(Integer(0)); S = ClusterSeed(dg); S                  # needs sage.modules
      A seed for a cluster algebra of rank 1
      >>> S.is_mutation_finite()                                                    # needs sage.modules
      True

sage.combinat.cluster_algebra_quiver.mutation_type.load_data(user=True)

  Load a dict with keys being tuples representing exceptional QuiverMutationTypes, and with values being lists or sets containing all mutation equivalent quivers as dig6 data.

  We check

  - the data stored by the user (unless `user=False` was given)

  - and the data installed by the optional package `database_mutation_class`.

  INPUT:

  - `user` – boolean (default: `True`); whether to look at user data. If not, only consider the optional package.

  EXAMPLES:

  Sage

      sage: from sage.combinat.cluster_algebra_quiver.mutation_type import load_data
      sage: load_data(2) # random - depends on the data the user has stored
      {('G', 2): [('AO', (((0, 1), (1, -3)), )), ('AO', (((0, 1), (3, -1)), ))]}

  Python

      >>> from sage.all import *
      >>> from sage.combinat.cluster_algebra_quiver.mutation_type import load_data
      >>> load_data(Integer(2)) # random - depends on the data the user has stored
      {('G', 2): [('AO', (((0, 1), (1, -3)), )), ('AO', (((0, 1), (3, -1)), ))]}