키스킷 0.34 릴리즈 노트
0.34.2
테라 0.19.2
Prelude
키스킷 테라 0.19.2 는 주로 버그 수정 릴리스이지만, 이제 모든 주요 플랫폼에서 Python 3.10 용 휠도 함께 제공됩니다.
새 기능
- Python 3.10 으로 실행에 대한 지원이 추가되었습니다. 여기에는 지원되는 플랫폼에서 Python 3.10 용으로 미리 컴파일된 바이너리를 PyPI 에 게시하는 것이 포함됩니다.
업그레이드 주의사항
- Python 3.10 부터 키스킷 테라의 32비트 플랫폼 지원은 축소될 예정입니다. Linux i686 및 32비트 Windows입니다. Python 3.10 플랫폼은 이제 티어 2 지원 대신 티어 3에 속합니다( https://qiskit.org/documentation/getting_started.html #플랫폼-지원에 정의된 티어에 따라). 이는 업스트림 종속성인 Numpy와 Scipy가 해당 플랫폼에 대한 지원을 중단했기 때문입니다. 키스킷은 여전히 이러한 플랫폼에 대해 미리 컴파일된 바이너리를 게시할 예정이지만, 게시하기 전에 패키지를 테스트할 수 없으며
pip에서 소스에서 해당 종속성을 빌드할 수 있도록 C/C++ 컴파일러가 필요합니다. 이러한 플랫폼 중 하나를 사용하는 경우 Python 3.7, 3.8, 또는 3.9 을 사용하는 것이 좋습니다.
버그 수정
-
버그가 수정되었습니다
CVaRMeasurement를 밀도 행렬로 변환하려고 시도할 때PauliSumOp를 밀도 행렬로 변환하여 대각선인지 확인하는 버그를 수정했습니다. 대규모 연산자(16큐비트 이상)의 경우 이 계산은 매우 비싸고qiskit.utils.algorithm_globals.massive = True을 사용하여 명시적으로 활성화하지 않으면 오류가 발생합니다. 이제 많은 수의 큐비트에 대해서도 효율적인 검사가 가능합니다. -
DAGCircuit.draw()및 관련 함수dag_drawer()는 이제 제공된 파일 이름이 유효하지 않은 경우 보다 유용한 오류 메시지를 표시합니다. -
QuantumCircuit.add_register()는 더 이상 회로에서 중복AncillaQubit회로에서 중복 참조가 발생하지 않습니다AncillaRegister비트가 이미 존재하는 경우. -
의 변환을 수정했습니다
QuantumCircuit를 기존 조건의 단일, 레지스터 없는Clbits를Instruction로 변환하는 것을 수정했습니다circuit_to_instruction()함수 또는QuantumCircuit.to_instruction()메서드를 사용할 때 예를 들어 이제 다음이 작동합니다:from qiskit.circuit import QuantumCircuit, Qubit, Clbit qc = QuantumCircuit([Qubit(), Clbit()]) qc.h(0).c_if(qc.clbits[0], 0) qc.to_instruction() -
이제 레지스터가 중복 비트를 올바르게 거부합니다. 수정 #7446.
-
이제
FakeOpenPulse2Q모의 백엔드에 T2 시간 및 읽기 오류가 큐비트에 저장됩니다. 이는 임의의 값으로, 생성 당시의 실제 백엔드와 거의 일치합니다. -
에서 2큐비트 진화의 큐비트 순서를 수정합니다
PauliEvolutionGate제품 공식 합성과 함께 사용하는 경우. 예를 들어, 이전에는IIZ + IZI + IZZfrom qiskit.circuit.library import PauliEvolutionGate from qiskit.opflow import I, Z operator = (I ^ I ^ Z) + (I ^ Z ^ I) + (I ^ Z ^ Z) print(PauliEvolutionGate(operator).definition.decompose())작성됨
┌───────┐ q_0: ┤ Rz(2) ├──────── ├───────┤ q_1: ┤ Rz(2) ├─■────── └───────┘ │ZZ(2) q_2: ──────────■──────를 반환하는 반면, 이제는 올바르게
┌───────┐ q_0: ┤ Rz(2) ├─■────── ├───────┤ │ZZ(2) q_1: ┤ Rz(2) ├─■────── └───────┘ q_2: ───────────────── -
latex및mpl서랍에서 이름에 밑줄이 여러 개 포함된 등록 이름이 올바르게 표시되지 않던 문제를 수정했습니다. -
이제 서랍의 배열 출력에서 음수는 분자와 분모가 큰 분수 대신 10진수로 표시됩니다. 양수와 마찬가지로 비율이 작은 숫자 사이인 경우에도 분수가 됩니다.
-
대상에서 실행할 때
Target.get_non_global_operation_names()메서드가 대상에서 실행될 때 이상적인 전역 작업이 있는 대상에서 예외를 잘못 발생시키는 문제를 수정했습니다. 이전에는 이 메서드가 명령 속성이None로 설정된 이상적인 전역 정의 연산이 포함된 대상에서 호출되면 해당 명령이 전역으로 처리되는 대신 예외가 발생했습니다. -
함수 관련 문제를 수정했습니다
transpile()함수가 실패할 수 있는 문제를 수정했습니다Targettarget객체를 직접 전달할 때 실패할 수 있는 문제를 수정했습니다. -
함수 관련 문제를 수정했습니다
transpile()인수가backend인 경우 실패할 수 있는 함수의 문제를 수정했습니다BackendV2또는 aTarget를 통해 전역적으로 정의된 이상적인 연산을 포함하는targetkwarg를 사용할 때 발생하는 문제를 수정했습니다. -
블로흐 구를 플로팅할 때 또는 Matplotlib 3.3 또는 3.4 ( 3.5 아님)으로 그림을 크기에 맞게 자르려고 할 때 Jupyter에서
AttributeError이 발생할 수 있는 문제를 수정했습니다. 예를 들어, 이전에는 다음 코드가 메시지와 함께 충돌했습니다:AttributeError: 'Arrow3D' object has no attribute '_path2d'의 현재 지원되는 모든 버전에서 성공합니다 Matplotlib :
from qiskit.visualization import plot_bloch_vector plot_bloch_vector([0, 1, 0]).savefig("tmp.png", bbox_inches='tight') -
의 버그를 수정했습니다
PauliSumOp.permute()에서 메서드가 호출되는 객체가 순열된 복사본을 반환하는 대신 제자리에서 순열되는 버그가 수정되었습니다. 이 버그는 연산자의 큐비트 수를 변경하지 않은 채로 둔 순열에서만 발생했습니다. -
이전에는 진화 시간을 반전하여 역을 계산하던
PauliEvolutionGate.inverse()메서드를 수정했습니다. 연산자가 정확히 진화한 경우에만 올바른 반전입니다. 특히 트로터화 기반 시간 진화의 역수가 잘못되었습니다. -
메서드의
QuantumInstance.execute()메서드는 회로 목록이 주어지면 더 이상 입력을 변경하지 않습니다. -
명시적인 노옵 정의가 있는 사용자 지정 명령어의 QPY 직렬화가 수정되었습니다. 이전에는 불투명 게이트처럼 (정의가 없는) 불투명한 문처럼 쓰여지고 나중에 같은 방식으로 읽혔습니다. 이제 빈 정의를 올바르게 왕복합니다. 예를 들어 이제 다음과 같이 수정됩니다:
import io from qiskit.circuit import Instruction, QuantumCircuit, qpy_serialization # This instruction is explicitly defined as a one-qubit gate with no # operations. empty = QuantumCircuit(1, name="empty").to_instruction() # This instruction will perform some operations that are only known # by the hardware backend. opaque = Instruction("opaque", 1, 0, []) circuit = QuantumCircuit(2) circuit.append(empty, [0], []) circuit.append(opaque, [1], []) qpy_file = io.BytesIO() qpy_serialization.dump(circuit, qpy_file) qpy_file.seek(0) new_circuit = qpy_serialization.load(qpy_file)[0] # Previously both instructions in `new_circuit` would now be opaque, but # there is now a correct distinction. circuit == new_circuit -
누락된
BackendV2.provider어트리뷰트를 추가했습니다BackendV2추상 클래스 구현에 누락된 어트리뷰트를 추가했습니다. 이전에는BackendV2백엔드는 공급자를 통해 초기화할 수 있었지만 사용자가 액세스할 수 없었습니다. -
클래스에 대한 지원을 수정했습니다
QuantumInstance클래스에 대한 지원을 수정했습니다BackendV2백엔드로 실행할 때 클래스 지원을 수정했습니다. 이전에는QuantumInstance와 함께BackendV2를 사용하려고 하면 오류가 발생했을 것입니다. -
의 버그를 수정했습니다
VQE의 버그가 수정되어, 분석의 크기가 조정된 경우에도 분석의 매개변수가 여전히 이름에 따라 명시적으로 ASCII로 정렬되던 문제가 해결되었습니다. 이로 인해 결과 개체의optimal_point속성에서 최적화된 값의 순서가 일치하지 않게 되었습니다.특히 이 버그는 사용자가 안사츠를 설정하지 않았고 VQE가 11개 이상의 자유 매개변수가 있는 기본값을 선택한 경우에 발생했습니다.
-
에서 구문 분석기를 중지했습니다
QuantumCircuit.from_qasm_str()와from_qasm_file()2.0 이 아닌 다른 언어 버전에서 온 것으로 식별되는 OpenQASM 프로그램을 허용하지 않도록 합니다. 이 구문 분석기는 OpenQASM 2.0 전용이며, OpenQASM 3.0 에서 가져온 회로에 대한 지원은 다음 릴리스에서 추가될 예정입니다. -
제어 흐름 명령어가 포함된 객체의 QPY 직렬화
QuantumCircuit객체의 직렬화를 수정했습니다. 이전에 다음을 포함하는 회로를 직렬화하려고 시도한 경우IfElseOp,WhileLoopOp또는ForLoopOp를 포함하는 회로를 직렬화하려고 하면 직렬화가 실패했습니다. 수정 #7583. -
QPY 직렬화 수정
QuantumCircuit에서 비트의 하위 집합을 포함하는QuantumRegister또는ClassicalRegister. 이전에는 이와 같은 회로를 직렬화하려고 하면 이러한 비트를 독립형으로 잘못 처리했습니다Qubit또는Clbit로 잘못 처리했습니다. 예를 들어 다음과 같은 회로를 직렬화하려고 하는 경우입니다:import io from qiskit import QuantumCircuit, QuantumRegister from qiskit.circuit.qpy_serialization import load, dump qr = QuantumRegister(2) qc = QuantumCircuit([qr[0]]) qc.x(0) with open('file.qpy', 'wb') as fd: dump(qc, fd)이제 해당 회로가 로드되면 회로에 레지스터의 비트 하위 집합만 포함되어 있어도 레지스터가 올바르게 완전히 채워집니다.
-
QFT는 이제 인스턴스화되거나 정밀도를 떨어뜨리는 설정으로 빌드된 경우OverflowError을 발생시키지 않고 경고합니다. 이는 큐비트 수가 매우 많을 경우(1000개가 약간 넘는 경우) 근사도가 비슷하게 크지 않은 경우에 발생할 수 있습니다. 이제 회로가 성공적으로 빌드되지만 배정밀도 부동 소수점 숫자의 제한으로 인해 일부 각도가 0과 구분되지 않을 수 있습니다.
에어 0.10.3
Prelude
키스킷 에어 0.10.3 는 주로 버그 수정 릴리스로, 0.10.2 릴리스 이후 발견된 몇 가지 버그를 수정합니다. 하지만 이번 릴리스에서는 모든 주요 플랫폼에서 사전 컴파일된 바이너리 휠을 포함하여 Python 3.10 으로 실행하는 기능도 지원됩니다. 이 릴리스에는 macOS 에서 arm64 에 대한 사전 컴파일된 바이너리 휠도 포함되어 있습니다.
새 기능
-
Python 3.10 으로 실행에 대한 지원이 추가되었습니다. 여기에는 지원되는 플랫폼에서 Python 3.10 용으로 미리 컴파일된 바이너리를 PyPI 에 게시하는 것이 포함됩니다.
-
M1 macOS 시스템에 대한 지원이 추가되었습니다. arm64 macOS 에서 지원되는 Python 버전 >= 3.8 에 대한 사전 컴파일된 바이너리는 이제 이번 릴리스와 향후 릴리스에 대해 PyPI 에 게시됩니다.
업그레이드 주의사항
- 키스킷 에어는 더 이상 Python >= 3.10 에서 32비트 플랫폼을 완전히 지원하지 않습니다. Linux i686 및 32비트 Windows입니다. Python 3.10 플랫폼은 이제 티어 2 지원 대신 티어 3에 속합니다( https://qiskit.org/documentation/getting_started.html #플랫폼-지원에 정의된 티어에 따라). 이는 업스트림 종속성인 Numpy와 Scipy가 해당 플랫폼에 대한 지원을 중단했기 때문입니다. 키스킷은 여전히 이러한 플랫폼에 대해 미리 컴파일된 바이너리를 게시할 예정이지만, 게시하기 전에 패키지를 테스트할 수 없으며
pip에서 소스에서 해당 종속성을 빌드할 수 있도록 C/C++ 컴파일러가 필요합니다. 이러한 플랫폼 중 하나를 사용하는 경우 Python 3.7, 3.8, 또는 3.9 을 사용하는 것이 좋습니다.
버그 수정
-
RelaxationNoisePass에서 인스트럭션의 실제 단위와 상관없이 인스트럭션 지속 시간이 항상 dt 시간 단위로 간주되던 버그를 수정했습니다. 이제 모든 인스트럭션 지속 시간 단위에서 단위 변환이 올바르게 처리됩니다.자세한 내용은 #1453을 참조하세요.
-
를 반환하는 노이즈 함수에 대한
LocalNoisePass문제를 수정했습니다QuantumCircuit를 반환하는 노이즈 함수에 대한 문제를 수정했습니다. 이는 시뮬레이션을 위해 풀어야 하는 불투명 회로 명령으로 DAG에 추가되었습니다. 이 수정 사항은 모든 회로 명령어가 시뮬레이터에서 지원되는 경우 서킷 명령어가 새 DAG에 추가되고 추가 언롤링 없이 시뮬레이션할 수 있도록 구성합니다.자세한 내용은 #1447을 참조하세요.
-
이제 회로의 게이트 수가
fusion_parallelization_threshold을 초과하는 경우 대각선 게이트를 생성하는 멀티 스레드 트랜스필레이션이 올바르게 작동합니다. 이전에는 서로 다른 스레드가 동일한 요소를 여러 블록으로 융합하여 잘못된 결과를 초래하는 경우가 있었습니다. -
매개변수화된 Qobj에서 회로가 잘리는 버그를 수정했습니다. 이전에는 측정되지 않은 큐비트에 대한 명령이 제거된 후 파라미터의 인덱스가 업데이트되지 않았기 때문에 회로의 사용하지 않은 큐비트가 잘린 경우 파라미터화된 QObj의 파라미터가 잘못 해석될 수 있었습니다.
자세한 내용은 #1427을 참조하세요.
이그니스 0.7.0
변경 없음
IBM Q 제공자 0.18.3
변경 없음
0.34.1
테라 0.19.1
변경 없음
에어 0.10.2
버그 수정
-
루프 본문에서 루프 매개변수가 사용되지 않은
for루프의 시뮬레이션을 수정했습니다. 예를 들어, 이전에는 이 코드가 실패했지만 이제는 성공합니다:import qiskit from qiskit.providers.aer import AerSimulator qc = qiskit.QuantumCircuit(2) with qc.for_loop(range(4)) as i: qc.h(0) qc.cx(0, 1) AerSimulator(method="statevector").run(qc) -
N-큐비트 회로 명령어가 항상 명령어 큐비트가 아닌
[0, ..., N-1]큐비트에 적용되던QuantumError.to_dict()의 버그를 수정했습니다. 이 버그는 디바이스 및 가짜 백엔드 노이즈 모델에도 영향을 미쳤습니다.자세한 내용은 1415호를 참조하세요.
이그니스 0.7.0
변경 없음
IBM Q 제공자 0.18.3
변경 없음
0.34.0
키스킷 0.34.0 에는 키스킷 에어의 포인트 릴리스인 버전 0.10.1 이 포함되어 있으며, 버전 0.10.0 에서 릴리스 직후 발견된 성능 퇴보 문제를 패치합니다. 키스킷 에어 0.10.0 와 0.10.1 에 대한 릴리즈 노트는 아래를 참조하세요.
테라 0.19.1
변경 없음
에어 0.10.1
Prelude
키스킷 에어 0.10.1 패치는 키스킷 에어 0.10.0 에서 도입된 성능 퇴보를 수정합니다.
버그 수정
- 노이즈 모델을 Python 에서 C++ 로 로드할 때 직렬화 오버헤드가 크게 증가하여 의도하지 않은 중첩된 Python 다중 처리 호출로 인한 노이즈 시뮬레이션의 성능 저하를 수정했습니다. 자세한 내용은 1407호를 참조하세요.
에어 0.10.0
Prelude
키스킷 에어 0.10 릴리스에는 몇 가지 성능 및 노이즈 모델 개선 사항이 포함되어 있습니다. 몇 가지 주요 사항은 다음과 같습니다:
- 병렬 샷 GPU 및 HPC 시뮬레이션의 성능 향상
- QASM 3.0 제어 흐름 명령어가 포함된 회로 시뮬레이션 지원
- 백엔드 노이즈 모델에서 예약된 회로에 대한 이완 노이즈 지원
- 사용자 정의 게이트 오류 및 노이즈 모델을 정의하고 회로에 삽입하기 위해 사용자가 만든 트랜스파일러 패스를 지원합니다.
새 기능
-
키스킷-테라 0.19.0 에 도입된 QASM 3.0 제어 흐름 명령어에 대한 지원이 추가되었습니다. 지원되는 지침은 다음과 같습니다
ForLoopOp,WhileLoopOp,ContinueLoopOp,BreakLoopOp,IfElseOp. -
GPU 시뮬레이션을 위한 배치 샷 시뮬레이션 최적화가 추가되었습니다. 이 옵션 기능은 1개 이상의 GPU에서 사용 가능한 메모리를 사용하여 여러 시뮬레이션 샷을 병렬로 실행하여 노이즈 모델 및/또는 중간 측정이 포함된 다중 샷 시뮬레이션의 성능을 크게 향상시킵니다.
이 옵션은
device="GPU"및"statevector"또는"density_matrix"의 시뮬레이션method을AerSimulator과 함께 사용할 때 기본적으로 활성화됩니다. 시뮬레이터 옵션에서batched_shots_gpu=False을 설정하여 비활성화할 수 있습니다.이 최적화는 여러 시뮬레이션을 병렬로 실행하기에 충분한 GPU 메모리가 있는 중소규모의 큐비트 수에 가장 유용합니다. 이 최적화를 활성화하기 위한 최대 활성 회로 큐비트 수는
batch_shots_gpu_max_qubits시뮬레이터 옵션을 사용하여 구성할 수 있습니다. 이 옵션의 기본값은 16입니다. -
노이즈가 많은 회로의 여러 샷을 병렬로 실행할 수 있는 새로운
max_shot_size옵션을 사용자 지정 실행기에 추가했습니다.예를 들어 사용자 지정 실행기를 사용하여
max_shot_size을 구성합니다:backend = AerSimulator( max_shot_size=1, max_job_size=1, executor=custom_executor) job = backend.run(circuits)는 노이즈가 많은 회로의 샷을 여러 회로로 분할합니다. 모든 개별 샷 실행이 끝나면 작업 결과가 자동으로 하나의
Resultjob.result()객체로 반환됩니다. -
2쿼비트 게이트에 내부 스왑을 삽입할 때 사용자가 내부 스왑의 방향을 결정할 수 있는
mps_swap_direction시뮬레이터 옵션이 추가되었습니다. 가능한 값은"mps_swap_right"및"mps_swap_left"입니다. 스왑의 방향은 회로에 따라 성능에 영향을 미칠 수 있습니다. -
AerSimulator의"matrix_product_state"시뮬레이션 방법에 대한 새로운 측정 샘플링 최적화를 구현했습니다. 현재 이 알고리즘은 모든 큐비트가 측정되고 시뮬레이터mps_sample_measure_algorithm시뮬레이터 옵션이"mps_probabilities"으로 설정된 경우에만 사용됩니다. -
AerSimulator의"matrix_product_state"시뮬레이션 메서드에 대한 측정 명령어 성능이 개선되었습니다. -
안정기 시뮬레이션 메서드의 상태를 객체로 저장하는
SaveClifford인스트럭션을 추가했습니다Clifford객체로 저장할 수 있도록 추가했습니다.이 명령은 본질적으로
SaveStabilizer명령과 동일하지만, 해당 명령은 저장된 상태를 대신StabilizerState객체로 반환합니다Clifford객체로 반환합니다. -
명령어 종속 양자 오류를 회로에 삽입하기 위한 두 개의 트랜스파일러 패스가 추가되었습니다:
qiskit.providers.aer.noise.LocalNoisePassqiskit.providers.aer.noise.RelaxationNoisePass
LocalNoisePass패스는 다음과 같은 형식의 노이즈 생성 함수를 정의하여 사용자 지정 파라미터화된 노이즈 모델을 구현하는 데 사용할 수 있습니다def fn( inst: Instruction, qubits: Optional[List[int]] = None, ) -> InstructionLike명령어와 큐비트 인수의 속성이나 매개변수에 따라 달라질 수 있는 노이즈 명령어(예:
QuantumError또는 기타 명령어)를 반환합니다.이 기능은 회로의 모든 명령어 또는 지정된 하위 집합에 적용할 수 있습니다(자세한 내용은
LocalNoisePass문서를 참조하세요)RelaxationNoisePass은 인스트럭션의 각 큐비트에 대해 인스트럭션의 지속 시간과 제공된 이완 시간 상수 파라미터에 따라thermal_relaxation_error()의 텐서 곱을 반환하는 사전 정의된 노이즈 함수를 사용하는LocalNoisePass의 특수한 경우입니다. -
NoiseModel.from_backend()및AerSimulator.from_backend()에서 구현된 기본 디바이스 잡음 모델은RelaxationNoisePass을 사용하여 회로 지연 게이트에 지속 시간에 따른 완화 오류를 추가할 수 있도록 업그레이드되었습니다.노이즈가 많은 시뮬레이션을 실행할 때 이 노이즈를 활성화하려면 먼저 다음과 같이 예약된 지연 명령을 삽입하도록 회로를 예약해야 합니다:
backend = AerSimulator.from_backend(ibmq_backend) scheduled_circuit = qiskit.transpile( circuit, backend=backend, scheduling_method='asap') result = backend.run(scheduled_circuit).result()회로가 스케줄링되지 않고 트랜스파일된 경우(그리고 지연 명령도 포함되지 않은 경우) 노이즈 시뮬레이션에는 지연 완화 오류의 효과가 포함되지 않습니다. 이 경우 시뮬레이션은 백엔드 속성에서 얻은 기간에 따라 게이트 명령에 이완 노이즈만 추가되는 이전의 qiskit-aer 0.9 시뮬레이션과 동일합니다.
-
예를 들어
QuantumError생성자는 이제noise_ops인수로 여러 가지 새로운 유형의 입력을 허용합니다:import numpy as np from qiskit import QuantumCircuit from qiskit.circuit.library import IGate, XGate, Reset from qiskit.quantum_info import Kraus from qiskit.providers.aer.noise import QuantumError # Quantum channels kraus = Kraus([ np.array([[1, 0], [0, np.sqrt(1 - 0.9)]], dtype=complex), np.array([[0, 0], [0, np.sqrt(0.9)]], dtype=complex) ]) print(QuantumError(kraus)) # Construction from a QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) error = QuantumError(qc) # Construction from a tuple of (Instruction, List[int]), where the list of # integers represents the qubits. error = QuantumError((Reset(), [0])) # Construction from an iterable of objects in the same form as above, but # where each also has an associated probability. error = QuantumError([ ((IGate(), [0]), 0.9), ((XGate(), [0]), 0.1), ]) # A short-hand for the iterable form above, where the qubits are implicit, # and each instruction is over all qubits. error = QuantumError([(IGate(), 0.9), (XGate(), 0.1)])원래의 JSON 기반 입력 형식은 더 세분화되어 있다는 점에 유의하세요.
-
노이즈 모델의 모든
QuantumError에 제공된 함수를 적용하여 노이즈 모델을 구성하는 유틸리티 함수qiskit.providers.aer.utils.transform_noise_model()를 추가했습니다. -
QuantumError에 포함된 회로와 모든 오류를NoiseModel로 변환하기 위한 두 가지 유틸리티 함수qiskit.providers.aer.utils.transpile_quantum_error()와qiskit.providers.aer.utils.transpile_noise_model()를 추가했습니다. -
QuantumError객체를 변환하지 않고 직접QuantumCircuit로 변환하지 않고Kraus인스트럭션으로 변환하지 않고 직접 추가할 수 있습니다.이제 노이즈가 있는 회로 명령어를 정의하기 위한
NoiseModel구축의 대안으로 또는 추가로 양자 오류가 포함된 회로를AerSimulator및QasmSimulator시뮬레이터에서 실행할 수 있습니다.예:
from qiskit import QuantumCircuit from qiskit.providers.aer import AerSimulator from qiskit.providers.aer.noise import pauli_error error_h = pauli_error([('I', 0.95), ('X', 0.05)]) error_cx = pauli_error([('II', 0.9), ('XX', 0.1)]) qc = QuantumCircuit(3) qc.h(0) qc.append(error_h, [0]) qc.cx(0, 1) qc.append(error_cx, [0, 1]) qc.cx(0, 2) qc.append(error_cx, [0, 2]) qc.measure_all() backend = AerSimulator(method='stabilizer') result = backend.run(qc).result() result.get_counts(0)양자 오류가 포함된 회로는 또한
quantum_info양자 채널 및DensityMatrix클래스를 사용하여 평가할 수도 있습니다.
업그레이드 주의사항
-
여러 저장 명령의 반환 유형이 원시 NumPy 배열이나 사전이 아닌 해당 키스킷 테라 클래스로 변경되었습니다. 변경된 유형은 다음과 같습니다
save_statevector()이제Statevectorsave_density_matrix()이제DensityMatrixsave_stabilizer()이제 다음과 같이 반환됩니다StabilizerStatesave_unitary()이제 다음과 같이 반환됩니다Operatorsave_superop()이제 다음과 같이 반환됩니다SuperOpsave_probabilities_dict()이제ProbDistribution
-
qiskit.providers.aer.noise.errors.standard_errors의 모든 함수가 기본적으로 표준 게이트를 사용하도록 업데이트됨에 따라standard_gates의 기본값을None으로 변경했습니다. -
지원되지 않는 인수를
approximate_quantum_error()에 제공하면 이제RuntimeError대신NoiseError을 반환합니다.
지원 중단 노트
-
save_statevector(),save_density_matrix(),save_unitary(),save_superop()의 반환 유형에 NumPyndarray메서드 및 속성을 사용하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 작동이 중지됩니다. 이제 이 지침은 반환 유형에 대한qiskit.quantum_info클래스를 반환합니다. 이러한 객체를 NumPy 배열로 취급하는 부분적인 하위 호환성은 사용 중단 기간 동안 내부 배열로 메서드를 전달하여 구현됩니다. -
인자로
BackendProperties객체를NoiseModel.from_backend()의backend인수로 전달하는 것은 기간에 따른 지연 노이즈와 호환되지 않으므로 더 이상 사용되지 않으며, 향후 릴리스에서 제거될 예정입니다. 키스킷 테라BackendV1객체를 전달합니다. -
차원 자동 결정을 위해
QuantumError생성자의number_of_qubits옵션이 더 이상 사용되지 않습니다. -
이러한 기준 변경 기능을 외부화하기 위해
QuantumError생성자의standard_gates옵션을 더 이상 사용하지 않습니다. 대부분의 경우approximate_quantum_error()을 사용하여 모든 오류를 특정 게이트에만 정의된 오류로 변환할 수 있습니다. -
qiskit.providers.aer.noise.errors.standard_errors의 모든 함수의standard_gates옵션을 사용 중지하여 기본적으로 가능한 한 표준 게이트가 혼합된 형태로 오류를 반환하도록 했습니다. -
errorutils의 모든 함수는qiskit.providers.aer.noise.errors.standard_errors의 함수 구현에만 사용되는 헬퍼 함수이며 비공개 함수로 제공되어야 했으므로 더 이상 사용되지 않습니다. -
이러한 기준 변경 기능을 외부화하기 위해
standard_gates옵션(NoiseModel.from_backend())을 더 이상 사용하지 않습니다. -
노이즈 모델을 Qobj(JSON) 형식과 독립적으로 만들기 위해
NoiseModel.from_dict()을 사용 중지했습니다. -
approximate_quantum_error()및approximate_noise_model()을 제외한qiskit.providers.aer.noise.utils.noise_transformation의 모든 공개 변수, 함수 및 클래스는approximate_*함수를 구현하는 데만 사용되는 헬퍼 함수이며 비공개 함수로 제공되어야 했으므로 더 이상 사용되지 않습니다. -
이제 C++ 코드가 회로를 잘라낼 경우 노이즈 모델을 자동으로 잘라내고 다시 매핑하므로
remap_noise_model()이 사용되지 않습니다.
기타 참고사항
approximate_quantum_error()함수의 구현이 변경되면 키스킷 에어 0.9 에 비해 대략적인 오류가 변경될 수 있습니다.
이그니스 0.7.0
변경 없음
IBM Q 제공자 0.18.3
버그 수정
- 키스킷 테라 0.19.1 이상과 함께
ParameterExpressions를 사용할 때 JSON 인코딩 및 디코딩과 관련된 문제를 #1100에서 수정했습니다. 이전에는 JSON 출력에서 재구성된Parameter인스턴스의 고유 식별자가 달라서 입력과 동일하지 않은 것처럼 보였습니다. 이제 올바른 지원 ID를 갖게 됩니다.