Skip to content

Commit

Permalink
BREAKING CHANGE: A Program that uses qubit or label placeholders ca…
Browse files Browse the repository at this point in the history
…nnot be pickled
  • Loading branch information
MarquessV authored Mar 22, 2023
1 parent 36c56a6 commit 5c56427
Show file tree
Hide file tree
Showing 11 changed files with 41 additions and 43 deletions.
26 changes: 22 additions & 4 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ lark = "^0.11.1"
rpcq = "^3.10.0"
networkx = "^2.5"
importlib-metadata = { version = ">=3.7.3,<5", python = "<3.8" }
qcs-sdk-python = { git = "https://github.com/rigetti/qcs-sdk-rust", subdirectory = "crates/python", branch = "reexport-quil-py" }
qcs-sdk-python = { git = "https://github.com/rigetti/qcs-sdk-rust", subdirectory = "crates/python", branch = "specify-quil-as-a-dependency" }
qcs-api-client = ">=0.21.0,<0.22.0"
retry = "^0.9.2"
types-python-dateutil = "^2.8.19"
Expand Down
9 changes: 5 additions & 4 deletions pyquil/api/_abstract_compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
import asyncio
import json

import qcs_sdk
from qcs_sdk.compiler.quilc import compile_program, CompilerOpts, TargetDevice
from qcs_sdk.qpu.isa import InstructionSetArchitecture

from pyquil._memory import Memory
from pyquil._version import pyquil_version
Expand Down Expand Up @@ -129,10 +130,10 @@ def quil_to_native_quil(self, program: Program, *, protoquil: Optional[bool] = N
# This will have to be addressed as part of this issue: https://github.com/rigetti/pyquil/issues/1496
target_device = compiler_isa_to_target_quantum_processor(self.quantum_processor.to_compiler_isa())

native_quil = qcs_sdk.compile(
native_quil = compile_program(
program.out(calibrations=False),
json.dumps(target_device.asdict(), indent=2), # type: ignore
timeout=self._compiler_client.timeout,
TargetDevice.from_json(json.dumps(target_device.asdict())),
options=CompilerOpts(timeout=self._compiler_client.timeout, protoquil=protoquil),
)

native_program = Program(native_quil)
Expand Down
4 changes: 2 additions & 2 deletions pyquil/quil.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@
_convert_to_calibration_match,
)

from qcs_sdk.quil.program import Program as RSProgram
import qcs_sdk.quil.instructions as quil_rs
from quil.program import Program as RSProgram
import quil.instructions as quil_rs

InstructionDesignator = Union[
AbstractInstruction,
Expand Down
4 changes: 2 additions & 2 deletions pyquil/quilatom.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@

import numpy as np

import qcs_sdk.quil.instructions as quil_rs
import qcs_sdk.quil.expression as quil_rs_expr
import quil.instructions as quil_rs
import quil.expression as quil_rs_expr


class QuilAtom(object):
Expand Down
6 changes: 3 additions & 3 deletions pyquil/quilbase.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@

from dataclasses import dataclass

import qcs_sdk.quil.instructions as quil_rs
import qcs_sdk.quil.expression as quil_rs_expr
import quil.instructions as quil_rs
import quil.expression as quil_rs_expr


class _InstructionMeta(abc.ABCMeta):
Expand Down Expand Up @@ -150,7 +150,7 @@ def _convert_to_py_instruction(instr: quil_rs.Instruction) -> AbstractInstructio
instr = instr.inner()
if isinstance(instr, quil_rs.Declaration):
return Declare._from_rs_declaration(instr)
if isinstance(instr, quil_rs.DefCalibration):
if isinstance(instr, quil_rs.Calibration):
return DefCalibration._from_rs_calibration(instr)
if isinstance(instr, quil_rs.Gate):
return Gate._from_rs_gate(instr)
Expand Down
4 changes: 2 additions & 2 deletions pyquil/quiltcalibrations.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@
_convert_to_py_qubit,
)

from qcs_sdk.quil.program import CalibrationSet
import qcs_sdk.quil.instructions as quil_rs
from quil.program import CalibrationSet
import quil.instructions as quil_rs


class CalibrationError(Exception):
Expand Down
20 changes: 0 additions & 20 deletions test/unit/__snapshots__/test_quilbase.ambr
Original file line number Diff line number Diff line change
Expand Up @@ -128,20 +128,6 @@
'\tSAMPLE-RATE: 44.1',
})
# ---
# name: TestDefMeasureCalibration.test_out[MemoryReference]
'''
DEFCAL MEASURE 1 theta:
X 0

'''
# ---
# name: TestDefMeasureCalibration.test_out[No-MemoryReference]
'''
DEFCAL MEASURE 0 :
X 0

'''
# ---
# name: TestDefMeasureCalibration.test_out[qubit0-memory_reference0-instrs0]
'''
DEFCAL MEASURE 0 theta:
Expand Down Expand Up @@ -209,18 +195,12 @@
# name: TestGate.test_str[X-Gate]
'X 0'
# ---
# name: TestMeasurement.test_out[FormalArgument]
'MEASURE q theta'
# ---
# name: TestMeasurement.test_out[MemoryReference]
'MEASURE 1 theta[0]'
# ---
# name: TestMeasurement.test_out[No-MemoryReference]
'MEASURE 0'
# ---
# name: TestMeasurement.test_str[FormalArgument]
'MEASURE q theta'
# ---
# name: TestMeasurement.test_str[MemoryReference]
'MEASURE 1 theta[0]'
# ---
Expand Down
1 change: 0 additions & 1 deletion test/unit/test_operator_estimation.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
from pyquil.quilbase import Pragma


# TODO: pickle compatibility
def test_measure_observables(client_configuration: QCSClientConfiguration):
expts = [
ExperimentSetting(TensorProductState(), o1 * o2)
Expand Down
6 changes: 3 additions & 3 deletions test/unit/test_quantum_computer.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ def test_construct_strength_two_orthogonal_array():
assert np.allclose(_construct_strength_two_orthogonal_array(3), answer)


# TODO: pickle compatibility
# TODO: Review PyQVM
def test_measure_bitstrings(client_configuration: QCSClientConfiguration):
quantum_processor = NxQuantumProcessor(nx.complete_graph(2))
dummy_compiler = DummyCompiler(quantum_processor=quantum_processor, client_configuration=client_configuration)
Expand Down Expand Up @@ -466,7 +466,7 @@ def test_qc_error(client_configuration: QCSClientConfiguration):
get_qc("5q", as_qvm=False, client_configuration=client_configuration)


# TODO: pickle compatibility
# TODOV4: Write memory values
@pytest.mark.parametrize("param", [np.pi, [np.pi], np.array([np.pi])])
def test_run_with_parameters(client_configuration: QCSClientConfiguration, param):
quantum_processor = NxQuantumProcessor(nx.complete_graph(3))
Expand Down Expand Up @@ -508,7 +508,7 @@ def test_run_with_bad_parameters(client_configuration: QCSClientConfiguration, p
executable.write_memory(region_name="theta", value=param)


# TODO: pickle compatibility
# TODOV4: Write Memory values
def test_reset(client_configuration: QCSClientConfiguration):
quantum_processor = NxQuantumProcessor(nx.complete_graph(3))
qc = QuantumComputer(
Expand Down
2 changes: 1 addition & 1 deletion test/unit/test_quil.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import numpy as np
import pytest
from syrupy.assertion import SnapshotAssertion
import qcs_sdk.quil.instructions as quil_rs
import quil.instructions as quil_rs

from pyquil.gates import (
I,
Expand Down

0 comments on commit 5c56427

Please sign in to comment.