def __iter__(self): """ Iterate through ``self``. EXAMPLES:: sage: FPLs = FullyPackedLoops(2) sage: len(FPLs) 2 """ for X in SixVertexModel(self._n, boundary_conditions='ice'): yield self.element_class(self, X)
def _an_element_(self): """ Return an element of ``self``. EXAMPLES:: sage: FPLs = FullyPackedLoops(3) sage: FPLs.an_element() | | | | + + -- + | | | | -- + + + -- | | | | + -- + + | | | | """ #ASM = AlternatingSignMatrix(matrix.identity(self._n)) #SVM = ASM.to_six_vertex_model() SVM = SixVertexModel(self._n,boundary_conditions='ice').an_element() return self.element_class(self, SVM)
def __classcall_private__(cls, generator): """ Create a FPL. EXAMPLES:: sage: A = AlternatingSignMatrix([[1, 0, 0],[0, 1, 0],[0, 0, 1]]) sage: FullyPackedLoop(A) | | | | + + -- + | | | | -- + + + -- | | | | + -- + + | | | | sage: SVM = SixVertexModel(4, boundary_conditions='ice')[0] sage: FullyPackedLoop(SVM) | | | | + + -- + + -- | | | | | | -- + + + -- + | | | | + -- + + + -- | | | | | | -- + + -- + + | | | | """ if isinstance(generator, AlternatingSignMatrix): SVM = generator.to_six_vertex_model() elif isinstance(generator, SquareIceModel.Element): SVM = generator elif isinstance(generator, SixVertexConfiguration): # Check that this is an ice square model generator = SixVertexModel(generator.parent()._nrows, \ boundary_conditions='ice')(generator) M = generator.to_alternating_sign_matrix().to_matrix() M = AlternatingSignMatrix(M) SVM = generator else: # Not ASM nor SVM try: SVM = AlternatingSignMatrix(generator).to_six_vertex_model() except (TypeError, ValueError): generator = matrix(generator) generator = SixVertexModel(generator.nrows(), boundary_conditions='ice')(generator) # Check that this is an ice square model M = generator.to_alternating_sign_matrix() SVM = generator if not SVM: raise TypeError('generator for FullyPackedLoop must either be an \ AlternatingSignMatrix or a SquareIceModel.Element') FPLs = FullyPackedLoops(len(SVM)) return FPLs(generator)
def _element_constructor_(self, generator): """ Construct an element of ``self``. EXAMPLES:: sage: FPLs = FullyPackedLoops(4) sage: M = [[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]] sage: A = AlternatingSignMatrix(M) sage: elt = FullyPackedLoop(A) sage: FPL = FPLs(elt); FPL | | | | + + -- + + -- | | | | | | -- + + + -- + | | | | + -- + + + -- | | | | | | -- + + -- + + | | | | sage: FPLs(A) == FPL True sage: FPLs(M) == FPL True sage: FPLs(FPL._six_vertex_model) == FPL True sage: FPL.parent() is FPLs True sage: FPL = FullyPackedLoops(2) sage: FPL([[3,1],[5,3]]) | | + + -- | | | | -- + + | | """ if isinstance(generator, AlternatingSignMatrix): SVM = generator.to_six_vertex_model() elif isinstance(generator, SquareIceModel.Element) or \ isinstance(generator, SixVertexConfiguration): SVM = generator else: # Not ASM nor SVM try: SVM = AlternatingSignMatrix(generator).to_six_vertex_model() except (TypeError, ValueError): SVM = SixVertexModel(self._n, boundary_conditions='ice')(generator) SVM.to_alternating_sign_matrix() if len(SVM) != self._n: raise ValueError("invalid size") return self.element_class(self, SVM)