

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

# OpenQASM 문제 해결
<a name="braket-troubleshooting-openqasm"></a>

이 섹션에서는 OpenQASM 3.0 사용 중 오류가 발생할 때 유용할 수 있는 문제 해결 지침을 제공합니다.

**Topics**
+ [문 포함 오류](#braket-troubleshooting-openqasm-include-statement-error)
+ [비연속 qubits 오류](#braket-troubleshooting-openqasm-non-contiguous-qubits-error)
+ [물리적 qubits를 가상 qubits와 혼합 오류](#braket-troubleshooting-openqasm-mixing-physical-and-virtual-qubits-error)
+ [결과 유형 요청 및 동일한 프로그램에서 qubits 측정 오류](#braket-troubleshooting-openqasm-result-types-measuring-qubits-error)
+ [고전적 및 qubit 레지스터 제한 초과 오류](#braket-troubleshooting-openqasm-register-limits-error)
+ [상자 앞에 축어적 pragma 없음 오류](#braket-troubleshooting-openqasm-box-not-preceded-by-pragma-error)
+ [축어적 상자에 네이티브 게이트 누락 오류](#braket-troubleshooting-openqasm-verbatim-box-missing-native-gates-error)
+ [축어적 상자에 물리적 qubits 누락 오류](#braket-troubleshooting-openqasm-verbatim-box-missing-physical-qubits-error)
+ [축어적 pragma에 “브래킷” 누락 오류](#braket-troubleshooting-openqasm-pragma-naming-error)
+ [단일 qubits는 인덱싱할 수 없음 오류](#braket-troubleshooting-openqasm-qubit-index-error)
+ [두 qubit 게이트의 물리적 qubits가 연결되지 않음 오류](#braket-troubleshooting-openqasm-disconnected-physical-qubits-error)
+ [로컬 시뮬레이터 지원 경고](#braket-troubleshooting-openqasm-local-simulator-support-warning)

## 문 포함 오류
<a name="braket-troubleshooting-openqasm-include-statement-error"></a>

현재 Braket에 OpenQASM 프로그램에 포함할 표준 게이트 라이브러리 파일이 없습니다. 예를 들어 다음 예제에서는 구문 분석기 오류가 발생합니다.

```
OPENQASM 3;
include "standardlib.inc";
```

이 코드는 다음 오류 메시지를 생성합니다. `No terminal matches '"' in the current parser context, at line 2 col 17.` 

## 비연속 qubits 오류
<a name="braket-troubleshooting-openqasm-non-contiguous-qubits-error"></a>

디바이스 기능에서 `requiresContiguousQubitIndices`가 `true`로 설정된 디바이스에서 비연속 qubits를 사용하면 오류가 발생합니다.

시뮬레이터 및 IonQ에서 양자 작업을 실행할 때 다음 프로그램이 오류를 트리거합니다.

```
OPENQASM 3;

qubit[4] q;

h q[0];
cnot q[0], q[2];
cnot q[0], q[3];
```

이 코드는 다음 오류 메시지를 생성합니다. `Device requires contiguous qubits. Qubit register q has unused qubits q[1], q[4].` 

## 물리적 qubits를 가상 qubits와 혼합 오류
<a name="braket-troubleshooting-openqasm-mixing-physical-and-virtual-qubits-error"></a>

동일한 프로그램에서 물리적 qubits를 가상 qubits와 혼합하는 것은 허용되지 않으며 오류가 발생합니다. 다음 코드는 오류를 생성합니다.

```
OPENQASM 3;

qubit[2] q;
cnot q[0], $1;
```

이 코드는 다음 오류 메시지를 생성합니다. `[line 4] mixes physical qubits and qubits registers.` 

## 결과 유형 요청 및 동일한 프로그램에서 qubits 측정 오류
<a name="braket-troubleshooting-openqasm-result-types-measuring-qubits-error"></a>

결과 유형을 요청하고 동일한 프로그램에서 qubits가 명시적으로 측정되면 오류가 발생합니다. 다음 코드는 오류를 생성합니다.

```
OPENQASM 3;

qubit[2] q;

h q[0];
cnot q[0], q[1];
measure q;

#pragma braket result expectation x(q[0]) @ z(q[1])
```

이 코드는 다음 오류 메시지를 생성합니다. `Qubits should not be explicitly measured when result types are requested.` 

## 고전적 및 qubit 레지스터 제한 초과 오류
<a name="braket-troubleshooting-openqasm-register-limits-error"></a>

고전적 레지스터 하나와 qubit 레지스터 하나만 허용됩니다. 다음 코드는 오류를 생성합니다.

```
OPENQASM 3;

qubit[2] q0;
qubit[2] q1;
```

이 코드는 다음 오류 메시지를 생성합니다. `[line 4] cannot declare a qubit register. Only 1 qubit register is supported.` 

## 상자 앞에 축어적 pragma 없음 오류
<a name="braket-troubleshooting-openqasm-box-not-preceded-by-pragma-error"></a>

모든 상자 앞에 축어적 pragma를 붙여야 합니다. 다음 코드는 오류를 생성합니다.

```
box{
rx(0.5) $0;
}
```

이 코드는 다음 오류 메시지를 생성합니다. `In verbatim boxes, native gates are required. x is not a device native gate.` 

## 축어적 상자에 네이티브 게이트 누락 오류
<a name="braket-troubleshooting-openqasm-verbatim-box-missing-native-gates-error"></a>

축어적 상자에는 네이티브 게이트와 물리적 qubits가 있어야 합니다. 다음 코드는 네이티브 게이트 오류를 생성합니다.

```
#pragma braket verbatim
box{
x $0;
}
```

이 코드는 다음 오류 메시지를 생성합니다. `In verbatim boxes, native gates are required. x is not a device native gate.` 

## 축어적 상자에 물리적 qubits 누락 오류
<a name="braket-troubleshooting-openqasm-verbatim-box-missing-physical-qubits-error"></a>

축어적 상자에는 물리적 qubits가 있어야 합니다. 다음 코드는 누락된 물리적 qubits 오류를 생성합니다.

```
qubit[2] q;

#pragma braket verbatim
box{
rx(0.1) q[0];
}
```

이 코드는 다음 오류 메시지를 생성합니다. `Physical qubits are required in verbatim box.` 

## 축어적 pragma에 “브래킷” 누락 오류
<a name="braket-troubleshooting-openqasm-pragma-naming-error"></a>

축어적 pragma에 “브래킷”을 포함해야 합니다. 다음 코드는 오류를 생성합니다.

```
#pragma braket verbatim           // Correct
#pragma verbatim                  // wrong
```

이 코드는 다음 오류 메시지를 생성합니다. `You must include “braket” in the verbatim pragma` 

## 단일 qubits는 인덱싱할 수 없음 오류
<a name="braket-troubleshooting-openqasm-qubit-index-error"></a>

단일 qubits는 인덱싱할 수 없습니다. 다음 코드는 오류를 생성합니다.

```
OPENQASM 3;

qubit q;
h q[0];
```

이 코드는 오류를 생성합니다. `[line 4] single qubit cannot be indexed.` 

그러나 단일 qubit 배열은 다음과 같이 인덱싱할 수 있습니다.

```
OPENQASM 3;

qubit[1] q;
h q[0];   // This is valid
```

## 두 qubit 게이트의 물리적 qubits가 연결되지 않음 오류
<a name="braket-troubleshooting-openqasm-disconnected-physical-qubits-error"></a>

물리적 qubits를 사용하려면, 먼저 `device.properties.action[DeviceActionType.OPENQASM].supportPhysicalQubits`를 확인하여 디바이스가 물리적 qubits를 사용하는지 확인한 다음 `device.properties.paradigm.connectivity.connectivityGraph` 또는`device.properties.paradigm.connectivity.fullyConnected`를 확인하여 연결 그래프를 확인합니다.

```
OPENQASM 3;

cnot $0, $14;
```

이 코드는 다음 오류 메시지를 생성합니다. `[line 3] has disconnected qubits 0 and 14` 

## 로컬 시뮬레이터 지원 경고
<a name="braket-troubleshooting-openqasm-local-simulator-support-warning"></a>

`LocalSimulator`는 QPU 또는 온디맨드 시뮬레이터에서 사용할 수 없는 OpenQASM의 고급 기능을 지원합니다. 다음 예제와 같이 프로그램에 `LocalSimulator`에만 해당하는 언어 기능이 포함된 경우 경고가 표시됩니다.

```
qasm_string = """
qubit[2] q;

h q[0];
ctrl @ x q[0], q[1];
"""
qasm_program = Program(source=qasm_string)
```

이 코드는 `이 프로그램은 LocalSimulator에서만 지원되는 OpenQASM 언어 기능을 사용합니다. 이러한 기능 중 일부는 QPU 또는 온디맨드 시뮬레이터에서 지원되지 않을 수 있습니다.

지원되는 OpenQASM 기능에 대한 자세한 내용은 [로컬 시뮬레이터에서의 OpenQASM에 대한 고급 기능 지원](braket-openqasm-supported-features.md#braket-openqasm-supported-features-advanced-feature-local-simulator) 페이지를 참조하세요.