Skip to main content
IBM Quantum Platform

키스킷 0.37 릴리즈 노트


0.37.2

테라 0.21.2

Prelude

키스킷 테라 0.21.2 는 주로 버그 수정을 위한 릴리스이며, 몇 가지 개선된 문서 페이지도 함께 제공됩니다.

버그 수정

  • aer_simulator_statevector_gpu 에서 키스킷 에어의 GPU 시뮬레이터를 사용할 때 일부 함수에서 상태벡터 메서드로 올바르게 인식됩니다 QuantumInstance 및 기타 알고리즘 러너에서 사용할 때 상태 벡터 메서드가 올바르게 인식됩니다.

  • 수정 UCGate.inverse() 메서드가 글로벌 페이즈를 반전하지 못하도록 수정했습니다.

  • QuantumCircuit.compose() 는 이제 제어 흐름 빌더 컨텍스트 내에서 inplace=True 인수와 함께 사용할 때 올바르게 작동합니다. 이전에는 명령어가 제어 흐름 범위 외부에 추가되었습니다. 수정 #8433.

  • 바인딩된 ParameterExpressionsymengine 이 설치되어 있고 바인딩된 표현식이 일반 1j 이 아닌 경우 실제 표현식으로 식별되지 않는 버그를 수정했습니다. 예를 들어,

    from qiskit.circuit import Parameter
    
    x = Parameter("x")
    expr = 1j * x
    bound = expr.bind({x: 2})
    print(bound.is_real())  # used to be True, but is now False
  • QPY 직렬화 및 역직렬화를 수정했습니다 ControlledGate 의 직렬화 및 역직렬화를 수정했습니다 (즉, ctrl_state 이 모든 컨트롤이 아닌 컨트롤). 수정 #8549.

  • qiskit.providers.fake_provider.backends 의 모든 가짜 백엔드는 drive_channel(), measure_channel(), acquire_channel(), control_channel() 의 메서드 호출로 해당 펄스 채널 객체를 반환하도록 업데이트되었습니다.

  • 더 큰 문제에서 Z2Symmetries.taper() 실행 지원을 수정했습니다. 이전에는 이 방법을 사용하려면 많은 양의 메모리가 필요했기 때문에 일반적으로 더 큰 문제가 발생할 경우 실패할 수 있었습니다. 이 수정의 부수적인 효과로 성능이 크게 향상되었습니다.

에어 0.10.4

변경 없음

IBM Q 제공자 0.19.2

변경 없음


0.37.1

테라 0.21.1

버그 수정

  • 의 문제를 수정했습니다 QuantumCircuit.decompose() 메서드에서 gates_to_decompose 인수에 Gate 클래스 목록을 전달할 때 발생하는 문제를 수정했습니다. 회로의 게이트에 레이블이 설정된 경우 이 인수가 올바르게 처리되지 않아 출력 분해가 gates_to_decompose 목록에서 명시적으로 게이트를 잘못 건너뛰는 원인이 됩니다.

  • Fix to_instruction() 를 생성하려고 시도했던 UnitaryGate 를 생성하려던 문제를 수정했습니다. 이 연산자는 일반적으로 단일 연산자가 아니기 때문에 오류가 발생했습니다(우연히 단일 연산자였다면 예상했던 결과가 나오지 않았을 것입니다).

    지금 호출 to_instruction() 를 호출하면 보유하고 있는 연산자의 시간 진화를 구현하는 게이트가 올바르게 생성됩니다:

    >>> from qiskit.opflow import EvolvedOp, X
    >>> op = EvolvedOp(0.5 * X)
    >>> op.to_instruction()
    Instruction(
        name='unitary', num_qubits=1, num_clbits=0,
        params=[array([[0.87758256+0.j, 0.-0.47942554j], [0.-0.47942554j, 0.87758256+0.j]])]
    )
  • 함수 관련 문제를 수정했습니다 marginal_distribution() 함수의 문제를 수정했습니다. indices 인수에 널 배열이 전달되면 이 함수는 오류를 발생시켰습니다. 수정 #8283

  • 이전에는 어레인지할 수 없었습니다 CircuitStateFn 에서 생성된 VectorStateFn. 이는 상태벡터가 단일하지 않은 Initialize 명령어를 사용하여 회로로 변환되었기 때문입니다. 이 문제는 이제 대신 StatePreparation 명령어를 사용하면 상태가 모두 0 상태로 시작한다고 가정하므로 사용할 수 있습니다.

    예를 들어 이제 할 수 있습니다:

    from qiskit import QuantumCircuit
    from qiskit.opflow import StateFn
    
    left = StateFn([0, 1])
    left_circuit = left.to_circuit_op().primitive
    
    right_circuit = QuantumCircuit(1)
    right_circuit.x(0)
    
    overlap = left_circuit.inverse().compose(right_circuit)  # this line raised an error before!
  • 클래스에서 버그를 수정했습니다 Optimizer 클래스에서 이전에 존재하던 옵티마이저 인스턴스에서 새 옵티마이저 인스턴스를 재구성하면 settings 새 옵티마이저와 이전 옵티마이저 설정을 모두 기본값으로 재설정하는 버그를 수정했습니다. 특히 다음과 같은 경우 버그가 발생했습니다 Optimizer 객체가 Qiskit Runtime 프로그램에 입력으로 전송되는 경우 특히 버그가 발생했습니다.

    이제 옵티마이저 객체가 올바르게 재구성됩니다:

    >>> from qiskit.algorithms.optimizers import COBYLA
    >>> original = COBYLA(maxiter=1)
    >>> reconstructed = COBYLA(**original.settings)
    >>> reconstructed._options["maxiter"]
    1  # used to be 1000!
  • 개인에 대한 limit_amplitude 인수가 개별적인 SymbolicPulse 또는 Waveform 인스턴스의 인수가 매개변수 유효성 검사에 제대로 반영되지 않던 문제를 수정했습니다. 또한, QPY 일정 dump() 은 전역 클래스 변수를 저장하는 대신 인스턴스에 연결된 limit_amplitude 값을 올바르게 저장하도록 수정되었습니다.

  • 회로의 쌍별 얽힘 구조를 수정합니다 NLocal 회로의 쌍별 얽힘 구조를 수정합니다. 이로 인해 ZZFeatureMap에서 버그가 발생하여 entanglement="pairwise" 를 사용하면 오류가 발생했습니다. 이제 원하는 피처 맵을 올바르게 생성합니다:

    from qiskit.circuit.library import ZZFeatureMap
    encoding = ZZFeatureMap(4, entanglement="pairwise", reps=1)
    print(encoding.decompose().draw())

    위의 인쇄물입니다:

         ┌───┐┌─────────────┐
    q_0: ┤ H ├┤ P(2.0*x[0]) ├──■────────────────────────────────────■────────────────────────────────────────────
         ├───┤├─────────────┤┌─┴─┐┌──────────────────────────────┐┌─┴─┐
    q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ X ├┤ P(2.0*- x[0])*- x[1])) ├┤ X ├──■────────────────────────────────────■──
         ├───┤├─────────────┤└───┘└──────────────────────────────┘└───┘┌─┴─┐┌──────────────────────────────┐┌─┴─┐
    q_2: ┤ H ├┤ P(2.0*x[2]) ├──■────────────────────────────────────■──┤ X ├┤ P(2.0*- x[1])*- x[2])) ├┤ X ├
         ├───┤├─────────────┤┌─┴─┐┌──────────────────────────────┐┌─┴─┐└───┘└──────────────────────────────┘└───┘
    q_3: ┤ H ├┤ P(2.0*x[3]) ├┤ X ├┤ P(2.0*- x[2])*- x[3])) ├┤ X ├──────────────────────────────────────────
         └───┘└─────────────┘└───┘└──────────────────────────────┘└───┘
  • 클래스의 전역 단계 처리 문제를 수정했습니다 UCGate 클래스의 글로벌 페이즈 처리 문제를 수정했습니다.

