Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ jobs:
# On each operating system, check latest version of python and cirq
os: [ ubuntu-latest, macos-latest, windows-latest ]
python-version: [ '3.9' ]
cirq-version: [ '~=0.13.0' ]
cirq-version: [ '~=1.0.0' ]
# Also check least-supported versions (linux only)
include:
- os: ubuntu-latest
python-version: 3.8
cirq-version: '~=0.12.0'
cirq-version: '~=0.15.0'
fail-fast: false
steps:
- uses: actions/checkout@v2
Expand All @@ -76,10 +76,11 @@ jobs:
- uses: actions/checkout@v1
- uses: actions/setup-python@v1
with:
python-version: '3.6'
python-version: '3.8'
architecture: 'x64'
- name: Install requirements
run: |
pip install --upgrade pip
pip install -r requirements.txt
pip install -r dev_tools/conf/pip-list-dev-tools.txt
git config --global user.name ${GITHUB_ACTOR}
Expand Down
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cirq-core>=0.12.0,<=0.14.0
cirq-google>=0.12.0,<=0.14.0
cirq-core>=0.15.0
cirq-google>=0.15.0
deprecation
h5py>=2.8
networkx
Expand Down
17 changes: 12 additions & 5 deletions src/openfermion/circuits/primitives/bogoliubov_transform_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def test_bogoliubov_transform_fourier_transform(transformation_matrix,
correct_state,
atol=5e-6):
n_qubits = transformation_matrix.shape[0]
sim = cirq.Simulator(dtype=numpy.complex128)
qubits = LineQubit.range(n_qubits)
if isinstance(initial_state, Container):
initial_state = sum(1 << (n_qubits - 1 - i) for i in initial_state)
Expand All @@ -55,7 +56,8 @@ def test_bogoliubov_transform_fourier_transform(transformation_matrix,
bogoliubov_transform(qubits,
transformation_matrix,
initial_state=initial_state))
state = circuit.final_state_vector(initial_state=initial_state)
state = sim.simulate(circuit,
initial_state=initial_state).final_state_vector
cirq.testing.assert_allclose_up_to_global_phase(state,
correct_state,
atol=atol)
Expand All @@ -68,6 +70,7 @@ def test_spin_symmetric_bogoliubov_transform(n_spatial_orbitals,
atol=5e-5):
n_qubits = 2 * n_spatial_orbitals
qubits = LineQubit.range(n_qubits)
sim = cirq.Simulator(dtype=numpy.complex128)

# Initialize a random quadratic Hamiltonian
quad_ham = random_quadratic_hamiltonian(n_spatial_orbitals,
Expand Down Expand Up @@ -105,7 +108,8 @@ def test_spin_symmetric_bogoliubov_transform(n_spatial_orbitals,
bogoliubov_transform(qubits,
transformation_matrix,
initial_state=initial_state))
state = circuit.final_state_vector(initial_state=initial_state)
state = sim.simulate(circuit,
initial_state=initial_state).final_state_vector

# Check that the result is an eigenstate with the correct eigenvalue
numpy.testing.assert_allclose(quad_ham_sparse.dot(state),
Expand All @@ -121,6 +125,7 @@ def test_bogoliubov_transform_quadratic_hamiltonian(n_qubits,
conserves_particle_number,
atol=5e-5):
qubits = LineQubit.range(n_qubits)
sim = cirq.Simulator(dtype=numpy.complex128)

# Initialize a random quadratic Hamiltonian
quad_ham = random_quadratic_hamiltonian(n_qubits,
Expand Down Expand Up @@ -154,15 +159,17 @@ def test_bogoliubov_transform_quadratic_hamiltonian(n_qubits,
2**(n_qubits - 1 - int(i)) for i in occupied_orbitals)

# Get the state using a circuit simulation
state1 = circuit.final_state_vector(initial_state=initial_state)
state1 = sim.simulate(circuit,
initial_state=initial_state).final_state_vector

# Also test the option to start with a computational basis state
special_circuit = cirq.Circuit(
bogoliubov_transform(qubits,
transformation_matrix,
initial_state=initial_state))
state2 = special_circuit.final_state_vector(
initial_state, qubits_that_should_be_present=qubits)
state2 = sim.simulate(special_circuit,
initial_state=initial_state,
qubit_order=qubits).final_state_vector

# Check that the result is an eigenstate with the correct eigenvalue
numpy.testing.assert_allclose(quad_ham_sparse.dot(state1),
Expand Down
34 changes: 23 additions & 11 deletions src/openfermion/circuits/primitives/ffft_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -145,12 +145,14 @@ def _multi_fermionic_mode_base_state(n: int, amplitude: complex,
[[1, 0], [1j, 0], [0, 1], [0, -1j], [1, 1]])
def test_F0Gate_transform(amplitudes):
qubits = LineQubit.range(2)
sim = cirq.Simulator(dtype=np.complex128)
initial_state = _single_fermionic_modes_state(amplitudes)
expected_state = _single_fermionic_modes_state(
_fourier_transform_single_fermionic_modes(amplitudes))

circuit = cirq.Circuit(_F0Gate().on(*qubits))
state = circuit.final_state_vector(initial_state=initial_state)
state = sim.simulate(circuit,
initial_state=initial_state).final_state_vector

assert np.allclose(state, expected_state, rtol=0.0)

Expand Down Expand Up @@ -185,12 +187,14 @@ def test_F0Gate_text_diagram():
])
def test_TwiddleGate_transform(k, n, qubit, initial, expected):
qubits = LineQubit.range(2)
sim = cirq.Simulator(dtype=np.complex128)
initial_state = _single_fermionic_modes_state(initial)
expected_state = _single_fermionic_modes_state(expected)

circuit = cirq.Circuit(_TwiddleGate(k, n).on(qubits[qubit]))
state = circuit.final_state_vector(initial_state=initial_state,
qubits_that_should_be_present=qubits)
state = sim.simulate(circuit,
initial_state=initial_state,
qubit_order=qubits).final_state_vector

assert np.allclose(state, expected_state, rtol=0.0)

Expand Down Expand Up @@ -222,14 +226,16 @@ def test_TwiddleGate_text_diagram():
[0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, -1j / np.sqrt(2), 0, 0, 1 / np.sqrt(2), 0, 0]])
def test_ffft_single_fermionic_modes(amplitudes):
sim = cirq.Simulator(dtype=np.complex128)
initial_state = _single_fermionic_modes_state(amplitudes)
expected_state = _single_fermionic_modes_state(
_fourier_transform_single_fermionic_modes(amplitudes))
qubits = LineQubit.range(len(amplitudes))

