Limites
qiskit_addon_slc.bounds
Fonctions de calcul liées.
Ce module propose diverses fonctions permettant de calculer les limites d'erreur qui composent un cône de lumière ombré.
compute_forward_bounds
compute_forward_bounds(circuit, noise_model_paulis, /, observable, *, evolution_max_terms=1000000, eigval_max_qubits=14, atol=1e-08, atol_simplify=1e-08, atol_eigenvalue=1e-08, **kwargs)
Calculez les bornes du commutateur à temps inégaux obtenues par évolution vers l'avant.
En partant de la fin du circuit, calculez les bornes du commutateur à temps inégal, obtenues par évolution vers l'avant, pour tous les termes d'erreur de Pauli de chaque couche bruyante du circuit cible.
Autrement dit, calculer l' e pour tous les termes d'erreur, , où est la cible observable à mesurer sur circuit.
Les termes d'erreur, , sont déterminés par noise_model_paulis. Ce dictionnaire établit une correspondance entre les identifiants des modèles de bruit (samplomatic.InjectNoise.ref) et une liste de termes d'erreur de Pauli. Les termes correspondants seront utilisés chaque fois qu'un BoxOp portant une annotation InjectNoise correspondante sera rencontré au cours de l'itération sur circuit.
qiskit_addon_slc.bounds.forward.compute_forward_bounds()L'argument atol est obsolète depuis la version qiskit-addon-slc 0.2.0. Il ne sera supprimé qu'au plus tôt trois mois après la date de sortie. Utilisez plutôt les fonctions atol\_simplify et atol\_eigenvalue.
Paramètres
- circuit (QuantumCircuit) – le circuit cible.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – les termes d'erreur de Pauli à prendre en compte pour chaque modèle de bruit.
- observable (Pauli |PauliList |SparseObservable |SparsePauliOp) – la grandeur observable cible à mesurer à la sortie du circuit.
- evolution_max_terms (int) – le nombre maximal de termes d'opérateur à prendre en compte au cours de l'évolution.
- eigval_max_qubits (int) – le nombre maximal de qubits d'un commutateur pour lequel on tentera encore de calculer la valeur propre. Lorsque cette valeur est dépassée, la borne est estimée à l'aide d'une inégalité triangulaire plus simple et plus lâche.
- atol (float) – Cette utilisation est OBSOLÈTE. Utilisez plutôt
atol_eigenvalueatol_simplifyet! - atol_simplify (float) – la tolérance absolue utilisée pour les termes de correction issus du commutateur. Un assouplissement de cette tolérance entraînera une troncature plus importante des termes du commutateur, ce qui rendra le calcul de ses valeurs propres moins coûteux mais moins précis.
- atol_eigenvalue (float) – la tolérance absolue utilisée pour détecter la convergence de la valeur propre du commutateur. Un assouplissement de cette tolérance entraînera une perte de précision dans le calcul des valeurs propres par le solveur itératif de Davidson.
- kwargs – tout argument de mot-clé supplémentaire sera transmis à
compute_bounds().
Retours
La borne du commutateur à temps inégal.
Augmentations
NotImplementedError – lorsque l'expression contient observable plus d'un terme de Pauli. Si vous rencontrez ce problème, vous devrez appeler cette fonction séparément pour chaque cible Pauli.
Type de retour
dict [ str, PauliLindbladMap ]
tighten_with_speed_limit
tighten_with_speed_limit(bounds, circuit, noise_model_paulis, /, observable)
Resserrez les limites fournies en imposant des contraintes sur la vitesse de propagation de l'information.
S'inspirant des principes qui sous-tendent les bornes de Lieb-Robinson, cette fonction exploite les limites de la vitesse de propagation de l'information pour resserrer les bornes de commutateur à temps inégaux calculées précédemment par évolution vers l'avant (voir également compute_forward_bounds()).
Paramètres
- bounds (dict[str, PauliLindbladMap]) – les bornes de commutateur à temps inégaux, calculées précédemment par évolution vers l'avant.
- circuit (QuantumCircuit) – le circuit cible.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – les termes d'erreur de Pauli à prendre en compte pour chaque modèle de bruit.
- observable (Pauli |PauliList |SparseObservable |SparsePauliOp) – la grandeur observable cible à mesurer à la sortie du circuit.
Retours
Une version renforcée des bornes de commutateur pour les temps inégaux.
Augmentations
- NotImplementedError – lorsque l'expression contient
observableplus d'un terme de Pauli. Si vous rencontrez ce problème, vous devrez appeler cette fonction séparément pour chaque cible Pauli. - ValueError – lorsqu'on rencontre une porte agissant sur plus de deux qubits.
Type de retour
dict [ str, PauliLindbladMap ]
compute_backward_bounds
compute_backward_bounds(circuit, noise_model_paulis, /, *, evolution_max_terms=1000000, **kwargs)
Calculer les bornes du commutateur à temps inégaux obtenues par évolution vers l'arrière.
En partant du début du circuit, calculez les bornes du commutateur à temps inégal, obtenues par évolution vers l'arrière, pour tous les termes d'erreur de Pauli de chaque couche bruyante du circuit cible.
Autrement dit, calculer (en utilisant la norme 1 de Schatten, également appelée norme nucléaire) pour tous les termes d'erreur, , où est supposé être l'état « tout à zéro », , sur tous les qubits actifs de circuit.
Les termes d'erreur, , sont déterminés par noise_model_paulis. Ce dictionnaire établit une correspondance entre les identifiants des modèles de bruit (samplomatic.InjectNoise.ref) et une liste de termes d'erreur de Pauli. Les termes correspondants seront utilisés chaque fois qu'un BoxOp portant une annotation InjectNoise correspondante sera rencontré au cours de l'itération sur circuit.
Avant de calculer les limites, cette fonction supprime toutes les opérations Measure de circuit. Cette opération est nécessaire car le circuit est inversé avant d'être traité dans l'ordre inverse, ce qui permet de traiter l'évolution en sens inverse comme une évolution en sens direct (dans le circuit inversé).
Paramètres
- circuit (QuantumCircuit) – le circuit cible.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – les termes d'erreur de Pauli à prendre en compte pour chaque modèle de bruit.
- evolution_max_terms (int) – le nombre maximal de termes d'opérateur à prendre en compte au cours de l'évolution. (Si l'opérateur dépasse cette taille, les termes les plus petits sont tronqués).
- kwargs – tout argument de mot-clé supplémentaire sera transmis à
compute_bounds().
Retours
Les bornes du commutateur à temps inégal issues d'une évolution vers l'arrière.
Type de retour
dict [ str, PauliLindbladMap ]
merge_bounds
merge_bounds(circuit, forward_bounds, backward_bounds, /, noise_rates=None, *, is_clifford_circuit=False)
Fusionner les limites avant et arrière.
Le niveau auquel s'opère le passage de l'utilisation de limites arrière à celle de limites avant sera le même pour tous les qubits. Il est déterminé en tenant compte des données d'apprentissage fournies noise_rates. Si ces données ne sont pas fournies, on suppose des niveaux de bruit uniformes. Même s'il s'agit là d'une hypothèse irréaliste, il peut tout de même être utile de prévisualiser les limites fusionnées.
Paramètres
- circuit (QuantumCircuit) – le circuit cible.
- forward_bounds (dict[str, PauliLindbladMap] | None) – les limites vers l'avant (voir aussi
compute_forward_bounds()). - backward_bounds (dict[str, PauliLindbladMap] | None) – les bornes inférieures (voir aussi
compute_backward_bounds()). - noise_rates (dict[str, PauliLindbladMap | None] | None) – les taux de bruit appris sur le backend cible.
- is_clifford_circuit (bool) – si le circuit cible est entièrement de Clifford.
Retours
Les limites fusionnées.
Augmentations
- ValueError – lorsque les deux limites fournies sont
None. - KeyError – lorsque les
boundscontiennent une cléInjectNoise.modifier_refqui n'apparaît pas dans la ciblecircuitou dont la n'estInjectNoise.refpas trouvée. - ValueError – si les termes de Pauli du modèle de bruit, dont les limites sont calculées pour une valeur donnée de, ne
InjectNoise.modifier_refcoïncident pas entre etforward_boundsbackward_bounds. - NotImplementedError – lorsque est
is_clifford_circuitégal àTrue.
Type de retour
dict [ str, PauliLindbladMap ] | None
compute_local_scales
compute_local_scales(circuit, bounds, /, noise_rates, *, sampling_cost_budget=inf, bias_tolerance=0.0)
Calcule l'argument local_scales d'un Samplex.
Cet argument local_scales sert à préciser quels termes d'erreur spécifiques doivent être atténués.
Il faut bias_tolerance indiquer soit soit sampling_cost_budget . Le premier fixe une limite supérieure au coût d'échantillonnage, tandis que le second fixe une limite supérieure au biais résiduel acceptable.
Si l'ordre des termes de Pauli dans et bounds noise_rates ne correspond pas, cette fonction adoptera l'ordre défini par noise_rates afin de garantir la compatibilité des échelles avec les taux qui seront également fournis à QuantumProgram.
Paramètres
- circuit (QuantumCircuit) – le circuit cible.
- bounds (dict[str, PauliLindbladMap]) – les limites du cône de lumière ombrées.
- noise_rates (dict[str, PauliLindbladMap | None]) – les taux du modèle de bruit appris.
- sampling_cost_budget (float) – le coût maximal d'échantillonnage admissible.
- bias_tolerance (float) – la valeur maximale de biais à tolérer.
Retours
- le dictionnaire
local_scalesqui doit être fourni comme entrée directe ausamplomatic.samplex.Samplex.inputs(). - les frais généraux liés à l'échantillonnage ( ) nécessaires à la réalisation de l'échantillonnage de
local_scales. - le biais résiduel sur les valeurs attendues calculées à l'aide de ces bornes.
Type de retour
Un tuple de longueur 3, dont les éléments sont
Augmentations
- ValueError – si des valeurs différentes de celles par défaut sont fournies pour les deux, le et
sampling_cost_budgetlebias_tolerance. - KeyError – s'il
noise_ratesmanque une entrée pour un identifiant de modèle de bruit (InjectNoise.ref) rencontré danscircuit.
Ce module contient également certaines fonctions de bas niveau auxquelles l'utilisateur final n'a généralement pas directement accès, mais qui peuvent s'avérer utiles pour des développements supplémentaires s'appuyant sur ce module.
compute_bounds
compute_bounds(circuit, noise_model_paulis, light_cone, norm_fn, *, backwards, max_num_boxes=None, num_processes=1, timeout=None)
Calcule les bornes du commutateur à temps inégaux.
Pour un circuit comportant BoxOp instructions avec InjectNoise annotations et un mappage des identifiants du modèle de bruit (InjectNoise.ref) vers une liste de termes d'erreur de Pauli (noise_model_paulis), cette fonction calcule les bornes du commutateur à temps inégal (dont les détails sont mis en œuvre par norm_fn). Ce faisant, elle ne prend en compte que les portes situées à l'intérieur du cône de lumière de l'observable (initialisé par light_cone). Ces limites calculées constituent la base du cône de lumière ombré.
Cette fonction effectuant un calcul de longue durée, elle gère les exceptions KeyboardInterrupt de manière élégante, ce qui permet à l'utilisateur d'interrompre le calcul à tout moment et d'obtenir malgré tout les résultats calculés jusqu'à ce moment-là.
Paramètres
- circuit (QuantumCircuit) – le circuit cible.
- noise_model_paulis (dict[str, QubitSparsePauliList]) – les termes d'erreur de Pauli à prendre en compte pour chaque modèle de bruit.
- light_cone (LightCone) – le tracker
LightConeinitialisé et à état. - norm_fn (Callable[[Pauli, RotationGates], CommutatorBounds]) – la fonction mettant en œuvre le commutateur à temps inégaux spécifique.
- backwards (bool) – s'il faut parcourir la liste à
circuitl'envers. - max_num_boxes (int | None) – le nombre maximal de cases pour lesquelles calculer les limites. Les limites de toute boîte supplémentaire se verront attribuer la valeur limite supérieure triviale de .
- num_processes (int) – le nombre de processus parallèles à utiliser.
- timeout (float | None) – un délai d'expiration facultatif (en secondes) au terme duquel toutes les couches restantes sont remplies avec des limites numériques triviales de
2.0. Notez qu'il ne s'agit pas d'un délai d'expiration strict et que la couche en cours de traitement au moment où ce délai est atteint s'achèvera normalement.
Retours
Les bornes calculées pour le commutateur à temps inégal.
Type de retour
dict [ str, PauliLindbladMap ]
CommutatorBounds
class CommutatorBounds(commutator_bound, truncation_bias, fallback_to_tri_ineq)
Bases : NamedTuple
Une classe de données permettant de stocker les métadonnées relatives aux limites calculées du commutateur.
Créer une nouvelle instance de CommutatorBounds(commutator\_bound, truncation\_bias, fallback\_to\_tri\_ineq)
Paramètres
commutator_bound
Type : float
La borne du commutateur.
Cette limite sera calculée de différentes manières selon l'application. Par exemple, les bornes « vers l'arrière » permettent de calculer la norme nucléaire (norme de Schatten 1), tandis que les bornes « vers l'avant » sont généralement calculées à l'aide de la norme spectrale (norme de Schatten à l'infini).
Si le calcul de la norme dépasse les limites de difficulté spécifiées, il sera abandonné au profit d'une borne plus simple fondée sur l'inégalité triangulaire, ce qui est indiqué par la valeur fallback_to_tri_ineq de fixée à True.
Cette valeur peut être NaN lorsque le calcul de la borne de commutation a été interrompu. Cela peut se produire lorsque dépasse déjà truncation_bias la limite théorique de 2.0.
fallback_to_tri_ineq
Type : bool
Cette valeur commutator_bound a été calculée « approximativement » à l'aide d'une simple inégalité triangulaire.
min
min()
Renvoie la limite minimale codée par ces métadonnées.
La borne minimale est la plus petite des deux valeurs suivantes : la somme de et commutator_bound truncation_bias ou la borne théorique de 2.0.
On 2.0 utilise la valeur de car une observable de Pauli bornée sur son image [-1, +1] ne peut pas présenter un biais supérieur à 2.0.
Type de retour
truncation_bias
Type : float
Le biais sur la borne dû à la troncature du commutateur.