Braket에서 지원하는 OpenQASM 기능은 무엇입니까? - Amazon Braket

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

Braket에서 지원하는 OpenQASM 기능은 무엇입니까?

다음 섹션에서는 Braket에서 지원하는 OpenQASM 3.0 데이터 유형, 문 및 프래그마 지침을 나열합니다.

지원되는 오픈QASM 데이터 유형

Amazon Braket 에서 지원하는 OpenQASM 데이터 유형은 다음과 같습니다.

  • 음이 아닌 정수는 (가상 및 물리적) 쿼트 인덱스에 사용됩니다.

    • cnot q[0], q[1];

    • h $0;

  • 부동 소수점 숫자 또는 상수는 게이트 회전 각도에 사용할 수 있습니다.

    • rx(-0.314) $0;

    • rx(pi/4) $0;

참고

pi는 OpenQASM에 내장된 상수이며 파라미터 이름으로 사용할 수 없습니다.

  • (상상 파트에 대한 오픈QASM im 표기법을 사용하는) 복잡한 숫자 배열은 일반 헤르미티아 관측 가능 항목을 정의하기 위한 결과 유형 프래그마와 단일 프래그마에서 허용됩니다.

    • #pragma braket unitary [[0, -1im], [1im, 0]] q[0]

    • #pragma braket result expectation hermitian([[0, -1im], [1im, 0]]) q[0]

지원되는 오픈QASM 문

Amazon Braket에서 지원하는 오픈QASM 문은 다음과 같습니다.

  • Header: OPENQASM 3;

  • 클래식 비트 선언:

    • bit b1; (등가, creg b1;)

    • bit[10] b2; (등가, creg b2[10];)

  • Qubit 선언:

    • qubit b1; (등가, qreg b1;)

    • qubit[10] b2; (등가, qreg b2[10];)

  • 배열 내 인덱싱: q[0]

  • 입력: input float alpha;

  • 물리적 사양 qubits: $0

  • 디바이스에서 지원되는 게이트 및 작업:

    • h $0;

    • iswap q[0], q[1];

참고

디바이스의 지원되는 게이트는 OpenQASM 작업에 대한 디바이스 속성에서 찾을 수 있습니다. 이러한 게이트를 사용하는 데 게이트 정의가 필요하지 않습니다.

  • 축어적 상자 문. 현재 박스 기간 표기는 지원되지 않습니다. 네이티브 게이트 및 물리적 qubits 는 축어적 상자에 필요합니다.

#pragma braket verbatim box{ rx(0.314) $0; }
  • 의 측정 및 측정 할당 qubits 또는 전체 qubit 등록합니다.

    • measure $0;

    • measure q;

    • measure q[0];

    • b = measure q;

    • measure q → b;

참고

pi는 OpenQASM에 내장된 상수이며 파라미터 이름으로 사용할 수 없습니다.

Braket OpenQASM pragmas

Amazon Braket에서 지원하는 OpenQASM pragma 지침은 다음과 같습니다.

  • 노이즈 프래그마

    • #pragma braket noise bit_flip(0.2) q[0]

    • #pragma braket noise phase_flip(0.1) q[0]

    • #pragma braket noise pauli_channel

  • 축어적 프래그마

    • #pragma braket verbatim

  • 결과 유형 프래그마

    • 기본 불변 결과 유형:

      • 상태 벡터: #pragma braket result state_vector

      • 밀도 매트릭스: #pragma braket result density_matrix

    • 구배 계산 연습:

      • 부속 그라데이션: #pragma braket result adjoint_gradient expectation(2.2 * x[0] @ x[1]) all

    • Z 기본 결과 유형:

      • 진폭: #pragma braket result amplitude "01"

      • 확률: #pragma braket result probability q[0], q[1]

    • Basis 교체된 결과 유형

      • 기대 사항: #pragma braket result expectation x(q[0]) @ y([q1])

      • 차이: #pragma braket result variance hermitian([[0, -1im], [1im, 0]]) $0

      • 샘플: #pragma braket result sample h($1)

참고

OpenQASM 3.0은 OpenQASM 2.0과 역호환되므로 2.0을 사용하여 작성된 프로그램은 Braket에서 실행될 수 있습니다. 하지만 Braket에서 지원하는 OpenQASM 3.0의 기능은 qreg vs cregqubit vs와 같이 약간의 구문 차이가 있습니다bit. 측정 구문에도 차이가 있으므로 올바른 구문으로 지원해야 합니다.

로컬 시뮬레이터에서 열기QASM에 대한 고급 기능 지원

는 Braket의 QPU또는 온디맨드 시뮬레이터의 일부로 제공되지 않는 고급 OpenQASM 기능을 LocalSimulator 지원합니다. 다음 기능 목록은 에서만 지원됩니다LocalSimulator.

  • 게이트 수정자

  • 내장 게이트 열기QASM

  • 클래식 변수

  • 클래식 작업

  • 사용자 지정 게이트

  • 클래식 제어

  • QASM 파일

  • 서브루틴

각 고급 기능의 예는 이 샘플 노트북을 참조하세요. 전체 OpenQASM 사양은 웹 사이트 열기QASM 를 참조하세요.

에서 지원되는 작업 및 문법 OpenPulse

지원되는 OpenPulse 데이터 유형

보정 블록:

cal { ... }

Defcal 블록:

// 1 qubit defcal x $0 { ... } // 1 qubit w. input parameters as constants defcal my_rx(pi) $0 { ... } // 1 qubit w. input parameters as free parameters defcal my_rz(angle theta) $0 { ... } // 2 qubit (above gate args are also valid) defcal cz $1, $0 { ... }

프레임:

frame my_frame = newframe(port_0, 4.5e9, 0.0);

파형:

// prebuilt waveform my_waveform_1 = constant(1e-6, 1.0); //arbitrary waveform my_waveform_2 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1};

사용자 지정 게이트 보정 예제:

cal { waveform wf1 = constant(1e-6, 0.25); } defcal my_x $0 { play(wf1, q0_rf_frame); } defcal my_cz $1, $0 { barrier q0_q1_cz_frame, q0_rf_frame; play(q0_q1_cz_frame, wf1); delay[300ns] q0_rf_frame shift_phase(q0_rf_frame, 4.366186381749424); delay[300ns] q0_rf_frame; shift_phase(q0_rf_frame.phase, 5.916747563126659); barrier q0_q1_cz_frame, q0_rf_frame; shift_phase(q0_q1_cz_frame, 2.183093190874712); } bit[2] ro; my_x $0; my_cz $1,$0; c[0] = measure $0;

임의 펄스 예제:

bit[2] ro; cal { waveform wf1 = {0.1 + 0.1im, 0.1 + 0.1im, 0.1, 0.1}; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); delay[300ns] q0_drive; shift_phase(q0_drive, 4.366186381749424); delay[300dt] q0_drive; barrier q0_drive, q0_q1_cross_resonance; play(q0_q1_cross_resonance, wf1); ro[0] = capture_v0(r0_measure); ro[1] = capture_v0(r1_measure); }