exp_vals
qiskit_addon_utils.exp_vals
Outils de calcul des valeurs attendues.
executor_expectation_values
executor_expectation_values(bool_array, basis_mapping, /, meas_basis_axis=None, *, avg_axis=None, measurement_flips=None, pauli_signs=None, postselect_mask=None, gamma_factor=None, rescale_factors=None)
Calcule les valeurs attendues à partir des données de tir et qiskit_ibm_runtime.Executor des métadonnées.
Utilise les données contenues dans bool_array, acquises à l'aide des bases de mesure définies dans les clés de basis_dict, pour calculer les observables codées dans les valeurs de basis_dict.
Permet, si on le souhaite, de calculer une moyenne sur des axes supplémentaires de bool_array, comme lors d'une rotation.
Prend en charge, en option, la rotation des mesures, le PEC et la postsélection.
Paramètres
-
bool_array (ndarray[tuple[int, ...], dtype[bool]]) – Tableau booléen, représentant vraisemblablement les données issues de qubits mesurés. Les deux derniers axes correspondent respectivement au nombre de prises et au nombre de bits classiques. On suppose que le bit le moins significatif se trouve à l'indice
0de l'axe des bits. Simeas_basis_axisest donné, cet axe debool_arrayindexe les bases de mesure, avec une longueurlen(basis_mapping)de. -
basis_mapping (dict[Pauli, list[SparsePauliOp | None]] |tuple[Sequence[SparsePauliOp], Sequence[str] | PauliList]) –
Les observables de Pauli et les bases associées qui ont été mesurées. Il peut s'agir d'un
tuple,(observables, msmt_bases), ou d'undict,{basis: commuting_observables}.- tuple : un tuple de type « length-2 » contenant
(observables, msmt_bases), oùobservablesest une séquence deSparsePauliOpinstances pour lesquelles il convient de calculer les valeurs d'espérance individuelles, etmsmt_basesest une séquence d'observables de Pauli. On s'attend à ce que leie Pauli dansmsmt_basescorresponde à laie tranche debool_arrayle long demeas_basis_axis. - dict : La
i-ième clé correspond à une base de mesure supposée correspondre à lai-ième tranche debool_arrayle long demeas_basis_axisl'axe. Les valeurs sont des listes d'observables (SparsePauliOp) dont la longueur est égale au nombre d'observables.NoneCes valeurs sont utilisées lorsqu'une observable ne commute pas, au niveau des qubits, avec la base. Cette méthode part du principe que chaque observable n'apparaît qu'une seule fois parmi les valeurs, même s'il commute avec plusieurs bases.
- tuple : un tuple de type « length-2 » contenant
-
meas_basis_axis (int | None) – Axe de
bool\_arrayservant à indexer les bases de mesure. L'ordre doit correspondre à celui indiqué dansbasis_mapping. SiNone, alorslen(basis_mapping)doit être1, etbool_arrayon suppose que correspond à la seule base de mesure. -
avg_axis (int |tuple[int, ...] | None) – Axe(s) facultatif(s) de
bool\_arraysur lequel (lesquels) effectuer la moyenne lors du calcul des valeurs attendues. En général, il s'agit de l'axe de « rotation ». Doit être non négatif. (L'axe des tirs, supposé se trouver à l'index-2dans le tableau booléen, fait toujours l'objet d'un calcul de moyenne.) -
measurement_flips (ndarray[tuple[int, ...], dtype[bool]] | None) – Tableau de valeurs booléennes facultatif utilisé avec la rotation des mesures. Indique quels bits ont été acquis lors de mesures précédées de portes de inversion de bits. Le traitement des données utilisera le résultat de l'opération XOR effectuée sur ce tableau avec
bool_array. Doit avoir la même forme quebool_array. -
pauli_signs (ndarray[tuple[int, ...], dtype[bool]] | None) – Tableau de valeurs booléennes facultatif utilisé avec la compensation probabiliste des erreurs (PEC). On suppose que l'axe final répertorie toutes les boîtes présentant des anomalies dans le circuit. La valeur de
Trueindique que le signe global de-1doit être associé à la case « noisy », généralement parce qu'un nombre impair d'erreurs de bruit inverse a été inséré dans cette case pour la randomisation du circuit spécifiée. L'axe final est immédiatement réduit à une somme modulo 2 afin d'obtenir le signe global associé à chaque randomisation de circuit. La forme restante doit êtrepauli_signs.shape[:-1] == bool_array.shape[:-2]. Notez que ce tableau ne comporte pas d'axe « shots ». -
postselect_mask (ndarray[tuple[int, ...], dtype[bool]] | None) – Tableau de valeurs booléennes facultatif utilisé pour la post-sélection.
True(False) indique qu’un plan a été accepté (ou rejeté) lors de la post-sélection. La forme doit êtrebool_array.shape[:-1]. -
gamma_factor (float | None) – Facteur de mise à l'échelle gamma à appliquer aux valeurs attendues corrigées par la méthode PEC. Si
None, les facteurs de mise à l'échelle seront calculés comme étant le nombre d'échantillons positifs moins le nombre d'échantillons négatifs, soit1/(np.sum(~pauli_signs, axis=avg_axis) - np.sum(pauli_signs, axis=avg_axis)). Cette opération peut échouer en raison d'une division par zéro s'il y a autant d'échantillons positifs que négatifs. Notez également que cela redimensionne chaque valeur attendue selon un facteur différent. (À faire : permettre de spécifier un tableau de valeurs gamma). -
rescale_factors (Sequence[Sequence[Sequence[float]]] | None) – Facteur d'échelle pour chaque terme de Pauli dans chaque observable, pour chaque base, dans le
basis_mapping. Généralement utilisé pour les facteurs de correction visant à atténuer les erreurs de lecture (« TREX »). Chaque élément de la liste correspond à une base différente et contient une liste de listes de facteurs pour chaque terme de chaque grandeur observable liée à cette base. L'ordre des bases et des observables au sein de chaque base doit être le même que dansbasis_mapping. Pour les observables vides correspondant à certaines bases, conservez une liste vide.NoneDans ce cas, le facteur d'échelle ne sera pas appliqué.
Retours
Une liste de (exp. val, variance) 2 tuples, un pour chaque observable souhaité.
Note : Les covariances entre les termes additionnés dans chaque observable ne sont pas actuellement prises en compte dans le modèle de la
écarts constatés. # ACTION
Augmentations
- ValueError –
avg_axiscontient des valeurs négatives. - ValueError –
meas_basis_axisestNonemaislen(basis_mapping) != 1. - ValueError – Le nombre d'entrées dans
basis_mappingn'est pas égal à la longueur debool_arraysurmeas_basis_axis. - ValueError – Une grandeur observable n'est pas couverte par les bases de mesure.
get_measurement_bases
get_measurement_bases(observables, bases_in_int_format=True)
Choisir les bases à échantillonner afin de calculer les valeurs d'espérance pour toutes les observables données.
Ici, une "base" fait référence à la mesure d'un Pauli de poids total ou de poids élevé, à partir duquel plusieurs Paulis de commutation de qubits peuvent être estimés.
Les bases sont choisies en regroupant les Paulis commutés entre les différentes observables.
Paramètres
- observables (SparsePauliOp |list[SparsePauliOp]) – Les observables à calculer à l'aide de l'ordinateur quantique.
- bases_in_int_format (bool) – Si la condition est vraie, renvoie les bases sous forme de tableau d'entiers, en respectant la convention « samplomatic » suivante : I=0, Z=1, X=2, Y=3. L'ordre des entiers correspondra à l'indice de chaque Pauli dans la chaîne. Par exemple, la base « IXYZ » donnerait les résultats suivants : [1, 3, 2, 0]. Si la valeur est fausse, renvoie les bases sous la forme d'un tableau de chaînes de caractères.
Retours
- Liste des bases de Pauli à échantillonner, codées sous la forme d'une liste de chaînes de caractères de type « uint8 » où 0=I,1=Z,2=X,3=Y, ou d'une liste de chaînes de caractères (en fonction du paramètre « bases_in_int_format »).
- Dict qui associe chaque base mesurée aux Paulis pertinents et à leurs coefficients pour chaque observable. Avec les bases mesurées comme clés, chaque observable est représenté par un site SparsePauliOp.
Type de retour
tuple [ list [ ndarray [ tuple [ int, …], d[* type uint8*] ]], dict [ Pauli, list [ SparsePauliOp ]]] | tuple [ list [ str ], dict [ Pauli, list [ SparsePauliOp ]]]
map_observable_isa_to_canonical
map_observable_isa_to_canonical(isa_observable, canonical_qubits)
Mapper une observable définie par rapport au circuit transposé à l'ordre des boîtes canoniques.
Dans l'ordre transpilé (ou ISA), les qubits sont indexés sur la base de la disposition "physique" des qubits dans le dispositif.
Pour plus d'informations sur les conventions d'ordonnancement canonique des qubits, voir la documentation de Samplomatic ).
Paramètres
- isa_observable (Pauli |SparsePauliOp |SparseObservable) – Un objet de Pauli, SparsePauliOp, ou SparseObservable.
- canonical_qubits (Sequence[int]) – Une séquence spécifiant le qubit physique pour chaque qubit canonique.
Retours
Un opérateur mappé du même type que isa_observable
Type de retour
map_observable_virtual_to_canonical
map_observable_virtual_to_canonical(virt_observable, layout, canonical_qubits)
Faire correspondre une observable avec l'ordre des qubits virtuels à l'ordre des boîtes canoniques.
Pour plus d'informations sur les conventions d'ordonnancement canonique des qubits, voir la documentation de Samplomatic ).
Paramètres
- virt_observable (Pauli |SparsePauliOp |SparseObservable) – Un objet de Pauli, SparsePauliOp, ou SparseObservable.
- layout (Sequence[int]) – La liste des qubits physiques utilisés pour le circuit isa.
- canonical_qubits (Sequence[int]) – Un dictionnaire établissant la correspondance entre les qubits canoniques d'une boîte et les qubits physiques de la disposition.
Retours
Un opérateur mappé du même type que virt_observable
map_observable_isa_to_virtual
map_observable_isa_to_virtual(isa_observable, layout)
Mapper un observable défini par rapport au circuit transposé à l'ordre virtuel.
Dans l'ordre transpilé (ou ISA), les qubits sont indexés sur la base de la disposition "physique" des qubits dans le dispositif.
Paramètres
- isa_observable (Pauli |SparsePauliOp |SparseObservable) – Un objet de Pauli, SparsePauliOp, ou SparseObservable.
- layout (Sequence[int]) – La liste des qubits physiques utilisés pour le circuit isa.
Retours
Un opérateur mappé du même type que isa_observable
Type de retour