예제 #1
0
 def __init__(self, parent, local_gen, outer_idem, name):
     assert local_gen.parent == parent.local_da
     assert outer_idem.local_pmc == parent.outer_pmc
     self.local_gen = local_gen
     self.outer_idem = outer_idem
     idem1 = parent.splitting1.joinIdempotent(local_gen.idem1, outer_idem)
     idem2 = parent.splitting2.joinIdempotent(local_gen.idem2, outer_idem)
     SimpleDAGenerator.__init__(self, parent, idem1, idem2, name)
예제 #2
0
    def getMappingCone(self, morphism):
        """In addition to what is done in the parent class, need to set up the
        u_map.

        """
        result = LocalDAStructure(
            F2, self.source.algebra1, self.source.algebra2,
            self.source.side1, self.source.side2,
            self.source.single_idems1, self.source.single_idems2)
        gen_map = dict()
        for gen in self.source.getGenerators():
            gen_map[gen] = SimpleDAGenerator(
                result, gen.idem1, gen.idem2, "S_%s" % gen.name)
            gen_map[gen].filtration = [0]
            if hasattr(gen, "filtration"):
                gen_map[gen] += gen.filtration
            result.addGenerator(gen_map[gen])
        for gen in self.target.getGenerators():
            gen_map[gen] = SimpleDAGenerator(
                result, gen.idem1, gen.idem2, "T_%s" % gen.name)
            gen_map[gen].filtration = [1]
            if hasattr(gen, "filtration"):
                gen_map[gen] += gen.filtration
            result.addGenerator(gen_map[gen])

        for (x1, coeffs_a), target in self.source.da_action.items():
            for (coeff_d, x2), ring_coeff in target.items():
                result.addDelta(
                    gen_map[x1], gen_map[x2], coeff_d, coeffs_a, ring_coeff)
        for (y1, coeffs_a), target in self.target.da_action.items():
            for (coeff_d, y2), ring_coeff in target.items():
                result.addDelta(
                    gen_map[y1], gen_map[y2], coeff_d, coeffs_a, ring_coeff)
        for gen, ring_coeff in morphism.items():
            # coeffs_a is a tuple of A-side inputs
            coeff_d, coeffs_a = gen.coeff
            result.addDelta(gen_map[gen.source], gen_map[gen.target],
                            coeff_d, tuple(coeffs_a), ring_coeff)

        # Set up u_map
        num_single_idems = len(self.source.single_idems1)
        for idem_id in range(num_single_idems):
            for x, u_x in self.source.u_maps[idem_id].items():
                result.add_u_map(idem_id, gen_map[x], gen_map[u_x])
            for y, u_y in self.target.u_maps[idem_id].items():
                result.add_u_map(idem_id, gen_map[y], gen_map[u_y])

        return result