Skip to main content
IBM Quantum Platform

키스킷 SDK 1.4 릴리즈 노트


1.4.6

Prelude

Qiskit v1.4.6 는 보안 업데이트 전용 릴리스이며, Qiskit v1.x 시리즈의 마지막 릴리스입니다.

Qiskit v1.x 은 더 이상 어떤 형태로도 유지 관리되지 않습니다.

보안 문제점

  • OpenQASM 의 2개 파서(qasm2.load()qasm2.loads())는 이제 지나치게 깊은 표현식을 평가하려고 시도할 때 오류와 RecursionError 함께 종료됩니다. 파서 진입 지점에서 Python 의 sys.getrecursionlimit() 허용 최대 깊이를 참조합니다.

    이전에는 파서가 Rust 메모리 공간 내에서 임의로 재귀 호출을 수행할 수 있었으며, 결국 최대 스택 공간을 초과하여 프로세스에 세그폴트가 발생했습니다.


1.4.5

Prelude

키스킷 v1.4.5 은 1.4 시리즈의 마지막 버그 수정 릴리스이며 이 시리즈의 수명이 다했음을 의미합니다. 1.4 시리즈의 보안 수정에 대한 지원은 2026년 3월 31일까지 계속됩니다.

버그 수정

  • 회로 시각화에서 익명 비트 처리를 수정했습니다. 이전에는 레지스터에 연결되지 않은 비트가 기본값인 Python 표현으로 표시되었지만, 이제는 읽기 쉬운 방식으로 인덱스가 표시됩니다. 14031 수정.

  • 패스를 초기화할 때 Optimize1qGatesDecomposition 패스를 초기화할 때 Target 고정 각도 매개변수가 있는 1q 게이트를 포함하는 패스를 초기화할 때 발생하는 문제를 수정했습니다. 이전에는 타깃의 게이트가 임의의 파라미터 값을 지원하는지 확인하지 않았기 때문에 패스가 타깃 외부의 게이트를 출력할 가능성이 있었습니다. 수정 #14743.

  • 패스에서 잘못된 동작을 수정했습니다 BasisTranslator 블록 내의 멀티 큐비트 게이트가 ControlFlowOp 블록 내의 멀티 큐비트 게이트가 외부 회로의 절대 인덱스를 사용하는 대신 로컬 큐비트 인덱스로 지원되는 연산을 추적하는 잘못된 동작을 수정했습니다. 13728 수정.

  • 의 버그를 수정했습니다 HighLevelSynthesis에서 게이트가 다른 명령어 객체 안에 중첩된 경우 사용자 지정 게이트 보정이 인식되지 않던 버그가 수정되었습니다. 부분적으로 수정된 #13728.

  • 제어 흐름 작업 내부의 회로 블록이 외부 회로와 다른 레지스터에 정의된 경우 발생할 수 있는 회로 텍스트 드로어의 오류를 수정했습니다. 이러한 상황은 예를 들어 ControlFlowOp 연산을 직접 추가하거나 트랜스파일링 후 회로에서 발생할 수 있습니다.


1.4.4

Prelude

키스킷 v1.4.4 은 v1.4.x 릴리즈 시리즈의 마이너 버그 수정 릴리즈입니다.

