def get_sparse_operator(operator, n_qubits=None, trunc=None, hbar=1.): r"""Map an operator to a sparse matrix. If the input is not a QubitOperator, the Jordan-Wigner Transform is used. Args: operator: Currently supported operators include: FermionOperator, QubitOperator, DiagonalCoulombHamiltonian, PolynomialTensor, BosonOperator, QuadOperator. n_qubits(int): Number qubits in the system Hilbert space. Applicable only to fermionic systems. trunc (int): The size at which the Fock space should be truncated. Applicable only to bosonic systems. hbar (float): the value of hbar to use in the definition of the canonical commutation relation [q_i, p_j] = \delta_{ij} i hbar. Applicable only to the QuadOperator. """ if isinstance(operator, (DiagonalCoulombHamiltonian, PolynomialTensor)): return jordan_wigner_sparse(get_fermion_operator(operator)) elif isinstance(operator, FermionOperator): return jordan_wigner_sparse(operator, n_qubits) elif isinstance(operator, QubitOperator): return qubit_operator_sparse(operator, n_qubits) elif isinstance(operator, (BosonOperator, QuadOperator)): return boson_operator_sparse(operator, trunc, hbar) else: raise TypeError('Failed to convert a {} to a sparse matrix.'.format( type(operator).__name__))
def get_sparse_operator(operator, n_qubits=None): """Map a FermionOperator, QubitOperator, or PolyomialTensor to a sparse matrix.""" if isinstance(operator, PolynomialTensor): return polynomial_tensor_sparse(operator) elif isinstance(operator, FermionOperator): return jordan_wigner_sparse(operator, n_qubits) elif isinstance(operator, QubitOperator): return qubit_operator_sparse(operator, n_qubits)
def get_sparse_operator(operator, n_qubits=None): """Map a Fermion, Qubit, or InteractionOperator to a SparseOperator.""" if isinstance(operator, PolynomialTensor): return get_sparse_polynomial_tensor(operator) elif isinstance(operator, FermionOperator): return jordan_wigner_sparse(operator, n_qubits) elif isinstance(operator, QubitOperator): if n_qubits is None: n_qubits = count_qubits(operator) return qubit_operator_sparse(operator, n_qubits)
def jw_get_ground_state_at_particle_number(particle_number, qubit_operator): qubit_operator = load_qubit_operator(qubit_operator) sparse_matrix = qubit_operator_sparse(qubit_operator) ground_energy, ground_state_amplitudes = _jw_get_ground_state_at_particle_number( sparse_matrix, particle_number ) ground_state = Wavefunction(ground_state_amplitudes) value_estimate = ValueEstimate(ground_energy) save_wavefunction(ground_state, "ground-state.json") save_value_estimate(value_estimate, "value-estimate.json")
def get_sparse_operator(operator, n_qubits=None): """Map an operator to a sparse matrix. If the input is not a QubitOperator, the Jordan-Wigner Transform is used. """ if isinstance(operator, (DiagonalCoulombHamiltonian, PolynomialTensor)): return jordan_wigner_sparse(get_fermion_operator(operator)) elif isinstance(operator, FermionOperator): return jordan_wigner_sparse(operator, n_qubits) elif isinstance(operator, QubitOperator): return qubit_operator_sparse(operator, n_qubits) else: raise TypeError('Failed to convert a {} to a sparse matrix.'.format( type(operator).__name__))
def test_qubitop_matrix_converion(self): # Given m = 4 n = 2**m TOL = 10**-15 random.seed(RNDSEED) A = np.array([[random.uniform(-1, 1) for x in range(n)] for y in range(n)]) # When A_qubitop = get_qubitop_from_matrix(A) A_qubitop_matrix = np.array(qubit_operator_sparse(A_qubitop).todense()) test_matrix = A_qubitop_matrix - A # Then for row in test_matrix: for elem in row: self.assertEqual(abs(elem) < TOL, True)