pyquil.quilbase module

Contains the core pyQuil objects that correspond to Quil instructions.

class pyquil.quilbase.AbstractInstruction[source]

Bases: object

Abstract class for representing single instructions.

class pyquil.quilbase.ArithmeticBinaryOp(left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: Arithmetic, AbstractInstruction

The abstract class for binary arithmetic classical instructions.

property left: MemoryReference
op: ClassVar[ArithmeticOperator]
out() str[source]
property right: MemoryReference | int | float
class pyquil.quilbase.Capture(frame: Frame, kernel: WaveformReference | TemplateWaveform, memory_region: MemoryReference, nonblocking: bool = False)[source]

Bases: Capture, AbstractInstruction

property frame: Frame
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

property kernel: WaveformReference | TemplateWaveform
property memory_region: MemoryReference
property nonblocking: bool
out() str[source]
class pyquil.quilbase.ClassicalAdd(left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ArithmeticBinaryOp

The ADD instruction.

op: ClassVar[ArithmeticOperator] = Add
class pyquil.quilbase.ClassicalAnd(left: MemoryReference, right: MemoryReference | int)[source]

Bases: LogicalBinaryOp

The AND instruction.

op: ClassVar[BinaryOperator] = And
class pyquil.quilbase.ClassicalComparison(target: MemoryReference, left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: Comparison, AbstractInstruction

Abstract class for ternary comparison instructions.

property left: MemoryReference
op: ClassVar[ComparisonOperator]
out() str[source]
property right: MemoryReference | int | float
property target: MemoryReference
class pyquil.quilbase.ClassicalConvert(left: MemoryReference, right: MemoryReference)[source]

Bases: Convert, AbstractInstruction

The CONVERT instruction.

property left: MemoryReference
out() str[source]
property right: MemoryReference
class pyquil.quilbase.ClassicalDiv(left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ArithmeticBinaryOp

The DIV instruction.

op: ClassVar[ArithmeticOperator] = Divide
class pyquil.quilbase.ClassicalEqual(target: MemoryReference, left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ClassicalComparison

The EQ comparison instruction.

op: ClassVar[ComparisonOperator] = ComparisonOperator.Equal
class pyquil.quilbase.ClassicalExchange(left: MemoryReference, right: MemoryReference)[source]

Bases: Exchange, AbstractInstruction

The EXCHANGE instruction.

property left: MemoryReference
out() str[source]
property right: MemoryReference
class pyquil.quilbase.ClassicalExclusiveOr(left: MemoryReference, right: MemoryReference | int)[source]

Bases: LogicalBinaryOp

The XOR instruction.

op: ClassVar[BinaryOperator] = Xor
class pyquil.quilbase.ClassicalGreaterEqual(target: MemoryReference, left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ClassicalComparison

The GE comparison instruction.

op: ClassVar[ComparisonOperator] = ComparisonOperator.GreaterThanOrEqual
class pyquil.quilbase.ClassicalGreaterThan(target: MemoryReference, left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ClassicalComparison

The GT comparison instruction.

op: ClassVar[ComparisonOperator] = ComparisonOperator.GreaterThan
class pyquil.quilbase.ClassicalInclusiveOr(left: MemoryReference, right: MemoryReference | int)[source]

Bases: LogicalBinaryOp

The IOR instruction.

op: ClassVar[BinaryOperator] = Ior
class pyquil.quilbase.ClassicalLessEqual(target: MemoryReference, left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ClassicalComparison

The LE comparison instruction.

op: ClassVar[ComparisonOperator] = ComparisonOperator.LessThanOrEqual
class pyquil.quilbase.ClassicalLessThan(target: MemoryReference, left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ClassicalComparison

The LT comparison instruction.

op: ClassVar[ComparisonOperator] = ComparisonOperator.LessThan
class pyquil.quilbase.ClassicalLoad(target: MemoryReference, left: str, right: MemoryReference)[source]

Bases: Load, AbstractInstruction

The LOAD instruction.

property left: str
out() str[source]
property right: MemoryReference
property target: MemoryReference
class pyquil.quilbase.ClassicalMove(left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: Move, AbstractInstruction

The MOVE instruction.

property left: MemoryReference
out() str[source]
property right: MemoryReference | int | float
class pyquil.quilbase.ClassicalMul(left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ArithmeticBinaryOp

The MUL instruction.

op: ClassVar[ArithmeticOperator] = Multiply
class pyquil.quilbase.ClassicalNeg(target: MemoryReference)[source]

Bases: UnaryClassicalInstruction

The NEG instruction.

op: ClassVar[UnaryOperator] = Neg
class pyquil.quilbase.ClassicalNot(target: MemoryReference)[source]

Bases: UnaryClassicalInstruction

The NOT instruction.

op: ClassVar[UnaryOperator] = Not
class pyquil.quilbase.ClassicalStore(target: str, left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: Store, AbstractInstruction

The STORE instruction.

property left: MemoryReference
out() str[source]
property right: MemoryReference | int | float
property target: str
class pyquil.quilbase.ClassicalSub(left: MemoryReference, right: MemoryReference | int | float)[source]

Bases: ArithmeticBinaryOp

The SUB instruction.

op: ClassVar[ArithmeticOperator] = Subtract
class pyquil.quilbase.Declare(name: str, memory_type: str, memory_size: int = 1, shared_region: str | None = None, offsets: Sequence[Tuple[int, str]] | None = None)[source]

Bases: Declaration, AbstractInstruction

A DECLARE directive.

This is printed in Quil as:

DECLARE <name> <memory-type> (SHARING <other-name> (OFFSET <amount> <type>)* )?
asdict() Dict[str, Sequence[Tuple[int, str]] | str | None | int][source]
property memory_size: int
property memory_type: str
property offsets: List[Tuple[int, str]]
out() str[source]
property shared_region: str | None
class pyquil.quilbase.DefCalibration(name: str, parameters: Sequence[Expression | MemoryReference | int | float | complex | number], qubits: Sequence[Qubit | FormalArgument], instrs: Sequence[AbstractInstruction], modifiers: List[GateModifier] | None = None)[source]

Bases: Calibration, AbstractInstruction

property instrs: List[AbstractInstruction]
out() str[source]
property parameters: Sequence[Expression | MemoryReference | int | float | complex | number]
property qubits: List[Qubit | QubitPlaceholder | FormalArgument | int]
class pyquil.quilbase.DefCircuit(name: str, parameters: List[Parameter], qubits: List[FormalArgument], instructions: List[AbstractInstruction])[source]

Bases: CircuitDefinition, AbstractInstruction

property instructions: List[AbstractInstruction]
out() str[source]
property parameters: List[Parameter]
property qubit_variables: List[FormalArgument]
class pyquil.quilbase.DefFrame(frame: Frame, direction: str | None = None, initial_frequency: float | None = None, hardware_object: str | None = None, sample_rate: float | None = None, center_frequency: float | None = None, enable_raw_capture: str | None = None, channel_delay: float | None = None)[source]

Bases: FrameDefinition, AbstractInstruction

property center_frequency: Frame

Deprecated since version 4.0: Quil now supports generic key/value pairs in DEFFRAMEs. Use get_attribute(‘CENTER-FREQUENCY’) instead.

property channel_delay: Frame

Deprecated since version 4.0: Quil now supports generic key/value pairs in DEFFRAMEs. Use get_attribute(‘CHANNEL-DELAY’) instead.

property direction: str | None

Deprecated since version 4.0: Quil now supports generic key/value pairs in DEFFRAMEs. Use get_attribute(‘DIRECTION’) instead.

property frame: Frame
get_attribute(name: str) str | float | None[source]
property hardware_object: str | None

Deprecated since version 4.0: Quil now supports generic key/value pairs in DEFFRAMEs. Use get_attribute(‘HARDWARE-OBJECT’) instead.

property initial_frequency: float | None

Deprecated since version 4.0: Quil now supports generic key/value pairs in DEFFRAMEs. Use set_attribute(‘INITIAL-FREQUENCY’) instead.

out() str[source]
property sample_rate: Frame

Deprecated since version 4.0: Quil now supports generic key/value pairs in DEFFRAMEs. Use get_attribute(‘SAMPLE-RATE’) instead.

set_attribute(name: str, value: str | float) None[source]
class pyquil.quilbase.DefGate(name: str, matrix: List[List[Expression]] | ndarray | matrix, parameters: List[Parameter] | None = None)[source]

Bases: GateDefinition, AbstractInstruction

A DEFGATE directive.

Parameters:
  • name – The name of the newly defined gate.

  • matrix – The matrix defining this gate.

  • parameters – list of parameters that are used in this gate

get_constructor() Callable[[...], Gate] | Callable[[...], Callable[[...], Gate]][source]
Returns:

A function that constructs this gate on variable qubit indices. E.g. mygate.get_constructor()(1) applies the gate to qubit 1.

property matrix: ndarray
num_args() int[source]
Returns:

The number of qubit arguments the gate takes.

out() str[source]
property parameters: List[Parameter]
class pyquil.quilbase.DefGateByPaulis(gate_name: str, parameters: List[Parameter], arguments: List[Qubit | QubitPlaceholder | FormalArgument | int], body: PauliSum)[source]

Bases: DefGate

Records a gate definition as the exponentiation of a PauliSum.

property arguments: List[FormalArgument]
property body: PauliSum
num_args() int[source]
Returns:

The number of qubit arguments the gate takes.

class pyquil.quilbase.DefMeasureCalibration(qubit: Qubit | FormalArgument | None, memory_reference: MemoryReference, instrs: List[AbstractInstruction])[source]

Bases: MeasureCalibrationDefinition, AbstractInstruction

property instrs: List[AbstractInstruction]
property memory_reference: MemoryReference | None
out() str[source]
property qubit: Qubit | QubitPlaceholder | FormalArgument | int | None
class pyquil.quilbase.DefPermutationGate(name: str, permutation: List[int] | ndarray)[source]

Bases: DefGate

num_args() int[source]
Returns:

The number of qubit arguments the gate takes.

property permutation: List[int]
class pyquil.quilbase.DefWaveform(name: str, parameters: List[Parameter], entries: List[complex | Expression])[source]

Bases: WaveformDefinition, AbstractInstruction

property entries: Sequence[Expression | MemoryReference | int | float | complex | number]
out() str[source]
property parameters: List[Parameter]
class pyquil.quilbase.Delay(frames: List[Frame], qubits: Sequence[int | Qubit | FormalArgument], duration: float)[source]

Bases: Delay, AbstractInstruction

property duration: float
property frames: List[Frame]
out() str[source]
property qubits: List[Qubit | QubitPlaceholder | FormalArgument | int]
class pyquil.quilbase.DelayFrames(frames: List[Frame], duration: float)[source]

Bases: Delay

class pyquil.quilbase.DelayQubits(qubits: Sequence[Qubit | FormalArgument], duration: float)[source]

Bases: Delay

class pyquil.quilbase.Fence(qubits: List[Qubit | FormalArgument])[source]

Bases: Fence, AbstractInstruction

out() str[source]
property qubits: List[Qubit | QubitPlaceholder | FormalArgument | int]
class pyquil.quilbase.FenceAll[source]

Bases: Fence

The FENCE instruction.

class pyquil.quilbase.Gate(name: str, params: Sequence[Expression | MemoryReference | int | float | complex | number], qubits: Sequence[Qubit | QubitPlaceholder | FormalArgument | int], modifiers: Sequence[GateModifier] = [])[source]

Bases: Gate, AbstractInstruction

This is the pyQuil object for a quantum gate instruction.

controlled(control_qubit: Qubit | Qubit | QubitPlaceholder | FormalArgument | int | Sequence[Qubit | QubitPlaceholder | FormalArgument | int | Qubit]) Gate[source]

Add the CONTROLLED modifier to the gate with the given control qubit or Sequence of control qubits.

dagger() Gate[source]

Add the DAGGER modifier to the gate.

forked(fork_qubit: Qubit | Qubit | QubitPlaceholder | FormalArgument | int, alt_params: Sequence[Expression | MemoryReference | int | float | complex | number] | Sequence[Expression]) Gate[source]

Add the FORKED modifier to the gate with the given fork qubit and given additional parameters.

get_qubit_indices() List[int][source]
get_qubits(indices: bool = True) Sequence[Qubit | QubitPlaceholder | FormalArgument | int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

property modifiers: List[str]
out() str[source]
property params: Sequence[Expression | MemoryReference | int | float | complex | number]
property qubits: List[Qubit | QubitPlaceholder | FormalArgument | int]
class pyquil.quilbase.Halt[source]

Bases: SimpleInstruction

The HALT instruction.

instruction: ClassVar[Instruction] = Halt
class pyquil.quilbase.Include(filename)[source]

Bases: Include, AbstractInstruction

out() str[source]
class pyquil.quilbase.Jump(target: Label | LabelPlaceholder)[source]

Bases: Jump, AbstractInstruction

Representation of an unconditional jump instruction (JUMP).

out() str[source]
property target: Label | LabelPlaceholder
class pyquil.quilbase.JumpTarget(label: Label | LabelPlaceholder)[source]

Bases: Label, AbstractInstruction

Representation of a target that can be jumped to.

property label: Label | LabelPlaceholder
out() str[source]
class pyquil.quilbase.JumpUnless(target: Label | LabelPlaceholder, condition: MemoryReference)[source]

Bases: JumpUnless, AbstractInstruction

The JUMP-UNLESS instruction.

property condition: MemoryReference
out() str[source]
property target: Label | LabelPlaceholder
class pyquil.quilbase.JumpWhen(target: Label | LabelPlaceholder, condition: MemoryReference)[source]

Bases: JumpWhen, AbstractInstruction

The JUMP-WHEN instruction.

property condition: MemoryReference
out() str[source]
property target: Label | LabelPlaceholder
class pyquil.quilbase.LogicalBinaryOp(left: MemoryReference, right: MemoryReference | int)[source]

Bases: BinaryLogic, AbstractInstruction

The abstract class for binary logical classical instructions.

property left: MemoryReference
op: ClassVar[BinaryOperator]
out() str[source]
property right: MemoryReference | int
class pyquil.quilbase.Measurement(qubit: Qubit | QubitPlaceholder | FormalArgument | int, classical_reg: MemoryReference | None)[source]

Bases: Measurement, AbstractInstruction

This is the pyQuil object for a Quil measurement instruction.

property classical_reg: MemoryReference | None
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
property qubit: Qubit | QubitPlaceholder | FormalArgument | int
class pyquil.quilbase.Nop[source]

Bases: SimpleInstruction

The NOP instruction.

instruction: ClassVar[Instruction] = Nop
class pyquil.quilbase.Pragma(command: str, args: Sequence[Qubit | FormalArgument | int | str] = (), freeform_string: str = '')[source]

Bases: Pragma, AbstractInstruction

A PRAGMA instruction.

This is printed in QUIL as:

PRAGMA <command> <arg1> <arg2> … <argn> “<freeform_string>”

property args: Tuple[Qubit | QubitPlaceholder | FormalArgument | int]
property command: str
property freeform_string: str
out() str[source]
class pyquil.quilbase.Pulse(frame: Frame, waveform: WaveformReference | TemplateWaveform, nonblocking: bool = False)[source]

Bases: Pulse, AbstractInstruction

property frame: Frame
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

property nonblocking: bool
out() str[source]
property waveform: WaveformReference | TemplateWaveform
class pyquil.quilbase.RawCapture(frame: Frame, duration: float, memory_region: MemoryReference, nonblocking: bool = False)[source]

Bases: RawCapture, AbstractInstruction

property duration: complex
property frame: Frame
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

property memory_region: MemoryReference
property nonblocking: bool
out() str[source]
class pyquil.quilbase.Reset(qubit: Qubit | QubitPlaceholder | FormalArgument | int | None = None)[source]

Bases: Reset, AbstractInstruction

The RESET instruction.

get_qubit_indices() Set[int] | None[source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | None[source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
property qubit: Qubit | QubitPlaceholder | FormalArgument | int | None
class pyquil.quilbase.ResetQubit(qubit: Qubit | QubitPlaceholder | FormalArgument | int)[source]

Bases: Reset

This is the pyQuil object for a Quil targeted reset instruction.

class pyquil.quilbase.SetFrequency(frame: Frame, freq: Expression | MemoryReference | int | float | complex | number)[source]

Bases: SetFrequency, AbstractInstruction

property frame: Frame
property freq: Expression | MemoryReference | int | float | complex | number
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
class pyquil.quilbase.SetPhase(frame: Frame, phase: Expression | MemoryReference | int | float | complex | number)[source]

Bases: SetPhase, AbstractInstruction

property frame: Frame
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
property phase: Expression | MemoryReference | int | float | complex | number
class pyquil.quilbase.SetScale(frame: Frame, scale: Expression | MemoryReference | int | float | complex | number)[source]

Bases: SetScale, AbstractInstruction

property frame: Frame
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
property scale: Expression | MemoryReference | int | float | complex | number
class pyquil.quilbase.ShiftFrequency(frame: Frame, freq: Expression | MemoryReference | int | float | complex | number)[source]

Bases: ShiftFrequency, AbstractInstruction

property frame: Frame
property freq: Expression | MemoryReference | int | float | complex | number
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
class pyquil.quilbase.ShiftPhase(frame: Frame, phase: Expression | MemoryReference | int | float | complex | number)[source]

Bases: ShiftPhase, AbstractInstruction

property frame: Frame
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
property phase: Expression | MemoryReference | int | float | complex | number
class pyquil.quilbase.SimpleInstruction[source]

Bases: AbstractInstruction

Abstract class for simple instructions with no arguments.

instruction: ClassVar[Instruction]
out() str[source]
class pyquil.quilbase.SwapPhases(frameA: Frame, frameB: Frame)[source]

Bases: SwapPhases, AbstractInstruction

property frameA: Frame
property frameB: Frame
get_qubit_indices() Set[int][source]
get_qubits(indices: bool = True) Set[Qubit | QubitPlaceholder | FormalArgument | int] | Set[int][source]

Deprecated since version 4.0: The indices flag will be removed, use get_qubit_indices() instead.

out() str[source]
class pyquil.quilbase.UnaryClassicalInstruction(target: MemoryReference)[source]

Bases: UnaryLogic, AbstractInstruction

The abstract class for unary classical instructions.

op: ClassVar[UnaryOperator]
out() str[source]
property target: MemoryReference
class pyquil.quilbase.Wait[source]

Bases: SimpleInstruction

The WAIT instruction.

instruction: ClassVar[Instruction] = Wait