Repository navigation
Releases
Releases · rigetti/pyquil
v4.23.0
v4.23.0rc1
Changed
- Updated QCS SDK to 0.30.0. Update QCS SDK for benchmarking campaign. Required for single-use
refresh tokens.
v4.22.0
Changed
- A
Channelwhose noise generator acts on more levels than its gate promotes the gate to the
generator's dims, as the identity on the levels above its own:Channel.from_lindbladian(RX(theta, q), qx.lindbladians.leakage(rate))is a qutrit channel without a hand-promoted gate incustom_gates.
Channel.from_mixturedoes the same for constituents on more levels. Noise that cannot hold the gate
raises aValueErrornaming both dims. MeasurementChannel.from_confusion_and_transitiontakes a(num_outcomes, d)confusion matrix, so a
two-state discriminator on a qutrit is a(2, 3)matrix, and its transition matrix defaults to the
identity (a quantum non-demolition measurement).
Deprecated
APIs that pyQuil v5 removes now emit a PyQuilDeprecationWarning when used, and a deprecated
module warns when imported. It is a FutureWarning, so Python shows it by default; filter on
pyquil._deprecation.PyQuilDeprecationWarning to silence it.
- Replaced in pyQuil v5 by the JAX-based simulators and noise model. pyQuil v4 already includes
them as private, experimental modules (pyquil.simulation._simulatorand
pyquil.noise._noise_model; see the
simulation architecture documentation),
so we recommend continuing to use the deprecated APIs until you upgrade to pyQuil v5. Note also,
the qcs-sdk maintains support for executing Quil
programs on the QVM as of its 0.27.0 release (see documentation for
qcs_sdk.qvm):- The
pyquil.pyqvmandpyquil.wavefunctionmodules. pyquil.api.QVM,pyquil.api.QVMCompilerandpyquil.api.WavefunctionSimulator, and getting
a QVM-backed quantum computer fromget_qc(a-qvmor-pyqvmname, oras_qvm=True).- From
pyquil.simulation:NumpyWavefunctionSimulator,ReferenceWavefunctionSimulator,
ReferenceDensitySimulator,get_measure_probabilities,targeted_einsum,
targeted_tensordotandzero_state_matrix. - The Kraus-map noise model in
pyquil.noise:NoiseModel,KrausModel,NoisyGateUndefined,
add_decoherence_noise,append_kraus_to_gate,apply_noise_model,
bitstring_probs_to_z_moments,combine_kraus_maps,correct_bitstring_probs,
corrupt_bitstring_probs,damping_after_dephasing,damping_kraus_map,
decoherence_noise_with_asymmetric_ro,dephasing_kraus_map,estimate_assignment_probs,
estimate_bitstring_probs,get_noisy_gate,pauli_kraus_mapandtensor_kraus_maps. The
constantsANGLE_TOLERANCE,INFINITYandNO_NOISEare deprecated too, but do not warn. Program.define_noisy_gate,Program.define_noisy_readoutand
pyquil.quil.merge_with_pauli_noise, whose noise pragmas only the QVM understands.
- The
- Replaced in pyQuil v5 by
rigetti-qpu-hybrid-benchmark:- The
pyquil.experimentmodule, withQuantumComputer.run_experimentand
QuantumComputer.calibrate. - The
pyquil.operator_estimationmodule, by its Estimator interface.
- The
- Removed in pyQuil v5 without replacement: the
pyquil.latexmodule. pyquil.api.local_forest_runtimewarns that starting a QVM server is deprecated: in pyQuil v5 it
starts onlyquilc.
v4.22.0rc1
Deprecated
APIs that pyQuil v5 removes now emit a PyQuilDeprecationWarning when used, and a deprecated
module warns when imported. It is a FutureWarning, so Python shows it by default; filter on
pyquil._deprecation.PyQuilDeprecationWarning to silence it.
- Replaced in pyQuil v5 by the JAX-based simulators and noise model. pyQuil v4 already includes
them as private, experimental modules (pyquil.simulation._simulatorand
pyquil.noise._noise_model; see the
simulation architecture documentation),
so we recommend continuing to use the deprecated APIs until you upgrade to pyQuil v5. Note also,
the qcs-sdk maintains support for executing Quil
programs on the QVM as of its 0.27.0 release (see documentation for
qcs_sdk.qvm):- The
pyquil.pyqvmandpyquil.wavefunctionmodules. pyquil.api.QVM,pyquil.api.QVMCompilerandpyquil.api.WavefunctionSimulator, and getting
a QVM-backed quantum computer fromget_qc(a-qvmor-pyqvmname, oras_qvm=True).- From
pyquil.simulation:NumpyWavefunctionSimulator,ReferenceWavefunctionSimulator,
ReferenceDensitySimulator,get_measure_probabilities,targeted_einsum,
targeted_tensordotandzero_state_matrix. - The Kraus-map noise model in
pyquil.noise:NoiseModel,KrausModel,NoisyGateUndefined,
add_decoherence_noise,append_kraus_to_gate,apply_noise_model,
bitstring_probs_to_z_moments,combine_kraus_maps,correct_bitstring_probs,
corrupt_bitstring_probs,damping_after_dephasing,damping_kraus_map,
decoherence_noise_with_asymmetric_ro,dephasing_kraus_map,estimate_assignment_probs,
estimate_bitstring_probs,get_noisy_gate,pauli_kraus_mapandtensor_kraus_maps. The
constantsANGLE_TOLERANCE,INFINITYandNO_NOISEare deprecated too, but do not warn. Program.define_noisy_gate,Program.define_noisy_readoutand
pyquil.quil.merge_with_pauli_noise, whose noise pragmas only the QVM understands.
- The
- Replaced in pyQuil v5 by
rigetti-qpu-hybrid-benchmark:- The
pyquil.experimentmodule, withQuantumComputer.run_experimentand
QuantumComputer.calibrate. - The
pyquil.operator_estimationmodule, by its Estimator interface.
- The
- Removed in pyQuil v5 without replacement: the
pyquil.latexmodule. pyquil.api.local_forest_runtimewarns that starting a QVM server is deprecated: in pyQuil v5 it
starts onlyquilc.
v4.21.0
Features
TrajectorySimulator, a Monte-Carlo trajectory simulator for programs with mid-circuit
measurements and resets. It samples pure-state trajectories under JAX, returning the
measurement outcomes alongside the final state;samplestreams trajectories in batches,
data-parallel across the available devices, so the shot count is not bounded by device
memory.computeisjax.jit-traceable (though not differentiable).
(#1861)- A gate angle may be any Quil arithmetic expression over declared memory, so the parametric
programsquilcemits --RX(theta[0]/2 + pi) 0-- simulate without rewriting.
(#1869). Restored from
#1860, where it was errantly dropped during a
rebase (prior to the 4.19.0 release). - The simulators accept an
initial_stateto evolve from, so a circuit can be split in two and
a prefix shared across many runs evolved once instead of once per run.
Fixed
- Tolerant
Circuitequality (and its unhashability, which follows), the split of
Circuit.__post_init__into named coercion and validation steps, and a mypy fix for JAX's
dynamically defined config flags. Restored from
#1860, where it was errantly dropped during a
rebase (prior to the 4.19.0 release). Circuit.to_kraus_mapsno longer truncates the Kraus set.
v4.20.0
Features
- Helper for adding leading delays to programs with leading classical computation, including
cases with control flow. Seepyquil._qpu.add_leading_delay_to_first_pulse_block.
(#1851) - Support for per-shot randomized compiling on the QPU control system. The top-level
pyquil._qpu.RandomizedCompilingConfigurationprovides methods for building the necessary
classical instructions (build_quil_program), seed values (generate_seed_values), and
memory map values (build_memory_map) to enable the method. It additionally provides methods
for verifying final memory read off of the QPU for verification (verify_final_memory),
along with tracking the randomizations shot by shot (track_pauli_frames).
(#1851) - Support Quil shift operators. (#1851)
v4.19.0
Features
- Experimental exact simulators built on
rigetti-quax:PureStateVectorSimulatorand
DensityMatrixSimulatorinpyquil.simulation._simulator. They evolve a program exactly
under JAX, so they arejit-compatible and differentiable with respect to gate
parameters, and they accept aNoiseModel. The API is not yet stable; see
the architecture guide.
(#1855) - A gate angle may be any Quil arithmetic expression over declared memory, so the parametric
programsquilcemits --RX(theta[0]/2 + pi) 0-- simulate without rewriting.
(#1869)