Skip to main content
IBM Quantum Platform

FermionicGate

class FermionicGate(name, num_modes, /, params=None, *, label=None)

Bases: Gate

La clase base para todas las puertas fermiónicas.

Para garantizar la coherencia, solo se pueden añadir subclases de esta clase de puerta a las instancias de FermionicCircuit. Por lo tanto, esta clase (en su mayor parte) hace las veces de tipo (por el momento).

Precaución

Dado que se trata de una subclase de, la Gate documentación de sus métodos puede hacer referencia a los qubits. Esas referencias deben interpretarse como referidas a los fermiones en el contexto de las instancias de esta subclase.

También puede ocurrir que algunos de los métodos heredados no siempre tengan sentido debido a esta reinterpretación. Ya te lo hemos advertido.

Parámetros

  • name (str) – El nombre de la puerta.
  • num_qubits – El número de qubits sobre los que actúa la puerta.
  • params (list | None) – Una lista de parámetros.
  • label (str | None) – Una etiqueta opcional para la puerta.
  • num_modes (int)

Atributos

num_modes

El número de modos fermiónicos sobre los que actúa esta puerta.

Atributos heredados

base_class

Obtén la clase base de esta instrucción. Esto figurará sin duda en el árbol genealógico de self.

La «clase base» de una instrucción es la clase más baja de su árbol de herencia con la que el objeto debe considerarse totalmente compatible para _todas_ las aplicaciones de circuitos. Esto suele significar que la subclase se define únicamente para facilitar el trabajo del programador con respecto a la clase base, y que la clase base es la «verdadera» clase desde el punto de vista del comportamiento. En concreto, no debes sobrescribir base_class si estás definiendo una versión personalizada de una instrucción que el hardware implementará de forma diferente, como una estrategia de medición alternativa o una versión de una puerta parametrizada con un conjunto concreto de parámetros con el fin de distinguirla en un Target de la puerta parametrizada completa.

A menudo, esto es exactamente equivalente a type(obj), salvo en el caso de las instancias únicas de las instrucciones de la biblioteca estándar. Estas instancias singleton son subclases especiales de su clase base, y esta propiedad devolverá dicha clase base. Por ejemplo:

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

En general, no debes basarte en la clase concreta de una instrucción; dentro de un circuito determinado, se espera que Instruction.name sea un criterio de distinción más adecuado en la mayoría de los casos.

decompositions

Consulta las descomposiciones de la instrucción en SessionEquivalenceLibrary.

definition

Define la función «return» en términos de otras puertas lógicas básicas.

label

Etiqueta con instrucciones de devolución

mutable

¿Es esta instancia una instancia única mutable o no?

Si este atributo está presente, la False 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 sería que fueran ángulos de compuerta.

Métodos del protocolo

_apply_unitary_

_apply_unitary_(vec, norb, nelec, copy)

Aplica esta puerta a un vector de estado de ffsim, implementando el protocolo de ffsim.

Este es el punto de entrada para la asignación de identidades del ffsim.SupportsApplyUnitary protocolo de ffsim (replicado localmente como SupportsApplyUnitary): supone que la puerta actúa sobre los modos 0..num_modes del vector de estado y delega en la función que tiene en cuenta la asignación ( _apply_unitary_placed_() véase SupportsApplyUnitaryPlaced), que implementa cada puerta fermiónica concreta. Consulta ese método para conocer la semántica de ( vec incluido si se acepta un vector None ), norb, nelec, y copy.

Subidas

NotImplementedError – si esta puerta no implementa _apply_unitary_placed_ (un «a» sin tipo, utilizado FermionicGate únicamente como marcador de tipo) y, por lo tanto, no puede aplicarse a un vector de estado.

Parámetros

Tipo de retorno

np.ndarray

Métodos heredados

add_decomposition

add_decomposition(decomposition)

Añade un desglose de la instrucción a la página « SessionEquivalenceLibrary ».

broadcast_arguments

broadcast_arguments(qargs, cargs)

Validación y tratamiento de los argumentos y su relación.

Por ejemplo, significa cx([q[0],q[1]], q[2]) cx(q[0], q[2]); cx(q[1], q[2]). Este método devuelve los argumentos agrupados correctamente. En el ejemplo que se ofrece:

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

Las normas generales de emisión son las siguientes:

  • 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 relacionados con los bits cuánticos.
  • cargs (list) – Lista de argumentos clásicos de bits.

Devuelve

Una tupla con un único argumento.

