

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Support d'OpenQASM sur différents appareils Braket
<a name="braket-openqasm-device-support"></a>

Pour les appareils compatibles avec OpenQASM 3.0, le `action` champ prend en charge une nouvelle action par le biais de la `GetDevice` réponse, comme indiqué dans l'exemple suivant pour les Rigetti périphériques et. IonQ

```
//OpenQASM as available with the Rigetti device capabilities
{
    "braketSchemaHeader": {
        "name": "braket.device_schema.rigetti.rigetti_device_capabilities",
        "version": "1"
    },
    "service": {...},
    "action": {
        "braket.ir.jaqcd.program": {...},
        "braket.ir.openqasm.program": {
            "actionType": "braket.ir.openqasm.program",
            "version": [
                "1"
            ],
            ….
        }
    }
}

//OpenQASM as available with the IonQ device capabilities
{
    "braketSchemaHeader": {
        "name": "braket.device_schema.ionq.ionq_device_capabilities",
        "version": "1"
    },
    "service": {...},
    "action": {
        "braket.ir.jaqcd.program": {...},
        "braket.ir.openqasm.program": {
            "actionType": "braket.ir.openqasm.program",
            "version": [
                "1"
            ],
            ….
        }
    }
}
```

Pour les appareils qui prennent en charge le contrôle du pouls, `pulse` le champ est affiché dans la `GetDevice` réponse. L'exemple suivant montre ce `pulse` champ pour le Rigetti périphérique.

```
// Rigetti
{
  "pulse": {
    "braketSchemaHeader": {
      "name": "braket.device_schema.pulse.pulse_device_action_properties",
      "version": "1"
    },
    "supportedQhpTemplateWaveforms": {
      "constant": {
        "functionName": "constant",
        "arguments": [
          {
            "name": "length",
            "type": "float",
            "optional": false
          },
          {
            "name": "iq",
            "type": "complex",
            "optional": false
          }
        ]
      },
      ...
    },
    "ports": {
      "q0_ff": {
        "portId": "q0_ff",
        "direction": "tx",
        "portType": "ff",
        "dt": 1e-9,
        "centerFrequencies": [
          375000000
        ]
      },
      ...
    },
    "supportedFunctions": {
      "shift_phase": {
        "functionName": "shift_phase",
        "arguments": [
          {
            "name": "frame",
            "type": "frame",
            "optional": false
          },
          {
            "name": "phase",
            "type": "float",
            "optional": false
          }
        ]
      },
     ...
    },
    "frames": {
      "q0_q1_cphase_frame": {
        "frameId": "q0_q1_cphase_frame",
        "portId": "q0_ff",
        "frequency": 462475694.24460185,
        "centerFrequency": 375000000,
        "phase": 0,
        "associatedGate": "cphase",
        "qubitMappings": [
          0,
          1
        ]
      },
      ...
    },
    "supportsLocalPulseElements": false,
    "supportsDynamicFrames": false,
    "supportsNonNativeGatesWithPulses": false,
    "validationParameters": {
      "MAX_SCALE": 4,
      "MAX_AMPLITUDE": 1,
      "PERMITTED_FREQUENCY_DIFFERENCE": 400000000
    }
  }
}
```

Les champs précédents détaillent les éléments suivants :

 **Ports :** 

Décrit les ports de périphériques externes (`extern`) prédéfinis déclarés sur le QPU en plus des propriétés associées au port donné. Tous les ports répertoriés dans cette structure sont prédéclarés en tant qu'identifiants valides dans le `OpenQASM 3.0` programme soumis par l'utilisateur. Les propriétés supplémentaires d'un port sont les suivantes :
+ Identifiant du port (PortID)
  + Le nom de port déclaré comme identifiant dans OpenQASM 3.0.
+ Direction (direction)
  + La direction du port. Les ports d'entraînement transmettent des impulsions (direction « tx »), tandis que les ports de mesure reçoivent des impulsions (direction « rx »).
+ Type de port (PortType)
  + Type d'action dont ce port est responsable (par exemple, drive, capture ou ff - fast-flux).
+ Dt (dt)
  + Durée en secondes qui représente un seul pas de temps d'échantillonnage sur le port donné.
+ Mappages de qubits (QubitMappings)
  + Les qubits associés au port donné.
+ Fréquences centrales (CenterFrequencies)
  + Liste des fréquences centrales associées pour toutes les trames prédéclarées ou définies par l'utilisateur sur le port. Pour plus d'informations, reportez-vous à la section Cadres.
+ Propriétés spécifiques du QHP (SpecificPropertiesqhp)
  + Une carte facultative détaillant les propriétés existantes concernant le port spécifique au QHP.

 **Cadres :** 

