Skip to main content
IBM Quantum Platform

LinearFunction

class qiskit.circuit.library.LinearFunction(linear, validate_input=False)

GitHub

Bases : Gate

Un circuit linéaire réversible sur n qubits.

En interne, une fonction linéaire agissant sur n qubits est représentée par une matrice n x n de 0s et 1s au format numpy array.

Une fonction linéaire peut être synthétisée à l'aide de portes CX et SWAP grâce à l'algorithme de Patel-Markov-Hayes, tel qu'implémenté dans synth_cnot_count_full_pmh() sur la base de la référence [1].

Par souci d'efficacité, la matrice interne n x n est stockée dans le format attendu par cnot_synth, à savoir la convention d'ordonnancement des bits big-endian (et non little-endian).

Exemple :

Le circuit

q_0: ──■──
     ┌─┴─┐
q_1: ┤ X ├
     └───┘
q_2: ─────

est représentée par une matrice linéaire 3x3

(100110001)\begin{pmatrix} 1 & 0 & 0 \\ 1 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}

Références :

[1] Ketan N. Patel, Igor L. Markov, et John P. Hayes, Optimal synthesis of linear reversible circuits, Quantum Inf. Comput. 8(3) (2008). En ligne à l'adresse suivante : umich.edu.

Paramètres

  • linear (list[list[bool]] | np.ndarray[bool] | QuantumCircuit |LinearFunction |PermutationGate |Clifford) – des données à partir desquelles on peut construire une fonction linéaire. Il peut s'agir soit d'une matrice n×n (décrivant la transformation linéaire), soit d'une permutation (qui est un cas particulier de fonction linéaire), soit d'une autre fonction linéaire, soit d'un Clifford (lorsqu'il correspond à une fonction linéaire), soit d'un circuit quantique composé de portes linéaires (CX et SWAP) et d'autres objets décrits ci-dessus, y compris des sous-circuits imbriqués.
  • validate_input (bool) – si True, effectue des contrôles de validation d'entrée plus coûteux, par exemple en vérifiant qu'une matrice n x n donnée est inversible.

Augmentations

CircuitError – si l'entrée n'est pas valide : soit la matrice d'entrée n'est pas carrée ou n'est pas inversible, soit le circuit quantique d'entrée contient des objets non linéaires (par exemple, une porte de Hadamard ou une porte de Clifford qui ne correspond pas à une fonction linéaire).


Attributs

base_class

Obtenir la classe de base de cette instruction. Il est assuré de figurer dans l'arbre généalogique de self.

La "classe de base" d'une instruction est la classe la plus basse de son arbre d'héritage avec laquelle l'objet doit être considéré comme entièrement compatible pour les applications de circuit. Cela signifie généralement que la sous-classe est définie uniquement pour offrir une certaine commodité au programmeur par rapport à la classe de base, et que la classe de base est la "vraie" classe d'un point de vue comportemental. En particulier, vous ne devez pas outrepasser base_class si vous définissez une version personnalisée d'une instruction qui sera implémentée différemment par le matériel, comme une stratégie de mesure alternative, ou une version d'une porte paramétrée avec un ensemble particulier de paramètres dans le but de la distinguer dans un Target à partir de la porte entièrement paramétrée.

Ceci est souvent exactement équivalent à type(obj), sauf dans le cas d'instances uniques d'instructions de la bibliothèque standard. Ces instances singleton sont des sous-classes spéciales de leur classe de base, et cette propriété renverra cette base. Par exemple :

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

En général, il ne faut pas se fier à la classe précise d'une instruction; dans un circuit donné, on s'attend à ce que Instruction.name soit un discriminant plus approprié dans la plupart des situations.

decompositions

Obtenir les décompositions de l'instruction à partir de SessionEquivalenceLibrary.

definition

Définition du retour en termes d'autres portes de base.

label

Étiquette d'instruction de retour

linear

Renvoie la matrice n x n représentant cette fonction linéaire.

mutable

Cette instance est-elle une instance unique mutable ou non?

Si cet attribut est False , l'instance du portail est un singleton partagé et n'est pas mutable.

name

Renvoyer le nom.

num_clbits

Retourne le nombre de clbits.

num_qubits

Renvoie le nombre de qubits.

original_circuit

