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
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
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
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
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)