Skip to main content
IBM Quantum Platform

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)

GitHub

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' [EF,AF]2\| \left[ E_F, A_F \right] \|_2 e pour tous les termes d'erreur, EFE_F, où AFA_F est la cible observable à mesurer sur circuit.

Les termes d'erreur, EIE_I, 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.

Obsolète depuis la version 0.2.0

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_eigenvalue atol_simplify et!
  • 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)

GitHub

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

Retours

Une version renforcée des bornes de commutateur pour les temps inégaux.

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.
  • 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)

GitHub

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 [EI,ρI]1\| \left[ E_I, \rho_I \right] \|_1 (en utilisant la norme 1 de Schatten, également appelée norme nucléaire) pour tous les termes d'erreur, EIE_I, où ρI\rho_I est supposé être l'état « tout à zéro », 00\ket{0 \ldots 0}, sur tous les qubits actifs de circuit.

Les termes d'erreur, EIE_I, 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.

Attention

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)

GitHub

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

Retours

Les limites fusionnées.

Augmentations

  • ValueError – lorsque les deux limites fournies sont None.
  • KeyError – lorsque les bounds contiennent une clé InjectNoise.modifier_ref qui n'apparaît pas dans la cible circuit ou dont la n'est InjectNoise.ref pas 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_ref coïncident pas entre et forward_bounds backward_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)

GitHub

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.

Remarque

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_scales qui doit être fourni comme entrée directe au samplomatic.samplex.Samplex.inputs().
  • les frais généraux liés à l'échantillonnage ( γ2\gamma^2 ) 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_budget le bias_tolerance.
  • KeyError – s'il noise_rates manque une entrée pour un identifiant de modèle de bruit (InjectNoise.ref) rencontré dans circuit.

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)

GitHub

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 LightCone initialisé 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 à circuit l'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 2.02.0.
  • 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)

GitHub

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 (float)
  • truncation_bias (float)
  • fallback_to_tri_ineq (bool)

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

GitHub

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

Float

truncation_bias

Type : float

Le biais sur la borne dû à la troncature du commutateur.

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