Skip to main content
IBM Quantum Platform

키스킷 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를 기존 조건의 단일, 레지스터 없는 Clbit s를 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 + IZZ

    from 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: ─────────────────
  • latexmpl 서랍에서 이름에 밑줄이 여러 개 포함된 등록 이름이 올바르게 표시되지 않던 문제를 수정했습니다.

  • 이제 서랍의 배열 출력에서 음수는 분자와 분모가 큰 분수 대신 10진수로 표시됩니다. 양수와 마찬가지로 비율이 작은 숫자 사이인 경우에도 분수가 됩니다.

  • 대상에서 실행할 때 Target.get_non_global_operation_names() 메서드가 대상에서 실행될 때 이상적인 전역 작업이 있는 대상에서 예외를 잘못 발생시키는 문제를 수정했습니다. 이전에는 이 메서드가 명령 속성이 None 로 설정된 이상적인 전역 정의 연산이 포함된 대상에서 호출되면 해당 명령이 전역으로 처리되는 대신 예외가 발생했습니다.

  • 함수 관련 문제를 수정했습니다 transpile() 함수가 실패할 수 있는 문제를 수정했습니다 Targettarget 객체를 직접 전달할 때 실패할 수 있는 문제를 수정했습니다.

  • 함수 관련 문제를 수정했습니다 transpile() 인수가 backend 인 경우 실패할 수 있는 함수의 문제를 수정했습니다 BackendV2 또는 a Target 를 통해 전역적으로 정의된 이상적인 연산을 포함하는 target kwarg를 사용할 때 발생하는 문제를 수정했습니다.

  • 블로흐 구를 플로팅할 때 또는 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" 의 시뮬레이션 methodAerSimulator 과 함께 사용할 때 기본적으로 활성화됩니다. 시뮬레이터 옵션에서 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.LocalNoisePass
    • qiskit.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 구축의 대안으로 또는 추가로 양자 오류가 포함된 회로를 AerSimulatorQasmSimulator 시뮬레이터에서 실행할 수 있습니다.

    예:

    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 배열이나 사전이 아닌 해당 키스킷 테라 클래스로 변경되었습니다. 변경된 유형은 다음과 같습니다

  • qiskit.providers.aer.noise.errors.standard_errors 의 모든 함수가 기본적으로 표준 게이트를 사용하도록 업데이트됨에 따라 standard_gates 의 기본값을 None 으로 변경했습니다.

  • 지원되지 않는 인수를 approximate_quantum_error() 에 제공하면 이제 RuntimeError 대신 NoiseError 을 반환합니다.

지원 중단 노트

  • save_statevector(), save_density_matrix(), save_unitary(), save_superop() 의 반환 유형에 NumPy ndarray 메서드 및 속성을 사용하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 작동이 중지됩니다. 이제 이 지침은 반환 유형에 대한 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를 갖게 됩니다.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.