버그 수정

  • ApplyLayout 은 이제 제로 큐비트를 적용하는 경우를 올바르게 처리합니다 Layout. 이전에는 "layout" 필드가 같더라도 레이아웃이 설정되지 않았다고 주장했습니다 PropertySetLayout() 와 같더라도 레이아웃이 설정되지 않았다고 주장했습니다.

  • 메서드의 버그를 수정했습니다 QuantumCircuit.assign_parameters() 에서 문자열 입력 및 인자 strict=False 에 오류가 발생하는 버그를 수정했습니다. 자세한 내용은 #13933을 참조하세요.

  • 수정 name 속성을 수정하여 OrGate 클래스의 속성이 이제 "or" 로 설정되어 이 게이트를 고유하게 식별하도록 수정했습니다. 이전에는 "and" 로 잘못 설정되어 다음과 구분할 수 없었습니다 AndGate 와 구별할 수 없거나 합성 플러그인을 사용하여 OrGate. 수정 #14434

  • 트랜스파일러 패스의 버그를 수정했습니다 ElidePermutations 트랜스파일러 패스의 버그를 수정했습니다 PermutationGate가 있을 때 쿼비트 매핑이 올바르게 업데이트되지 않아 잘못된 회로와 패스 매니저의 프로퍼티 세트 업데이트로 이어지는 버그를 수정했습니다.

  • 의 버그를 수정했습니다 PauliEvolutionSynthesisDefaultPauliEvolutionSynthesisRustiq 플러그인에서 preserve_order=False 을 설정할 때 원래 회로의 .synthesis 속성을 수정하는 버그를 수정했습니다. 플러그인의 동작이 복원되었으며 이제 트랜스필레이션 파이프라인 전체에서 원래 회로가 보존됩니다.

  • 'ps' 단위를 사용하여 지연 명령이 포함된 회로를 QASM3 으로 내보낼 때 정확성 버그가 수정되었습니다.

  • 지원되는 최소 rustworkx 버전( 0.15 )과의 호환성 문제를 수정했습니다. 특정 입력값을 사용하면 VF2LayoutVF2PostLayout 는 이전에 rustworkx 0.16.0 에 추가된 rustworkx 메서드를 사용했기 때문에 지원되는 것으로 나열된 이전 rustworkx 릴리스를 사용할 때 오류가 발생할 수 있습니다.

  • SabreLayoutSabreSwap 를 사용하는 회로에 라우팅 결과를 적용할 때 더 이상 당황하지 않습니다 expr.Var 객체를 사용하는 회로에 라우팅 결과를 적용할 때 더 이상 당황하지 않습니다.

  • 회로 라이브러리 기능 quantum_volume() 가 업데이트되어 numpy.random.Generatorseed 인수의 입력으로 처리하도록 업데이트되었습니다. 이전에는 이러한 생성기 인수가 TypeError.

  • 회로 라이브러리 함수의 버그 수정 evolved_operator_ansatz(), qaoa_ansatz()hamiltonian_variational_ansatz()에서 매개변수에 0 복소수 구성 요소가 있는 버그가 수정되었습니다. 메서드를 사용하여 SymPy 으로 번역하지 않는 한 대부분 문제가 되지 않았지만 ParameterExpression.sympify() 메서드를 사용하면 오류가 발생했습니다.


1.4.3

Prelude

키스킷 v1.4.3 은 v1.4.x 릴리즈 시리즈의 마이너 버그 수정 릴리즈입니다.

버그 수정

  • 의 버그를 수정했습니다 DAGCircuit 의 버그를 수정했습니다 Var 노드가 입력 노드가 되는 버그를 수정했습니다( deepcopy 및 피클링 중).

  • 트랜스파일러 패스의 문제를 수정했습니다 BasisTranslator 트랜스파일러 패스에서 DAG의 전역 단계가 올바르게 업데이트되지 않던 문제를 수정했습니다. 14074 수정.

  • QPY의 버그 수정(qiskit.qpy)에서 클래스 게이트가 포함된 회로가 MCMTGate 클래스의 게이트를 포함하는 회로가 직렬화되지 않던 버그를 수정했습니다. 13965번을 참조하세요.

  • SabreLayout 는 이제 회로의 namemetadata 필드를 조인트 레이아웃 및 라우팅 패스로 수행할 때 올바르게 전파합니다.

  • 단일 합성 플러그인의 문제를 수정했습니다 SolovayKitaevSynthesis 단일 합성 플러그인에서 다른 베이시스 게이트로 플러그인을 반복적으로 실행하면 첫 번째 실행의 베이시스 게이트만 잘못 재사용되는 문제를 수정했습니다. 이 문제는 기본 근사값을 캐싱할 때 기준 게이트를 무시했기 때문이었으며, 이제 수정되었습니다.

  • 트랜스파일러 패스의 문제를 수정했습니다 SolovayKitaev 트랜스파일러 패스에서 내부 재귀에서 180도 회전이 발생하여 패스가 제대로 처리되지 않아 충돌이 발생할 수 있는 문제를 수정했습니다.

  • 트랜스파일러 패스의 문제를 수정했습니다 SolovayKitaev 트랜스파일러 패스에서 생성된 근사값이 올바른 값과 π\pi 차이 나는 위상을 가질 수 있는 문제를 수정했습니다. 이는 큐비트 게이트 행렬의 올바른 부호를 얻기 위해 추가 처리가 필요한 내부 SO(3)SO(3) 표현으로 인해 발생한 결과입니다. 수정 #9552

  • 의 폴백 오류 휴리스틱은 VF2LayoutVF2PostLayout의 오류 휴리스틱은 보고된 오류율이 없을 때 사용되며, 이전에는 1보다 큰 오류를 할당하고 결과 레이아웃 점수에 예측할 수 없는 영향을 미칠 수 있었습니다.


