Skip to main content
IBM Quantum Platform

ECRGate

class qiskit.circuit.library.ECRGate(*args, _force_mutable=False, **kwargs)

GitHub

Bases: SingletonGate

Una puerta de resonancia cruzada con eco.

Esta puerta es de máximo enredo y es equivalente a una CNOT hasta pre-rotaciones de un solo qubit. El procedimiento de eco mitiga algunos términos no deseados (términos distintos de ZX) para cancelarlos en un experimento. Más concretamente, esta puerta implementa 12(IXXY)\frac{1}{\sqrt{2}}(IX-XY).

Puede aplicarse QuantumCircuit con el método ecr() método.

Símbolo del circuito:

                       global phase: 7π/4
     ┌─────────┐            ┌───┐      ┌───┐
q_0: ┤0        ├       q_0: ┤ S ├───■──┤ X ├
     │   ECR   │   =        ├───┴┐┌─┴─┐└───┘
q_1: ┤1        ├       q_1: ┤ √X ├┤ X ├─────
     └─────────┘            └────┘└───┘

Representación matricial:

ECR q0,q1=12(010i10i00i01i010)ECR\ q_0, q_1 = \frac{1}{\sqrt{2}} \begin{pmatrix} 0 & 1 & 0 & i \\ 1 & 0 & -i & 0 \\ 0 & i & 0 & 1 \\ -i & 0 & 1 & 0 \end{pmatrix}
Nota

En la convención de Qiskit, los índices de qubit más altos son más significativos (convención little endian). En el ejemplo anterior aplicamos la puerta sobre ( q_0, q_1 ) que da como resultado el orden del tensor XZX \otimes Z. En cambio, si la aplicamos sobre ( q_1, q_0 ), la matriz será ZXZ \otimes X :

     ┌─────────┐
q_0: ┤1        ├
     │   ECR   │
q_1: ┤0        ├
     └─────────┘
ECR q0,q1=12(001i00i11i00i100)ECR\ q_0, q_1 = \frac{1}{\sqrt{2}} \begin{pmatrix} 0 & 0 & 1 & i \\ 0 & 0 & i & 1 \\ 1 & -i & 0 & 0 \\ -i & 1 & 0 & 0 \end{pmatrix}

Parámetros

label - Una etiqueta opcional para la puerta.


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.

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 y tratamiento de los argumentos y su relación.

Por ejemplo, cx([q[0],q[1]], q[2]) significa cx(q[0], q[2]); cx(q[1], q[2]). Este método devuelve los argumentos en la agrupación correcta. En el ejemplo dado:

in: [[q[0],q[1]], q[2]],[]
outs: [q[0], q[2]], []
      [q[1], q[2]], []

Las normas generales de difusión son:

  • Si len(qargs) == 1:

    [q[0], q[1]] -> [q[0]],[q[1]]
  • Si len(qargs) == 2:

    [[q[0], q[1]], [r[0], r[1]]] -> [q[0], r[0]], [q[1], r[1]]
    [[q[0]], [r[0], r[1]]]       -> [q[0], r[0]], [q[0], r[1]]
    [[q[0], q[1]], [r[0]]]       -> [q[0], r[0]], [q[1], r[0]]
  • Si len(qargs) >= 3:

    [q[0], q[1]], [r[0], r[1]],  ...] -> [q[0], r[0], ...], [q[1], r[1], ...]

Parámetros

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

Devuelve

Una tupla con argumentos únicos.

Eleva

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

Tipo de retorno

Iterable [ tupla [ lista, lista ]]

control

control(num_ctrl_qubits=1, label=None, ctrl_state=None, annotated=None)

GitHub

Devuelve la versión controlada de sí mismo.

La puerta controlada se implementa como ControlledGate cuando annotated es False, y como AnnotatedOperation cuando annotated es True.

Obsoleto desde la versión 2.3

qiskit.circuit.gate.Gate.control()El argumento annotated está obsoleto a partir de Qiskit 2.3. Se eliminará en Qiskit 3.0. El método Gate.control () ya no acepta annotated=None. El nuevo valor predeterminado es annotated=True, que representa la puerta controlada como una puerta controlada ( AnnotatedOperation ), a menos que ya exista una clase de puerta controlada dedicada. Puede establecer explícitamente annotated=False para conservar el comportamiento anterior. Sin embargo, se recomienda utilizar annotated=True, ya que aplaza la construcción del circuito controlado al transpilador y, además, permite optimizaciones adicionales de la puerta controlada (lo que normalmente da lugar a circuitos de mayor calidad).

Parámetros

  • num_ctrl_qubits (int) – Número de controles que se van a añadir. El valor predeterminado es 1.
  • label (str | None) – Etiqueta de puerta opcional. El valor predeterminado es None. Se ignora si la puerta controlada se implementa como una operación anotada.
  • ctrl_state (int |str | None) – El estado de control de la puerta, especificado como un número entero o una cadena de bits (por ejemplo, "110"). Si None, se establece por defecto en el estado «todos 2**num_ctrl_qubits - 1 unos».
  • annotated (bool | None) – Indica si la puerta controlada debe implementarse como una puerta controlada o como una operación anotada. Si None, se trata como False.

Devuelve

Una versión controlada de esta puerta.

Eleva

QiskitError – no válido num_ctrl_qubits o ctrl_state.

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

Devuelve la puerta ECR inversa (ella misma).

Parámetros

annotated (bool) – cuando se establece en True, esto se utiliza normalmente para devolver un AnnotatedOperation con un modificador inverso en lugar de un Gate. Sin embargo, para esta clase se ignora este argumento ya que esta puerta es autoinversible.

Devuelve

puerta inversa (autoinversa).

Tipo de retorno

ECRGate

is_parameterized

is_parameterized()

GitHub

Devuelve si Instruction contiene parámetros de compilación.

power

power(exponent, annotated=False)

GitHub

Eleva esta puerta al poder de exponent.

Implementado como puerta unitaria (ref. UnitaryGate) o como una operación anotada (ref. AnnotatedOperation). En el caso de varias puertas estándar, como por ejemplo RXGatecuando la potencia de una puerta puede expresarse en términos de otra puerta estándar que se devuelve directamente.

Parámetros

  • exponent (float) – el poder de elevar la puerta a
  • annotated (bool) – indica si la puerta de alimentación puede implementarse como una operación anotada. En el caso de varias puertas estándar, como por ejemplo RXGateeste argumento se ignora cuando la potencia de una puerta puede expresarse en términos de otra puerta estándar.

Devuelve

Una operación de aplicación gate^exponent

Eleva

CircuitError - Si la puerta no es unitaria

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.

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_matrix

to_matrix()

GitHub

Devuelve un Numpy.array para la matriz unitaria de la puerta.

Devuelve

si la subclase Gate tiene una definición de matriz.

Tipo de retorno

np.ndarray

Eleva

CircuitError - Si una subclase de Gate no implementa este método, se producirá una excepción cuando se llame a este método de la clase base.

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

Los parámetros de la puerta deben ser int, float o ParameterExpression

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