def test_simple_trace_out(): H1 = QubitHamiltonian.from_string("1.0*Z(0)*Z(1)") H2 = QubitHamiltonian.from_string("1.0*Z(0)") assert H2 == H1.trace_out_qubits(qubits=[1], states=None) H1 = QubitHamiltonian.from_string("1.0*Z(0)*Z(1)X(100)") H2 = QubitHamiltonian.from_string("1.0*Z(1)X(100)") assert H2 == H1.trace_out_qubits(qubits=[0], states=None) H1 = QubitHamiltonian.from_string("1.0*Z(0)*Z(1)X(100)") H2 = QubitHamiltonian.from_string("-1.0*Z(0)X(100)") assert H2 == H1.trace_out_qubits(qubits=[1], states=[QubitWaveFunction.from_string("1.0*|1>")]) H1 = QubitHamiltonian.from_string("1.0*Z(0)*Z(1)X(100)") H2 = QubitHamiltonian.from_string("-1.0*Z(1)X(100)") assert H2 == H1.trace_out_qubits(qubits=[0], states=[QubitWaveFunction.from_string("1.0*|1>")]) H1 = QubitHamiltonian.from_string("1.0*X(0)*Z(1)*Z(5)*X(100)Y(50)") H2 = QubitHamiltonian.from_string("1.0*X(0)X(100)Y(50)") assert H2 == H1.trace_out_qubits(qubits=[1,5], states=[QubitWaveFunction.from_string("1.0*|1>")]*2) H1 = QubitHamiltonian.from_string("1.0*X(0)*Z(1)*X(100)Y(50)") H2 = QubitHamiltonian.from_string("-1.0*X(0)X(100)Y(50)") assert H2 == H1.trace_out_qubits(qubits=[1,5], states=[QubitWaveFunction.from_string("1.0*|1>")]*2)
def test_ketbra(): ket = QubitWaveFunction.from_string("1.0*|00> + 1.0*|11>").normalize() operator = paulis.KetBra(ket=ket, bra="|00>") result = operator * QubitWaveFunction.from_int(0, n_qubits=2) assert (result == ket)