1.4.2

Prelude

키스킷 1.4.2 은 1.4 릴리스 시리즈에서 발견된 버그를 수정하는 패치 릴리스입니다.

새 기능

  • 함수에 새 플래그 trust_payload 를 추가했습니다 qpy.load() 함수에 추가했습니다. 이 기능은 잠재적으로 안전하지 않은 페이로드를 강제로 로드하는 데 사용됩니다. 페이로드에 ScheduleBlock 객체( 독립형 또는 QuantumCircuit.calibrations)가 포함되어 있고 QPY 파일의 심볼릭 인코딩이 sympy 로 설정되어 있다면 페이로드는 잠재적으로 안전하지 않으며, 이를 로드하면 임의의 코드 실행이 허용될 수 있습니다. 이 플래그는 존재하지 않는 인스턴스의 역직렬화를 제어하기 위한 것이므로 ScheduleBlock1.4.x 인스턴스의 역직렬화를 제어하기 위한 것이므로 이 플래그는 키스킷 >= 2.0.0 에서만 존재하고 키스킷 >= 2.0.0 에서는 존재하지 않습니다.

업그레이드 주의사항

  • 기본적으로 qpy.load 은 이제 QPY 페이로드가 포함된 QpyError 객체를 포함하는 QPY 페이로드로 호출될 때 ScheduleBlock 객체(독립형 또는 QuantumCircuit.calibrations)를 포함하는 객체(독립형 또는 sympy 를 사용하여 심볼릭 표현식을 인코딩하는 경우)를 반환합니다. 이는 페이로드가 잠재적으로 취약할 수 있으므로 콘텐츠를 신뢰하는 경우에만 로드해야 하기 때문입니다. 페이로드가 악의적이지 않다고 확신하는 경우 qpy.load 의 새 trust_payload 인수를 True 로 설정하면 페이로드를 로드할 수 있습니다.

보안 문제점

  • 의 보안 취약점을 수정했습니다 qpy.load()sympy 를 사용하여 직렬화하는 페이로드 로드 시 보안 취약점 수정 ParameterExpression 객체 및 기타 기호 표현식을 직렬화하는 페이로드를 로드할 때의 보안 문제를 수정했습니다. 여기에는 QPY 버전 < 10을 사용하는 모든 QPY 페이로드가 포함될 수 있으며, 직렬화 단계에 사용되는 기호 인코딩에 따라 선택적으로 10, 11, 12(qpy.dump()).

버그 수정

  • 의 기준 근사치 생성 버그를 수정했습니다 SolovayKitaev. 이전에는 "sx" 또는 "sxdg" 게이트가 포함된 기저에 대해 generate_basis_approximations 을 사용하여 이산 기저 근사치를 생성하면 실패했습니다. 이 문제는 이제 수정되었습니다.

1.4.1

Prelude

키스킷 1.4.1 은 1.4 확장 지원 시리즈에서 발견된 일부 버그를 수정하는 소규모 패치 릴리스입니다.