circuit = cirq.Circuit(ffft(qubits), strategy=cirq.InsertStrategy.EARLIEST)
state = circuit.final_state_vector(initial_state=initial_state,
qubits_that_should_be_present=qubits)
state = sim.simulate(circuit,
initial_state=initial_state,
qubit_order=qubits).final_state_vector

assert np.allclose(state, expected_state, rtol=0.0)

Expand All @@ -250,14 +256,16 @@ def test_ffft_single_fermionic_modes(amplitudes):
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
])
def test_ffft_single_fermionic_modes_non_power_of_2(amplitudes):
sim = cirq.Simulator(dtype=np.complex128)
initial_state = _single_fermionic_modes_state(amplitudes)
expected_state = _single_fermionic_modes_state(
_fourier_transform_single_fermionic_modes(amplitudes))
qubits = LineQubit.range(len(amplitudes))

circuit = cirq.Circuit(ffft(qubits), strategy=cirq.InsertStrategy.EARLIEST)
state = circuit.final_state_vector(initial_state=initial_state,
qubits_that_should_be_present=qubits)
state = sim.simulate(circuit,
initial_state=initial_state,
qubit_order=qubits).final_state_vector

cirq.testing.assert_allclose_up_to_global_phase(state,
expected_state,
Expand All @@ -281,13 +289,15 @@ def test_ffft_single_fermionic_modes_non_power_of_2(amplitudes):
(8, (1, [0, 1, 2, 3, 4, 5, 6, 7])),
])
def test_ffft_multi_fermionic_mode(n, initial):
sim = cirq.Simulator(dtype=np.complex128)
initial_state = _multi_fermionic_mode_base_state(n, *initial)
expected_state = _fourier_transform_multi_fermionic_mode(n, *initial)
qubits = LineQubit.range(n)

circuit = cirq.Circuit(ffft(qubits), strategy=cirq.InsertStrategy.EARLIEST)
state = circuit.final_state_vector(initial_state=initial_state,
qubits_that_should_be_present=qubits)
state = sim.simulate(circuit,
initial_state=initial_state,
qubit_order=qubits).final_state_vector

assert np.allclose(state, expected_state, rtol=0.0)

Expand All @@ -304,10 +314,12 @@ def test_ffft_multi_fermionic_mode_non_power_of_2(n, initial):
initial_state = _multi_fermionic_mode_base_state(n, *initial)
expected_state = _fourier_transform_multi_fermionic_mode(n, *initial)
qubits = LineQubit.range(n)
sim = cirq.Simulator(dtype=np.complex128)

circuit = cirq.Circuit(ffft(qubits), strategy=cirq.InsertStrategy.EARLIEST)
state = circuit.final_state_vector(initial_state=initial_state,
qubits_that_should_be_present=qubits)
state = sim.simulate(circuit,
initial_state=initial_state,
qubit_order=qubits).final_state_vector

cirq.testing.assert_allclose_up_to_global_phase(state,
expected_state,
Expand Down