Skip to main content
IBM Quantum Platform

ControlFlowOp

class qiskit.circuit.ControlFlowOp(*args, **kwargs)

GitHub

Bases: Instruction, ABC

Clase abstracta para encapsular todas las operaciones de flujo de control.

Todas las subclases de ControlFlowOp tienen un atributo interno blocksque expone los subcircuitos internos utilizados en los diferentes bloques del flujo de control.

Obsoleto desde la versión 1.3

Los parámetros duration y unit están obsoletos desde Qiskit 1.3, y serán eliminados en 2.0 o posteriores. La duración de una instrucción se define en un objeto Target del backend.

Parámetros

  • name (str) – nombre de la instrucción
  • num_qubits (int) – anchura del qubit de instrucción
  • num_clbits (int) – ancho de clbit de la instrucción
  • params (list[int|float|complex|str|ndarray|list|ParameterExpression]) – lista de parámetros
  • label (str or None) – Una etiqueta opcional para identificar la instrucción.

Eleva

  • CircuitError - cuando el registro no tiene el formato correcto.
  • TypeError - cuando se proporciona la etiqueta opcional, pero no es una cadena.

Atributos

base_class

Obtiene la clase base de esta instrucción. Está garantizado que se encuentra en el árbol de herencia de self.

La "clase base" de una instrucción es la clase más baja en su árbol de herencia con la que el objeto debe considerarse totalmente compatible para aplicaciones de circuito _all_. Por lo general, esto significa que la subclase se define únicamente para ofrecer algún tipo de comodidad al programador con respecto a la clase base, y la clase base es la "verdadera" clase desde el punto de vista del comportamiento. En particular, no debe anular base_class si está definiendo una versión personalizada de una instrucción que será implementada de forma diferente por el hardware, como una estrategia de medida alternativa, o una versión de una puerta parametrizada con un conjunto particular de parámetros con el propósito de distinguirla en un archivo Target de la puerta parametrizada completa.

Esto suele ser exactamente equivalente a type(obj), excepto en el caso de instancias únicas de instrucciones de biblioteca estándar. Estas instancias singleton son subclases especiales de su clase base, y esta propiedad devolverá esa base. Por ejemplo:

>>> isinstance(XGate(), XGate)
True
>>> type(XGate()) is XGate
False
>>> XGate().base_class is XGate
True

En general, no se debe confiar en la clase precisa de una instrucción; dentro de un circuito determinado, se espera que Instruction.name sea un discriminador más adecuado en la mayoría de las situaciones.

blocks

Tuple de QuantumCircuits que pueden ejecutarse como parte de la ejecución de este ControlFlowOp.

decompositions

Obtenga las descomposiciones de la instrucción de la SessionEquivalenceLibrary.

definition

Definición de retorno en términos de otras puertas básicas.

label

Etiqueta de instrucciones de devolución

mutable

Esta instancia es una instancia única mutable o no.

Si este atributo es False la instancia de la puerta es un singleton compartido y no es mutable.

name

Devuelve el nombre.

num_clbits

Devuelve el número de clbits.

num_qubits

Devuelve el número de qubits.

params

Los parámetros de este Instruction. Lo ideal es que sean ángulos de puerta.


Métodos

add_decomposition

add_decomposition(decomposition)

GitHub

Añade una descomposición de la instrucción a la SessionEquivalenceLibrary.

broadcast_arguments

broadcast_arguments(qargs, cargs)

GitHub

Validación de los argumentos.

Parámetros

  • qargs (List) – Lista de argumentos de bits cuánticos.
  • cargs (List) – Lista de argumentos clásicos de bits.

Cesiones

Tuple(List, List) - Una tupla con argumentos individuales.

Eleva

CircuitError - Si la entrada no es válida. Por ejemplo, el número de argumentos no coincide con las expectativas de la puerta.

copy

copy(name=None)

GitHub

Copia de la instrucción.

Parámetros

name (str) – nombre que se dará al circuito copiado, si None entonces el nombre permanece igual.

Devuelve