버그 수정

  • 에 의해 구성된 사전 설정된 패스 관리자를 사용하여 컴파일된 회로는 이제 올바르게 유지됩니다 generate_preset_pass_manager() 에 의해 컴파일된 회로는 이제 올바르게 name 어트리뷰트를 올바르게 유지합니다 transpile().

  • 를 호출하여 정의된 ParameterExpression 객체를 직렬화 또는 역직렬화할 때 QPY 13의 문제를 수정했습니다 ParameterExpression.subs() 를 호출하여 ParameterParameterExpression. 예를 들어,

    from qiskit.circuit import Parameter
    
    a = Parameter("A")
    b = Parameter("B")
    expr = a + b
    c = Parameter("C")
    new_expr = c ** 3.14
    final_expr.subs({b: new_expr})

    이전 릴리스에서는 다음과 같은 표현식을 포함하는 QuantumCircuit 와 같은 표현식이 포함된 qpy.dump() 를 사용하여 직렬화하면 ‘ParameterExpression’ 객체에 'name' 속성이 없다는 오류 메시지와 함께 AttributeError 가 발생했을 것입니다(기본값). 더 이상 예외가 발생하지 않고 이러한 중첩된 객체가 포함된 페이로드를 직렬화 및 역직렬화할 수 있도록 수정되었습니다 ParameterExpression 객체를 포함하는 페이로드를 직렬화하고 역직렬화할 수 있습니다. 13879번을 참조하세요.


1.4.0

Prelude

키스킷 v1.4 릴리스는 v1.x 시리즈의 마지막 마이너 버전 릴리스입니다. 이번 릴리스에는 최소한의 기능만 포함되어 있으며, 주로 향후 주요 버전 릴리스( v2.0 )에서 제공될 API 변경 사항에 대한 새로운 사용 중단 경고를 추가합니다. 키스킷 v1.3.x 릴리스와 완벽하게 호환됩니다. 키스킷 v2.0 에서 변경되는 인터페이스에 대한 경고를 볼 수 있도록 v1.3.x 에서 v1.4 으로 업그레이드할 것을 강력히 권장합니다. v1.4.x 릴리스 시리즈는 이 릴리스 이후에도 6개월 동안 버그 수정이 계속 지원되며, 1년간 보안 수정이 제공됩니다. 수정 사항은 패치 릴리스를 통해 적용될 예정입니다. 릴리스 일정과 지원 주기에 대한 자세한 내용은 릴리스 일정에 대한 자세한 문서가 있는 qiskit-sdk-version-strategy를 참조한다.

회로 기능

  • 새로운 메서드가 추가되었습니다, QuantumCircuit.estimate_duration()에서 예약된 회로 출력의 예상 지속 시간을 계산하는 새로운 메서드인 transpiler. 더 이상 사용되지 않는 속성인 QuantumCircuit.duration 어트리뷰트 대신 전체 회로 지속 시간을 추정해야 할 때 사용합니다.

