예제 #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))
예제 #2
0
파일: circuit.py 프로젝트: neu-pml/discopy
    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)
예제 #3
0
파일: zx.py 프로젝트: personx000/discopy
 def cups(left, right):
     return rigid.cups(
         left, right, ar_factory=Diagram, cup_factory=lambda *_: Z(2, 0))
예제 #4
0
 def cups(left, right):
     return rigid.cups(left,
                       right,
                       ar_factory=Diagram,
                       cup_factory=lambda x, _: Spider(2, 0, x[0]))
예제 #5
0
 def cups(left, right):
     return rigid.cups(left,
                       right,
                       ar_factory=Diagram,
                       cup_factory=lambda x, _: Frobenius(2, 0, x[0]))
예제 #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)