Esempio n. 1
0
    def __init__(self, ring, algebra1, algebra2,
                 side1 = ACTION_LEFT, side2 = ACTION_RIGHT,
                 single_idems1 = None, single_idems2 = None):
        """single_idems1 and single_idems2 are two lists that order the unpaired
        idempotents on the two sides. Idempotents on the two sides that appear
        in the same position correspond to each other. If there are 0 or 1
        unpaired idempotents, they can be omitted by specifying None. Otherwise
        they must be provided.

        """
        assert isinstance(algebra1, LocalStrandAlgebra)
        assert isinstance(algebra2, LocalStrandAlgebra)
        if single_idems1 is None or single_idems2 is None:
            self.single_idems1 = algebra1.local_pmc.getSingleIdems()
            self.single_idems2 = algebra2.local_pmc.getSingleIdems()
            assert len(self.single_idems1) < 2, \
                "There are more than two unpaired idempotents."
        else:
            assert tuple(sorted(algebra1.local_pmc.getSingleIdems())) == \
                tuple(sorted(single_idems1))
            assert tuple(sorted(algebra2.local_pmc.getSingleIdems())) == \
                tuple(sorted(single_idems2))
            self.single_idems1 = single_idems1
            self.single_idems2 = single_idems2

        self.num_single_idems = len(self.single_idems1)
        assert self.num_single_idems == len(self.single_idems2)

        SimpleDAStructure.__init__(self, ring, algebra1, algebra2, side1, side2)
        self.u_maps = [dict() for i in range(self.num_single_idems)]
        self.uinv_maps = [dict() for i in range(self.num_single_idems)]