pyquil.pyqvm module¶
A pure Python implementation of the Quantum Virtual Machine (QVM).
 class pyquil.pyqvm.AbstractQuantumSimulator(n_qubits: int, rs: RandomState  None)[source]¶
Bases:
ABC
An abstract interface for a quantum simulator.
Initialize.
 Parameters:
n_qubits – Number of qubits to simulate.
rs – a RandomState (shared with the owning
PyQVM
) for doing anything stochastic.
 abstract do_gate(gate: Gate) AbstractQuantumSimulator [source]¶
Perform a gate.
 Returns:
self
to support method chaining.
 abstract do_gate_matrix(matrix: ndarray, qubits: Sequence[int]) AbstractQuantumSimulator [source]¶
Apply an arbitrary unitary; not necessarily a named gate.
 Parameters:
matrix – The unitary matrix to apply. No checks are done
qubits – A list of qubits to apply the unitary to.
 Returns:
self
to support method chaining.
 abstract do_measurement(qubit: int) int [source]¶
Measure a qubit and collapse the wavefunction.
 Returns:
The measurement result. A 1 or a 0.
 abstract do_post_gate_noise(noise_type: str, noise_prob: float, qubits: list[int]) AbstractQuantumSimulator [source]¶
Apply noise that happens after each gate application.
WARNING! This is experimental and the signature of this interface will likely change.
 Parameters:
noise_type – The name of the noise type
noise_prob – The probability of that noise happening
qubits – Apply noise to these qubits.
 Returns:
self
to support method chaining
 do_program(program: Program) AbstractQuantumSimulator [source]¶
Perform a sequence of gates contained within a program.
 Parameters:
program – The program
 Returns:
self
 abstract expectation(operator: PauliTerm  PauliSum) complex [source]¶
Compute the expectation of an operator.
 Parameters:
operator – The operator
 Returns:
The operator’s expectation value
 abstract reset() AbstractQuantumSimulator [source]¶
Reset the wavefunction to the
000...00>
state. Returns:
self
to support method chaining.
 class pyquil.pyqvm.PyQVM(n_qubits: int, quantum_simulator_type: type[AbstractQuantumSimulator]  None = None, seed: int  None = None, post_gate_noise_probabilities: dict[str, float]  None = None)[source]¶

A pure python implementation of the Quantum Virtual Machine.
PyQuil’s builtin Quil virtual machine.
This class implements common control flow and plumbing and dispatches the “actual” work to quantum simulators like ReferenceWavefunctionSimulator, ReferenceDensitySimulator, and NumpyWavefunctionSimulator
 Parameters:
n_qubits – The number of qubits. Typically this results in the allocation of a large ndarray, so be judicious.
quantum_simulator_type – A class that can be instantiated to handle the quantum aspects of this QVM. If not specified, the default will be either NumpyWavefunctionSimulator (no noise) or ReferenceDensitySimulator (noise)
post_gate_noise_probabilities – A specification of noise model given by probabilities of certain types of noise. The dictionary keys are from “relaxation”, “dephasing”, “depolarizing”, “phase_flip”, “bit_flip”, and “bitphase_flip”. WARNING: experimental. This interface will likely change.
seed – An optional random seed for performing stochastic aspects of the QVM.
 execute(executable: EncryptedProgram  Program, memory_map: Mapping[str, Sequence[int]  Sequence[float]]  None = None, **__: Any) PyQVM [source]¶
Execute a program on the PyQVM.
Note that the state of the instance is reset on each call to
execute
. Returns:
self
to support method chaining.
 execute_once(program: Program) PyQVM [source]¶
Execute one outer loop of a program on the PyQVM without reinitializing its state.
Note that the PyQVM is stateful. Subsequent calls to
execute_once()
will not automatically reset the wavefunction or the classical RAM. If this is desired, consider starting your program withRESET
. Returns:
self
to support method chaining.
 execute_with_memory_map_batch(executable: EncryptedProgram  Program, memory_maps: Iterable[Mapping[str, Sequence[int]  Sequence[float]]], **__: Any) list[PyQVM] [source]¶
Operation is not supported by PyQVM as the state of the instance is reset at the start of each execution.
 find_label(label: Label  LabelPlaceholder) int [source]¶
Iterate over the program and find a JumpTarget that has a Label matching the input label.
 Parameters:
label – Label object to search for in program
 Returns:
Program index where
label
is found
 get_result(execute_response: PyQVM) QAMExecutionResult [source]¶
Return results from the PyQVM according to the common QAM API.
Note that while the
execute_response
is not used, it’s accepted in order to conform to that API; it’s unused because the PyQVM, unlike other QAM’s, is itself stateful.
 transition() bool [source]¶
Perform a QAMlike transition.
This function assumes
program
andprogram_counter
instance variables are set appropriately, and that the wavefunction simulator and classical memoryram
instance variables are in the desired QAM input state. Returns:
whether the QAM should halt after this transition.