

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 다양한 Braket 디바이스에서의 OpenQASM에 대한 지원
<a name="braket-openqasm-device-support"></a>

OpenQASM 3.0을 지원하는 디바이스의 경우 `action` 필드는 Rigetti 및 IonQ 디바이스에 대한 다음 예제와 같이 `GetDevice` 응답을 통해 새 작업을 지원합니다.

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

펄스 제어를 지원하는 디바이스의 경우 `pulse` 필드가 `GetDevice` 응답에 표시됩니다. 다음 예제에서는 Rigetti 디바이스에 대한 이 `pulse` 필드를 보여줍니다.

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

앞서 언급된 필드는 다음을 상세히 설명합니다.

 **포트:** 

QPU에 선언된 사전 제작 외부(`extern`) 디바이스 포트와 지정된 포트의 관련 속성을 설명합니다. 이 구조에 나열된 모든 포트는 사용자가 제출한 `OpenQASM 3.0` 프로그램 내에서 유효한 식별자로 사전 선언됩니다. 포트의 추가 속성은 다음과 같습니다.
+ 포트 ID(portId)
  + OpenQASM 3.0에서 식별자로 선언된 포트 이름입니다.
+ 방향(direction)
  + 포트의 방향입니다. 드라이브 포트는 펄스(direction “tx”)를 전송하는 반면, 측정 포트는 펄스(direction “rx”)를 수신합니다.
+ 포트 유형(portType)
  + 이 포트가 담당하는 작업의 유형(예: 드라이브, 캡처 또는 ff - fast-flux)입니다.
+ Dt(dt)
  + 지정된 포트에서 단일 샘플 시간 단계를 나타내는 초 단위 시간입니다.
+ 큐비트 매핑(qubitMappings)
  + 지정된 포트와 연결된 큐비트입니다.
+ 중심 주파수(centerFrequencies)
  + 포트에서 사전 선언되거나 사용자 정의된 모든 프레임에 대한 연관 중심 주파수의 목록입니다. 자세한 내용은 프레임을 참조하세요.
+ QHP 특정 속성(qhpSpecificProperties)
  + QHP 전용 포트에 대한 기존 속성을 자세히 설명하는 선택적 맵입니다.

 **프레임:** 

QPU에서 선언된 사전 제작 외부 프레임과 해당 프레임에 대한 관련 속성을 설명합니다. 이 구조에 나열된 모든 프레임은 사용자가 제출한 `OpenQASM 3.0` 프로그램 내에서 유효한 식별자로 사전 선언됩니다. 프레임의 추가 속성은 다음과 같습니다.
+ 프레임 ID(frameId)
  + OpenQASM 3.0에서 식별자로 선언된 프레임 이름입니다.
+ 포트 ID(portId)
  + 프레임에 연결된 하드웨어 포트입니다.
+ 주파수(frequency)
  + 프레임의 기본 초기 주파수입니다.
+ 중심 주파수(centerFrequency)
  + 프레임의 주파수 대역폭 중심입니다. 일반적으로 프레임은 중심 주파수 주변의 특정 대역폭으로만 조정할 수 있습니다. 따라서 주파수 조정은 중심 주파수의 지정된 델타 범위 내에서 이루어져야 합니다. 대역폭 값은 검증 파라미터에서 확인할 수 있습니다.
+ 위상(phase)
  + 프레임의 기본 초기 위상입니다.
+ 연결된 게이트(associatedGate)
  + 지정된 프레임과 연결된 게이트입니다.
+ 큐비트 매핑(qubitMappings)
  + 지정된 프레임과 연결된 큐비트입니다.
+ QHP 특정 속성(qhpSpecificProperties)
  + QHP 전용 프레임에 대한 기존 속성을 자세히 설명하는 선택적 맵입니다.

 **SupportsDynamicFrames:** 

OpenPulse `newframe` 함수를 통해 프레임을 `cal` 또는 `defcal` 블록에서 선언할 수 있는지 여부를 설명합니다. false인 경우 프레임 구조에 나열된 프레임만 프로그램 내에서 사용할 수 있습니다.

 **SupportedFunctions:** 