Subidas

CircuitError – Si la entrada no es válida. Por ejemplo, el número de argumentos no coincide con lo esperado por la puerta lógica.

Tipo de retorno

Iterable [ tupla [ lista, lista ]]

control

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

Devuelve la versión controlada de sí misma.

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 ha quedado obsoleto a partir de Qiskit 2.3. Se eliminará en Qiskit 3.0. El método Gate.control () ya no admite annotated=None. El nuevo valor por defecto es annotated=True, lo que representa la puerta controlada como un AnnotatedOperation (a menos que ya exista una clase específica para puertas controladas). Puedes establecer explícitamente annotated=False para mantener el comportamiento anterior. No obstante, se recomienda utilizar «annotated=True», ya que así se aplaza la construcción del circuito controlado hasta la fase de transpilación y, además, permite realizar optimizaciones adicionales de las puertas controladas (lo que suele dar lugar a circuitos de mayor calidad).

Parámetros

  • num_ctrl_qubits (int) – Número de controles que se deben añadir. El valor predeterminado es 1.
  • label (str | None) – Etiqueta opcional para la puerta. 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 como una cadena de bits (p. ej., "110"). Si None, se establece por defecto en el estado de «todos unos 2**num_ctrl_qubits - 1».
  • annotated (bool | None) – Indica si la puerta controlada debe implementarse como una puerta controlada o como una operación anotada. Si None, se considera como False.

Devuelve

Una versión controlada de esta puerta.

Subidas

QiskitError – no válido o num_ctrl_qubits ctrl_state.

copy

copy(name=None)

Copia de las instrucciones.

Parámetros

name (str) – nombre que se le dará al circuito copiado; si entonces None el nombre sigue siendo el mismo.

Devuelve

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

Tipo de retorno

qiskit.circuit.Instruction

inverse

inverse(annotated=False)

Invierte esta instrucción.

Si «annotated» es «False», la instrucción inversa se implementa como una nueva instrucción con la definición invertida de forma recursiva.

Si «annotated» es «True», la instrucción inversa se implementa como AnnotatedOperation, y se corresponde con 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 concreto, pueden elegir cómo gestionar el argumento, lo que annotated 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.

Subidas

CircuitError – si la instrucción no es compuesta y no se ha implementado su inversa.

is_parameterized

is_parameterized()

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

power

power(exponent, annotated=False)

Eleva esta puerta a la potencia de exponent.

Se implementa como una puerta unitaria (ref. UnitaryGate) o como una operación comentada (véase AnnotatedOperation). En el caso de varias puertas lógicas estándar, como, por ejemplo RXGate, cuando la potencia de una puerta se puede expresar en términos de otra puerta lógica estándar que se devuelve directamente.

Parámetros

  • exponent (float) – la capacidad de levantar la verja para
  • 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 que implementa gate^exponent

Subidas

CircuitError – Si la puerta no es unitaria

repeat

repeat(n)

Crea una instrucción que se repite nnself veces.

Parámetros

n (int) – Número de veces que hay que repetir la instrucción

Devuelve

Que contiene la definición.

Tipo de retorno

qiskit.circuit.Instruction

Subidas

CircuitError – Si n < 1.

reverse_ops

reverse_ops()

En el caso de una instrucción compuesta, invierte el orden de las subinstrucciones.

Esto se consigue invirtiendo de forma recursiva todas las subinstrucciones. No invierte ninguna puerta lógica.

Devuelve

una nueva instrucción con

subinstrucciones invertidas.

Tipo de retorno

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

Comparación suave entre puertas. Sus nombres, el número de qubits y el número de bits clásicos deben coincidir. El número de parámetros debe coincidir. Se comparan todos los parámetros. Si se es « ParameterExpression », entonces no se tiene en cuenta.

Parámetros

other (instruction) – otras instrucciones.

Devuelve

«self» y «other» son iguales en las expresiones de parámetros.

Tipo de retorno

bool

to_matrix

to_matrix()

Devuelve un objeto Numpy.array que representa la matriz unitaria de la puerta.

Devuelve

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

Tipo de retorno

np.ndarray

Subidas

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()

Devuelve una copia modificable de esta puerta.

Este método devolverá una nueva copia modificable de esta instancia de puerta. Si se utiliza una instancia singleton, se tratará de una nueva instancia única que se podrá modificar. Si la instancia ya es mutable, se creará una copia profunda de dicha instancia.

validate_parameter

validate_parameter(parameter)

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

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