Décrit les cadres externes préfabriqués déclarés sur le QPU ainsi que les propriétés associées aux cadres. Toutes les trames répertoriées dans cette structure sont prédéclarées comme des identifiants valides dans le `OpenQASM 3.0` programme soumis par l'utilisateur. Les propriétés supplémentaires d'un cadre sont les suivantes :
+ ID du cadre (FrameID)
  + Le nom du cadre déclaré comme identifiant dans OpenQASM 3.0.
+ Identifiant du port (ID du port)
  + Le port matériel associé à la trame.
+ Fréquence (fréquence)
  + Fréquence initiale par défaut de la trame.
+ Fréquence centrale (CenterFrequency)
  + Le centre de la bande passante de fréquence de la trame. Généralement, les trames ne peuvent être ajustées qu'à une certaine bande passante autour de la fréquence centrale. Par conséquent, les ajustements de fréquence doivent rester dans un delta donné par rapport à la fréquence centrale. Vous pouvez trouver la valeur de bande passante dans les paramètres de validation.
+ Phase (phase)
  + Phase initiale par défaut de la trame.
+ Porte associée (porte associée)
  + Les portes associées à la trame donnée.
+ Mappages de qubits (QubitMappings)
  + Les qubits associés à la trame donnée.
+ Propriétés spécifiques du QHP (SpecificPropertiesqhp)
  + Une carte optionnelle détaillant les propriétés existantes concernant le cadre spécifique au QHP.

 **SupportsDynamicFrames:** 

Décrit si un cadre peut être déclaré `cal` ou bloqué par `defcal` le biais de la OpenPulse `newframe` fonction. Si cette valeur est fausse, seules les images répertoriées dans la structure des cadres peuvent être utilisées dans le programme.

 **SupportedFunctions:** 

