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.

out() str[source]
class pyquil.quilbase.ArithmeticBinaryOp(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.AbstractInstruction

The abstract class for binary arithmetic classical instructions.

op: ClassVar[str]
out() str[source]
class pyquil.quilbase.Capture(frame: pyquil.quilatom.Frame, kernel: Union[pyquil.quilatom.WaveformReference, pyquil.quilatom.TemplateWaveform], memory_region: pyquil.quilatom.MemoryReference, nonblocking: bool = False)[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.ClassicalAdd(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ArithmeticBinaryOp

The ADD instruction.

op: ClassVar[str] = 'ADD'
class pyquil.quilbase.ClassicalAnd(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int])[source]

Bases: pyquil.quilbase.LogicalBinaryOp

WARNING: The operand order for ClassicalAnd has changed. In pyQuil versions <= 1.9, AND had signature

AND %source %target

Now, AND has signature

AND %target %source

op: ClassVar[str] = 'AND'
class pyquil.quilbase.ClassicalComparison(target: pyquil.quilatom.MemoryReference, left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.AbstractInstruction

Abstract class for ternary comparison instructions.

op: ClassVar[str]
out() str[source]
class pyquil.quilbase.ClassicalConvert(left: pyquil.quilatom.MemoryReference, right: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.AbstractInstruction

The CONVERT instruction.

op = 'CONVERT'
out() str[source]
class pyquil.quilbase.ClassicalDiv(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ArithmeticBinaryOp

The DIV instruction.

op: ClassVar[str] = 'DIV'
class pyquil.quilbase.ClassicalEqual(target: pyquil.quilatom.MemoryReference, left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ClassicalComparison

The EQ comparison instruction.

op: ClassVar[str] = 'EQ'
class pyquil.quilbase.ClassicalExchange(left: pyquil.quilatom.MemoryReference, right: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.AbstractInstruction

The EXCHANGE instruction.

op = 'EXCHANGE'
out() str[source]
class pyquil.quilbase.ClassicalExclusiveOr(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int])[source]

Bases: pyquil.quilbase.LogicalBinaryOp

The XOR instruction.

op: ClassVar[str] = 'XOR'
class pyquil.quilbase.ClassicalGreaterEqual(target: pyquil.quilatom.MemoryReference, left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ClassicalComparison

The GE comparison instruction.

op: ClassVar[str] = 'GE'
class pyquil.quilbase.ClassicalGreaterThan(target: pyquil.quilatom.MemoryReference, left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ClassicalComparison

The GT comparison instruction.

op: ClassVar[str] = 'GT'
class pyquil.quilbase.ClassicalInclusiveOr(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int])[source]

Bases: pyquil.quilbase.LogicalBinaryOp

The IOR instruction.

op: ClassVar[str] = 'IOR'
class pyquil.quilbase.ClassicalLessEqual(target: pyquil.quilatom.MemoryReference, left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ClassicalComparison

The LE comparison instruction.

op: ClassVar[str] = 'LE'
class pyquil.quilbase.ClassicalLessThan(target: pyquil.quilatom.MemoryReference, left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ClassicalComparison

The LT comparison instruction.

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

Bases: pyquil.quilbase.AbstractInstruction

The LOAD instruction.

op = 'LOAD'
out() str[source]
class pyquil.quilbase.ClassicalMove(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.AbstractInstruction

The MOVE instruction.

WARNING: In pyQuil 2.0, the order of operands is as MOVE <target> <source>.

In pyQuil 1.9, the order of operands was MOVE <source> <target>. These have reversed.

op = 'MOVE'
out() str[source]
class pyquil.quilbase.ClassicalMul(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ArithmeticBinaryOp

The MUL instruction.

op: ClassVar[str] = 'MUL'
class pyquil.quilbase.ClassicalNeg(target: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.UnaryClassicalInstruction

The NEG instruction.

op: ClassVar[str] = 'NEG'
class pyquil.quilbase.ClassicalNot(target: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.UnaryClassicalInstruction

The NOT instruction.

op: ClassVar[str] = 'NOT'
class pyquil.quilbase.ClassicalStore(target: str, left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.AbstractInstruction

The STORE instruction.

op = 'STORE'
out() str[source]
class pyquil.quilbase.ClassicalSub(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int, float])[source]

Bases: pyquil.quilbase.ArithmeticBinaryOp

The SUB instruction.

op: ClassVar[str] = 'SUB'
class pyquil.quilbase.Declare(name: str, memory_type: str, memory_size: int = 1, shared_region: Optional[str] = None, offsets: Optional[Iterable[Tuple[int, str]]] = None)[source]

Bases: pyquil.quilbase.AbstractInstruction

A DECLARE directive.

This is printed in Quil as:

DECLARE <name> <memory-type> (SHARING <other-name> (OFFSET <amount> <type>)* )?
asdict() Dict[str, Union[Iterable[Tuple[int, str]], str, None, int]][source]
out() str[source]
class pyquil.quilbase.DefCalibration(name: str, parameters: List[Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex]], qubits: List[Union[pyquil.quilatom.Qubit, pyquil.quilatom.FormalArgument]], instrs: List[pyquil.quilbase.AbstractInstruction])[source]

Bases: pyquil.quilbase.AbstractInstruction

out() str[source]
class pyquil.quilbase.DefFrame(frame: pyquil.quilatom.Frame, direction: Union[str, NoneType] = None, initial_frequency: Union[float, NoneType] = None, hardware_object: Union[str, NoneType] = None, sample_rate: Union[float, NoneType] = None, center_frequency: Union[float, NoneType] = None, enable_raw_capture: Union[str, NoneType] = None, channel_delay: Union[float, NoneType] = None)[source]

Bases: pyquil.quilbase.AbstractInstruction

center_frequency: Optional[float] = None

The ‘center’ frequency of the frame, used for detuning arithmetic.

channel_delay: Optional[float] = None

The amount to delay this frame, to account for hardware signal offsets [seconds].

direction: Optional[str] = None

The direction of the frame, i.e. ‘tx’ or ‘rx’.

enable_raw_capture: Optional[str] = None

A flag signalling that raw capture is enabled for this frame.

frame: pyquil.quilatom.Frame

The frame being defined.

hardware_object: Optional[str] = None

The name of the hardware object associated to the frame.

initial_frequency: Optional[float] = None

The initial frequency of the frame.

out() str[source]
sample_rate: Optional[float] = None

The sample rate of the frame [Hz].

class pyquil.quilbase.DefGate(name: str, matrix: Union[List[List[Any]], numpy.ndarray, numpy.matrix], parameters: Optional[List[pyquil.quilatom.Parameter]] = None)[source]

Bases: pyquil.quilbase.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() Union[Callable[[...], pyquil.quilbase.Gate], Callable[[...], Callable[[...], pyquil.quilbase.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.

num_args() int[source]
Returns

The number of qubit arguments the gate takes.

out() str[source]

Prints a readable Quil string representation of this gate.

Returns

String representation of a gate

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

Bases: pyquil.quilbase.DefGate

Records a gate definition as the exponentiation of a PauliSum.

num_args() int[source]
Returns

The number of qubit arguments the gate takes.

out() str[source]

Prints a readable Quil string representation of this gate.

Returns

String representation of a gate

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

Bases: pyquil.quilbase.AbstractInstruction

out() str[source]
class pyquil.quilbase.DefPermutationGate(name: str, permutation: Union[List[Union[int, numpy.int64]], numpy.ndarray])[source]

Bases: pyquil.quilbase.DefGate

num_args() int[source]
Returns

The number of qubit arguments the gate takes.

out() str[source]

Prints a readable Quil string representation of this gate.

Returns

String representation of a gate

class pyquil.quilbase.DefWaveform(name: str, parameters: List[pyquil.quilatom.Parameter], entries: List[Union[numbers.Complex, pyquil.quilatom.Expression]])[source]

Bases: pyquil.quilbase.AbstractInstruction

out() str[source]
class pyquil.quilbase.DelayFrames(frames: List[pyquil.quilatom.Frame], duration: float)[source]

Bases: pyquil.quilbase.AbstractInstruction

out() str[source]
class pyquil.quilbase.DelayQubits(qubits: List[Union[pyquil.quilatom.Qubit, pyquil.quilatom.FormalArgument]], duration: float)[source]

Bases: pyquil.quilbase.AbstractInstruction

out() str[source]
class pyquil.quilbase.Fence(qubits: List[Union[pyquil.quilatom.Qubit, pyquil.quilatom.FormalArgument]])[source]

Bases: pyquil.quilbase.AbstractInstruction

out() str[source]
class pyquil.quilbase.FenceAll[source]

Bases: pyquil.quilbase.SimpleInstruction

The FENCE instruction.

op: ClassVar[str] = 'FENCE'
class pyquil.quilbase.Gate(name: str, params: Iterable[Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex]], qubits: Iterable[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument]])[source]

Bases: pyquil.quilbase.AbstractInstruction

This is the pyQuil object for a quantum gate instruction.

controlled(control_qubit: Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int, Sequence[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]]]) pyquil.quilbase.Gate[source]

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

dagger() pyquil.quilbase.Gate[source]

Add the DAGGER modifier to the gate.

forked(fork_qubit: Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int], alt_params: List[Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex]]) pyquil.quilbase.Gate[source]

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

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.Halt[source]

Bases: pyquil.quilbase.SimpleInstruction

The HALT instruction.

op: ClassVar[str] = 'HALT'
class pyquil.quilbase.Jump(target: Union[pyquil.quilatom.Label, pyquil.quilatom.LabelPlaceholder])[source]

Bases: pyquil.quilbase.AbstractInstruction

Representation of an unconditional jump instruction (JUMP).

out() str[source]
class pyquil.quilbase.JumpConditional(target: Union[pyquil.quilatom.Label, pyquil.quilatom.LabelPlaceholder], condition: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.AbstractInstruction

Abstract representation of an conditional jump instruction.

op: ClassVar[str]
out() str[source]
class pyquil.quilbase.JumpTarget(label: Union[pyquil.quilatom.Label, pyquil.quilatom.LabelPlaceholder])[source]

Bases: pyquil.quilbase.AbstractInstruction

Representation of a target that can be jumped to.

out() str[source]
class pyquil.quilbase.JumpUnless(target: Union[pyquil.quilatom.Label, pyquil.quilatom.LabelPlaceholder], condition: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.JumpConditional

The JUMP-UNLESS instruction.

op: ClassVar[str] = 'JUMP-UNLESS'
class pyquil.quilbase.JumpWhen(target: Union[pyquil.quilatom.Label, pyquil.quilatom.LabelPlaceholder], condition: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.JumpConditional

The JUMP-WHEN instruction.

op: ClassVar[str] = 'JUMP-WHEN'
class pyquil.quilbase.LogicalBinaryOp(left: pyquil.quilatom.MemoryReference, right: Union[pyquil.quilatom.MemoryReference, int])[source]

Bases: pyquil.quilbase.AbstractInstruction

The abstract class for binary logical classical instructions.

op: ClassVar[str]
out() str[source]
class pyquil.quilbase.Measurement(qubit: Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument], classical_reg: Optional[pyquil.quilatom.MemoryReference])[source]

Bases: pyquil.quilbase.AbstractInstruction

This is the pyQuil object for a Quil measurement instruction.

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.Nop[source]

Bases: pyquil.quilbase.SimpleInstruction

The NOP instruction.

op: ClassVar[str] = 'NOP'
class pyquil.quilbase.Pragma(command: str, args: Iterable[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int, str]] = (), freeform_string: str = '')[source]

Bases: pyquil.quilbase.AbstractInstruction

A PRAGMA instruction.

This is printed in QUIL as:

PRAGMA <command> <arg1> <arg2> ... <argn> "<freeform_string>"
out() str[source]
class pyquil.quilbase.Pulse(frame: pyquil.quilatom.Frame, waveform: Union[pyquil.quilatom.WaveformReference, pyquil.quilatom.TemplateWaveform], nonblocking: bool = False)[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.RawCapture(frame: pyquil.quilatom.Frame, duration: float, memory_region: pyquil.quilatom.MemoryReference, nonblocking: bool = False)[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.RawInstr(instr_str: str)[source]

Bases: pyquil.quilbase.AbstractInstruction

A raw instruction represented as a string.

out() str[source]
class pyquil.quilbase.Reset[source]

Bases: pyquil.quilbase.SimpleInstruction

The RESET instruction.

op: ClassVar[str] = 'RESET'
class pyquil.quilbase.ResetQubit(qubit: Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument])[source]

Bases: pyquil.quilbase.AbstractInstruction

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

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.SetFrequency(frame: pyquil.quilatom.Frame, freq: Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex])[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.SetPhase(frame: pyquil.quilatom.Frame, phase: Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex])[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.SetScale(frame: pyquil.quilatom.Frame, scale: Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex])[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.ShiftFrequency(frame: pyquil.quilatom.Frame, freq: Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex])[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.ShiftPhase(frame: pyquil.quilatom.Frame, phase: Union[pyquil.quilatom.Expression, pyquil.quilatom.MemoryReference, numpy.int64, int, float, complex])[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.SimpleInstruction[source]

Bases: pyquil.quilbase.AbstractInstruction

Abstract class for simple instructions with no arguments.

op: ClassVar[str]
out() str[source]
class pyquil.quilbase.SwapPhase(frameA: pyquil.quilatom.Frame, frameB: pyquil.quilatom.Frame)[source]

Bases: pyquil.quilbase.AbstractInstruction

get_qubits(indices: bool = True) Set[Union[pyquil.quilatom.Qubit, pyquil.quilatom.QubitPlaceholder, pyquil.quilatom.FormalArgument, int]][source]
out() str[source]
class pyquil.quilbase.UnaryClassicalInstruction(target: pyquil.quilatom.MemoryReference)[source]

Bases: pyquil.quilbase.AbstractInstruction

The abstract class for unary classical instructions.

op: ClassVar[str]
out() str[source]
class pyquil.quilbase.Wait[source]

Bases: pyquil.quilbase.SimpleInstruction

The WAIT instruction.

op: ClassVar[str] = 'WAIT'