def test_jx(): assert Commutator(Jx, Jz).doit() == -I * hbar * Jy assert qapply(Jx * JzKet(1, 1)) == sqrt(2) * hbar * JzKet(1, 0) / 2 assert Jx.rewrite('plusminus') == (Jminus + Jplus) / 2 assert represent(Jx, basis=Jz, j=1) == (represent(Jplus, basis=Jz, j=1) + represent(Jminus, basis=Jz, j=1)) / 2
def test_QubitBra(): assert Qubit(0).dual_class == QubitBra assert QubitBra(0).dual_class == Qubit assert represent(Qubit(1,1,0), nqubits=3).H ==\ represent(QubitBra(1,1,0), nqubits=3) assert Qubit(0,1)._eval_innerproduct_QubitBra(QubitBra(1,0)) == Integer(0) assert Qubit(0,1)._eval_innerproduct_QubitBra(QubitBra(0,1)) == Integer(1)
def test_superposition_of_states(): assert qapply(CNOT(0,1)*HadamardGate(0)*(1/sqrt(2)*Qubit('01') + 1/sqrt(2)*Qubit('10'))).expand() == (Qubit('01')/2 + Qubit('00')/2 - Qubit('11')/2 +\ Qubit('10')/2) assert matrix_to_qubit(represent(CNOT(0,1)*HadamardGate(0)\ *(1/sqrt(2)*Qubit('01') + 1/sqrt(2)*Qubit('10')), nqubits=2))\ == (Qubit('01')/2 + Qubit('00')/2 - Qubit('11')/2 + Qubit('10')/2)
def test_superposition_of_states(): assert apply_operators(CNOT(0,1)*HadamardGate(0)*(1/sqrt(2)*Qubit('01') + 1/sqrt(2)*Qubit('10'))).expand() == (Qubit('01')/2 + Qubit('00')/2 - Qubit('11')/2 +\ Qubit('10')/2) assert matrix_to_qubit(represent(CNOT(0,1)*HadamardGate(0)\ *(1/sqrt(2)*Qubit('01') + 1/sqrt(2)*Qubit('10')), nqubits=2))\ == (Qubit('01')/2 + Qubit('00')/2 - Qubit('11')/2 + Qubit('10')/2)
def test_states(): assert PIABKet(n).dual_class == PIABBra assert PIABKet(n).hilbert_space ==\ L2(Interval(S.NegativeInfinity,S.Infinity)) assert represent(PIABKet(n)) == sqrt(2/L)*sin(n*pi*x/L) assert (PIABBra(i)*PIABKet(j)).doit() == KroneckerDelta(i, j) assert PIABBra(n).dual_class == PIABKet
def test_states(): assert PIABKet(n).dual_class() == PIABBra assert PIABKet(n).hilbert_space ==\ L2(Interval(S.NegativeInfinity,S.Infinity)) assert represent(PIABKet(n)) == sqrt(2 / L) * sin(n * pi * x / L) assert (PIABBra(i) * PIABKet(j)).doit() == KroneckerDelta(i, j) assert PIABBra(n).dual_class() == PIABKet
def test_p(): assert Px.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity)) assert apply_operators(Px*PxKet(px)) == px*PxKet(px) assert PxKet(px).dual_class == PxBra assert PxBra(x).dual_class == PxKet assert (Dagger(PxKet(py))*PxKet(px)).doit() == DiracDelta(px-py) assert (XBra(x)*PxKet(px)).doit() ==\ exp(I*x*px/hbar)/sqrt(2*pi*hbar) assert represent(PxKet(px)) == px
def test_x(): assert X.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity)) assert Commutator(X, Px).doit() == I*hbar assert apply_operators(X*XKet(x)) == x*XKet(x) assert XKet(x).dual_class == XBra assert XBra(x).dual_class == XKet assert (Dagger(XKet(y))*XKet(x)).doit() == DiracDelta(x-y) assert (PxBra(px)*XKet(x)).doit() ==\ exp(-I*x*px/hbar)/sqrt(2*pi*hbar) assert represent(XKet(x)) == x assert XBra(x).position == x
def test_apply_represent_equality(): gates = [HadamardGate(int(3*random.random())),\ XGate(int(3*random.random())), ZGate(int(3*random.random())),\ YGate(int(3*random.random())), ZGate(int(3*random.random())),\ PhaseGate(int(3*random.random()))] circuit = Qubit(int(random.random()*2),int(random.random()*2),\ int(random.random()*2),int(random.random()*2),int(random.random()*2),\ int(random.random()*2)) for i in range(int(random.random() * 6)): circuit = gates[int(random.random() * 6)] * circuit mat = represent(circuit, nqubits=6) states = apply_operators(circuit) state_rep = matrix_to_qubit(mat) states = states.expand() state_rep = state_rep.expand() assert state_rep == states
def state_fromSymbolic(self, expr): ''' This method converts a sympy representation of a quantum state into an array or vector (as used by QuBricks). It uses internally `Basis.state_fromString` to recognise ket and bra names, and to substitute them appropriately with the right state vectors. .. warning:: Support for conversion from symbolic representations is not fully baked, but seems to work reasonably well. ''' r = np.array(sq.represent(expr, basis=self.__sympy_basis).tolist(), dtype=object) if len(r.shape) == 2: if r.shape[0] == 1: r = r[0, :] else: r = r[:, 0] return r
def test_apply_represent_equality(): gates = [HadamardGate(int(3*random.random())),\ XGate(int(3*random.random())), ZGate(int(3*random.random())),\ YGate(int(3*random.random())), ZGate(int(3*random.random())),\ PhaseGate(int(3*random.random()))] circuit = Qubit(int(random.random()*2),int(random.random()*2),\ int(random.random()*2),int(random.random()*2),int(random.random()*2),\ int(random.random()*2)) for i in range(int(random.random()*6)): circuit = gates[int(random.random()*6)]*circuit mat = represent(circuit, nqubits=6) states = apply_operators(circuit) state_rep = matrix_to_qubit(mat) states = states.expand() state_rep = state_rep.expand() assert state_rep == states
def test_p(): assert Px.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity)) assert qapply(Px*PxKet(px)) == px*PxKet(px) assert PxKet(px).dual_class() == PxBra assert PxBra(x).dual_class() == PxKet assert (Dagger(PxKet(py))*PxKet(px)).doit() == DiracDelta(px-py) assert (XBra(x)*PxKet(px)).doit() ==\ exp(I*x*px/hbar)/sqrt(2*pi*hbar) assert represent(PxKet(px)) == DiracDelta(px-px_1) rep_x = represent(PxOp(), basis = XOp) assert rep_x == -hbar*I*DiracDelta(x_1 - x_2)*DifferentialOperator(x_1) assert rep_x == represent(PxOp(), basis = XOp()) assert rep_x == represent(PxOp(), basis = XKet) assert rep_x == represent(PxOp(), basis = XKet()) assert represent(PxOp()*XKet(), basis=XKet) == \ -hbar*I*DiracDelta(x - x_2)*DifferentialOperator(x) assert represent(XBra("y")*PxOp()*XKet(), basis=XKet) == \ -hbar*I*DiracDelta(x-y)*DifferentialOperator(x)
def test_p(): assert Px.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity)) assert qapply(Px*PxKet(px)) == px*PxKet(px) assert PxKet(px).dual_class() == PxBra assert PxBra(x).dual_class() == PxKet assert (Dagger(PxKet(py))*PxKet(px)).doit() == DiracDelta(px - py) assert (XBra(x)*PxKet(px)).doit() == \ exp(I*x*px/hbar)/sqrt(2*pi*hbar) assert represent(PxKet(px)) == DiracDelta(px - px_1) rep_x = represent(PxOp(), basis=XOp) assert rep_x == -hbar*I*DiracDelta(x_1 - x_2)*DifferentialOperator(x_1) assert rep_x == represent(PxOp(), basis=XOp()) assert rep_x == represent(PxOp(), basis=XKet) assert rep_x == represent(PxOp(), basis=XKet()) assert represent(PxOp()*XKet(), basis=XKet) == \ -hbar*I*DiracDelta(x - x_2)*DifferentialOperator(x) assert represent(XBra("y")*PxOp()*XKet(), basis=XKet) == \ -hbar*I*DiracDelta(x - y)*DifferentialOperator(x)
def test_jy(): assert Commutator(Jy, Jz).doit() == I*hbar*Jx assert qapply(Jy*JzKet(1,1)) == I*sqrt(2)*hbar*JzKet(1,0)/2 assert Jy.rewrite('plusminus') == (Jplus - Jminus)/(2*I) assert represent(Jy, basis=Jz) == (represent(Jplus, basis=Jz) - represent(Jminus, basis=Jz))/(2*I)
def test_jy(): assert Commutator(Jy, Jz).doit() == I * hbar * Jx assert qapply(Jy * JzKet(1, 1)) == I * sqrt(2) * hbar * JzKet(1, 0) / 2 assert Jy.rewrite('plusminus') == (Jplus - Jminus) / (2 * I) assert represent(Jy, basis=Jz) == (represent(Jplus, basis=Jz) - represent(Jminus, basis=Jz)) / (2 * I)
q1 # In[9]: p0 # In[10]: p1 # representを用いてベクトルで表記できます。 # In[11]: represent(q0) # In[12]: represent(q0) # In[13]: represent(p0) # In[14]: represent(p0) # 2量子系も同様に可能です。
def test_represent(): # Spin operators assert represent(Jx) == hbar * Matrix([[0, 1], [1, 0]]) / 2 assert represent( Jx, j=1) == hbar * sqrt(2) * Matrix([[0, 1, 0], [1, 0, 1], [0, 1, 0]]) / 2 assert represent(Jy) == hbar * I * Matrix([[0, -1], [1, 0]]) / 2 assert represent(Jy, j=1) == hbar * I * sqrt(2) * Matrix( [[0, -1, 0], [1, 0, -1], [0, 1, 0]]) / 2 assert represent(Jz) == hbar * Matrix([[1, 0], [0, -1]]) / 2 assert represent(Jz, j=1) == hbar * Matrix([[1, 0, 0], [0, 0, 0], [0, 0, -1]]) # Spin states # Jx basis assert represent(JxKet(S(1) / 2, S(1) / 2), basis=Jx) == Matrix([1, 0]) assert represent(JxKet(S(1) / 2, -S(1) / 2), basis=Jx) == Matrix([0, 1]) assert represent(JxKet(1, 1), basis=Jx) == Matrix([1, 0, 0]) assert represent(JxKet(1, 0), basis=Jx) == Matrix([0, 1, 0]) assert represent(JxKet(1, -1), basis=Jx) == Matrix([0, 0, 1]) assert represent(JyKet(S(1) / 2, S(1) / 2), basis=Jx) == Matrix([exp(-I * pi / 4), 0]) assert represent(JyKet(S(1) / 2, -S(1) / 2), basis=Jx) == Matrix([0, exp(I * pi / 4)]) assert represent(JyKet(1, 1), basis=Jx) == Matrix([-I, 0, 0]) assert represent(JyKet(1, 0), basis=Jx) == Matrix([0, 1, 0]) assert represent(JyKet(1, -1), basis=Jx) == Matrix([0, 0, I]) assert represent(JzKet(S(1) / 2, S(1) / 2), basis=Jx) == sqrt(2) * Matrix([-1, 1]) / 2 assert represent(JzKet(S(1) / 2, -S(1) / 2), basis=Jx) == sqrt(2) * Matrix([-1, -1]) / 2 assert represent(JzKet(1, 1), basis=Jx) == Matrix([1, -sqrt(2), 1]) / 2 assert represent(JzKet(1, 0), basis=Jx) == sqrt(2) * Matrix([1, 0, -1]) / 2 assert represent(JzKet(1, -1), basis=Jx) == Matrix([1, sqrt(2), 1]) / 2 # Jy basis assert represent(JxKet(S(1) / 2, S(1) / 2), basis=Jy) == Matrix([exp(-3 * I * pi / 4), 0]) assert represent(JxKet(S(1) / 2, -S(1) / 2), basis=Jy) == Matrix([0, exp(3 * I * pi / 4)]) assert represent(JxKet(1, 1), basis=Jy) == Matrix([I, 0, 0]) assert represent(JxKet(1, 0), basis=Jy) == Matrix([0, 1, 0]) assert represent(JxKet(1, -1), basis=Jy) == Matrix([0, 0, -I]) assert represent(JyKet(S(1) / 2, S(1) / 2), basis=Jy) == Matrix([1, 0]) assert represent(JyKet(S(1) / 2, -S(1) / 2), basis=Jy) == Matrix([0, 1]) assert represent(JyKet(1, 1), basis=Jy) == Matrix([1, 0, 0]) assert represent(JyKet(1, 0), basis=Jy) == Matrix([0, 1, 0]) assert represent(JyKet(1, -1), basis=Jy) == Matrix([0, 0, 1]) assert represent(JzKet(S(1) / 2, S(1) / 2), basis=Jy) == sqrt(2) * Matrix([-1, I]) / 2 assert represent(JzKet(S(1) / 2, -S(1) / 2), basis=Jy) == sqrt(2) * Matrix([I, -1]) / 2 assert represent(JzKet(1, 1), basis=Jy) == Matrix([1, -I * sqrt(2), -1]) / 2 assert represent(JzKet(1, 0), basis=Jy) == Matrix([-sqrt(2) * I, 0, -sqrt(2) * I]) / 2 assert represent(JzKet(1, -1), basis=Jy) == Matrix([-1, -sqrt(2) * I, 1]) / 2 # Jz basis assert represent(JxKet(S(1) / 2, S(1) / 2)) == sqrt(2) * Matrix([1, 1]) / 2 assert represent(JxKet(S(1) / 2, -S(1) / 2)) == sqrt(2) * Matrix([-1, 1]) / 2 assert represent(JxKet(1, 1)) == Matrix([1, sqrt(2), 1]) / 2 assert represent(JxKet(1, 0)) == sqrt(2) * Matrix([-1, 0, 1]) / 2 assert represent(JxKet(1, -1)) == Matrix([1, -sqrt(2), 1]) / 2 assert represent(JyKet(S(1) / 2, S(1) / 2)) == sqrt(2) * Matrix([-1, -I]) / 2 assert represent(JyKet(S(1) / 2, -S(1) / 2)) == sqrt(2) * Matrix([-I, -1]) / 2 assert represent(JyKet(1, 1)) == Matrix([1, sqrt(2) * I, -1]) / 2 assert represent(JyKet(1, 0)) == sqrt(2) * Matrix([I, 0, I]) / 2 assert represent(JyKet(1, -1)) == Matrix([-1, sqrt(2) * I, 1]) / 2 assert represent(JzKet(S(1) / 2, S(1) / 2)) == Matrix([1, 0]) assert represent(JzKet(S(1) / 2, -S(1) / 2)) == Matrix([0, 1]) assert represent(JzKet(1, 1)) == Matrix([1, 0, 0]) assert represent(JzKet(1, 0)) == Matrix([0, 1, 0]) assert represent(JzKet(1, -1)) == Matrix([0, 0, 1])
def test_represent(): assert represent(Jz) == hbar * Matrix([[1, 0], [0, -1]]) / 2 assert represent(Jz, j=1) == hbar * Matrix([[1, 0, 0], [0, 0, 0], [0, 0, -1]])
def test_represent(): represent(sx) == Matrix([[0, 1], [1, 0]]) represent(sy) == Matrix([[0, -I], [I, 0]]) represent(sz) == Matrix([[1, 0], [0, -1]]) represent(sm) == Matrix([[0, 0], [1, 0]]) represent(sp) == Matrix([[0, 1], [0, 0]])
def test_represent(): # Spin operators assert represent(Jx) == hbar*Matrix([[0,1],[1,0]])/2 assert represent(Jx, j=1) == hbar*sqrt(2)*Matrix([[0,1,0],[1,0,1],[0,1,0]])/2 assert represent(Jy) == hbar*I*Matrix([[0,-1],[1,0]])/2 assert represent(Jy, j=1) == hbar*I*sqrt(2)*Matrix([[0,-1,0],[1,0,-1],[0,1,0]])/2 assert represent(Jz) == hbar*Matrix([[1,0],[0,-1]])/2 assert represent(Jz, j=1) == hbar*Matrix([[1,0,0],[0,0,0],[0,0,-1]]) # Spin states # Jx basis assert represent(JxKet(S(1)/2,S(1)/2), basis=Jx) == Matrix([1,0]) assert represent(JxKet(S(1)/2,-S(1)/2), basis=Jx) == Matrix([0,1]) assert represent(JxKet(1,1), basis=Jx) == Matrix([1,0,0]) assert represent(JxKet(1,0), basis=Jx) == Matrix([0,1,0]) assert represent(JxKet(1,-1), basis=Jx) == Matrix([0,0,1]) assert represent(JyKet(S(1)/2,S(1)/2), basis=Jx) == Matrix([exp(-I*pi/4),0]) assert represent(JyKet(S(1)/2,-S(1)/2), basis=Jx) == Matrix([0,exp(I*pi/4)]) assert represent(JyKet(1,1), basis=Jx) == Matrix([-I,0,0]) assert represent(JyKet(1,0), basis=Jx) == Matrix([0,1,0]) assert represent(JyKet(1,-1), basis=Jx) == Matrix([0,0,I]) assert represent(JzKet(S(1)/2,S(1)/2), basis=Jx) == sqrt(2)*Matrix([-1,1])/2 assert represent(JzKet(S(1)/2,-S(1)/2), basis=Jx) == sqrt(2)*Matrix([-1,-1])/2 assert represent(JzKet(1,1), basis=Jx) == Matrix([1,-sqrt(2),1])/2 assert represent(JzKet(1,0), basis=Jx) == sqrt(2)*Matrix([1,0,-1])/2 assert represent(JzKet(1,-1), basis=Jx) == Matrix([1,sqrt(2),1])/2 # Jy basis assert represent(JxKet(S(1)/2,S(1)/2), basis=Jy) == Matrix([exp(-3*I*pi/4),0]) assert represent(JxKet(S(1)/2,-S(1)/2), basis=Jy) == Matrix([0,exp(3*I*pi/4)]) assert represent(JxKet(1,1), basis=Jy) == Matrix([I,0,0]) assert represent(JxKet(1,0), basis=Jy) == Matrix([0,1,0]) assert represent(JxKet(1,-1), basis=Jy) == Matrix([0,0,-I]) assert represent(JyKet(S(1)/2,S(1)/2), basis=Jy) == Matrix([1,0]) assert represent(JyKet(S(1)/2,-S(1)/2), basis=Jy) == Matrix([0,1]) assert represent(JyKet(1,1), basis=Jy) == Matrix([1,0,0]) assert represent(JyKet(1,0), basis=Jy) == Matrix([0,1,0]) assert represent(JyKet(1,-1), basis=Jy) == Matrix([0,0,1]) assert represent(JzKet(S(1)/2,S(1)/2), basis=Jy) == sqrt(2)*Matrix([-1,I])/2 assert represent(JzKet(S(1)/2,-S(1)/2), basis=Jy) == sqrt(2)*Matrix([I,-1])/2 assert represent(JzKet(1,1), basis=Jy) == Matrix([1,-I*sqrt(2),-1])/2 assert represent(JzKet(1,0), basis=Jy) == Matrix([-sqrt(2)*I,0,-sqrt(2)*I])/2 assert represent(JzKet(1,-1), basis=Jy) == Matrix([-1,-sqrt(2)*I,1])/2 # Jz basis assert represent(JxKet(S(1)/2,S(1)/2)) == sqrt(2)*Matrix([1,1])/2 assert represent(JxKet(S(1)/2,-S(1)/2)) == sqrt(2)*Matrix([-1,1])/2 assert represent(JxKet(1,1)) == Matrix([1,sqrt(2),1])/2 assert represent(JxKet(1,0)) == sqrt(2)*Matrix([-1,0,1])/2 assert represent(JxKet(1,-1)) == Matrix([1,-sqrt(2),1])/2 assert represent(JyKet(S(1)/2,S(1)/2)) == sqrt(2)*Matrix([-1,-I])/2 assert represent(JyKet(S(1)/2,-S(1)/2)) == sqrt(2)*Matrix([-I,-1])/2 assert represent(JyKet(1,1)) == Matrix([1,sqrt(2)*I,-1])/2 assert represent(JyKet(1,0)) == sqrt(2)*Matrix([I,0,I])/2 assert represent(JyKet(1,-1)) == Matrix([-1,sqrt(2)*I,1])/2 assert represent(JzKet(S(1)/2,S(1)/2)) == Matrix([1,0]) assert represent(JzKet(S(1)/2,-S(1)/2)) == Matrix([0,1]) assert represent(JzKet(1,1)) == Matrix([1,0,0]) assert represent(JzKet(1,0)) == Matrix([0,1,0]) assert represent(JzKet(1,-1)) == Matrix([0,0,1])
def test_x(): assert X.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity)) assert Commutator(X, Px).doit() == I * hbar assert qapply(X * XKet(x)) == x * XKet(x) assert XKet(x).dual_class() == XBra assert XBra(x).dual_class() == XKet assert (Dagger(XKet(y)) * XKet(x)).doit() == DiracDelta(x - y) assert (PxBra(px)*XKet(x)).doit() == \ exp(-I*x*px/hbar)/sqrt(2*pi*hbar) assert represent(XKet(x)) == DiracDelta(x - x_1) assert represent(XBra(x)) == DiracDelta(-x + x_1) assert XBra(x).position == x assert represent(XOp() * XKet()) == x * DiracDelta(x - x_2) assert represent(XOp()*XKet()*XBra('y')) == \ x*DiracDelta(x - x_3)*DiracDelta(x_1 - y) assert represent(XBra("y") * XKet()) == DiracDelta(x - y) assert represent(XKet() * XBra()) == DiracDelta(x - x_2) * DiracDelta(x_1 - x) rep_p = represent(XOp(), basis=PxOp) assert rep_p == hbar * I * DiracDelta(px_1 - px_2) * DifferentialOperator(px_1) assert rep_p == represent(XOp(), basis=PxOp()) assert rep_p == represent(XOp(), basis=PxKet) assert rep_p == represent(XOp(), basis=PxKet()) assert represent(XOp()*PxKet(), basis=PxKet) == \ hbar*I*DiracDelta(px - px_2)*DifferentialOperator(px)
def test_represent(): assert represent(Jz) == hbar*Matrix([[1,0],[0,-1]])/2 assert represent(Jz, j=1) == hbar*Matrix([[1,0,0],[0,0,0],[0,0,-1]])
def test_jx(): assert Commutator(Jx, Jz).doit() == -I*hbar*Jy assert qapply(Jx*JzKet(1,1)) == sqrt(2)*hbar*JzKet(1,0)/2 assert Jx.rewrite('plusminus') == (Jminus + Jplus)/2 assert represent(Jx, basis=Jz, j=1) == (represent(Jplus, basis=Jz, j=1)+represent(Jminus, basis=Jz, j=1))/2
def test_x(): assert X.hilbert_space == L2(Interval(S.NegativeInfinity, S.Infinity)) assert Commutator(X, Px).doit() == I*hbar assert qapply(X*XKet(x)) == x*XKet(x) assert XKet(x).dual_class() == XBra assert XBra(x).dual_class() == XKet assert (Dagger(XKet(y))*XKet(x)).doit() == DiracDelta(x - y) assert (PxBra(px)*XKet(x)).doit() == \ exp(-I*x*px/hbar)/sqrt(2*pi*hbar) assert represent(XKet(x)) == DiracDelta(x - x_1) assert represent(XBra(x)) == DiracDelta(-x + x_1) assert XBra(x).position == x assert represent(XOp()*XKet()) == x*DiracDelta(x - x_2) assert represent(XOp()*XKet()*XBra('y')) == \ x*DiracDelta(x - x_3)*DiracDelta(x_1 - y) assert represent(XBra("y")*XKet()) == DiracDelta(x - y) assert represent( XKet()*XBra()) == DiracDelta(x - x_2) * DiracDelta(x_1 - x) rep_p = represent(XOp(), basis=PxOp) assert rep_p == hbar*I*DiracDelta(px_1 - px_2)*DifferentialOperator(px_1) assert rep_p == represent(XOp(), basis=PxOp()) assert rep_p == represent(XOp(), basis=PxKet) assert rep_p == represent(XOp(), basis=PxKet()) assert represent(XOp()*PxKet(), basis=PxKet) == \ hbar*I*DiracDelta(px - px_2)*DifferentialOperator(px)