Décrit les OpenPulse fonctions prises en charge par le périphérique en plus des arguments, des types d'arguments et des types de retour associés aux fonctions données. Pour voir des exemples d'utilisation des OpenPulse fonctions, reportez-vous à la [OpenPulsespécification](https://openqasm.com/language/openpulse.html). À l'heure actuelle, Braket prend en charge :
+ shift\_phase
  + Déplace la phase d'une image d'une valeur spécifiée
+ set\_phase
  + Définit la phase du cadre à la valeur spécifiée
+ phases d'échange
  + Permute les phases entre deux images.
+ shift\_frequency
  + Déplace la fréquence d'une image d'une valeur spécifiée
+ set\_frequency
  + Définit la fréquence de l'image à la valeur spécifiée
+ jouer
  + Planifie une forme d'onde
+ capture v0
  + Renvoie la valeur d'une image de capture dans un registre de bits

 **SupportedQhpTemplateWaveforms:** 

Décrit les fonctions de forme d'onde prédéfinies disponibles sur le périphérique ainsi que les arguments et les types associés. Par défaut, Braket Pulse propose des routines de forme d'onde prédéfinies sur tous les appareils, à savoir :

 ***Constante*** 

![Équation mathématique montrant une fonction constante avec les paramètres t, tau et iq où le résultat est toujours égal à iq.](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/images/ConstantFunction.png)


 `τ`est la longueur de la forme d'onde et `iq` est un nombre complexe.

```
def constant(length, iq)
```

 ***Gaussien*** 

![Équation mathématique montrant la fonction gaussienne avec les paramètres t, tau, sigma, A=1 et Zae=0.](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/images/GaussianFunction.png)


 `τ`est la longueur de la forme d'onde, `σ` la largeur de la gaussienne et l'amplitude`A`. Si elle est réglée `ZaE` sur`True`, la valeur gaussienne est décalée et redimensionnée de telle sorte qu'elle soit égale à zéro au début et à la fin de la forme d'onde, et qu'elle atteigne son maximum. `A`

```
def gaussian(length, sigma, amplitude=1, zero_at_edges=False)
```

 ***DRAG Gaussien*** 

![Équation mathématique pour la distribution gaussienne DRAG avec les paramètres t, tau, sigma, beta, A=1 et zAE=0.](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/images/DRAGGaussianFunction.png)


 `τ`est la longueur de la forme d'onde, `σ` est la largeur de la gaussienne, `β` est un paramètre libre et `A` est l'amplitude. Si la valeur est `ZaE` définie sur`True`, la valeur gaussienne de suppression des dérivées par porte adiabatique (DRAG) est décalée et redimensionnée de telle sorte qu'elle soit égale à zéro au début et à la fin de la forme d'onde, et que la partie réelle atteigne son maximum. `A` Pour plus d'informations sur la forme d'onde DRAG, consultez l'article [Simple Pulses for Elimination of Leak in Weakly Nonlinear](https://doi.org/10.1103/PhysRevLett.103.110501) Qubits.

```
def drag_gaussian(length, sigma, beta, amplitude=1, zero_at_edges=False)
```

 ***Place Erf*** 

![Équation mathématique pour la distribution du carré d'Erf avec les paramètres t, longueur, largeur, sigma, A=1 et zAE=0.](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/images/ErfSquareFunction.PNG)


Où `L` est la longueur, `W` est la largeur de la forme d'onde, `σ` définit la vitesse à laquelle les arêtes montent et descendent`t22=(L+W)/2`, `t1​=(L−W)/2` et quelle `A` est l'amplitude. Si elle est réglée `ZaE` sur`True`, la valeur gaussienne est décalée et redimensionnée de telle sorte qu'elle soit égale à zéro au début et à la fin de la forme d'onde, et qu'elle atteigne son maximum. `A` L'équation suivante est la version redimensionnée de la forme d'onde.

![Équation mathématique pour la distribution du carré d'Erf redimensionnée avec les paramètres Zae=1.](http://docs.aws.amazon.com/fr_fr/braket/latest/developerguide/images/RescaledErfSquareFunction.PNG)


Où `a=erf(W/2σ)` et`b=erf(-t1​/σ)/2+erf(t2​/σ)/2`.

```
def erf_square(length, width, sigma, amplitude=1, zero_at_edges=False)
```

 **SupportsLocalPulseElements:** 

Décrit si les éléments d'impulsion, tels que les ports, les trames et les formes d'onde, peuvent être définis localement par `defcal` blocs. Si la valeur est`false`, les éléments doivent être définis par `cal` blocs.

 **SupportsNonNativeGatesWithPulses:** 

Décrit si nous pouvons ou ne pouvons pas utiliser des portes non natives en combinaison avec des programmes d'impulsions. Par exemple, vous ne pouvez pas utiliser une porte non native comme une `H` porte dans un programme sans d'abord définir la porte `defcal` pour le qubit utilisé. Vous pouvez trouver la liste des `nativeGateSet` clés de porte natives sous les fonctionnalités de l'appareil.

 **ValidationParameters:** 

Décrit les limites de validation des éléments d'impulsion, notamment :
+ Échelle maximale/Valeurs d'amplitude maximales pour les formes d'onde (arbitraires et prédéfinies)
+ Largeur de bande de fréquence maximale à partir de la fréquence centrale fournie en Hz
+ Pouls minimal length/duration en secondes
+ Pouls maximal length/duration en secondes

## Opérations, résultats et types de résultats pris en charge avec OpenQASM
<a name="braket-openqasm-supported-operations-results-result-types"></a>

Pour savoir quelles fonctionnalités d'OpenQASM 3.0 sont prises en charge par chaque appareil, vous pouvez vous référer à la `braket.ir.openqasm.program` clé dans le `action` champ de sortie des capacités de l'appareil. Par exemple, les opérations prises en charge et les types de résultats disponibles pour le simulateur SV1 Braket State Vector sont les suivants.

```
...
  "action": {
    "braket.ir.jaqcd.program": {
      ...
    },
 "braket.ir.openqasm.program": {
      "version": [
        "1.0"
      ],
      "actionType": "braket.ir.openqasm.program",
      "supportedOperations": [
        "ccnot",
        "cnot",
        "cphaseshift",
        "cphaseshift00",
        "cphaseshift01",
        "cphaseshift10",
        "cswap",
        "cy",
        "cz",
        "h",
        "i",
        "iswap",
        "pswap",
        "phaseshift",
        "rx",
        "ry",
        "rz",
        "s",
        "si",
        "swap",
        "t",
        "ti",
        "v",
        "vi",
        "x",
        "xx",
        "xy",
        "y",
        "yy",
        "z",
        "zz"
      ],
      "supportedPragmas": [
        "braket_unitary_matrix"
      ],
      "forbiddenPragmas": [],
      "maximumQubitArrays": 1,
      "maximumClassicalArrays": 1,
      "forbiddenArrayOperations": [
        "concatenation",
        "negativeIndex",
        "range",
        "rangeWithStep",
        "slicing",
        "selection"
      ],
      "requiresAllQubitsMeasurement": true,
      "supportsPhysicalQubits": false,
      "requiresContiguousQubitIndices": true,
      "disabledQubitRewiringSupported": false,
      "supportedResultTypes": [
        {
          "name": "Sample",
          "observables": [
            "x",
            "y",
            "z",
            "h",
            "i",
            "hermitian"
          ],
          "minShots": 1,
          "maxShots": 100000
        },
        {
          "name": "Expectation",
          "observables": [
            "x",
            "y",
            "z",
            "h",
            "i",
            "hermitian"
          ],
          "minShots": 0,
          "maxShots": 100000
        },
        {
          "name": "Variance",
          "observables": [
            "x",
            "y",
            "z",
            "h",
            "i",
            "hermitian"
          ],
          "minShots": 0,
          "maxShots": 100000
        },
        {
          "name": "Probability",
          "minShots": 1,
          "maxShots": 100000
        },
        {
          "name": "Amplitude",
          "minShots": 0,
          "maxShots": 0
        }
        {
          "name": "AdjointGradient",
          "minShots": 0,
          "maxShots": 0
        }
      ]
    }
  },
...
```