에어 0.10.4

변경 없음

IBM Q 제공자 0.19.2

변경 없음


0.37.0

이번 릴리스는 키스킷에서 키스킷 이그니스 프로젝트에 대한 지원이 공식적으로 종료됨을 의미합니다. 이 패키지는 원래 0.33.0 릴리스에서 더 이상 사용되지 않으며, 해당 릴리스에서 문서화된 대로 qiskit-ignis 패키지가 키스킷 메타패키지에서 제거되었으므로 향후 릴리스 pip install qiskit 에는 더 이상 qiskit-ignis 이 포함되지 않습니다. 그러나 파이썬 패키징의 제한으로 인해 qiskit-ignis 의 기존 설치는 자동으로 제거할 수 없습니다. 이전 버전에서 업그레이드하는 경우 pip uninstall qiskit-ignis 를 사용하여 키스킷 이그니스를 수동으로 제거하거나 새로운 파이썬 환경에서 메타패키지를 설치하는 것이 좋습니다.

키스킷 이그니스는 키스킷 익스페리먼트 프로젝트로 대체되었습니다. 키스킷 이그니스에서 키스킷 실험으로 전환하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.

테라 0.21.0

Prelude

키스킷( 0.21.0 ) 릴리즈의 주요 내용은 다음과 같습니다:

  • 펄스 직렬화 지원 ScheduleBlock 를 통해 qiskit.qpy. QPY 형식이 펄스 스케줄을 포함하는 정의가 포함된 버전 5로 업데이트되었습니다. 이를 지원하기 위해 새로운 SymbolicPulse 클래스를 도입하여 기호 표현식을 통해 파라메트릭 펄스 파형을 정의할 수 있도록 했습니다.
  • 사전 설정 패스 관리자 작업 개선. 새로운 기능 generate_preset_pass_manager() 을 사용하면 내부에서 사용할 것과 동일한 패스 관리자를 쉽게 생성할 수 있습니다 transpile() 가 내부적으로 사용하는 것과 동일한 패스 관리자를 쉽게 생성할 수 있습니다. 또한 사전 설정 패스 관리자는 이제 인스턴스화되어 StagedPassManager 의 인스턴스가 되어 섹션을 더 쉽게 수정할 수 있습니다.
  • 속성의 내부 데이터 구조의 리팩터링입니다 QuantumCircuit.data 어트리뷰트의 내부 데이터 구조를 리팩터링합니다. 이전에는 (instruction, qubits, clbits) 형식의 튜플 목록이었지만 이제는 CircuitInstruction 객체의 목록입니다. 객체는 CircuitInstruction 객체는 이전 튜플 기반 액세스와 역호환되지만 런타임 오버헤드 비용이 발생합니다.

또한 트랜스파일러가 개선되어 더 나은 품질의 출력이 가능해졌습니다. 여기에는 다음과 같은 새로운 패스의 도입이 포함됩니다 VF2PostLayoutToqmSwap.