Renvoie le circuit original utilisé pour construire cette fonction linéaire (y compris None, lorsque la fonction linéaire n'est pas construite à partir d'un circuit).

params

Les paramètres de ce site Instruction. Idéalement, il s'agit d'angles de porte.


Méthodes

add_decomposition

add_decomposition(decomposition)

GitHub

Ajouter une décomposition de l'instruction à l'adresse SessionEquivalenceLibrary.

broadcast_arguments

broadcast_arguments(qargs, cargs)

GitHub

Validation et traitement des arguments et de leur relation.

Par exemple, cx([q[0],q[1]], q[2]) signifie cx(q[0], q[2]); cx(q[1], q[2]). Cette méthode permet d'obtenir les arguments dans le bon groupe. Dans l'exemple donné :

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

Les règles générales de diffusion sont les suivantes :

  • 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], ...]

Paramètres

  • qargs (list) – Liste des arguments des bits quantiques.
  • cargs (list) – Liste des arguments classiques en matière de bits.

Retours

Un tuple avec des arguments uniques.

Augmentations

CircuitError – Si la saisie n'est pas valide. Par exemple, le nombre d'arguments ne correspond pas à ce qu'on attend de la porte logique.

Type de retour

Iterable [ tuple [ liste, liste ]]

control

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

GitHub

Renvoie la version contrôlée de lui-même.

La porte contrôlée est implémentée comme ControlledGate lorsque annotated est False, et comme AnnotatedOperation lorsque annotated est True.

Obsolète depuis la version 2.3

qiskit.circuit.gate.Gate.control()L'argument annotated est obsolète depuis Qiskit 2.3. Il sera supprimé dans Qiskit 3.0. La méthode Gate.control () n'accepte plus annotated=None. La nouvelle valeur par défaut est annotated=True, qui représente la porte contrôlée comme une porte à deux états ( AnnotatedOperation ) (à moins qu'une classe de porte contrôlée dédiée n'existe déjà). Vous pouvez explicitement définir annotated=False pour conserver le comportement précédent. Cependant, il est recommandé d'utiliser annotated=True, car cela reporte la construction du circuit contrôlé au transcompilateur et permet en outre des optimisations supplémentaires des portes contrôlées (ce qui conduit généralement à des circuits de meilleure qualité).

Paramètres

  • num_ctrl_qubits (int) – Nombre de contrôles à ajouter. Prend par défaut la valeur 1.
  • label (str | None) – Étiquette de porte facultative. Prend par défaut la valeur None. Ignoré si la porte contrôlée est implémentée en tant qu'opération annotée.
  • ctrl_state (int |str | None) – État de contrôle de la porte, spécifié soit sous forme d'entier, soit sous forme de chaîne de bits (par exemple "110"). Si None, la valeur par défaut est l'état « 2**num_ctrl_qubits - 1tous à 1 ».
  • annotated (bool | None) – Indique si la porte contrôlée doit être implémentée en tant que porte contrôlée ou en tant qu'opération annotée. Si None, traité comme False.

Retours

Une version contrôlée de cette porte.

Augmentations

QiskitError – invalide num_ctrl_qubits ou ctrl_state.

copy

copy(name=None)

GitHub

Copie de l'instruction.

Paramètres

name (str) – nom à donner au circuit copié, si None le nom reste le même.

Retours

une copie de l'instruction en cours, avec le nom mis à jour s'il a été fourni

Type de retour

qiskit.circuit.Instruction

extend_with_identity

extend_with_identity(num_qubits, positions)

GitHub

Étendre la fonction linéaire à une fonction linéaire sur nq qubits, avec des identités sur d'autres sous-systèmes.

Paramètres

  • num_qubits (int) – nombre de qubits de la fonction étendue.
  • positions (list[int]) – décrit les positions des qubits originaux dans les qubits de la fonction étendue.

Retours

fonction linéaire étendue.

Type de retour

LinearFunction

function_str

function_str()

GitHub

Retourne une représentation sous forme de chaîne de caractères de la fonction linéaire considérée comme une transformation linéaire.

inverse

inverse(annotated=False)

GitHub

Renvoie l'inverse de cette fonction linéaire.

Paramètres

Gateannotated (bool) – Lorsqu'il est défini sur True, cela sert généralement à renvoyer un AnnotatedOperation avec un modificateur inverse activé, au lieu d'un concret. Cependant, pour cette classe, cet argument est ignoré, car l'inverse de cette porte est toujours un LinearFunction.

