Skip to main content
IBM Quantum Platform

RCCXGate

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

GitHub

Bases: SingletonGate

La puerta simplificada de Toffoli, también llamada puerta de Margolus.

La puerta de Toffoli simplificada implementa la puerta de Toffoli hasta fases relativas. Esta implementación requiere tres compuertas CX, que es la cantidad mínima posible, como se muestra en https://arxiv.org/abs/quant-ph/0312225. Nótese que el Toffoli simplificado no es equivalente al Toffoli. Pero se puede utilizar en lugares donde la puerta de Toffoli no se disputa de nuevo.

Esta aplicación concreta es de https://arxiv.org/abs/1508.03273 el recuadro discontinuo de la Fig. 3.

Se puede aplicar a un QuantumCircuit mediante el rccx() método.

Cree una nueva puerta CCX simplificada.


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 de bits clásicos.

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 lo que cabría esperar de la puerta lógica.

Tipo de retorno

Iterable [ tupla [ lista, lista ]]

control

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

GitHub

Devuelve una versión controlada de la puerta RCCX.

En el caso de un único qubit de control, la puerta controlada utiliza una descomposición compacta y exacta compuesta por un RC3XGate y un CSdgGate. Para un nuevo qubit de control cc, el primer control RCCX aa, el segundo control RCCX bb y el objetivo tt, se utiliza la identidad

C(RCCX)(c,a,b;t)=CS†(c,a) RC3X(c,a,b;t).C(\mathrm{RCCX})(c,a,b;t) = \mathrm{CS}^{\dagger}(c,a)\,\mathrm{RC3X}(c,a,b;t).

De este modo, se evita tener que controlar por separado las puertas T en la descomposición RCCX. Cuando hay más de un qubit de control, se utiliza la síntesis genérica de puertas controladas.

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 opcional de la puerta. El valor predeterminado es None.
  • ctrl_state (int |str | None) – El estado de control de la puerta, especificado como un número entero o una cadena de bits. Si None, se establece por defecto en el estado en el que todos los bits son unos.
  • annotated (bool | None) – Cuando hay más de un qubit de control, indica si se debe devolver una operación anotada. Se omite en el caso de un único qubit de control.

Devuelve

Una versión controlada de esta puerta.

Tipo de retorno

ControlledGate | AnnotatedOperation

copy

copy(name=None)

GitHub

Copia de la instrucción.

Parámetros

name (str) – nombre que se le dará al circuito copiado; si entonces None el nombre se mantiene 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

Invierte esta puerta lógica. La puerta RCCX es su propia inversa.

Parámetros

annotated (bool) – : cuando se establece en True, esto se suele utilizar para devolver un AnnotatedOperation con un modificador inverso establecido, en lugar de un concreto Gate. Sin embargo, en esta clase se ignora este argumento, ya que esta puerta es autoinversa.

Devuelve

puerta inversa (autoinversa).

Tipo de retorno

RCCXGate

is_parameterized

is_parameterized()

GitHub

Devuelve si el Instruction contiene parámetros de tiempo 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 para levantar la compuerta hasta
  • annotated (bool) – indica si la puerta de potencia puede implementarse como una operación anotada. En el caso de varias puertas estándar, como por ejemplo RXGate, este 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 debe repetir 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 generará 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.