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 classe de circuit n-local.
La structure du circuit n-local est constituée d'une alternance de couches de rotation et d'enchevêtrement. Dans les deux couches, des blocs de circuits paramétrés agissent sur le circuit d'une manière définie. Dans la couche de rotation, les blocs sont empilés les uns sur les autres, tandis que dans la couche d'enchevêtrement, ils sont appliqués selon la stratégie entanglement . Les blocs du circuit peuvent avoir des tailles arbitraires (la plus petite étant égale au nombre de qubits dans le circuit). Chaque couche est répétée reps fois et, par défaut, une couche de rotation finale est ajoutée.
Par exemple, un bloc de rotation sur 2 qubits et un bloc d'intrication sur 4 qubits utilisant l'intrication 'linear' donnent le circuit suivant.
┌──────┐ ░ ┌──────┐ ░ ┌──────┐
┤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 cela est spécifié, des barrières peuvent être insérées entre chaque bloc. Si un objet d'état initial est fourni, il est ajouté devant le NLocal.
La fonction n_local() construit un circuit fonctionnellement équivalent, mais plus rapidement.
La classe qiskit.circuit.library.n_local.n_local.NLocal est obsolète depuis Qiskit 2.1. Elle sera supprimée à Qiskit 3.0. Cela s'applique également aux sous-classes de NLocal. Utilisez plutôt la fonction correspondante du module qiskit.circuit.library.n_local.
Paramètres
- num_qubits (int | None) – Le nombre de qubits du circuit.
- rotation_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Les blocs utilisés dans les couches de rotation. Si plusieurs sont fournis, ils seront appliqués les uns après les autres (à la manière de nouvelles sous-couches).
- entanglement_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Les blocs utilisés dans les couches d'intrication. Si plusieurs sont fournis, ils seront appliqués les uns après les autres. Pour utiliser différents enchevêtrements pour les sous-couches, voir
get_entangler_map(). - entanglement (list[int] | list[list[int]] | None) – Les indices spécifiant sur quels qubits les blocs d'entrée agissent. Si
None, les blocs d'enchevêtrement sont appliqués en haut du circuit. - reps (int) – Spécifie la fréquence de répétition des blocs de rotation et des blocs d'enchevêtrement.
- insert_barriers (bool) – Si
True, des barrières sont insérées entre chaque couche. SiFalse, aucune barrière n'est insérée. - parameter_prefix (str) – Le préfixe utilisé si des paramètres par défaut sont générés.
- overwrite_block_parameters (bool |list[list[Parameter]]) – Si les paramètres des blocs ajoutés doivent être remplacés. Si
False, les paramètres des blocs ne sont pas modifiés. - skip_final_rotation_layer (bool) – Si une couche de rotation finale est ajoutée au circuit.
- skip_unentangled_qubits (bool) – Si
True, les portes de rotation n'agissent que sur les qubits intriqués. SiFalse, les portes de rotation agissent sur tous les qubits. - initial_state (QuantumCircuit | None) – Un
QuantumCircuitobjet permettant de décrire un état initial placé en tête du circuit NLocal. - name (str) – Le nom du circuit.
- flatten (bool | None) – Réglez ce paramètre sur
Truepour obtenir un circuit plat au lieu de l'imbriquer dans plusieurs couches d'objets de porte. Par défaut, le contenu du circuit de sortie sera enveloppé dans des objets imbriqués pour une visualisation plus propre. Cependant, si vous utilisez ce circuit pour autre chose que la visualisation, il est fortement recommandé de mettre ce drapeau àTrueafin d'éviter une surcharge de performance importante pour la liaison des paramètres.
Augmentations
- ValueError - Si le paramètre
repsest inférieur ou égal à 0. - TypeError - Si le paramètre
repsn'est pas une valeur int.
Attributs
entanglement
Obtenir la stratégie d'enchevêtrement.
Retours
La stratégie d'enchevêtrement, voir get_entangler_map() pour plus de détails sur l'interprétation du format.
entanglement_blocks
Les blocs dans les couches d'enchevêtrement.
Retours
Les blocs dans les couches d'enchevêtrement.
flatten
Indique si le circuit est enveloppé dans des portes/instructions imbriquées ou s'il est aplati.
initial_state
Retourne l'état initial qui est ajouté devant le circuit n-local.
Retours
L'état initial.
insert_barriers
Si des barrières sont insérées entre les couches ou non.
Retours
Truesi des barrières sont insérées entre les couches, False si ce n'est pas le cas.
num_layers
Renvoie le nombre de couches dans le circuit n-local.
Retours
Le nombre de couches dans le circuit.
num_parameters_settable
Le nombre de paramètres totaux qui peuvent être réglés sur des valeurs distinctes.
Il ne change pas lorsque les paramètres sont liés ou échangés contre les mêmes paramètres, et il est donc différent de num_parameters qui compte le nombre d'objets uniques actuellement dans le circuit Parameter objets uniques actuellement dans le circuit.
Retours
Le nombre de paramètres disponibles à l'origine dans le circuit.
Cette quantité ne nécessite pas que le circuit soit déjà construit.
num_qubits
Renvoie le nombre de qubits dans ce circuit.
Retours
Le nombre de qubits.
ordered_parameters
Les paramètres utilisés dans le circuit sous-jacent.
Cela inclut les valeurs flottantes et les doublons.
Exemples
>>> # 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])]Retours
Les paramètres objets utilisés dans le circuit.
parameter_bounds
Les limites des paramètres pour les paramètres non liés du circuit.
Retours
Une liste de paires indiquant les limites, sous la forme (inférieur, supérieur). Aucun indique un paramètre non borné dans la direction correspondante. Si None est renvoyé, le problème est entièrement non borné.
preferred_init_points
Les points initiaux des paramètres. Peut être stocké en tant que supposition initiale dans l'optimisation.
Retours
Les valeurs initiales des paramètres, ou Aucune, si aucun paramètre n'a été défini.
reps
Le nombre de fois que la rotation et le bloc d'enchevêtrement sont répétés.
Retours
Le nombre de répétitions.
rotation_blocks
Les blocs dans les couches de rotation.
Retours
Les blocs dans les couches de rotation.
name
Type : str
Un nom lisible par l'homme pour le circuit.
Exemple
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuitMéthodes
add_layer
add_layer(other, entanglement=None, front=False)
Ajouter une autre couche au NLocal.
Paramètres
- other (QuantumCircuit |qiskit.circuit.Instruction) – La couche à composer peut être un autre NLocal, une instruction ou une porte, ou encore un « QuantumCircuit ».
- entanglement (list[int] | str |list[list[int]] | None) – Les indices d'intrication ou de qubit.
- front (bool) – Si True,
otherest ajouté à l'avant, sinon à l'arrière.
Retours
de sorte que des compositions en chaîne sont possibles.
Augmentations
TypeError - Si l'autre n'est pas compatible, c'est-à-dire qu'il ne s'agit pas d'une instruction et qu'il n'y a pas de méthode to_instruction.
Type de retour
assign_parameters
assign_parameters(parameters, inplace=False, **kwargs)
Attribuer des paramètres au circuit n-local.
Cette méthode permet également de passer une liste au lieu d'un dictionnaire. Si une liste est transmise, elle doit avoir la même longueur que le nombre de paramètres non liés dans le circuit. Les paramètres sont attribués dans l'ordre des paramètres dans ordered_parameters().
Retours
Une copie du circuit NLocal avec les paramètres spécifiés.
Augmentations
AttributeError - Si les paramètres sont donnés sous forme de liste et ne correspondent pas au nombre de paramètres.
Paramètres
- parameters (Mapping[Parameter, ParameterExpression |float] | Sequence[ParameterExpression |float])
- inplace (bool)
Type de retour
QuantumCircuit | Aucun
get_entangler_map
get_entangler_map(rep_num, block_num, num_block_qubits)
Obtenez la carte d'enchevêtrement pour dans la répétition rep_num et le bloc block_num.
La carte des enchevêtrements pour le bloc en cours est dérivée de la valeur de self.entanglement. Les différents cas sont énumérés ci-dessous, où i et j désignent respectivement le numéro de répétition et le numéro de bloc, et n le nombre de qubits dans le bloc.
type d'enchevêtrement | carte de l'enchevêtrement |
|---|---|
None | [[0, ..., n - 1]] |
str (par exemple 'full') | la connectivité spécifiée sur n les 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 connectivité spécifiée dans entanglement[i] |
List[List[str]] | la connectivité spécifiée dans entanglement[i][j] |
Callable[int, str] | identique à List[str] |
Callable[int, List[List[int]]] | identique à List[List[List[int]]] |
Notez que tous les indices doivent être pris modulo la longueur du tableau sur lequel ils agissent, c'est-à-dire qu'aucune erreur d'indice hors limites ne sera soulevée mais nous réitérons à partir du début de la liste.
Paramètres
- rep_num (int) – La répétition actuelle dans laquelle nous nous trouvons.
- block_num (int) – Le numéro de bloc dans les couches d'enchevêtrement.
- num_block_qubits (int) – Le nombre de qubits dans le bloc.
Retours
La carte des enchevêtrements pour le bloc actuel dans la répétition actuelle.
Augmentations
ValueError - Si la valeur de entanglement n'a pas pu être attribuée à une carte d'enchevêtrement correspondante.
Type de retour
get_unentangled_qubits
get_unentangled_qubits()
Obtenir les indices des qubits non enchevêtrés dans un ensemble.
Retours
Les qubits non enchevêtrés.
Type de retour