Beispiel #1
0
 def cups(left, right):
     return rigid.cups(
         left,
         right,
         ar_factory=Tensor,
         cup_factory=lambda left, right: Tensor(left @ right, Dim(1),
                                                Tensor.id(left).array))
Beispiel #2
0
    def cups(left, right):
        from discopy.quantum.gates import CX, H, sqrt, Bra, Match

        def cup_factory(left, right):
            if left == right == qubit:
                return CX >> H @ sqrt(2) @ Id(1) >> Bra(0, 0)
            if left == right == bit:
                return Match() >> Discard(bit)
            raise ValueError
        return rigid.cups(
            left, right, ar_factory=Circuit, cup_factory=cup_factory)
Beispiel #3
0
 def cups(left, right):
     return rigid.cups(
         left, right, ar_factory=Diagram, cup_factory=lambda *_: Z(2, 0))
Beispiel #4
0
 def cups(left, right):
     return rigid.cups(left,
                       right,
                       ar_factory=Diagram,
                       cup_factory=lambda x, _: Spider(2, 0, x[0]))
Beispiel #5
0
 def cups(left, right):
     return rigid.cups(left,
                       right,
                       ar_factory=Diagram,
                       cup_factory=lambda x, _: Frobenius(2, 0, x[0]))
Beispiel #6
0
 def cups(left, right):
     assert all(x.name == "qubit" for x in left @ right)
     cup = CX >> H @ sqrt(2) @ Id(1) >> Bra(0, 0)
     return rigid.cups(
         left, right, ar_factory=Circuit, cup_factory=lambda *_: cup)