새 기능

  • 새 클래스를 추가했습니다, qiskit.transpiler.StagedPassManager라는 새로운 클래스를 추가했습니다 PassManager 하위 클래스로, 회로 컴파일을 수행하는 파이프라인이 정의되어 있습니다. 각 단계는 PassManager 객체이며, 정해진 순서로 실행됩니다. 예를 들어,

    from qiskit.transpiler.passes import *
    from qiskit.transpiler import PassManager, StagedPassManager
    
    basis_gates = ['rx', 'ry', 'rxx']
    init = PassManager([UnitarySynthesis(basis_gates, min_qubits=3), Unroll3qOrMore()])
    translate = PassManager([Collect2qBlocks(),
                             ConsolidateBlocks(basis_gates=basis_gates),
                             UnitarySynthesis(basis_gates)])
    
    staged_pm = StagedPassManager(stages=['init', 'translation'], init=init, translation=translate)
  • 메서드 추가 PauliList.group_commuting()SparsePauliOp.group_commuting()메서드를 추가하여 각 연산자를 하위 목록으로 분할하고 각 요소가 다른 모든 요소와 상호 작용하도록 했습니다. 예를 들어,

    from qiskit.quantum_info import PauliList, SparsePauliOp
    
    groups = PauliList(["XX", "YY", "IZ", "ZZ"]).group_commuting()
    # 'groups' is [PauliList(['IZ', 'ZZ']), PauliList(['XX', 'YY'])]
    
    op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ", 2j), ("ZZ", 1j)])
    groups = op.group_commuting()
    # 'groups' is [
    #     SparsePauliOp(['IZ', 'ZZ'], coeffs=[0.+2.j, 0.+1.j]),
    #     SparsePauliOp(['XX', 'YY'], coeffs=[2.+0.j, 1.+0.j]),
    # ]
  • 새로운 함수를 추가했습니다, marginal_distribution()비트 문자열의 입력 사전을 정수로 한계 처리하는 데 사용되는 새로운 함수( Counts). 이 기능은 기존 marginal_counts() 기능과 유사하지만 세 가지 주요 차이점이 있습니다. 첫 번째는 marginal_counts() 는 카운트 딕셔너리 또는 Results 객체와 함께 작동하고 marginal_distribution() 는 딕셔너리에서만 작동합니다. 두 번째는 marginal_counts()indices 인수의 인덱스 순서를 존중하지 않는 반면 marginal_distribution()indices 순서에 따라 출력 비트를 허용합니다. 세 번째 차이점은 marginal_distribution() 의 구현이 Rust로 작성되고 사전 입력을 한계값으로만 처리하도록 간소화되었기 때문에 더 빨라질 것입니다.

  • 모듈의 BaseOperator 서브클래스에 @ (__matmul__) 바이너리 연산자를 추가했습니다 qiskit.quantum_info 모듈에 추가했습니다. 이는 클래스의 dot 메서드(A @ B == A.dot(B))를 호출하는 약어입니다.

  • 에 새로운 선택적 인수 reps 를 추가하여 QuantumCircuit.decompose()에 회로를 반복적으로 분해할 수 있는 인수를 추가했습니다. 예를 들어,

    from qiskit import QuantumCircuit
    
    circuit = QuantumCircuit(1)
    circuit.ry(0.5, 0)
    
    # Equivalent to circuit.decompose().decompose()
    circuit.decompose(reps=2)
    
    # decompose 2 times, but only RY gate 2 times and R gate 1 times
    circuit.decompose(gates_to_decompose=['ry','r'], reps=2)
  • 새로운 펄스 기본 클래스 추가 SymbolicPulse. 이것은 더 이상 사용되지 않는 기존의 ParametricPulse를 대체하는 것으로, 더 이상 사용되지 않습니다. 새로운 베이스 클래스에서 펄스 엔벨로프 및 파라미터 유효성 검사 함수는 기호 표현식 객체로 표현됩니다. 새로운 클래스는 이러한 기호 방정식을 기호 계산 라이브러리를 통해 쉽게 직렬화할 수 있으므로 독립적이고 휴대 가능한 펄스 데이터를 제공합니다.

  • 에서 비허밋 연산자에 대한 지원이 추가되었습니다 AerPauliExpectation. 이를 통해 QEOM 과 같은 알고리즘에서 Aer의 빠른 스냅샷 예상 계산을 사용할 수 있습니다.

  • 키스킷 교과서의 색 구성표를 사용하는 새로운 회로 그리기 스타일( textbook)을 추가했습니다.

  • 새 속성 QuantumCircuit.op_start_times 는 스케줄링 분석 패스 중 하나가 회로에서 실행될 때 채워집니다. 예를 들어 인스트럭션 시간으로 회로 인스트럭션을 얻는 데 사용할 수 있습니다:

    from qiskit import QuantumCircuit, transpile
    from qiskit.providers.fake_provider import FakeMontreal
    
    backend = FakeMontreal()
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    
    qct = transpile(
        qc, backend, initial_layout=[0, 1], coupling_map=[[0, 1]], scheduling_method="alap"
    )
    scheduled_insts = list(zip(qct.op_start_times, qct.data))
  • 새로운 메서드 추가 QuantumCircuit.clear() 에서 모든 명령어를 제거하는 데 사용되는 QuantumCircuit.

  • 새로운 메서드 추가 QuantumCircuit.copy_empty_like() 메서드를 추가했습니다 QuantumCircuit 인스턴스의 복사본을 얻는 데 사용되는 새로운 메서드를 추가했습니다. 이는 논리적으로 qc.copy().clear() 과 동일하지만 훨씬 빠르고 메모리 효율이 높습니다. 이는 동일한 리소스(큐비트, 클래식 비트, 메타데이터 등)가 이미 모두 추가된 새 빈 회로가 필요할 때 유용합니다.

  • 메서드의 Target.instruction_supported() 메서드는 이제 operation_classparameters 라는 두 개의 새로운 키워드 인수를 지원합니다. 이러한 인수를 사용하여 instruction_supported() 메서드를 사용하여 매개변수 값이 있는 특정 연산이 객체에서 지원되는지 확인할 수 있습니다 Target 객체가 지원하는지 확인하는 데 사용할 수 있습니다. 예를 들어, 다음과 같은 경우 Targettarget 라는 이름의 RXGate 를 실행하는지 확인하려면 θ=π2\theta = \frac{\pi}{2} 을 사용하면 됩니다:

    from math import pi
    from qiskit.circuit.library import RXGate
    
    target.instruction_supported(operation_class=RXGate, parameters=[pi/2])

    target 실행을 지원하는 경우 True RXGateθ=π2\theta = \frac{\pi}{2}, 그렇지 않은 경우 False 으로 반환합니다.

  • 트로터화 기반 양자 실시간 진화 알고리즘 추가 qiskit.algorithms.TrotterQRTE. 새로운 양자 시간 진화 프레임워크를 준수하며, 새로운 양자 시간 진화 프레임워크인 ProductFormulaPauliEvolutionGate 구현을 사용합니다.

    from qiskit.algorithms import EvolutionProblem
    from qiskit.algorithms.evolvers.trotterization import TrotterQRTE
    from qiskit.opflow import X, Z, StateFn, SummedOp
    
    operator = SummedOp([X, Z])
    initial_state = StateFn([1, 0])
    time = 1
    evolution_problem = EvolutionProblem(operator, time, initial_state)
    
    trotter_qrte = TrotterQRTE()
    evolution_result = trotter_qrte.evolve(evolution_problem)
    evolved_state_circuit = evolution_result.evolved_state
  • 새로운 기능 추가 generate_preset_pass_manager() 를 추가했는데, 이 함수를 사용하면 사전 설정을 반영하는 PassManager 오브젝트를 미러링하는 PassManager 함수에 의해 내부적으로 사용되는 transpile() 함수를 추가했습니다. 예를 들어,

    from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
    from qiskit.providers.fake_provider import FakeWashingtonV2
    
    # Generate an optimization level 3 pass manager targeting FakeWashingtonV2
    pass_manager = generate_preset_pass_manager(3, FakeWashingtonV2())
  • 새로운 기능 추가 marginal_memory() 샷 메모리 배열의 한계값을 지정하는 데 사용되는 새로운 함수가 추가되었습니다. 샷 메모리 배열과 관심 인덱스가 제공되면 이 함수는 매긴화된 샷 메모리 배열을 반환합니다. 이 함수는 메모리 지원과 다릅니다 marginal_counts() 메서드의 메모리 지원과는 다릅니다. Results 객체의 memory 필드에서만 작동합니다.

  • 프리미티브 인터페이스는 __call__ 메서드의 인자로 인덱스 외에도 객체를 허용하도록 확장되었습니다. 이제 parameter_values 인수를 선택 사항으로 지정할 수 있습니다.

  • OpenQASM 3 익스포터(qiskit.qasm3)는 이제 다음과 같이 명시적 지연이 있는 회로 내보내기를 지원합니다 QuantumCircuit.delay().

  • 새로운 레이아웃과 라우팅 방법이 추가되었습니다. transpile() "시간 최적 큐비트 매핑" 논문을 기반으로 합니다. 이를 사용하려면 옵션 패키지인 Qiskit TOQM을 설치해야 합니다. 의 routing_method kwarg transpile() 는 추가 값 'toqm' 을 지원하며, 이는 TOQM을 통한 레이아웃 및 라우팅을 활성화하는 데 사용됩니다.

    qiskit-toqm 을 Terra와 함께 설치하려면 실행하세요:

    pip install qiskit-terra[toqm]
  • 임의 단위의 양자 섀넌 분해를 적용하는 새로운 모듈 qiskit.quantum_info.synthesis.qsd 을 추가했습니다. 이 기능은 기본 유니타리 합성 트랜스파일러 패스의 이전 아이소메트리 기반 방식을 대체하고, 회로에 유니티리를 추가할 때 UnitaryGate.

    양자 섀넌 분해는 두 큐비트 이상의 단일 행렬을 분해할 때 아이소메트리 구현으로 약 절반의 노트 게이트를 사용합니다.

  • 모듈의 클래스 중 스칼라 곱셈을 지원하는 quantum_info 모듈의 스칼라 곱셈을 지원하는 클래스는 이제 왼쪽 또는 오른쪽에서 스칼라를 곱할 수 있습니다. 이전에는 왼쪽에서 스칼라 승수만 허용했습니다.

  • 트랜스파일러 패스 LookaheadSwap ( transpile()routing_method="lookahead" )의 성능이 일부 개선되어 이제 약 3배 더 빨라졌습니다. 이는 순전히 계산 효율을 높이기 위한 것이며 알고리즘의 복잡성을 바꾸지는 않습니다. 대부분의 경우 다음과 같은 최신 라우팅 알고리즘( SabreSwap (routing_method="sabre")과 같은 최신 라우팅 알고리즘이 훨씬 더 성능이 좋습니다.

  • 새로운 트랜스파일러 패스가 추가되었습니다. 트랜스파일러 패스 Commuting2qGateRouter 는 스왑 전략을 사용하여 통근 게이트 블록을 커플링 맵으로 라우팅합니다. 실제로 라우팅은 어려운 문제이지만 CZ 네트워크에서처럼 게이트가 출퇴근하는 경우에는 훨씬 쉽습니다. 출퇴근 게이트 블록은 일반적으로 QAOA에서도 볼 수 있습니다. 이러한 경우 미리 정의된 스왑 게이트 레이어 세트를 적용하는 스왑 전략을 사용하여 처리할 수 있습니다. 또한, 새로운 트랜스파일러 패스( FindCommutingPauliEvolutions )는 2큐비트 항을 오가는 폴리 진화 블록을 식별합니다. 여기서 스왑 전략은 SwapStrategy 클래스에 의해 지정됩니다. 스왑 전략은 최상의 결과를 위해 커플링 맵과 이상적으로는 회로에 맞게 조정해야 합니다.

  • 키스킷 라이브러리에 새로운 옵티마이저를 도입하여 가변 양자 알고리즘의 파라미터 최적화에 대한 지원을 추가했습니다. 이것은 분포 추정 알고리즘의 특정 유형인 단변량 한계 분포 알고리즘(UMDA)입니다. 예를 들어,

    from qiskit.opflow import X, Z, I
    from qiskit import Aer
    from qiskit.algorithms.optimizers import UMDA
    from qiskit.algorithms import QAOA
    from qiskit.utils import QuantumInstance
    
    H2_op = (-1.052373245772859 * I ^ I) + \
            (0.39793742484318045 * I ^ Z) + \
            (-0.39793742484318045 * Z ^ I) + \
            (-0.01128010425623538 * Z ^ Z) + \
            (0.18093119978423156 * X ^ X)
    
    p = 2  # Toy example: 2 layers with 2 parameters in each layer: 4 variables
    
    opt = UMDA(maxiter=100, size_gen=20)
    backend = Aer.get_backend('statevector_simulator')
    vqe = QAOA(opt,
               quantum_instance=QuantumInstance(backend=backend),
               reps=p)
    
    result = vqe.compute_minimum_eigenvalue(operator=H2_op)
  • 트랜스파일러 패스의 생성자에는 Unroll3qOrMore 트랜스파일러 패스의 생성자에는 targetbasis_gates 라는 두 개의 새로운 선택적 키워드 인수가 있습니다. 이러한 옵션을 사용하면 대상 백엔드를 설명하기 위해 각각 Target 또는 지원되는 기준 게이트를 각각 지정하여 대상 백엔드를 설명할 수 있습니다. 회로의 연산 중 하나라도 target 또는 basis_gates 에 있는 경우 대상 디바이스가 해당 연산을 기본적으로 지원하므로 패스로 언롤링되지 않습니다.

  • QPY 직렬화가 지원되도록 업그레이드되었습니다 ScheduleBlock. 이제 펄스 프로그램을 바이너리로 저장하고 나중에 로드할 수 있습니다:

    from qiskit import pulse, qpy
    
    with pulse.build() as schedule:
        pulse.play(pulse.Gaussian(160, 0.1, 40), pulse.DriveChannel(0))
    
    with open('schedule.qpy', 'wb') as fd:
        qpy.dump(schedule, fd)
    
    with open('schedule.qpy', 'rb') as fd:
        new_schedule = qpy.load(fd)[0]

    이것은 공통적으로 QPY 인터페이스를 사용합니다 QuantumCircuit. 데이터 구조에 대한 자세한 내용은 SCHEDULE_BLOCK을 참조하세요.

  • 새로운 트랜스파일러 패스가 추가되었습니다, VF2PostLayout. 이 패스는 컴파일 파이프라인, 포스트 레이아웃 또는 포스트 최적화 큐비트 선택에서 새로운 단계/함수를 수행하기 위한 새로운 유형입니다. 이 패스의 아이디어는 트랜스파일러에서 최적화 루프를 완료한 후 회로의 각 큐비트에 대한 최종 게이트 수를 파악하여 백엔드에서 더 나은 성능의 큐비트 하위 집합을 찾아 회로를 실행할 수 있도록 하는 것입니다. 패스는 대상 백엔드의 연결 그래프에서 동형 하위 그래프를 검색하고, 발견된 하위 그래프에서 전체 회로의 전체 오류율을 살펴본 후 회로의 오류율이 가장 낮은 레이아웃을 반환합니다.

    이 패스는 VF2Layout 패스와 유사하며, 둘 다 내부적으로 retworkx의 동일한 VF2 구현을 사용합니다. 그러나 VF2PostLayout 는 초기 레이아웃, 라우팅, 베이시스 변환 및 모든 최적화 패스가 실행된 후에 실행되도록 설계되었으며 레이아웃이 이미 적용되고 회로가 라우팅되었으며 모든 게이트가 타겟 베이시스에 있는 경우에만 작동합니다. 이는 새 레이아웃이 적용될 때 대상 장치에서 회로를 계속 실행할 수 있도록 하기 위해 필요합니다. VF2Layout 반면에 완벽한 초기 레이아웃을 찾도록 설계되었으며 모든 회로에서 작동할 수 있습니다.

  • 트랜스파일러 패스의 ApplyLayout 트랜스파일러 패스는 이제 레이아웃을 한 번 적용한 후 회로에서 레이아웃을 업데이트하는 기능을 지원합니다. post_layout 필드가 있는 경우 (필수 layout 필드 외에) property_set ApplyLayout 패스를 실행하면 새 레이아웃을 적용하도록 레이아웃이 업데이트됩니다. 그러면 새로운 물리적 순서의 큐비트와 함께 DAGCircuit 을 반환하고 layout 속성 세트는 원래 레이아웃의 가상 큐비트를 새 post_layout 필드의 물리적 큐비트에 매핑하도록 업데이트됩니다.

  • 에서 생성된 사전 설정 패스 관리자 level_1_pass_manager(), level_2_pass_manager()level_3_pass_manager() 에서 각각 optimization_level 1, 2, 3에 해당합니다 transpile() 함수는 이제 라우팅 패스를 실행한 후 VF2PostLayout 패스를 실행합니다. 이를 통해 트랜스파일러는 대상 백엔드에서 잠재적으로 다른 물리적 큐비트 세트를 찾아 오류율이 낮은 회로를 실행할 수 있습니다. 패스는 VF2PostLayoutlayout_method, routing_method, 또는 initial_layout 인수를 수동으로 지정하면 패스가 실행되지 않습니다 transpile(). 패스가 백엔드에서 물리적 회로를 실행하기 위해 더 나은 성능의 큐비트 하위 집합을 찾을 수 있으면 대신 대체 큐비트를 사용하도록 회로의 레이아웃을 조정합니다.

  • 알고리즘은 각 고유 상태를 반복적으로 계산하며, 기저 상태(VQE에서와 같이 계산됨)에서 시작한 다음 이전 반복에서 계산된 상태와 직교하고 안사츠에 대해 계산할 때 가장 낮은 에너지를 갖는 고유 상태를 계산하는 수정된 비용 함수를 최적화합니다. 구현된 인터페이스는 VQE의 인터페이스와 매우 유사하며 다음과 같은 형식입니다:

    from qiskit.algorithms import VQD
    from qiskit.utils import QuantumInstance
    from qiskit.circuit.library import TwoLocal
    from qiskit.algorithms.optimizers import COBYLA
    from qiskit import BasicAer
    from qiskit.opflow import I,Z,X
    
    h2_op = (
        -1.052373245772859 * (I ^ I)
        + 0.39793742484318045 * (I ^ Z)
        - 0.39793742484318045 * (Z ^ I)
        - 0.01128010425623538 * (Z ^ Z)
        + 0.18093119978423156 * (X ^ X)
    )
    
    vqd = VQD(k =2, ansatz = TwoLocal(rotation_blocks="ry", entanglement_blocks="cz"),optimizer = COBYLA(maxiter = 0), quantum_instance = QuantumInstance(
                BasicAer.get_backend("qasm_simulator"), shots = 2048)
            )
    vqd_res = vqd.compute_eigenvalues(op)

    이 특정 코드 스니펫은 2개의 고유값(접지 및 1차 여기 상태)을 생성합니다. 테스트도 구현되었습니다.

업그레이드 주의사항

  • 의 펄스 클래스는 qiskit.pulse.library 의 펄스 클래스는 이제 SymbolicPulse 의 서브클래스입니다 ParametricPulse. 사용 가능한 클래스는 다음과 같이 변경되지 않습니다 Gaussian, GaussianSquare, DragConstant. SymbolicPulse 는 이전 버전과 완벽하게 호환되며 기능 손실이 없어야 합니다.

  • 의 각 요소의 데이터 유형이 QuantumCircuit.data 의 각 요소의 데이터 유형이 변경되었습니다. 예전에는 단순한 3-튜플의 Instruction의 목록과 Qubit의 목록, 그리고 Clbit의 3-튜플이었지만, 이제는 CircuitInstruction.

    이 새 클래스의 속성은 operation, qubitsclbits로, 이전 튜플의 요소에 해당합니다. 하지만 qubitsclbits 는 이제 lists가 아닌 tuple 인스턴스입니다.

    이 새로운 클래스는 인덱스의 요소에 액세스하거나 반복을 시도하는 경우 기존 3-튜플과 똑같이 동작합니다. 여기에는 qubitsclbits 요소를 목록에 캐스팅하는 것도 포함됩니다. 이는 이전 버전과의 호환성을 지원하기 위한 것입니다. 키스킷 테라( 0.21 )부터는 더 이상 이러한 요소에 액세스하는 데 선호되는 방식이 아닙니다. 대신 위에서 설명한 속성 액세스 양식을 사용해야 합니다.

    이는 테라의 데이터 구조가 지속적으로 하위 호환성을 깨지 않고도 QuantumCircuit 데이터 구조를 더욱 발전시킬 수 있도록 하기 위한 것입니다. 향후 개발 계획에는 동적 파라미터화된 회로와 딥 회로의 전반적인 메모리 사용량 감소가 포함됩니다.

  • 트랜스파일러 패스에만 사용되는 python-constraint 의존성은 CSPLayout 트랜스파일러 패스에만 사용되는 종속성은 더 이상 키스킷 테라 패키지의 요구 사항 목록에 없습니다. 이는 사전 설정 패스 관리자에서 CSPLayout 패스가 더 이상 사전 설정 패스 관리자에서 기본적으로 사용되지 않기 때문입니다 transpile(). 패스를 계속 사용할 수 있는 동안에는 수동으로 python-contraint 을 설치하거나 qiskit-terra 을 설치할 때 csp-layout 추가 기능을 사용할 수 있습니다:

    pip install "qiskit-terra[csp-layout]"
  • 에서 내보내는 QPY 버전 포맷 버전이 qpy.dump() 이 버전 5로 증가했습니다. 이 새 형식 버전은 이전 버전과 호환되지 않으며, QPY 버전 5를 처리할 수 없는 역직렬화기로 로드하려고 할 때 오류가 발생합니다. 이 변경은 제어된 게이트를 올바르게 표현하고 기본값이 아닌 제어 상태를 표현하는 데 필요한 지원을 수정하기 위해 필요했습니다.

  • 키스킷 테라의 컴파일된 러스트 확장은 이제 최소 지원 러스트 버전(MSRV)이 1.56.1 입니다. 즉, 소스에서 키스킷 테라를 빌드할 때 지원되는 가장 오래된 버전의 러스트 컴파일러는 1.56.1 입니다. 이전 버전의 Rust 컴파일러를 사용하는 경우 소스에서 키스킷을 계속 빌드하려면 최신 버전으로 업데이트해야 합니다. 이 변경은 많은 업스트림 종속성이 최소 지원 버전도 업데이트했기 때문에 필요했습니다.

  • 이제 둘 이상의 회로가 제공될 때 회로 스케줄링이 병렬로 실행됩니다 schedule(). 자세한 내용은 #2695를 참조하세요.

  • 이전에 사용되지 않던 BaseBackend, BaseJob, BaseProvider 클래스는 모두 제거되었습니다. 이 기능은 원래 0.18.0 릴리스에서 사용되지 않았습니다. 이러한 클래스 대신 버전이 지정된 공급자 인터페이스 클래스를 사용해야 하며, 최신 버전은 BackendV2, JobV1ProviderV1.

  • 이전에 사용되지 않던 backend 인수가 제거되었습니다 RZXCalibrationBuilder 트랜스파일러 패스의 생성자 인수가 제거되었습니다. 이 기능은 원래 0.19.0 릴리스에서 더 이상 사용되지 않습니다. 대신 쿼리해야 합니다 Backend 객체에 instruction_schedule_mapqubit_channel_mapping 을 쿼리하여 생성자에게 직접 전달해야 합니다. 예를 들어 BackendV1 백엔드:

    from qiskit.transpiler.passes import RZXCalibrationBuilder
    from qiskit.providers.fake_provider import FakeMumbai
    
    backend = FakeMumbai()
    inst_map = backend.defaults().instruction_schedule_map
    channel_map = backend.configuration().qubit_channel_mapping
    cal_pass = RZXCalibrationBuilder(
        instruction_schedule_map=inst_map,
        qubit_channel_mapping=channel_map,
    )

    또는 BackendV2 백엔드:

    from qiskit.transpiler.passes import RZXCalibrationBuilder
    from qiskit.providers.fake_provider import FakeMumbaiV2
    
    backend = FakeMumbaiV2()
    inst_map = backend.instruction_schedule_map
    channel_map = {bit: backend.drive_channel(bit) for bit in range(backend.num_qubits)}
    cal_pass = RZXCalibrationBuilder(
        instruction_schedule_map=inst_map,
        qubit_channel_mapping=channel_map,
    )
  • BasicAer 백엔드의 측정 샷 제한이 제거되었습니다.

  • DAGNode 의 경우 이전에 더 이상 사용되지 않는 type, op, qargs, cargs, wire kwarg 및 속성이 제거되었습니다. 이 기능은 원래 0.19.0 릴리스에서 더 이상 사용되지 않습니다. op, qargs, cargs kwarg 및 속성은 DAGOpNode 인스턴스에서만 액세스할 수 있으며, wire kwarg 및 속성은 DAGInNode 또는 DAGOutNode 인스턴스에서만 액세스할 수 있습니다.

  • 더 이상 사용되지 않는 함수 pauli_group() 가 제거되었습니다. 이 기능은 원래 키스킷 테라 0.17 에서 더 이상 사용되지 않습니다.

  • 의 몇 가지 더 이상 사용되지 않는 메서드 Pauli 의 여러 메서드가 제거되었으며, 이는 원래 키스킷 테라에서 사용되지 않는 메서드입니다 0.17. 그랬죠:


    sgn_prod

    사용 Pauli.compose() 또는 Pauli.dot() 대신


    to_spmatrix

    대신 Pauli.to_matrix() 대신 sparse=True 인수를 사용합니다.


    kron

    를 사용하되 Pauli.expand()를 사용하지만 기존 개체를 변경하는 것이 아니라 새 개체를 반환한다는 점에 유의하세요.


    update_zupdate_x

    개체의 zx 속성을 직접 설정합니다.


    insert_paulis

    사용 Pauli.insert().


    append_paulis

    사용 Pauli.expand().


    delete_qubits

    사용 Pauli.delete().


    pauli_single

    라벨을 수동으로 구성하고 다음과 같이 이니셜라이저에 직접 전달합니다:

    Pauli("I" * index + pauli_label + "I" * (num_qubits - index - len(pauli_label)))

    random

    대신 quantum_info.random_pauli() 대신 사용하세요.

  • 클래스에서 optimize 메서드를 제거했습니다 Optimizer 클래스에서 메서드를 제거했습니다 minimize() 메서드로 직접 대체됩니다. 한 가지 예외는 SPSA의 경우 사용 중단 경고가 트리거되지 않았으므로 해당 메서드가 계속 유지됩니다.

  • Result 는 항상 date, status, header 속성을 포함하도록 수정되었습니다(지정되지 않은 경우 None 로 설정됨).

  • Python 3.7 shared-memory38 는 이제 종속성입니다. 이것은 Python 3.7 의 종속성으로 추가되어 최신 버전의 표준 라이브러리에서 공유 메모리 구성을 활용할 수 있도록 Python. Python >= 3.8 에서 실행하는 경우 추가 종속성이 필요하지 않습니다.

  • Instruction 레이블은 이제 인스트럭션 생성 시 유형 검사를 거칩니다.

  • QPY 직렬화가 직렬화하도록 업그레이드되었습니다 QuantumCircuit 와 함께 QuantumCircuit.calibrations. QPY 버전 5부터는 다음과 같은 캘리브레이션 항목만 ScheduleBlock 유형의 캘리브레이션 항목만 직렬화할 수 있습니다.

  • 의 정의가 XXPlusYYGate 의 정의가 변경되었습니다. 자세한 내용은 #7969를 참조하세요.

  • 에서 생성된 사전 설정 패스 관리자 level_1_pass_manager(), level_2_pass_manager()level_3_pass_manager() 에 의해 생성되고 transpile() 함수의 optimization_level 인수가 각각 1, 2, 3에서 사용하는 사전 설정 패스 관리자는 더 이상 트랜스파일러 패스의 VF2Layout 트랜스파일러 패스에 시간 제한을 설정하지 않습니다. 즉, 패스는 더 나은 대안을 찾기 위해 정해진 시간 제한(레벨 1은 100ms, 레벨 2는 10초, 레벨 3은 60초)까지 더 완벽한 레이아웃을 찾으려는 시도를 멈추지 않는데, 이렇게 하면 완벽한 레이아웃이 있을 때 컴파일의 재현성이 제한되기 때문입니다. 즉, 패스를 사용할 때의 출력은 이전과 다를 수 있지만, 모든 경우에 이전 출력보다 더 낮은 노이즈의 큐비트 집합을 찾을 수 있는 경우에만 변경됩니다. 이전 동작을 유지하려면 사용자 정의( PassManager 를 생성하여 VF2Layout 패스에 대한 생성자에서 time_limit 인수를 설정할 수 있습니다.

지원 중단 노트

  • 전화하기 timeline_drawer() 을 예약되지 않은 회로로 호출하는 기능은 더 이상 사용되지 않습니다. 지연 명령으로만 구성된 회로라도 모든 회로는 scheduling_method 키워드 인수를 transpile() 에 저장되는 스케줄 정보를 생성하려면 QuantumCircuit.op_start_times.

  • 변환기 NetworkX 변환기 기능과 DAGCircuit.to_networkx()from_networkx(), DAGDependency.to_networkx() 메서드는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 키스킷은 qiskit-terra 0.12.0 릴리스 이후 그래프 라이브러리로 retworkx를 사용해 왔으며, 그 이후 네트워크x 변환기 기능이 손실되었습니다. 이 기능은 원래 사용자가 retworkx에 없는 NetworkX’s 알고리즘 라이브러리의 기능을 활용할 수 있도록 추가되었습니다. 그 이후로 retworkx는 더 많은 기능을 제공하며 성숙해졌고 DAGCircuit 는 작동을 위해 retworkx와 긴밀하게 결합되어 있습니다. 이러한 변환기 메서드는 앞으로 제한적인 가치를 제공하므로 향후 릴리스에서 제거될 예정입니다.

  • 모듈에서 몇 가지 이전 토글(HAS_MATPLOTLIB, HAS_PDFTOCAIRO, HAS_PYLATEX , HAS_PIL)에 액세스하는 것은 이제 더 이상 사용되지 않습니다 qiskit.visualization 모듈에서 액세스하는 것은 이제 더 이상 사용되지 않으며, 이러한 가져오기 경로는 키스킷 테라의 향후 버전에서 제거될 예정입니다. 동일한 객체는 대신 qiskit.utils.optionals를 통해 액세스해야 하며, 여기에는 테라의 거의 모든 선택적 종속성에 대한 테스터가 포함되어 있습니다.

  • qiskit.test.mock 모듈은 이제 더 이상 사용되지 않습니다. 이전에는 qiskit.test.mock 에서 사용할 수 있었던 가짜 백엔드 및 가짜 공급자 클래스를 qiskit.providers.fake_provider 에서 액세스할 수 있습니다 0.20.0. 이러한 변화는 이전에는 가짜 백엔드 클래스가 내부 테스트 스위트의 일부로만 제공되어 사용자에게 부작용으로 노출되었던 것과 달리, 키스킷의 일부로 지원하겠다는 적절한 약속을 의미합니다.

  • 인수를 호출할 때 인수의 이름은 Estimator 또는 Sampler 객체를 함수로 호출할 때 인수의 이름이 circuit_indicesobservable_indices 에서 circuitsobservables 로 변경되었습니다.

  • 함수에 대한 qobj_idqobj_header 키워드 인수는 execute() 함수는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. BaseBackend 클래스가 제거된 이후 이러한 인수는 백엔드에서 Qobj 객체로 직접 실행을 지원하지 않고 대신에 QuantumCircuit 객체와 직접적으로만 작동합니다.

  • 의 초기화자에 대한 x, zlabel 인수는 Pauli 는 키스킷 테라 0.17 에서 더 이상 사용되지 않는 것으로 문서화되었지만, 런타임에 예상되는 경고가 표시되지 않는 버그가 발생했습니다. 이제 경고가 올바르게 표시되며, 키스킷 테라 0.23 이후 버전에서는 인수가 제거됩니다. xz 쌍은 단일 튜플(Pauli((z, x)))로 위치 지정하여 전달해야 합니다. 문자열 label 은 첫 번째 인수(Pauli("XYZ"))에 위치적으로 전달되어야 합니다.

  • 메서드는 SPSA.optimize() 메서드는 더 이상 사용되지 않으며 SPSA.minimize()를 직접 대체할 수 있습니다. 이 메서드는 이전보다 더 많은 정보가 포함된 완전한 결과 객체를 반환합니다.

  • circuits 인수는 qpy.dump() 는 더 이상 사용되지 않으며, 이제 QPY는 회로 이외의 여러 데이터 유형을 지원하므로 programs 로 대체되었습니다.

  • AlignmentKind.to_dict() 메서드는 더 이상 사용되지 않으며 제거될 예정입니다.

버그 수정

  • 에 추가 유효성 검사가 추가되었습니다 DiagonalGate 에 추가 유효성 검사를 추가하여 인수가 모듈러스 1인지 확인합니다.

  • 에 주어진 큐비트 인덱스가 중복되면 SparsePauliOp.from_sparse_list() 에 주어진 중복 큐비트 인덱스는 이제 이전 값을 조용히 덮어쓰는 대신 오류를 올바르게 발생시킵니다. 새 키워드 인수 do_checks=False 를 전달하여 이전 동작에 액세스할 수 있습니다.

  • 시각화 timeline_drawer() 시각화는 더 이상 기존 레지스터 슬롯을 잘못 정렬하지 않습니다.

  • 에 대한 매개변수 유효성 검사가 GaussianSquare 의 매개변수 유효성 검사는 이제 빌드 전후에 일관성을 유지합니다. 자세한 내용은 #7882를 참조하세요.

  • 기반 가짜 백엔드 BackendV2-기반 가짜 백엔드 qiskit.providers.fake_provider 모듈의 FakeMontrealV2와 같은 모듈의 기반 가짜 백엔드는 이제 Delay 연산을 지원합니다 target 어트리뷰트에서 연산을 지원합니다. 이전에는 QuantumCircuit 지연이 포함된 객체는 이러한 백엔드로 컴파일할 수 없었습니다.

  • TridiagonalToeplitz.eigs_bounds() 에서 일부 경우에 음수 고유값이 있는 경우 잘못된 고유값 바운드가 반환되는 버그를 수정했습니다. 자세한 내용은 #7939를 참조하세요.

  • LaTeX 상태 벡터 드로어가 max_size 매개 변수를 무시하는 버그를 수정했습니다.

  • 생성자 메서드에서 지원을 수정했습니다 PassManagerConfig.from_backend() 생성자 메서드에서 PassManagerConfig 객체를 생성하는 BackendV2 인스턴스에서 객체를 생성하는 메서드 지원을 수정했습니다. 이전에는 이 작업이 올바르게 처리되지 않았으며, 실행 시 BackendV2 객체로 실행하면 실패했습니다.

  • QPY 직렬화(qpy.dump()) 및 역직렬화(qpy.load())의 직렬화( QuantumCircuit 객체의 직렬화( ControlledGate 객체의 직렬화( ) 및 역직렬화( ) 지원이 수정되었습니다. 이전에는 사용자 정의를 재구성하려고 할 때 qpy.load() 에 의해 예외가 발생했습니다 ControlledGate. 수정 #7999.

  • QPY 직렬화(qpy.dump()) 및 역직렬화(qpy.load())의 직렬화( QuantumCircuit 객체의 직렬화( MCPhaseGate 객체의 직렬화( ) 및 역직렬화( ) 지원이 수정되었습니다. 이전에는 예외가 발생했습니다 qpy.load() 를 재구성하려고 할 때 MCPhaseGate.

  • QPY 직렬화(qpy.dump()) 및 역직렬화(qpy.load())의 직렬화( QuantumCircuit 객체의 직렬화( ) 및 역직렬화( ) 지원이 수정되었습니다. 이전에는 직렬화 프로세스와 재구성된 회로로 인해 개방형 제어 상태가 손실되었습니다.

  • 수정됨 QuantumCircuit.reverse_bits() 레지스터리스 QubitClbit. 예를 들어 이제 다음이 작동합니다:

    from qiskit.circuit import QuantumCircuit, Qubit, Clbit
    
    qc = QuantumCircuit([Qubit(), Clbit()])
    qc.h(0).c_if(qc.clbits[0], 0)
    qc.reverse_bits()
  • 이전에 제공된 t1 값에 따라 잘못 설정되었던 ConfigurableFakeBackend.t2 속성을 수정했습니다.

  • 문제를 수정했습니다 BackendV2-기반 가짜 백엔드 클래스 문제를 수정했습니다 qiskit.providers.fake_provider 모듈에서 다음과 같은 FakeMontrealV2 와 같은 모듈의 가짜 백엔드 클래스 기반 문제를 수정했습니다 dt 속성(및 Target.dt 속성) 값이 초로 제대로 변환되지 않던 문제를 수정했습니다. 이러한 가짜 백엔드를 스케줄링에 사용할 경우 문제가 발생할 수 있습니다.

  • 의 버그를 수정했습니다 plot_histogram() 에서 number_to_keep 인수가 키 수보다 작을 때 발생하는 버그를 수정했습니다. 다음 코드는 더 이상 오류를 발생시키지 않으며 올바르게 정렬됩니다:

    from qiskit.visualization import plot_histogram
    data = {'00': 3, '01': 5, '11': 8, '10': 11}
    plot_histogram(data, number_to_keep=2)
  • 상대적으로 적은 수의 매개변수를 공유하는 게이트가 많은 매개변수화된 QuantumCircuit 인스턴스를 빌드하고 작업하는 성능이 향상되었습니다.

  • OpenQASM 3 익스포터(qiskit.qasm3)는 더 이상 basis_gates 옵션에서 비표준 게이트에 대한 정의를 생성하려고 시도하지 않습니다.

  • 의 게터를 수정했습니다 OptimizerResult.nit의 게터를 수정했는데, 이전에는 반복 횟수 대신 자코비안 평가 횟수를 반환했습니다.

  • 객체의 문자열 표현 버그를 수정했습니다 Result 객체의 문자열 표현에서 속성이 잘못 지정되는 버그를 수정했습니다.

  • 다음과 관련된 문제를 수정했습니다 transpile() 의 문제를 수정했습니다. basis_gates 키워드 인수를 통해 또는 암시적으로 기본 게이트 문자열 목록을 제공하거나 Targettarget 키워드 인수를 통해 입력하면 올바르게 해석되지 않고 나열된 게이트의 하위 집합이 각 회로에 사용되던 문제를 수정했습니다.

  • 트랜스파일러 패스의 UnitarySynthesis 트랜스파일러 패스의 문제를 수정했습니다 Target 연산에 큐비트 제한이 없는 경우(예: 이상적인 시뮬레이터 타겟의 경우)에 생성자에 target 키워드 인수를 지정하면 오류가 발생하던 문제를 수정했습니다.

  • 메서드 qiskit.result.marginal_counts()를 전달할 때 Result 메서드는 ExperimentResult 객체 배열을 포함하며, 각 객체에는 QobjExperimentHeader 이 있고 ExperimentHeaders 에는 creg_sizes 인스턴스 변수가 없기 때문에 실패합니다. Result 이 시뮬레이터 백엔드(예: Aer)에서 왔다면 해당 인스턴스 변수가 있을 것입니다. marginal_counts 필드가 존재하지 않거나 없음이 아닌 경우 creg_sizes가 필요한 로직을 건너뛰도록 수정했습니다.

  • OpenQASM 2 익스포터(QuantumCircuit.qasm())는 이제 모든 큐비트에 영향을 주지 않는 연산에 대해 UnitaryGate 연산에 대한 큐비트 매개변수를 올바르게 정의합니다. 8224번 수정.

  • 함수 재현성 관련 문제를 수정했습니다 transpile() 함수의 재현성 문제를 수정했습니다. optimization_level 1, 2, 3으로 실행할 때. 이전에는 여러 개의 완벽한 레이아웃(SWAP 게이트가 필요 없는 레이아웃)을 사용할 수 있는 일부 조건에서 seed_transpiler 인수의 설정 여부에 관계없이 선택된 레이아웃과 출력 회로가 달라질 수 있었습니다.

에어 0.10.4

변경 없음

IBM Q 제공자 0.19.2

버그 수정

  • 곧 출시될 테라 릴리스에서는 최종 릴리스에 앞서 릴리스 후보에 태그가 지정될 예정입니다. 그러나 패키지의 버전 문자열을 변경하는 것은 버전 구문 분석을 시도하고 있고 버전 문자열에 pre-release 접미사가 없을 것으로 가정하기 때문에 현재 qiskit-ibmq-provider에서 차단되어 있다(자세한 내용은 #8200 참조). PR #1135는 이 버전 구문 분석을 수정하여 모든 PEP440 패키지 버전에 프리 릴리스 접미사가 포함된 것을 처리하는 pypa/packaging 프로젝트의 정규식을 사용하도록 수정했습니다. 이렇게 하면 테라가 qiskit-ibmq-provider를 깨지 않고 0.21.0rc1 태그를 릴리스할 수 있습니다.
  • threading.currentThreadnotifyAll 은 Python 3.10 (2021년 10월)에서 더 이상 사용되지 않으며 Python 3.12 (2023년 10월)에서 제거될 예정입니다. PR #1133은 threading.current_thread, notify_all 은 Python 2.6 (2008년 10월)에 추가되었습니다.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.