Skip to main content
IBM Quantum Platform

GateFolding

class GateFolding

GitHub

Bases : MitigationTask

Calcule les valeurs attendues des observables à l'aide de l'extrapolation sans bruit (ZNE) avec une méthode d'atténuation du « gate folding ».

Cette classe permet de préparer une fonction « QuantumProgram » dont le circuit a été optimisé à l'aide de la méthode ZNE avec repliement de portes, qui peut être exécutée sur du matériel à l'aide de l'Executor, puis de traiter les résultats afin de calculer les valeurs attendues optimisées d'observables données. Les paramètres de la tâche doivent être fournis en entrée à la fonction prepare, et les variables pertinentes nécessaires au post-traitement sont enregistrées en interne :

gf_task = GateFolding()
program = gf_task.prepare(circuit=circuit,
                       observables=observables,
                       parameters=parameter_values,
                       noise_factors=noise_factors_array,
                       extrapolator=extrapolators_list)
job = executor.run(program)
results = job.result()
mitigated_result = gf_task.postprocess(results)

Pour calculer les valeurs attendues du résultat d'un job chargé, il est possible de créer une tâche « GateFolding » à partir des résultats du job, en incluant toutes les variables internes nécessaires au post-traitement. Il est également possible de fournir directement à la méthode statique compute_expectation_value les variables nécessaires au post-traitement. Exemple d'exécution d'un post-traitement sur un résultat chargé :

gf_task = GateFolding()
program = gf_task.prepare(circuit=circuit,
                       observables=observables,
                       parameters=parameter_values,
                       noise_factors=noise_factors_array,
                       extrapolator=extrapolators_list)
job_id = executor.run(program).job_id

job = service.job(job_id)
results = job.result()
gf_task = load_tasks_from_result(results)[0]
mitigated_result = gf_task.postprocess(results)

Instancier une tâche « GateFolding ».


Attributs

VERSION

Valeur par défaut : '0.1'


Méthodes

compute_expectation_value

static compute_expectation_value(item_result, observables, param_shape=None, param_basis_pairs=None, meas_bases=None, broadcast_obs_and_params=False, measure_noise_data=None)

GitHub

Valeurs attendues du traitement pour le résultat d'un seul élément.

Cette fonction permet de calculer les valeurs attendues d'un résultat d'élément unique non atténué sans avoir à créer une nouvelle instance de classe.

Paramètres

  • item_result (QuantumProgramItemResult) – Le résultat de l'opération.
  • observables (ObservablesArray |Sequence[SparsePauliOp]) – Les observables pour lesquelles il faut calculer les valeurs attendues.
  • param_shape (tuple[int, ...] | None) – Le format des valeurs des paramètres.
  • param_basis_pairs (list[tuple[tuple[int, ...], str]] | None) – La correspondance entre les paramètres et les indices permettant de mesurer la base.
  • meas_bases (Sequence[Pauli] | Sequence[str] | PauliList | None) – Liste des bases de Pauli mesurées. Le -ième i élément est une base de mesure supposée correspondre à la -ième i tranche des données contenues dans item_result.
  • broadcast_obs_and_params (bool) – Indique s'il faut diffuser les observables et les valeurs des paramètres.
  • measure_noise_data (PauliLindbladMap |ndarray | None) – Données d'étalonnage du bruit de mesure pour l'atténuation du TREX.

Retours

Un tableau de type « PubResult » contenant les std champs et evs dans ses données, où evs représentent std les valeurs attendues et les écarts-types de ces valeurs attendues. Si cette option est broadcast_obs_and_params définie sur « True », les données contiendront également un champ twirl_stds correspondant à l'écart-type entre les différentes randomisations.

Augmentations

  • ValueError – Si ne contient item_result aucune clé '_meas' .
  • ValueError – Si item_result['_meas'] présente un nombre d'axes non valide.
  • ValueError – Si et param_shape ne peuvent observables.shape pas être diffusés l'un par rapport à l'autre.

Type de retour

PubResult

compute_expectation_value_gate_folding

static compute_expectation_value_gate_folding(item_results, observables, param_shape, param_basis_pairs, noise_factors, extrapolator, extrapolated_noise_factors=None, meas_bases=None, broadcast_obs_and_params=False, measure_noise_data=None, custom_fit=None)

GitHub

Valeurs attendues du traitement pour le résultat d'un seul élément.

Cette fonction permet de calculer les valeurs attendues pour le résultat d'un élément dont l'effet « gate_folding » a été atténué, sans avoir à créer une nouvelle instance de classe.