회로 사용 중단

  • 서브클래싱 Register 또는 Bit또는 그 하위 클래스(예를 들어 QuantumRegister 또는 Qubit)는 키스킷 v1.4 에서 더 이상 사용되지 않는다. 이러한 유형을 서브클래싱하는 것은 키스킷에서 명시적으로 지원되지 않았으며, 그 의미도 정의되지 않았습니다. 키스킷 v2.0 에서는 기술적 한계로 인해 서브클래싱이 불가능해질 수 있으며, 회로에 저장되지 않을 것입니다. 이는 성능 향상을 위해 데이터 모델을 Rust 공간으로 이동했기 때문입니다.

  • DAGNode 서브클래스의 생성자(즉, DAGOpNode)에 있는 dag 옵션 매개변수는 키스킷 v1.2 이후 사용되지 않고 무시되어 왔으며, 이제 키스킷 v1.4 에서 더 이상 사용되지 않으며 키스킷 v2.0 에서 제거될 예정입니다.

  • MCMT 의 다중 제어 다중 대상(MCMT) 클래스는 이제 더 이상 사용되지 않으며 다음과 같이 대체됩니다 MCMTGate로 대체되며, 이는 적절한 Gate 서브클래스로 대체되었습니다. 회로 대신 게이트를 사용하면 컴파일러가 더 높은 수준의 추상화에서 객체를 추론할 수 있고 여러 합성 플러그인을 사용할 수 있습니다.

  • 모듈과 qiskit.circuit.classicalfunction 모듈과 함께 ClassicalFunction 클래스 및 관련 classical_function()BooleanExpression 유틸리티는 키스킷 v1.4 에서 더 이상 사용되지 않으며 키스킷 v2.0 에서 제거될 예정이다.

    이 변경은 더 이상 키스킷의 모든 지원 플랫폼 및 Python 버전과 호환되지 않는 외부 라이브러리 tweedledum 에 대한 종속성을 피하기 위해 수행됩니다. 비슷한 기능을 사용하려면 PhaseOracle 을 사용하지 않는 구현이 있는 tweedledum 과 키스킷에 추가될 BitFlipOracle v2.0 을 참고하세요.

    BitFlipOracle 이 추가되기 전까지는 위상 플립 오라클을 결과 큐비트에 컨디셔닝하고 다음 예제(오라클은 qr_x , 결과는 qr_y)에서와 같이 오라클 적용 전후에 Hadamard 게이트를 적용하여 비트 플립 오라클로 변환할 수 있습니다:

    from qiskit import QuantumRegister, QuantumCircuit
    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    bool_expr = "(x0 & x1 | ~x2) & x4"
    qr_x = QuantumRegister(4, "x")
    qr_y = QuantumRegister(1, "y")
    
    bit_flip_oracle = QuantumCircuit(qr_x, qr_y)
    phase_flip_oracle = PhaseOracle(bool_expr)
    controlled_phase_flip_oracle = phase_flip_oracle.control(1)
    bit_flip_oracle.h(qr_y)
    bit_flip_oracle.compose(controlled_phase_flip_oracle, qubits=[*qr_y, *qr_x], inplace=True)
    bit_flip_oracle.h(qr_y)
    
    print(bit_flip_oracle)

    그 결과

              ┌───────────────┐     
    x_0: ─────┤0              ├─────
              │               │     
    x_1: ─────┤1              ├─────
              │  Phase Oracle │     
    x_2: ─────┤2              ├─────
              │               │     
    x_3: ─────┤3              ├─────
         ┌───┐└───────┬───────┘┌───┐
      y: ┤ H ├────────■────────┤ H ├
         └───┘                 └───┘

기본형 폐기

제공자 기능 폐기

합성 기능의 사용 중단

  • 클래스의 생성자에서 atomic_evolution 인자의 서명 LieTrotter, ProductFormulaSuzukiTrotter 는 키스킷 v1.2 에서 출력 회로의 시각화를 개선하기 위해 수정되었습니다. 이전 서명은 이제 새로운 대체 서명을 위해 더 이상 사용되지 않습니다. 키스킷 v2.0 에서 새로운 대안만 유효합니다.

    마이그레이션하려면 Callable[[Pauli | SparsePauliOp, float], QuantumCircuit] 에서 Callable[[QuantumCircuit, Pauli | SparsePauliOp, float], None] 으로 콜러블을 수정하세요.