Type de retour

LinearFunction

is_parameterized

is_parameterized()

GitHub

Indique si la fonction Instruction contient des paramètres définis à la compilation.

is_permutation

is_permutation()

GitHub

Renvoie si cette fonction linéaire est une permutation, c'est-à-dire si chaque ligne et chaque colonne de la matrice n x n contient exactement un 1.

Type de retour

booléen

mat_str

mat_str()

GitHub

Retourne la représentation sous forme de chaîne de caractères de la fonction linéaire vue comme une matrice avec des entrées 0/1.

permutation_pattern

permutation_pattern()

GitHub

Cette méthode vérifie d'abord si une fonction linéaire est une permutation et affiche qiskit.circuit.exceptions.CircuitError si ce n'est pas le cas. Dans le cas où cette fonction linéaire est une permutation, renvoie le modèle de permutation.

power

power(exponent, annotated=False)

GitHub

Élevez cette porte au pouvoir de exponent.

Mise en œuvre sous forme de porte unitaire (réf. UnitaryGate) ou en tant qu'opération annotée (réf. AnnotatedOperation). Dans le cas de plusieurs portes standard, telles que RXGatelorsque la puissance d'une porte peut être exprimée en termes d'une autre porte standard qui est renvoyée directement.

Paramètres

  • exponent (float) – le pouvoir d'élever la porte à
  • annotated (bool) – indique si la porte de puissance peut être mise en œuvre en tant qu'opération annotée. Dans le cas de plusieurs portes standard, telles que RXGatecet argument est ignoré lorsque la puissance d'une porte peut être exprimée en termes d'une autre porte standard.

Retours

Une opération mettant en œuvre gate^exponent

Augmentations

CircuitError – Si la porte n'est pas unitaire

repeat

repeat(n)

GitHub

Crée une instruction self répétée nn fois.

Paramètres

n (int) – Nombre de répétitions de l'instruction

Retours

Contenant la définition.

Type de retour

qiskit.circuit.Instruction

Augmentations

CircuitError – Si n < 1.

reverse_ops

reverse_ops()

GitHub

Pour une instruction composite, inverser l'ordre des sous-instructions.

Pour ce faire, toutes les sous-instructions sont inversées de manière récursive. Il n'inverse aucune porte.

Retours

une nouvelle instruction avec

les sous-instructions sont inversées.

Type de retour

qiskit.circuit.Instruction

soft_compare

soft_compare(other)

GitHub

Comparaison en douceur entre les portes. Leurs noms, le nombre de qubits et les numéros de bits classiques doivent correspondre. Le nombre de paramètres doit correspondre. Chaque paramètre est comparé. Si l'on est sur ParameterExpression, cela n'est pas pris en compte.

Paramètres

other (instruction) – d'autres instructions.

Retours

sont égaux à soi et à l'autre jusqu'à l'expression des paramètres.

Type de retour

booléen

synthesize

synthesize()

GitHub

Synthétise la fonction linéaire en un circuit quantique.

Déclassé depuis la version 2.1

La méthode qiskit.circuit.library.generalized_gates.linear_function.LinearFunction.synthesize() est obsolète depuis Qiskit 2.1. Elle sera supprimée à Qiskit 3.0. Appelez plutôt LinearFunction.definition ou compilez le circuit.

Retours

Un circuit mettant en œuvre l'évolution.

Type de retour

QuantumCircuit

to_matrix

to_matrix()

GitHub

Retourne un Numpy.array pour la matrice unitaire de la porte.

Retours

si la sous-classe Gate possède une définition de matrice.

Type de retour

np.ndarray

Augmentations

CircuitError – Si une sous-classe de Gate n'implémente pas cette méthode, une exception sera levée lors de l'appel de cette méthode de la classe de base.

to_mutable

to_mutable()

GitHub

Renvoie une copie mutable de cette porte.

Cette méthode renvoie une nouvelle copie mutable de cette instance de porte. Si une instance singleton est utilisée, il s'agit d'une nouvelle instance unique qui peut être modifiée. Si l'instance est déjà mutable, il s'agira d'une copie profonde de cette instance.

validate_parameter

validate_parameter(parameter)

GitHub

Validation des paramètres

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.