

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Support per OpenQASM su diversi dispositivi Braket
<a name="braket-openqasm-device-support"></a>

Per i dispositivi che supportano OpenQASM 3.0, il `action` campo supporta una nuova azione tramite la `GetDevice` risposta, come mostrato nell'esempio seguente per i dispositivi and. Rigetti 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"
            ],
            ….
        }
    }
}
```

Per i dispositivi che supportano il controllo a impulsi, il `pulse` campo viene visualizzato nella `GetDevice` risposta. L'esempio seguente mostra questo `pulse` campo per il Rigetti dispositivo.

```
// 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
    }
  }
}
```

I campi precedenti descrivono in dettaglio quanto segue:

 **Porte:** 

Descrive le porte predefinite dei dispositivi esterni (`extern`) dichiarate sulla QPU in aggiunta alle proprietà associate della porta specificata. Tutte le porte elencate in questa struttura sono pre-dichiarate come identificatori validi all'interno del `OpenQASM 3.0` programma inviato dall'utente. Le proprietà aggiuntive di una porta includono:
+ ID porta (PortID)
  + Il nome della porta dichiarato come identificatore in OpenQASM 3.0.
+ Direzione (direzione)
  + La direzione del porto. Le porte di azionamento trasmettono gli impulsi (direzione «tx»), mentre le porte di misurazione ricevono gli impulsi (direzione «rx»).
+ Tipo di porta (PortType)
  + Il tipo di azione di cui è responsabile questa porta (ad esempio, drive, capture o ff - fast-flux).
+ Dt (dt)
  + Il tempo in secondi che rappresenta una singola fase temporale di campionamento sulla porta specificata.
+ Mappature Qubit (QubitMappings)
  + I qubit associati alla porta specificata.
+ Frequenze centrali (CenterFrequencies)
  + Un elenco delle frequenze centrali associate per tutti i frame predichiarati o definiti dall'utente sulla porta. Per ulteriori informazioni, fate riferimento a Frames.
+ Proprietà specifiche QHP () qhpSpecificProperties
  + Una mappa opzionale che descrive in dettaglio le proprietà esistenti sulla porta specifica del QHP.

 **Cornici:** 

Descrive i frame esterni predefiniti dichiarati sulla QPU e le proprietà associate relative ai frame. Tutti i frame elencati in questa struttura sono pre-dichiarati come identificatori validi all'interno del `OpenQASM 3.0` programma inviato dall'utente. Le proprietà aggiuntive di un frame includono:
+ ID del frame (frameID)
  + Il nome del frame dichiarato come identificatore in OpenQASM 3.0.
+ ID porta (PortID)
  + La porta hardware associata per il frame.
+ Frequenza (frequenza)
  + La frequenza iniziale predefinita del frame.
+ Frequenza centrale (CenterFrequency)
  + Il centro della larghezza di banda della frequenza del frame. In genere, i frame possono essere regolati solo su una determinata larghezza di banda attorno alla frequenza centrale. Di conseguenza, le regolazioni della frequenza devono rimanere entro un determinato delta della frequenza centrale. È possibile trovare il valore della larghezza di banda nei parametri di convalida.
+ Fase (fase)
  + La fase iniziale predefinita del frame.
+ Porta associata (AssociatedGate)
  + Le porte associate al frame specificato.
+ Mappature Qubit (QubitMappings)
  + I qubit associati al frame specificato.
+ Proprietà specifiche QHP () qhpSpecificProperties
  + Una mappa opzionale che descrive in dettaglio le proprietà esistenti relative al frame specifico del QHP.

 **SupportsDynamicFrames:** 

Descrive se un frame può essere dichiarato `cal` o `defcal` bloccato tramite la OpenPulse `newframe` funzione. Se questo è falso, all'interno del programma possono essere utilizzati solo i frame elencati nella struttura del frame.

 **SupportedFunctions:** 

Descrive le OpenPulse funzioni supportate dal dispositivo oltre agli argomenti, ai tipi di argomento e ai tipi restituiti associati per le funzioni specificate. Per vedere esempi di utilizzo delle OpenPulse funzioni, consultate le [OpenPulsespecifiche](https://openqasm.com/language/openpulse.html). Al momento, Braket supporta:
+ shift\_phase
  + Sposta la fase di un frame in base a un valore specificato
+ set\_phase
  + Imposta la fase del frame sul valore specificato
+ swap\_phases
  + Scambia le fasi tra due frame.
+ shift\_frequency
  + Sposta la frequenza di un fotogramma in base a un valore specificato
+ set\_frequency
  + Imposta la frequenza del frame sul valore specificato
+ giocare
  + Pianifica una forma d'onda
+ capture\_v0
  + Restituisce il valore di un frame di acquisizione in un registro di bit

 **SupportedQhpTemplateWaveforms:** 

Descrive le funzioni di forma d'onda predefinite disponibili sul dispositivo e gli argomenti e i tipi associati. Per impostazione predefinita, Braket Pulse offre routine di forme d'onda predefinite su tutti i dispositivi, che sono:

 ***Costante*** 

![Equazione matematica che mostra una funzione costante con parametri t, tau e iq in cui l'output è sempre uguale a iq.](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/images/ConstantFunction.png)


 `τ`è la lunghezza della forma d'onda ed è un numero complesso. `iq`

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

 ***gaussiana*** 

![Equazione matematica che mostra la funzione gaussiana con i parametri t, tau, sigma, A=1 e zaE=0.](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/images/GaussianFunction.png)


 `τ`è la lunghezza della forma d'onda, è la larghezza della gaussiana e l'ampiezza. `σ` `A` Se è impostata `ZaE` su`True`, la gaussiana viene sfalsata e ridimensionata in modo che sia uguale a zero all'inizio e alla fine della forma d'onda e raggiunga il massimo. `A`

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

 ***TRASCINA (gaussiano)*** 

![Equazione matematica per la distribuzione gaussiana DRAG con parametri t, tau, sigma, beta, A=1 e ZaE=0.](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/images/DRAGGaussianFunction.png)


 `τ`è la lunghezza della forma d'onda, è la larghezza della gaussiana, `σ` è un parametro libero ed è l'ampiezza. `β` `A` Se è impostata `ZaE` su`True`, la Derivative Removal by Adiabatic Gate (DRAG) gaussian viene sfalsata e ridimensionata in modo da essere uguale a zero all'inizio e alla fine della forma d'onda e la parte reale raggiunge il massimo. `A` Per ulteriori informazioni sulla forma d'onda DRAG, vedere il paper [Simple Pulses for Elimination of Leakage in Weakly](https://doi.org/10.1103/PhysRevLett.103.110501) Nonlinear Qubits.

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

 ***Piazza Erf*** 

![Equazione matematica per la distribuzione quadrata di Erf con parametri t, lunghezza, larghezza, sigma, A=1 e zaE=0.](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/images/ErfSquareFunction.PNG)


Dov'è la lunghezza, `L` `W` è la larghezza della forma d'onda, `σ` definisce la velocità con cui gli spigoli si alzano e si abbassano e, è l'ampiezza. `t1​=(L−W)/2` `t22=(L+W)/2` `A` Se è impostata `ZaE` su`True`, la gaussiana viene sfalsata e ridimensionata in modo che sia uguale a zero all'inizio e alla fine della forma d'onda e raggiunga il massimo. `A` L'equazione seguente è la versione ridimensionata della forma d'onda.

![Equazione matematica per la distribuzione quadrata di Erf ridimensionata con parametri ZaE=1.](http://docs.aws.amazon.com/it_it/braket/latest/developerguide/images/RescaledErfSquareFunction.PNG)


`b=erf(-t1​/σ)/2+erf(t2​/σ)/2`Dove e. `a=erf(W/2σ)`

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

 **SupportsLocalPulseElements:** 

Descrive se gli elementi a impulsi, come porte, frame e forme d'onda, possono essere definiti localmente in `defcal` blocchi. Se il valore è`false`, gli elementi devono essere definiti in `cal` blocchi.

 **SupportsNonNativeGatesWithPulses:** 

Descrive se è possibile o meno utilizzare porte non native in combinazione con programmi a impulsi. Ad esempio, non è possibile utilizzare una porta non nativa come una `H` porta in un programma senza prima definire la porta passante `defcal` per il qubit utilizzato. Puoi trovare l'elenco delle `nativeGateSet` chiavi dei gate nativi nella sezione delle funzionalità del dispositivo.

 **ValidationParameters:** 

Descrive i limiti di convalida degli elementi Pulse, tra cui:
+ Valori di scala massima/ampiezza massima per le forme d'onda (arbitrari e predefiniti)
+ Larghezza di banda di frequenza massima rispetto alla frequenza centrale fornita in Hz
+ Impulso minimo length/duration in secondi
+ Impulso massimo length/duration in secondi

## Operazioni, risultati e tipi di risultati supportati con OpenQASM
<a name="braket-openqasm-supported-operations-results-result-types"></a>

Per scoprire quali funzionalità di OpenQASM 3.0 sono supportate da ciascun dispositivo, è possibile fare riferimento alla `braket.ir.openqasm.program` chiave nel `action` campo sull'output delle funzionalità del dispositivo. Ad esempio, le seguenti sono le operazioni supportate e i tipi di risultati disponibili per il simulatore Braket State Vector. SV1

```
...
  "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
        }
      ]
    }
  },
...
```