class_docstr: Properties
  ==========
  
  [1] `0 \in \Omega` and `\tau(1) = \epsilon`
  [2] `\alpha^x = \beta \Leftrightarrow \beta^{x^{-1}} = \alpha`
  [3] If `\alpha^x = \beta`, then `H \tau(\alpha)x = H \tau(\beta)`
  [4] `\forall \alpha \in \Omega, 1^{\tau(\alpha)} = \alpha`
  
  References
  ==========
  
  .. [1] Holt, D., Eick, B., O'Brien, E.
         "Handbook of Computational Group Theory"
  
  .. [2] John J. Cannon; Lucien A. Dimino; George Havas; Jane M. Watson
         Mathematics of Computation, Vol. 27, No. 123. (Jul., 1973), pp. 463-490.
         "Implementation and Analysis of the Todd-Coxeter Algorithm"
class_docstr_tok: ["Properties","==========","[","1","]","`","0","\\in","\\Omega","`","and","`","\\tau","(","1",")","=","\\epsilon","`","[","2","]","`","\\alpha^x","=","\\beta","\\Leftrightarrow","\\beta^","{","x^","{","-1","}","}","=","\\alpha","`","[","3","]","If","`","\\alpha^x","=","\\beta","`",",","then","`","H","\\tau","(","\\alpha",")","x","=","H","\\tau","(","\\beta",")","`","[","4","]","`","\\forall","\\alpha","\\in","\\Omega",",","1^","{","\\tau","(","\\alpha",")","}","=","\\alpha","`","References","==========","..","[","1","]","Holt",",","D.",",","Eick",",","B.",",","O'Brien",",","E.","``","Handbook","of","Computational","Group","Theory","''","..","[","2","]","John","J.","Cannon",";","Lucien","A.","Dimino",";","George","Havas",";","Jane","M.","Watson","Mathematics","of","Computation",",","Vol",".","27",",","No",".","123",".","(","Jul.",",","1973",")",",","pp",".","463-490",".","``","Implementation","and","Analysis","of","the","Todd-Coxeter","Algorithm","''"]
code: def __init__(self, fp_grp, subgroup, max_cosets=None):
      if not max_cosets:
          max_cosets = CosetTable.coset_table_max_limit
      self.fp_group = fp_grp
      self.subgroup = subgroup
      self.coset_table_limit = max_cosets
      # "p" is setup independent of Omega and n
      self.p = [0]
      # a list of the form `[gen_1, gen_1^{-1}, ... , gen_k, gen_k^{-1}]`
      self.A = list(
          chain.from_iterable(
              (gen, gen**-1) for gen in self.fp_group.generators
          )
      )
      # P[alpha, x] Only defined when alpha^x is defined.
      self.P = [[None] * len(self.A)]
      # the mathematical coset table which is a list of lists
      self.table = [[None] * len(self.A)]
      self.A_dict = {x: self.A.index(x) for x in self.A}
      self.A_dict_inv = {}
      for x, index in self.A_dict.items():
          if index % 2 == 0:
              self.A_dict_inv[x] = self.A_dict[x] + 1
          else:
              self.A_dict_inv[x] = self.A_dict[x] - 1
      # used in the coset-table based method of coset enumeration. Each of
      # the element is called a "deduction" which is the form (alpha, x) whenever
      # a value is assigned to alpha^x during a definition or "deduction process"
      self.deduction_stack = []
      # Attributes for modified methods.
      H = self.subgroup
      self._grp = free_group(
          ", ".join(["a_%d" % i for i in range(len(H))])
      )[0]
      self.P = [[None] * len(self.A)]
      self.p_p = {}
  
imports: from sympy.combinatorics.free_groups import free_group
  from sympy.printing.defaults import DefaultPrinting
  from itertools import chain, product
  from bisect import bisect_left
label_desc: Use image node_id 1 to create a new CosetTable object from inherited base classes: DefaultPrinting with example: obj = CosetTable(fp_grp, subgroup, max_cosets)