Paramètres

  • item_results (list[QuantumProgramItemResult]) – Liste des résultats par élément – un pour chaque facteur de bruit.

  • observables (ObservablesArray |Sequence[SparsePauliOp]) – Les observables pour lesquelles il faut calculer les valeurs attendues.

  • param_shape (tuple[int, ...] | None) – Le format des valeurs des paramètres.

  • param_basis_pairs (list[tuple[tuple[int, ...], str]] | None) – La correspondance entre les paramètres et les indices permettant de mesurer la base.

  • noise_factors (list[float]) – Les facteurs de bruit qui ont été utilisés pour amplifier le bruit.

  • extrapolated_noise_factors (float |int |list[float] | None) – Facteurs de bruit à prendre en compte pour évaluer l'adéquation des modèles.

  • extrapolator (list[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']]) –

    Le ou les modèles d'extrapolation à utiliser. Les modèles seront testés par ordre de priorité. Modèles pris en charge (chacun correspond à la fonction indiquée du facteur de bruit x) :

    • "linear": a + b*x
    • "polynomial_degree_k" (1 ≤ k ≤ 7) : un polynôme de degré k
    • "exponential": a*exp(b*x)
    • "double_exponential": a*exp(b*x) + c*exp(d*x) (taux limités à la décroissance)
    • "fallback": pas d'ajustement; la valeur mesurée au facteur de bruit le plus faible
    • custom: La fonction d'extrapolation personnalisée spécifiée dans le paramètre custom_fit
  • meas_bases (Sequence[Pauli] | Sequence[str] | PauliList | None) – Liste des bases de Pauli mesurées. Le ème i élément correspond à une base de mesure supposée correspondre à la ème i tranche des données dans chacune des item_results.

  • broadcast_obs_and_params (bool) – Indique s'il faut diffuser les observables et les valeurs des paramètres.

  • measure_noise_data (PauliLindbladMap |ndarray | None) – Données d'étalonnage du bruit de mesure pour l'atténuation du TREX. Il peut s'agir soit d'une PauliLindbladMap e d'un modèle de bruit appris au préalable, soit du résultat d'un circuit d'étalonnage.

  • custom_fit (tuple[Callable[[...], ndarray], list[float], tuple[float, ...] | tuple[list[float], ...]] | None) – Une fonction d'ajustement personnalisée qui sera utilisée pour l'extrapolation. Doit inclure un tuple sous la forme suivante : (function, p_0, bounds). La fonction doit prendre la variable indépendante comme premier argument et les paramètres d'ajustement comme arguments suivants, séparés les uns des autres. p_0 est un tableau contenant les valeurs initiales estimées pour les paramètres, et « bounds » désigne les limites de ces paramètres. Ces paramètres seront transmis en tant qu'arguments à la fonction scipy.optimize.curve_fit .

Retours

  • evs: valeurs attendues calculées au point de bruit nul.

  • std: les écarts-types des valeurs attendues extrapolées, évaluées au point de bruit nul.

  • evs_noise_factors: valeurs attendues calculées aux points noise_factors.

  • stds_noise_factors: écarts-types calculés aux points « noise_factors ».

  • stds_twirl_noise_factors: écarts-types entre les différentes randomisations, calculés à la

    points « facteurs de bruit ».

  • evs_extrapolated: valeurs attendues calculées aux points extrapolated_noise_factors.

    Définir la valeur sur « None » si est extrapolated_noise_factors « None ».

  • stds_extrapolated: écarts-types calculés aux points extrapolated_noise_factors.

    Définir la valeur sur « None » si est extrapolated_noise_factors « None ».

L' PubResult contiendra également un champ selected_extrapolators dans les métadonnées, qui répertorie les extrapolateurs valides utilisés pour extrapoler les données pour chaque terme observable au point d'extrapolation sans bruit.

Type de retour

Un fichier « PubResult » contenant les champs suivants

Augmentations

  • ValueError – Si l'un d'entre eux n'a item_results pas de clé '_meas' .
  • ValueError – Si l’une des item_results données '_meas' présente un nombre d’axes non valide.
  • ValueError – Si et param_shape ne peuvent observables.shape pas être diffusés l'un par rapport à l'autre.
  • ValueError – Si noise_factors est sous-spécifié pour n'importe quel extrapolateur.

create_instance_from_passthrough_data

static create_instance_from_passthrough_data(passthrough, trex=None)

GitHub

Créer une instance de GateFolding à partir d'un dictionnaire de transfert chargé à partir du résultat de l'exécution d'un programme quantique.

Paramètres

  • passthrough (dict[str, Any]) – Dictionnaire « Passthrough_data » chargé à partir du résultat de l'exécution d'un programme quantique.
  • trex (TREX | None) – Une instance TREX contenant un circuit d'étalonnage est exécutée dans le même programme quantique. Doit être conservé None si la réduction TREX n'a pas été utilisée ou si aucun étalonnage TREX n'a été effectué dans le cadre du même programme quantique.

Retours

Une instance de « GateFolding ».

Type de retour

GateFolding

find_unique_layers

find_unique_layers(circuit, custom_boxing_options=None)

GitHub

Renvoie les couches « boxed » uniques du circuit donné en utilisant les options de « boxing » indiquées.

Paramètres

  • circuit (QuantumCircuit) – Le circuit qui lui confère ses couches uniques.
  • custom_boxing_options (dict | None) – Les options de mise en encadré personnalisées qui seront utilisées par la fonction generate_boxing_pass_manager() .

Retours

Couches uniques encadrées du circuit donné.

Type de retour

liste [ CircuitInstruction ]

postprocess

postprocess(results, measure_noise_data=None, *, noise_factors=None, extrapolator=None, extrapolated_noise_factors=None, custom_fit=None)

GitHub

Valeurs attendues du processus pour le résultat d'une seule tâche « GateFolding ».

Paramètres

  • results (list[QuantumProgramItemResult] | QuantumProgramResult) – Résultats de l'exécution. Il peut s'agir soit de l'objet « résultats » dans son intégralité, soit des éléments de cette tâche pour lesquels l'effet de « gate folding » a été atténué. Si la tâche d'étalonnage TREX est ajoutée au programme quantique, ses résultats seront utilisés pour calculer les données relatives au bruit de mesure, à condition que l'objet de résultats soit fourni dans son intégralité.

  • noise_factors (Sequence[float] | None) – Les facteurs de bruit qui ont été utilisés pour amplifier le bruit.

  • extrapolated_noise_factors (list[float] | None) – Facteurs de bruit à prendre en compte pour évaluer l'adéquation des modèles.

  • extrapolator (Sequence[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']] | None) –

    Le ou les modèles d'extrapolation à utiliser. Les modèles seront testés par ordre de priorité. Modèles pris en charge (chacun correspond à la fonction indiquée du facteur de bruit x) :

    • "linear": a + b*x
    • "polynomial_degree_k" (1 ≤ k ≤ 7) : un polynôme de degré k
    • "exponential": a*exp(b*x)
    • "double_exponential": a*exp(b*x) + c*exp(d*x) (taux limités à la décroissance)
    • "fallback": pas d'ajustement; la valeur mesurée au facteur de bruit le plus faible
    • custom: La fonction d'extrapolation personnalisée spécifiée dans le paramètre custom_fit
  • measure_noise_data (PauliLindbladMap |ndarray | None) – Données d'étalonnage du bruit de mesure pour l'atténuation du TREX. Il peut s'agir soit d'une PauliLindbladMap e d'un modèle de bruit appris au préalable, soit du résultat d'un circuit d'étalonnage.

  • custom_fit (tuple[Callable[[...], ndarray], list[float], tuple[float, ...] | tuple[list[float], ...]] | None) – Une fonction d'ajustement personnalisée qui sera utilisée pour l'extrapolation. Doit inclure un tuple sous la forme suivante : (function, p_0, bounds). La fonction doit prendre la variable indépendante comme premier argument et les paramètres d'ajustement comme arguments suivants, séparés les uns des autres. p_0 est un tableau contenant les valeurs initiales estimées pour les paramètres, et « bounds » désigne les limites de ces paramètres. Ces paramètres seront transmis en tant qu'arguments à la fonction scipy.optimize.curve_fit .

Retours

  • evs: valeurs attendues calculées au point de bruit nul.

  • std: les écarts-types des valeurs attendues extrapolées, évaluées au point de bruit nul.

  • evs_noise_factors: valeurs attendues calculées aux points noise_factors.

  • stds_noise_factors: écarts-types calculés aux points « noise_factors ».

  • stds_twirl_noise_factors: écarts-types entre les différentes randomisations, calculés à la

    points « facteurs de bruit ».

  • evs_extrapolated: valeurs attendues calculées aux points extrapolated_noise_factors.

    Définir la valeur sur « None » si est extrapolated_noise_factors « None ».

  • stds_extrapolated: écarts-types calculés aux points extrapolated_noise_factors.

    Définir la valeur sur « None » si est extrapolated_noise_factors « None ».

L' PubResult contiendra également un champ selected_extrapolators dans les métadonnées, qui répertorie les extrapolateurs valides utilisés pour extrapoler les données pour chaque terme observable au point d'extrapolation sans bruit.

Type de retour

Un fichier « PubResult » contenant les champs suivants

Augmentations

  • ValueError – Si l'un des résultats de l'élément de la tâche ne comporte pas de clé '_meas' .
  • ValueError – Si l’une des données '_meas' des résultats de l’élément comporte un nombre d’axes non valide.
  • ValueError – Si et param_shape ne peuvent observables.shape pas être diffusés l'un par rapport à l'autre.

prepare

prepare(circuit, observables, parameters, custom_boxing_options=None, shots_per_randomization=64, num_randomizations=128, broadcast_obs_and_params=False, trex=None, quantum_program=None, *, folding_method='random', noise_factors=(1, 3, 5), extrapolator=None, extrapolated_noise_factors=None)

GitHub

Crée un élément QuantumProgram dont les risques liés à « GateFolding » ont été atténués, destiné à être exécuté via Executor.

Crée un élément pour un QuantumProgram, qui peut être exécuté via Executor et dont l' GateFolding ité est atténuée (amplifie le bruit à l'aide de techniques de « gate folding » et extrapole jusqu'au point de bruit nul). Si un est quantum_program fourni, le nouvel élément sera ajouté au programme existant; dans le cas contraire, un nouveau programme sera créé, ne contenant que l'élément créé. Si cette option est broadcast_obs_and_params activée, les observables et les paramètres seront diffusés selon les règles de diffusion de Samplomatic, afin de permettre d'associer certains paramètres à certaines observables. Sinon, chaque paramètre sera évalué pour chaque observable (produit extérieur des paramètres et des observables). Il convient de noter que le post-traitement d'un produit scalaire est généralement plus rapide.

Paramètres

  • circuit (QuantumCircuit) – Le circuit quantique.

  • observables (ObservablesArray |Sequence[SparsePauliOp]) – Les observables permettant de calculer leurs valeurs attendues.

  • parameters (ndarray | None) – Les paramètres d'un circuit paramétrique.

  • custom_boxing_options (dict | None) – Les options de mise en encadré personnalisées qui seront utilisées par la fonction generate_boxing_pass_manager() .

  • shots_per_randomization (int) – Le nombre d'injections par randomisation.

  • num_randomizations (int) – Le nombre de randomisations.

  • broadcast_obs_and_params (bool) – Déterminer s'il faut diffuser les observables et les paramètres.

  • trex (TREX | None) – Une instance de correction TREX qui sera utilisée pour corriger les erreurs de lecture.

  • quantum_program (QuantumProgram | None) – Le programme Quantum permettant d'ajouter un article. Si la valeur est « None », un nouveau programme sera créé.

  • folding_method (Literal['random', 'front', 'back']) –

    La technique à utiliser pour combiner les portes à 2 qubits afin d'amplifier le bruit. Si le facteur de bruit nécessite de n'amplifier qu'un sous-ensemble de portes, celles-ci sont alors sélectionnées selon la méthode suivante :

    • "random" (par défaut) : les portes sont choisies au hasard.
    • "front": les portes sont sélectionnées à partir de la partie avant du circuit DAG ordonné topologiquement.
    • "back": les portes sont sélectionnées à partir de la partie arrière du circuit DAG ordonné topologiquement.
  • noise_factors (Sequence[float |int]) – Les facteurs de bruit à utiliser pour amplifier le bruit.

  • extrapolator (Sequence[Literal['linear', 'exponential', 'double_exponential', 'polynomial_degree_1', 'polynomial_degree_2', 'polynomial_degree_3', 'polynomial_degree_4', 'polynomial_degree_5', 'polynomial_degree_6', 'polynomial_degree_7', 'fallback', 'custom']] | None) –

    Le ou les modèles d'extrapolation dont l'utilisation est prévue lors du post-traitement. Utilisé lors de la préparation pour vérifier qu'il y a suffisamment de facteurs de bruit pour garantir la validité de l'ajustement à l'aide de ces extrapolateurs. Si None, aucune validation ne sera effectuée. Modèles pris en charge (chacun correspond à la fonction indiquée du facteur de bruit x) :

    • "linear": a + b*x
    • "polynomial_degree_k" (1 ≤ k ≤ 7) : un polynôme de degré k
    • "exponential": a*exp(b*x)
    • "double_exponential": a*exp(b*x) + c*exp(d*x) (taux limités à la décroissance)
    • "fallback": pas d'ajustement; la valeur mesurée au facteur de bruit le plus faible
  • extrapolated_noise_factors (list[float] | None) – Les facteurs de bruit destinés à évaluer les ajustements devraient être utilisés lors du post-traitement. Permet d'enregistrer les données afin de faciliter leur traitement ultérieur. Peut être modifié lors du post-traitement.

Retours

Un élément QuantumProgram dont les risques ont été atténués par l' GateFolding, pouvant être exécuté via Executor.

Type de retour

QuantumProgram

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