def get_f(self, grade): # chain map, from cells --> critical cells chain = self.chain src = chain.get_cells(grade) tgt = self.get_critical(grade) f = Matrix(tgt, src, {}, self.ring) A = self.get_up_match(grade) # grade --> grade+1 --> grade C = Matrix.retraction(tgt, src, self.ring) while C.nonzero(): f += C C = C * A return f
def get_bdymap(self, grade): # grade --> grade-1 chain = self.chain src = self.get_critical(grade) # CM_grade tgt = self.get_critical(grade - 1) # CM_{grade-1} bdy = Matrix(tgt, src, {}, self.ring) # CM_grade --> CM_{grade-1} A = self.get_down_match(grade) # C_grade --> C_grade-1 --> C_grade B = chain.get_bdymap(grade) # C_grade --> C_grade-1 cells = chain.get_cells(grade) cells_1 = chain.get_cells(grade - 1) L = Matrix.retraction(tgt, cells_1, self.ring) # C_grade-1 --> CM_grade-1 B = L * B R = Matrix.inclusion(cells, src, self.ring) # CM_grade --> C_grade while R.nonzero(): bdy += B * R R = A * R return bdy