una copia de la instrucción actual, con el nombre actualizado si se proporcionó

Tipo de retorno

qiskit.circuit.Instruction

inverse

inverse(annotated=False)

GitHub

Invierta esta instrucción.

Si annotated es False, la instrucción inversa se implementa como una instrucción nueva con la definición invertida recursivamente.

Si annotated es True, la instrucción inversa se implementa como AnnotatedOperationy corresponde a la instrucción dada anotada con el "modificador inverso".

Las instrucciones especiales que heredan de Instruction pueden implementar su propia inversa (por ejemplo, T y Tdg, Barrier, etc.) En particular, pueden elegir cómo manejar el argumento annotated que puede incluir ignorarlo y devolver siempre una clase de puerta concreta si la inversa se define como una puerta estándar.

Parámetros

annotated (bool) – si se establece en True la puerta inversa de salida se devolverá como AnnotatedOperation.

Devuelve

La operación inversa.

Eleva

CircuitError - si la instrucción no es compuesta y no se ha implementado una inversa para ella.

is_parameterized

is_parameterized()

GitHub

Devuelve si el archivo Instruction contiene parámetros en tiempo de compilación.

iter_captured_stretches

iter_captured_stretches()

GitHub

Obtiene un iterador sobre las variables de tramo capturadas únicas en todos los bloques de esta construcción.

Tipo de retorno

Iterable [ expr.Stretch ]

iter_captured_vars

iter_captured_vars()

GitHub

Obtiene un iterador sobre las variables capturadas únicas en todos los bloques de esta construcción.

Tipo de retorno

Iterable [ expr.Var ]

repeat

repeat(n)

GitHub

Crea una instrucción que self se repite nn veces.

Parámetros

n (int) – Número de veces que se repite la instrucción

Devuelve

Contiene la definición.

Tipo de retorno

qiskit.circuit.Instruction

Eleva

CircuitError - Si n < 1.

replace_blocks

abstractmethod replace_blocks(blocks)

GitHub

Devuelve una nueva versión de este flujo de control con las operaciones blocks mapeadas a las nuevas dadas.

Normalmente se utiliza en un flujo de trabajo como:

existing_op = ...

def map_block(block: QuantumCircuit) -> QuantumCircuit:
    new_block = block.copy_empty_like()
    # ... do something to `new_block` ...
    return new_block

new_op = existing_op.replace_blocks(
    map_block(block) for block in existing_op.blocks
)

Es responsabilidad del llamador asegurarse de que los bloques mapeados se definen sobre un conjunto unificado de recursos del circuito, de forma similar a la construcción de un bloque ControlFlowOp utilizando su constructor por defecto.

Parámetros

blocks (Iterable[QuantumCircuit]) – los nuevos bloques de subcircuito a utilizar.

Devuelve

Nuevo ControlFlowOp con bloques sustituidos.

Tipo de retorno

ControlFlowOp

reverse_ops

reverse_ops()

GitHub

Para una instrucción compuesta, invierta el orden de las subinstrucciones.

Esto se hace invirtiendo recursivamente todas las subinstrucciones. No invierte ninguna puerta.

Devuelve

una nueva instrucción con

subinstrucciones invertidas.

Tipo de retorno

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

GitHub

Comparación suave entre puertas. Sus nombres, número de qubits y números de bits clásicos deben coincidir. El número de parámetros debe coincidir. Se compara cada parámetro. Si uno es un ParameterExpression entonces no se tiene en cuenta.

Parámetros

other (instruction) – otras instrucciones.

Devuelve

son auto y otros iguales hasta expresiones de parámetros.

Tipo de retorno

bool

to_mutable

to_mutable()

GitHub

Devuelve una copia mutable de esta puerta.

Este método devolverá una nueva copia mutable de esta instancia de puerta. Si se utiliza una instancia singleton, ésta será una nueva instancia única que puede mutar. Si la instancia ya es mutable será una deepcopy de esa instancia.

validate_parameter

validate_parameter(parameter)

GitHub

El parámetro de instrucción no tiene validación ni normalización.

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.