コード例 #1
0
ファイル: Tools.py プロジェクト: QML-UY1/Mizore
def qubit_operator2matrix(n_qubit, hamiltonian: QubitOperator):
    n_dim = 2**n_qubit
    mat = np.zeros((n_dim, n_dim), complex)
    for pauli_and_coff in hamiltonian.get_operators():
        for string_pauli in pauli_and_coff.terms:
            if not string_pauli:
                mat += pauli_and_coff.terms[string_pauli] * np.eye(n_dim)
                continue
            string_pauli_i = 0
            if string_pauli[0][0] == 0:
                pauli0 = pauli_dict[string_pauli[0][1]]
                string_pauli_i += 1
            else:
                pauli0 = PauliI
            for i in range(1, n_qubit):
                if string_pauli_i == len(string_pauli):
                    pauli0 = np.kron(PauliI, pauli0)
                    continue
                if i == string_pauli[string_pauli_i][0]:
                    pauli0 = np.kron(
                        pauli_dict[string_pauli[string_pauli_i][1]], pauli0)
                    string_pauli_i += 1
                else:
                    pauli0 = np.kron(PauliI, pauli0)

            mat += pauli_and_coff.terms[string_pauli] * pauli0
    return mat
コード例 #2
0
ファイル: Tools.py プロジェクト: QML-UY1/Mizore
def get_operator_nontrivial_term_weight_sum(operator: QubitOperator):
    coeff_sum = 0
    for pauli_and_coeff in operator.get_operators():
        for string_pauli in pauli_and_coeff.terms:
            if len(string_pauli) == 0:
                print(string_pauli)
                continue
            coeff_sum += abs(pauli_and_coeff.terms[string_pauli])
    return coeff_sum
コード例 #3
0
ファイル: Tools.py プロジェクト: QML-UY1/Mizore
def get_operator_n_qubit(operator: QubitOperator):
    n_qubit = -1
    for pauli_and_coeff in operator.get_operators():
        for string_pauli in pauli_and_coeff.terms:
            if len(string_pauli) == 0:
                continue
            highest_index = string_pauli[len(string_pauli) - 1][0]
            if highest_index > n_qubit:
                n_qubit = highest_index
    return n_qubit + 1
コード例 #4
0
def QubitOperator2DmrgpyOperator(n_qubit, hamiltonian: QubitOperator):
    dmrgpy_hamiltonian = 0
    for pauli_and_coff in hamiltonian.get_operators():
        for string_pauli in pauli_and_coff.terms:
            coff = pauli_and_coff.terms[string_pauli]
            ops = coff
            for term in string_pauli:
                if term[1] == "Z":
                    ops = ops * PauliZ_MO[term[0]]
                if term[1] == "Y":
                    ops = ops * PauliY_MO[term[0]]
                if term[1] == "X":
                    ops = ops * PauliX_MO[term[0]]
            dmrgpy_hamiltonian = dmrgpy_hamiltonian + ops
    return dmrgpy_hamiltonian
コード例 #5
0
    return e[:10]


def givens_rotation(indeces, t):
    i = indeces[0]
    j = indeces[1]
    return jordan_wigner(MajoranaOperator(i, np.sin(t)))


N = 3
qubits = cirq.LineQubit.range(N)
circuit = cirq.Circuit()

x = QubitOperator(())
#print(x)
#print(type(x))
giv = jordan_wigner(MajoranaOperator((0)))
print(giv)
#print(cirq.H(qubits[0]))

y = ParityPreservingFermionicGate()
print(y)

#circuit.append(giv)
circuit.append(x.get_operators())

print(circuit)
sim = cirq.Simulator()
result = sim.simulate(circuit)
print(result.final_state_vector)