NLocal
class qiskit.circuit.library.NLocal(num_qubits=None, rotation_blocks=None, entanglement_blocks=None, entanglement=None, reps=1, insert_barriers=False, parameter_prefix='θ', overwrite_block_parameters=True, skip_final_rotation_layer=False, skip_unentangled_qubits=False, initial_state=None, name='nlocal', flatten=None)
Bases: BlueprintCircuit
La clase de circuito n-local.
La estructura del circuito n-local son capas alternas de rotación y entrelazamiento. En ambas capas, los bloques de circuitos parametrizados actúan sobre el circuito de forma definida. En la capa de rotación, los bloques se aplican apilados unos sobre otros, mientras que en la capa de enredo según la estrategia entanglement . Los bloques del circuito pueden tener tamaños arbitrarios (menor igual al número de qubits del circuito). Cada capa se repite reps veces, y por defecto se añade una capa final de rotación.
Por ejemplo, un bloque de rotación en 2 qubits y un bloque de entrelazamiento en 4 qubits utilizando 'linear' entanglement produce el siguiente circuito.
┌──────┐ ░ ┌──────┐ ░ ┌──────┐
┤0 ├─░─┤0 ├──────────────── ... ─░─┤0 ├
│ Rot │ ░ │ │┌──────┐ ░ │ Rot │
┤1 ├─░─┤1 ├┤0 ├──────── ... ─░─┤1 ├
├──────┤ ░ │ Ent ││ │┌──────┐ ░ ├──────┤
┤0 ├─░─┤2 ├┤1 ├┤0 ├ ... ─░─┤0 ├
│ Rot │ ░ │ ││ Ent ││ │ ░ │ Rot │
┤1 ├─░─┤3 ├┤2 ├┤1 ├ ... ─░─┤1 ├
├──────┤ ░ └──────┘│ ││ Ent │ ░ ├──────┤
┤0 ├─░─────────┤3 ├┤2 ├ ... ─░─┤0 ├
│ Rot │ ░ └──────┘│ │ ░ │ Rot │
┤1 ├─░─────────────────┤3 ├ ... ─░─┤1 ├
└──────┘ ░ └──────┘ ░ └──────┘
| |
+---------------------------------+
repeated reps timesSi se especifica, se pueden insertar barreras entre cada bloque. Si se proporciona un objeto de estado inicial, se añade delante del NLocal.
La función n_local() construye un circuito funcionalmente equivalente, pero más rápido.
La clase qiskit.circuit.library.n_local.n_local.NLocal está obsoleta a partir de Qiskit 2.1. Se eliminará en Qiskit 3.0. Esto también se aplica a las subclases NLocal. Utilice en su lugar la función correspondiente del módulo qiskit.circuit.library.n_local.
Parámetros
- num_qubits (int | None) – El número de qubits del circuito.
- rotation_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Los bloques utilizados en las capas de rotación. Si se pasan varias, éstas se aplicarán una tras otra (como nuevas subcapas).
- entanglement_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Los bloques utilizados en las capas de enredo. Si se pasan varios, se aplicarán uno tras otro. Para utilizar enredos diferentes para las subcapas, véase
get_entangler_map(). - entanglement (list[int] | list[list[int]] | None) – Los índices que especifican sobre qué qubits actúan los bloques de entrada. Si
None, los bloques de enredo se aplican en la parte superior del circuito. - reps (int) – Especifica la frecuencia con la que se repiten los bloques de rotación y los bloques de enredo.
- insert_barriers (bool) – Si
True, se insertan barreras entre cada capa. SiFalse, no se inserta ninguna barrera. - parameter_prefix (str) – El prefijo utilizado si se generan parámetros por defecto.
- overwrite_block_parameters (bool |list[list[Parameter]]) – Si los parámetros de los bloques añadidos deben sobrescribirse. Si
False, los parámetros de los bloques no se modifican. - skip_final_rotation_layer (bool) – Si se añade una capa de rotación final al circuito.
- skip_unentangled_qubits (bool) – Si
True, las puertas de rotación sólo actúan sobre los qubits que están enredados. SiFalse, las puertas de rotación actúan sobre todos los qubits. - initial_state (QuantumCircuit | None) – A
QuantumCircuitque puede utilizarse para describir un estado inicial añadido al circuito NLocal. - name (str) – El nombre del circuito.
- flatten (bool | None) – Establézcalo en
Truepara obtener un circuito plano en lugar de anidarlo dentro de múltiples capas de objetos puerta. Por defecto actualmente el contenido del circuito de salida se envolverá en objetos anidados para una visualización más limpia. Sin embargo, si está utilizando este circuito para algo más que la visualización, se recomienda encarecidamente establecer esta bandera enTruepara evitar una gran sobrecarga de rendimiento para la vinculación de parámetros.
Eleva
- ValueError - Si el parámetro
repses menor o igual que 0. - TypeError - Si el parámetro
repsno es un valor int.
Atributos
entanglement
Consigue la estrategia de enredo.
Devuelve
La estrategia de enredo, véase get_entangler_map() para más detalles sobre cómo se interpreta el formato.
entanglement_blocks
Los bloques en las capas de enredo.
Devuelve
Los bloques en las capas de enredo.
flatten
Devuelve si el circuito está envuelto en puertas/instrucciones anidadas o aplanado.
initial_state
Devuelve el estado inicial que se añade delante del circuito n-local.
Devuelve
El estado inicial.
insert_barriers
Si se insertan o no barreras entre las capas.
Devuelve
Truesi se intercalan barreras entre las capas, False en caso contrario.
num_layers
Devuelve el número de capas del circuito n-local.
Devuelve
El número de capas del circuito.
num_parameters_settable
El número total de parámetros que pueden ajustarse a valores distintos.
Esto no cambia cuando los parámetros están vinculados o se intercambian por los mismos parámetros, y por lo tanto es diferente de num_parameters que cuenta el número de objetos únicos en el circuito Parameter en el circuito.
Devuelve
El número de parámetros disponibles originalmente en el circuito.
Esta cantidad no requiere que el circuito esté construido todavía.
num_qubits
Devuelve el número de qubits de este circuito.
Devuelve
El número de qubits.
ordered_parameters
Los parámetros utilizados en el circuito subyacente.
Esto incluye valores flotantes y duplicados.
Ejemplos
>>> # prepare circuit ...
>>> print(nlocal)
┌───────┐┌──────────┐┌──────────┐┌──────────┐
q_0: ┤ Ry(1) ├┤ Ry(θ[1]) ├┤ Ry(θ[1]) ├┤ Ry(θ[3]) ├
└───────┘└──────────┘└──────────┘└──────────┘
>>> nlocal.parameters
{Parameter(θ[1]), Parameter(θ[3])}
>>> nlocal.ordered_parameters
[1, Parameter(θ[1]), Parameter(θ[1]), Parameter(θ[3])]Devuelve
Los parámetros objetos utilizados en el circuito.
parameter_bounds
Los límites de los parámetros no vinculados en el circuito.
Devuelve
Una lista de pares que indican los límites, como (inferior, superior). Ninguno indica un parámetro no limitado en la dirección correspondiente. Si se devuelve None , el problema es totalmente ilimitado.
preferred_init_points
Los puntos iniciales de los parámetros. Puede almacenarse como conjetura inicial en la optimización.
Devuelve
Los valores iniciales de los parámetros, o Ninguno, si no se ha establecido ninguno.
reps
El número de veces que se repiten la rotación y el bloque de enredo.
Devuelve
El número de repeticiones.
rotation_blocks
Los bloques de las capas de rotación.
Devuelve
Los bloques de las capas de rotación.
name
Tipo: str
Un nombre legible para el circuito.
Ejemplo
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuitMétodos
add_layer
add_layer(other, entanglement=None, front=False)
Añade otra capa a la NLocal.
Parámetros
- other (QuantumCircuit |qiskit.circuit.Instruction) – La capa a componer, puede ser otro NLocal, una Instrucción o Puerta, o un QuantumCircuit.
- entanglement (list[int] | str |list[list[int]] | None) – Los índices de enredo o qubit.
- front (bool) – Si es True,
otherse añade al principio, si no, al final.
Devuelve
self, de modo que es posible realizar composiciones encadenadas.
Eleva
TypeError - Si otro no es compatible, es decir, no es una Instrucción y no tiene un método to_instruction.
Tipo de retorno
assign_parameters
assign_parameters(parameters, inplace=False, **kwargs)
Asignar parámetros al circuito n-local.
Este método también permite pasar una lista en lugar de un diccionario. Si se pasa una lista, ésta debe tener la misma longitud que el número de parámetros no vinculados del circuito. Los parámetros se asignan en el orden de los parámetros en ordered_parameters().
Devuelve
Una copia del circuito NLocal con los parámetros especificados.
Eleva
AttributeError - Si los parámetros se dan como lista y no coinciden con el número de parámetros.
Parámetros
- parameters (Mapping[Parameter, ParameterExpression |float] | Sequence[ParameterExpression |float])
- inplace (bool)
Tipo de retorno
QuantumCircuit | Ninguno
get_entangler_map
get_entangler_map(rep_num, block_num, num_block_qubits)
Obtenga el mapa de enredos para en la repetición rep_num y el bloque block_num.
El mapa de enredos del bloque actual se obtiene a partir del valor de self.entanglement. A continuación se enumeran los distintos casos, donde i y j denotan el número de repetición y el número de bloque, respectivamente, y n el número de qubits del bloque.
tipo de enredo | mapa de enredos |
|---|---|
None | [[0, ..., n - 1]] |
str (p. ej 'full'.) | la conectividad especificada en n los qubits |
List[int] | [entanglement] |
List[List[int]] | entanglement |
List[List[List[int]]] | entanglement[i] |
List[List[List[List[int]]]] | entanglement[i][j] |
List[str] | la conectividad especificada en entanglement[i] |
List[List[str]] | la conectividad especificada en entanglement[i][j] |
Callable[int, str] | Igual que List[str] |
Callable[int, List[List[int]]] | Igual que List[List[List[int]]] |
Tenga en cuenta que todos los índices deben tomarse modulando la longitud de la matriz sobre la que actúan, es decir, no se producirá ningún error de índice fuera de los límites, sino que se reitera desde el principio de la lista.
Parámetros
- rep_num (int) – La repetición actual en la que nos encontramos.
- block_num (int) – El número de bloque dentro de las capas de enredo.
- num_block_qubits (int) – El número de qubits del bloque.
Devuelve
El mapa de enredos para el bloque actual en la repetición actual.
Eleva
ValueError - Si el valor de entanglement no se ha podido asignar a un mapa de enredos correspondiente.
Tipo de retorno
Secuencia[* Secuencia*[ int ]]
get_unentangled_qubits
get_unentangled_qubits()
Obtiene los índices de qubits no enredados en un conjunto.
Devuelve
Los qubits no enredados.
Tipo de retorno