def to_alternating_sign_matrix(self): """ Return an alternating sign matrix of ``self``. .. SEEALSO:: :meth:`~sage.combinat.six_vertex_model.SixVertexConfiguration.to_signed_matrix()` EXAMPLES:: sage: M = SixVertexModel(4, boundary_conditions='ice') sage: M[6].to_alternating_sign_matrix() [1 0 0 0] [0 0 0 1] [0 0 1 0] [0 1 0 0] sage: M[7].to_alternating_sign_matrix() [ 0 1 0 0] [ 1 -1 1 0] [ 0 1 -1 1] [ 0 0 1 0] """ from sage.combinat.alternating_sign_matrix import AlternatingSignMatrix #AlternatingSignMatrices #ASM = AlternatingSignMatrices(self.parent()._nrows) #return ASM(self.to_signed_matrix()) return AlternatingSignMatrix(self.to_signed_matrix())
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)