def test_simulate_trotter_unsupported_trotter_step_raises_error(): qubits = cirq.LineQubit.range(2) control = cirq.LineQubit(-1) hamiltonian = openfermion.random_diagonal_coulomb_hamiltonian(2, seed=0) time = 1.0 class EmptyTrotterAlgorithm(TrotterAlgorithm): supported_types = {openfermion.DiagonalCoulombHamiltonian} algorithm = EmptyTrotterAlgorithm() with pytest.raises(ValueError): _ = next(simulate_trotter(qubits, hamiltonian, time, order=0, algorithm=algorithm)) with pytest.raises(ValueError): _ = next(simulate_trotter(qubits, hamiltonian, time, order=1, algorithm=algorithm)) with pytest.raises(ValueError): _ = next(simulate_trotter(qubits, hamiltonian, time, order=0, algorithm=algorithm, control_qubit=control)) with pytest.raises(ValueError): _ = next(simulate_trotter(qubits, hamiltonian, time, order=1, algorithm=algorithm, control_qubit=control))
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import numpy import pytest import cirq import openfermion from openfermion import random_diagonal_coulomb_hamiltonian from openfermioncirq import HamiltonianObjective # Construct a Hamiltonian for testing test_hamiltonian = random_diagonal_coulomb_hamiltonian(4, real=True, seed=26191) test_fermion_op = openfermion.get_fermion_operator(test_hamiltonian) def test_hamiltonian_objective_value(): obj = HamiltonianObjective(test_hamiltonian) obj_linear_op = HamiltonianObjective(test_hamiltonian, use_linear_op=True) hamiltonian_sparse = openfermion.get_sparse_operator(test_hamiltonian) simulator = cirq.google.XmonSimulator() qubits = cirq.LineQubit.range(4) numpy.random.seed(10581) result = simulator.simulate(cirq.testing.random_circuit(qubits, 5, 0.8), qubit_order=qubits)
from openfermioncirq import ( HamiltonianObjective, LowRankTrotterAnsatz, SplitOperatorTrotterAnsatz, SwapNetworkTrotterAnsatz, SwapNetworkTrotterHubbardAnsatz, VariationalStudy, prepare_gaussian_state, simulate_trotter) from openfermioncirq.trotter import ( LINEAR_SWAP_NETWORK, LOW_RANK, LowRankTrotterAlgorithm, SPLIT_OPERATOR) # 4-qubit random DiagonalCoulombHamiltonian diag_coul_hamiltonian = openfermion.random_diagonal_coulomb_hamiltonian( 4, real=True, seed=47141) # 4-qubit H2 2-2 with bond length 0.7414 bond_length = 0.7414 geometry = [('H', (0., 0., 0.)), ('H', (0., 0., bond_length))] h2_hamiltonian = openfermion.load_molecular_hamiltonian( geometry, 'sto-3g', 1, format(bond_length), 2, 2) # 4-qubit LiH 2-2 with bond length 1.45 bond_length = 1.45 geometry = [('Li', (0., 0., 0.)), ('H', (0., 0., bond_length))] lih_hamiltonian = openfermion.load_molecular_hamiltonian( geometry, 'sto-3g', 1, format(bond_length), 2, 2) @pytest.mark.parametrize(
def test_simulate_trotter_bad_order_raises_error(): qubits = cirq.LineQubit.range(2) hamiltonian = openfermion.random_diagonal_coulomb_hamiltonian(2, seed=0) time = 1.0 with pytest.raises(ValueError): _ = next(simulate_trotter(qubits, hamiltonian, time, order=-1))
-1j * time * hamiltonian_sparse, initial_state) # Make sure the time is not too small assert fidelity(exact_state, initial_state) < .95 return initial_state, exact_state # Produce test parameters longer_time = 1.0 long_time = 0.1 short_time = 0.05 # 5-qubit random DiagonalCoulombHamiltonian diag_coul_hamiltonian = openfermion.random_diagonal_coulomb_hamiltonian( 5, real=False, seed=65233) diag_coul_initial_state, diag_coul_exact_state = ( produce_simulation_test_parameters(diag_coul_hamiltonian, long_time, seed=49075)) # Hubbard model, reordered hubbard_model = openfermion.fermi_hubbard(2, 2, 1.0, 4.0) hubbard_model = openfermion.reorder(hubbard_model, openfermion.up_then_down) hubbard_hamiltonian = openfermion.get_diagonal_coulomb_hamiltonian( hubbard_model) hubbard_initial_state, hubbard_exact_state = ( produce_simulation_test_parameters(hubbard_hamiltonian, long_time, seed=8200))