트랜스파일러 사용 중단 사항

  • 그리고 DAGOpNode.sort_key, DAGOutNode.sort_keyDAGInNode.sort_key 속성은 더 이상 사용되지 않으며 키스킷 v2.0 릴리스에서 제거될 예정입니다. 이러한 어트리뷰트는 원래 위상 정렬 노드의 사전 키로 DAGCircuit. 그러나 이제 정렬은 Rust 코드에서 내부적으로 수행되므로 이 키는 더 이상 사용되지 않습니다. 이 속성을 사용하는 경우 노드의 다른 속성에서 키를 다시 만들 수 있습니다. 예를 들어 다음과 같은 함수를 사용할 수 있습니다:

    def get_sort_key(node: DAGNode):
        if isinstance(node, (DAGInNode, DAGOutNode)):
            return str(node.wire)
        return ",".join(
            f"{dag.find_bit(q).index:04d}" for q in itertools.chain(node.qargs, node.cargs)
        )

    를 입력하면 정렬 키처럼 문자열을 생성합니다.

  • 번역 파이프라인에서 다음과 같은 BackendProperties 객체의 다음 사용은 키스킷 v1.4 에서 더 이상 사용되지 않으며 키스킷에서 제거될 예정이다 v2.0:

    클래스는 BackendProperties 클래스는 키스킷 v1.2 이후 더 이상 사용되지 않으며, 다른 요소들과 함께 BackendV1 워크플로우의 다른 요소들과 함께 사용되지 않으며, 키스킷 v2.0 에서 제거될 예정입니다. 하드웨어 정보를 트랜스필레이션 인자로 전달하기 위한 다른 경로는 Target 클래스이며, target 입력 인수를 사용하여 설정할 수 있습니다. 게이트 에러 또는 지속 시간과 같은 특정 명령어 속성을 Target 메서드를 통해 Target.add_instruction() 메서드를 통해 추가할 수 있습니다.

    의 경우 generate_routing_passmanager()generate_translation_passmanager()의 경우 backend_properties 인수는 선택 사항이며 필수 인자인 target 인수가 채워지면 대체됩니다. 인수의 사용은 1.x 에서 안전하게 제거할 수 있으며, 이는 권장되는 사용 방법입니다.

  • 키스킷의 펄스 사용 중단 v1.3, 캘리브레이션 빌더 패스에는 다음과 같은 RXCalibrationBuilder. 패스는 NormalizeRXAngle 패스는 RXCalibrationBuilder의 요구 사항이므로, 키스킷 v1.4 에서 더 이상 사용되지 않습니다. 보정 모듈의 rzx_templates() 함수도 코드베이스에서 사용되지 않으므로 더 이상 사용되지 않습니다.

시각화 기능의 사용 중단

  • 타임라인 서랍의 show_idleshow_barrier 매개변수는 키스킷 v1.4 에서 더 이상 사용되지 않습니다. 대안은 각각 키스킷 v1.1 에 도입된 idle_wiresplot_barriers 파라미터로, 완전히 동일합니다. 레거시 매개변수 이름은 키스킷 v2.0 에서 제거됩니다.

  • 키스킷 v1.4 에서 타임라인 드로어 timeline_drawer() 함수는 target 를 지정하지 않으면 사용 중단 경고를 발행합니다. 키스킷 v2.0 부터는 target 이 필요하며 timeline_drawer() 를 지정하지 않으면 실패합니다.

  • 타입의 입력 제공 BackendV1backend 인수에 plot_gate_map(), plot_circuit_layout()plot_error_map() 는 키스킷 1.4 에서 더 이상 사용되지 않으며 키스킷 2.0 에서 제거될 예정이다. 대신 BackendV2 인스턴스를 사용하세요.

기타 지원 중단

  • 의 생성자에서 위치 인자를 사용하는 것은 Result 의 생성자 인자 사용은 키스킷 1.4 에서 더 이상 사용되지 않으며, 키스킷 2.0 에서 비활성화될 예정이다. 모든 인수는 kwarg 구문을 사용하여 설정하세요(예: Result(backend_name="name", ....)). 이 외에도, qobj_id 인수는 더 이상 사용되지 않으며 키스킷 2.0 에서 더 이상 사용되지 않습니다. 그러나 qobj_id 을 일반 kwarg로 설정하면 다른 일반 kwarg와 함께 메타데이터 필드에 표시될 수 있습니다.

버그 수정

기타 참고사항

  • property_set 을 임의의 키워드 인자로 서브클래스의 메서드에 run() 메서드에 BasePassManager 의 서브클래스의 메서드에 전달하면 키스킷 v2.0 의 동작이 변경됩니다. 이 메서드의 임의 키워드 인수는 현재 패스 매니저의 내부 표현 변환 함수로 전달되며, 해당 메서드에 대한 임의의 키워드 인수도 전달됩니다. 키스킷 v2.0 에서부터 이 옵션은 대신 파이프라인 실행을 위한 시드를 설정하는 데 사용됩니다 PropertySet 의 시드를 설정하는 데 사용되며, 인수는 변환 함수에 전달되지 않습니다.

    이 참고 사항은 다음과 같은 서브 클래스의 구현자에게만 해당됩니다 BasePassManager 의 하위 클래스 구현자만 해당되며, _passmanager_frontend_passmanager_backend 구현에서 property_set 라는 키워드 인수를 허용하도록 선택했습니다.

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.