지정된 함수에 대해 연결된 인수, 인수 유형 및 반환 유형 외에도 디바이스에 대해 지원되는 OpenPulse 함수를 설명합니다. OpenPulse 함수의 사용 예제를 보려면 [OpenPulse 사양](https://openqasm.com/language/openpulse.html)을 참조하세요. 현재 Braket은 다음을 지원합니다.
+ shift\$1phase
  + 프레임의 위상을 지정된 값만큼 이동합니다.
+ set\$1phase
  + 프레임의 위상을 지정된 값으로 설정합니다.
+ swap\$1phases
  + 두 프레임 간에 위상을 바꿉니다.
+ shift\$1frequency
  + 프레임의 주파수를 지정된 값만큼 이동합니다.
+ set\$1frequency
  + 프레임의 주파수를 지정된 값으로 설정합니다.
+ play
  + 파형을 예약합니다.
+ capture\$1v0
  + 캡처 프레임의 값을 비트 레지스터로 반환합니다.

 **SupportedQhpTemplateWaveforms:** 

디바이스에서 사용할 수 있는 사전 빌드된 파형 함수와 관련 인수 및 유형을 설명합니다. 기본적으로 Braket Pulse는 모든 디바이스에서 다음과 같은 사전 빌드된 파형 루틴을 제공합니다.

 ** *상수* ** 

![\[파라미터 t, tau 및 iq를 갖는 상수 함수를 보여주는 수학 방정식으로, 출력은 항상 iq와 같습니다.\]](http://docs.aws.amazon.com/ko_kr/braket/latest/developerguide/images/ConstantFunction.png)


 `τ`는 파형의 길이이고 `iq`는 복소수입니다.

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

 ** *가우시안* ** 

![\[파라미터 t, tau, 시그마, A=1, ZaE=0을 갖는 가우시안 함수를 보여주는 수학 방정식입니다.\]](http://docs.aws.amazon.com/ko_kr/braket/latest/developerguide/images/GaussianFunction.png)


 `τ`는 파형의 길이이고, `σ`는 가우시안의 너비이며 `A`는 진폭입니다. `ZaE`를 `True`로 설정하면 가우시안은 파형의 시작과 끝에서 0이 되도록 오프셋 및 재조정되며 최대값에서 `A`에 도달합니다.

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

 ** *DRAG 가우시안* ** 

![\[파라미터 t, tau, 시그마, 베타, A=1, ZaE=0을 갖는 DRAG 가우시안 분포에 대한 수학 방정식입니다.\]](http://docs.aws.amazon.com/ko_kr/braket/latest/developerguide/images/DRAGGaussianFunction.png)


 `τ`는 파형의 길이, `σ`는 가우시안의 너비, `β`는 자유 파라미터, `A`는 진폭입니다. `ZaE`를 `True`로 설정하면 DRAG(Derivative Removal by Adiabatic Gate) 가우시안은 파형의 시작과 끝에서 0이 되도록 오프셋 및 재조정되며 실수부는 최대값에서 `A`에 도달합니다. DRAG 파형에 대한 자세한 내용은 백서 [약한 비선형 큐비트에서 누출 제거를 위한 단순 펄스](https://doi.org/10.1103/PhysRevLett.103.110501)를 참조하세요.

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

 ** *Erf 제곱* ** 

![\[파라미터 t, 길이, 너비, 시그마, A=1, ZaE=0을 갖는 Erf 제곱 분포에 대한 수학 방정식입니다.\]](http://docs.aws.amazon.com/ko_kr/braket/latest/developerguide/images/ErfSquareFunction.PNG)


여기서 `L`은 길이이고 `W`는 파형의 너비이며 `σ`는 엣지의 상승 및 하강 속도를 정의하고 `t1​=(L−W)/2` 및 `t22=(L+W)/2`, `A`는 진폭입니다. `ZaE`를 `True`로 설정하면 가우시안은 파형의 시작과 끝에서 0이 되도록 오프셋 및 재조정되며 최대값에서 `A`에 도달합니다. 다음 방정식은 파형의 재조정된 버전입니다.

![\[파라미터 ZaE=1을 갖는 재조정된 Erf 제곱 분포에 대한 수학 방정식입니다.\]](http://docs.aws.amazon.com/ko_kr/braket/latest/developerguide/images/RescaledErfSquareFunction.PNG)


여기서 `a=erf(W/2σ)` 및 `b=erf(-t1​/σ)/2+erf(t2​/σ)/2`입니다.

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

 **SupportsLocalPulseElements:** 

포트, 프레임 및 파형과 같은 펄스 요소를 `defcal` 블록에서 로컬로 정의할 수 있는지 여부를 설명합니다. 값이 `false`인 경우 요소를 `cal` 블록에서 정의해야 합니다.

 **SupportsNonNativeGatesWithPulses:** 

비네이티브 게이트를 펄스 프로그램과 함께 사용할 수 있는지 여부를 설명합니다. 예를 들어 사용된 큐비트에 대해 `defcal`을 통해 게이트를 먼저 정의하지 않으면 프로그램의 `H` 게이트와 같은 비네이티브 게이트를 사용할 수 없습니다. 디바이스 기능에서 네이티브 게이트 `nativeGateSet` 키 목록을 확인할 수 있습니다.

 **ValidationParameters:** 

다음을 포함하여 펄스 요소 검증 경계를 설명합니다.
+ 파형(임의 및 사전 빌드됨)의 최대 규모/최대 진폭 값
+ 제공된 중심 주파수의 최대 주파수 대역폭을 Hz 단위로 표시
+ 초 단위의 최소 펄스 길이/지속 시간
+ 초 단위의 최대 펄스 길이/지속 시간

## OpenQASM으로 지원되는 연산, 결과 및 결과 유형
<a name="braket-openqasm-supported-operations-results-result-types"></a>

각 디바이스에서 지원하는 OpenQASM 3.0 기능을 확인하려면 디바이스 기능 출력의 `action` 필드에서 `braket.ir.openqasm.program` 키를 참조하세요. 예를 들어 다음은 Braket 상태 벡터 시뮬레이터 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
        }
      ]
    }
  },
...
```