Skip to main content
IBM Quantum Platform

키스킷 0.46 릴리즈 노트


0.46.3

Prelude

키스킷 0.46.3 은 0.46 시리즈의 사소한 버그 수정 및 백포트 릴리스입니다. 또한 0.46 마이너 버전의 마지막 릴리스이며, 수명이 종료됩니다.

버그 수정

  • 에서 누락된 데코레이터를 수정했습니다 C3SXGate 에서 데코레이터가 누락되어 Gate.to_matrix() 가 호출되면 실패하도록 수정했습니다. 이제 게이트 매트릭스가 예상대로 반환됩니다.

  • 이제 QuantumCircuit.parameters 속성은 이제 파라메트릭 회로에서 QuantumCircuit.copy_empty_like() 를 사용할 때 속성이 올바르게 비워집니다. 이전에는 내부 캐시가 무효화되지 않고 복사되었습니다. 수정 #12617.

  • 기존 근사값을 로드할 때 SolovayKitaev 트랜스파일러 패스를 기존 .npy 파일에서 기본 근사치를 로드할 때 수정합니다. 이전에는 게이트 취소 등으로 인해 추가 감소가 가능한 저장된 근사값을 로드하면 런타임 오류가 발생할 수 있었습니다. 또한 저장-재로드 절차 중에 U(2) 게이트 제품 및 SO(3) 표현의 글로벌 위상차가 손실되었습니다. 수정 Qiskit/qiskit#12576.

  • 생성자 GenericBackendV2 는 백엔드 크기에 할당할 수 없는 베이스 게이트를 허용했기 때문에 잘못된 백엔드를 생성할 수 있었습니다. 즉, 단일 큐비트를 사용하는 백엔드는 2큐비트 게이트가 있는 베이스를 허용해서는 안 됩니다.

  • 이전에는 DAGCircuit.replace_block_with_op()m 큐비트 블록에 n-큐비트 연산을 수행할 수 있었기 때문에 DAG가 유효하지 않은 상태가 되었습니다. 이 동작이 수정되었으며, 이 시도를 하면 DAGCircuitError.

기타 참고사항

  • 이 릴리스는 키스킷 0.46.3 종속성의 고정된 버전 번호 전체 목록이 포함된 constraints.txt 파일을 확장합니다. 이번 릴리스는 0.46 버전의 수명이 종료됨에 따라 constraints.txt 의 버전 사양에 따라 향후 재현 가능한 설치 환경을 보장합니다.

0.46.2

Prelude

키스킷 0.46.2 은 0.46 시리즈의 사소한 버그 수정 및 백포트 릴리스입니다.

새 기능

  • 이번 키스킷 릴리스는 NumPy 2.0 에 대한 지원을 마무리합니다. 키스킷은 당분간 Numpy 1.x 와 2.x 를 계속 지원할 예정입니다.

버그 수정

  • mpl 출력 옵션을 사용할 때 그려지는 회로에 ControlFlow 연산이 있고 fold 옵션이 -1 (접힘 없음)로 설정된 경우 프로그램이 중단되는 circuit_drawer() 또는 QuantumCircuit.draw() 관련 문제를 수정했습니다. 12012번 수정.

  • 이제 EvolvedOperatorAnsatz 는 이제 연산자 인수가 빈 목록인 경우를 올바르게 처리합니다. 이전에는 이렇게 하면 오류가 발생했습니다.

  • 이제부터 EvolvedOperatorAnsatz 는 큐비트가 0인 경우 큐비트가 하나도 없는 대신 QuantumRegister 인스턴스를 갖게 됩니다. 이 동작은 슈퍼클래스와 더 일관되게 일치합니다 QuantumCircuit.

  • 메서드 Instruction.repeat() 는 이제 세트 condition 를 바깥쪽 반환된 Instruction 로 이동하고 정의의 내부 게이트는 무조건 남겨둡니다. 이전에는 메서드가 내부 정의 내에 ClassicalRegister 인스턴스를 내부 정의 내에 남겨두었는데, 이는 유효하지 않은 상태였으며 나중에 트랜슬레이션이나 내보내기 중과 같이 겉보기에는 관련이 없는 버그로 나타나곤 했습니다. 11935 수정.

  • 특정 펄스 단위를 초와 나노초 사이로 스케일링할 때 부동 소수점 부정확성을 수정했습니다. 펄스가 기호적으로 정의된 경우, symengine 의 특정 빌드에 대한 스케일링으로 인해 불필요한 부동 소수점 오류가 발생할 수 있으며, 심볼이 완전히 바인딩되면 예기치 않은 결과가 나타날 수 있습니다. 12392번을 참조하세요.

  • 인수를 사용하여 draw 함수를 호출할 때 펄스 스케줄을 그리지 않던 qiskit.visualization.pulse_v2.interface.draw() 의 버그를 수정했습니다 BackendV2 인수로 호출할 때 펄스 스케줄을 그리지 않는 버그를 수정했습니다. V2 백엔드는 하드웨어 채널 주파수를 보고하지 않으므로 생성된 도면에는 '주파수 없음'이 표시됩니다 을 각 채널 라벨 아래에 표시합니다.

  • 패스는 VF2Layout 패스는 연결 제약 조건이 없는 Target 인스턴스가 제공되면 예외를 발생시킵니다. Aer 0.13 의 타겟이 이에 해당합니다. 이 문제가 이제 해결되었습니다.

  • 기본 init 플러그인은 잘못된 최적화 수준으로 호출될 때 TranspilerError 를 제대로 발생시키지 않았습니다.

  • PassManager.run() 는 직렬로만 작동하는 경우 여러 입력이 주어졌을 때 더 이상 직렬화하는 데 시간을 낭비하지 않습니다.

  • OpenQASM 2.0 파서(qasm2.load()qasm2.loads())는 이제 시스템 크기 정수를 오버플로하는 정수 피연산자를 포함한 게이트-각 식을 평가할 수 있습니다. 나머지 표현식은 항상 그랬던 것처럼 배정밀도 부동소수점 컨텍스트에서 평가됩니다. 주의: 임의로 큰 정수는 반드시 배정밀도 부동 소수점으로 정확히 표현할 수 있는 것은 아니므로 회로가 생성되었더라도 이미 모든 수치 정밀도 모듈로 2π2\pi 를 잃어버렸을 가능성이 있습니다.


0.46.1

Prelude

키스킷 0.46.1 은 0.46 시리즈의 사소한 버그 수정 릴리스입니다.

버그 수정

  • 다음과 관련된 문제를 수정했습니다 convert_to_target() 에서 제어 흐름 명령이 제어 흐름 명령이 객체에서 지정되는 일반적인 위치인 BackendConfiguration.supported_instructions 속성에 지정된 경우 변환기가 제어 흐름 명령을 잘못 무시하는 문제를 수정했습니다 BackendConfiguration 객체에 지정되는 일반적인 위치입니다. 11872 수정.

  • 호출 EquivalenceLibrary.set_entry() 을 호출하면 이제 라이브러리의 내부 그래프 객체가 올바르게 업데이트됩니다. 이전에는 메타데이터는 업데이트되지만 그래프 구조는 변경되지 않았기 때문에 다음과 같은 사용자는 BasisTranslator 와 같은 사용자는 여전히 이전 규칙을 사용하게 됩니다. 11958 수정.

  • BasePassManager.run() 은 더 이상 이전 워크플로우를 PropertySet 을 두 번 이상 호출할 때 새 워크플로에 누출되지 않습니다. 이전에는 이전과 동일한 PropertySet 을 사용하여 후속 실행을 초기화했는데, 이는 잘못된 속성 정보가 작업에 제공되고 있음을 의미할 수 있습니다. 이제 동작은 Qiskit 0.44 의 동작과 일치합니다. 수정 #11784.

  • 백엔드의 속성 및 구성 정보 업데이트 FakeOpenPulse2Q 백엔드의 속성 및 구성 정보를 업데이트했습니다. 펄스 기본값에 정의된 일부 게이트에 누락된 게이트 속성이 추가되어 두 위치에 정의된 게이트가 일관성을 갖도록 했습니다.

  • 모니터링 도구 모듈 qiskit.tools.monitor (현재 사용되지 않는 모듈에 포함된 qiskit.tools)이 예상대로 작동하도록 업데이트되었습니다. 기능 job_monitor() 는 이제 Job 인스턴스와 함께 작동합니다. 기능 backend_overview()backend_monitor() 함수는 이제 예상대로 작동합니다.

  • InstructionDurations.from_backend() 는 이제 기본 클래스 대신 InstructionDurations 의 서브클래스 인스턴스를 반환합니다.


0.46.0

Prelude

0.46.0 릴리스는 0.x 시리즈의 마지막 마이너 버전 릴리스입니다. 이번 릴리스에는 주로 향후 주요 버전 릴리스( 1.0.0 )에서 제공될 API 변경 사항에 대한 새로운 사용 중단 경고가 추가됩니다. 키스킷 0.45.x 릴리스와 완벽하게 호환됩니다. 키스킷 1.0.0 에서 변경되는 인터페이스에 대한 경고를 볼 수 있도록 0.45.x 에서 0.46.0 으로 업그레이드할 것을 강력히 권장합니다.

0.46.x 릴리스 시리즈는 이 릴리스 이후 6개월 동안 패치 릴리스를 통해 버그 수정 및 보안 수정이 계속 지원되며 제공될 예정입니다. 릴리스 일정과 지원 주기에 대한 자세한 내용은 시작/설치#qiskit-versioning 릴리스 일정을 자세히 설명하는 문서를 참조하세요.

참고

프로젝트가 키스킷에 의존하는 경우, 키스킷에서 더 이상 지원되지 않는 기능에 의존할 수 있습니다 1.0.0. 따라서 지원 버전을 <1.0 으로 미리 제한하는 것이 좋습니다. 키스킷 1.0.0 은 키스킷 0.46.0 으로부터 약 2주 후인 2024-02-15에 출시될 예정이며, 이 메시지를 읽으실 때는 아직 이용하지 못할 수도 있습니다.

키스킷의 패키징 구조는 키스킷 1.0 에서 변경되고 있으며, 안타깝게도 변경된 요구사항은 pip, 특히 환경이 처음 구성된 후 pip install --upgrade 명령이 실행되는 경우 완전히 전달되지 않습니다. 이 버전을 포함한 1.0 이전의 모든 키스킷 버전은 pip 에서 해결되지 않는 키스킷 1.0 과의 설치 충돌이 있습니다.

import qiskit 에서 ImportError 가 발생하면 사용자 환경이 유효하지 않은 상태이며, 키스킷 0.45/0.46 및 1.0 버전 모두에 도달할 수 있으므로 코드가 미묘하게 손상된 것입니다. 새 가상 환경을 만들고 두 버전 중 하나만 설치해야 합니다. 특히, 키스킷 1.0 을 설치하려는 경우 qiskit-terra 에 종속된 패키지가 설치되어 있지 않아야 하며, 이러한 패키지는 키스킷 1.0 과 호환되지 않으므로 업데이트해야 합니다. 키스킷 0.45 또는 0.46 을 설치하려는 경우, qiskit>=1.0 을 설치하려고 시도하는 것이 없는지 확인해야 합니다.

키스킷을 기반으로 라이브러리를 개발하면서 여전히 qiskit-terra 에 종속되어 있는 경우, qiskit 에만 종속되는 새 패키지를 긴급하게 릴리스해야 합니다. 버전 0.44 이후 qiskit 패키지에는 qiskit-terra 컴파일러 코어(현재 간단히 "키스킷"이라고 부르는 구성 요소)만 포함되어 있으므로 최소 버전이 0.44 인 경우 설치되는 항목의 변경 없이 qiskit-terra>=0.44 종속성을 qiskit>=0.44 로 안전하게 전환할 수 있습니다. 테스트 및 준비에 대한 자세한 내용과 권장 사항은 마이그레이션 가이드의 개발자용 섹션을 참조하세요.

새 기능

  • 새로운 기능 qs_decomposition()함수가 추가되었습니다 qiskit.synthesis. 이 함수를 사용하면 임의의 단위에 양자 섀넌 분해를 적용할 수 있습니다.

  • 새로운 qiskit.providers.basic_provider 모듈을 대체하기 위해 qiskit.providers.basicaer. 이 모듈에는 BasicAer 제공자의 도구를 미러링하는 제공자 도구가 포함되어 있으며 비효율적인 단일 상태 벡터 기반 시뮬레이터를 제공합니다: BasicSimulator. 이 시뮬레이터는 BackendV2 인터페이스를 기반으로 하며 테스트 및 간단한 프로토타이핑 전용이며, 고급 시뮬레이션 기능을 사용하려면 qiskit-aer 패키지를 참조하세요. 마이그레이션 가이드라인은 BasicAer 지원 중단 노트를 참조하세요.

  • 인터페이스와 Target 인터페이스와 트랜스파일러 파이프라인은 이제 num_qubits=None 를 사용하여 대상 정의를 지원합니다. 이는 유연한 큐비트 수로 Target-기반 시뮬레이터를 만들 수 있습니다. num_qubits=None 이 있는 타겟은 전역 명령어( qargs=None)만 포함하며, 트랜스파일러에 전달되면 트랜스파일러가 회로의 크기를 조정하지 않을 것으로 예상됩니다. 의 이 변경 사항은 Target 의 변경은 향후 트랜스파일러 패스에 target.num_qubits is None.

  • 새로운 클래스 GenericBackendV2 클래스가 qiskit.providers.fake_provider 모듈에 추가되었습니다. 이 클래스는 구성 가능하며, (가짜 백엔드의 정신으로) 로컬에서 실행할 수 있는 BackendV2 인스턴스를 로컬에서 실행할 수 있습니다(가짜 백엔드의 정신에 따라). 사용자는 수동 타겟 구성 없이도 큐비트 수, 베이시스 게이트, 커플링 맵, 동적 회로(제어 흐름 명령어) 실행 기능, 명령어 보정 및 백엔드의 dtm을 구성할 수 있습니다. 큐비트 및 게이트 속성은 기본 범위에서 무작위로 샘플링하여 생성됩니다. 이 무작위 생성을 위한 시드는 백엔드 출력의 재현성을 보장하기 위해 고정할 수 있습니다. 이 백엔드는 표준 라이브러리의 게이트만 지원한다는 점에 유의하세요. 보다 유연한 백엔드가 필요한 경우, 번역에 사용할 객체를 직접 인스턴스화하는 Target 객체를 직접 인스턴스화할 수 있습니다.

    사용 예 1:

    from qiskit import QuantumCircuit, transpile
    from qiskit.providers.fake_provider import GenericBackendV2
    
    # Create a simple circuit
    circuit = QuantumCircuit(3)
    circuit.h(0)
    circuit.cx(0,1)
    circuit.cx(0,2)
    circuit.measure_all()
    circuit.draw('mpl')
    
    # Define backend with 3 qubits
    backend = GenericBackendV2(num_qubits=3)
    
    # Transpile and run
    transpiled_circuit = transpile(circuit, backend)
    result = backend.run(transpiled_circuit).result()

    사용 예 2:

    from qiskit import QuantumCircuit, ClassicalRegister, transpile
    from qiskit.providers.fake_provider import GenericBackendV2
    
    # Create a circuit with classical control
    creg = ClassicalRegister(19)
    qc = QuantumCircuit(25)
    qc.add_register(creg)
    qc.h(0)
    for i in range(18):
        qc.cx(0, i + 1)
    for i in range(18):
        qc.measure(i, creg[i])
    qc.ecr(20, 21).c_if(creg, 0)
    
    # Define backend with custom basis gates
    # and control flow instructions
    backend = GenericBackendV2(
          num_qubits=25,
          basis_gates = ["ecr","id","rz","sx","x"],
          control_flow=True)
    
    #Transpile
    transpiled_qc = transpile(qc, backend)
    참고

    이 클래스에서 생성된 노이즈 속성은 구체적인 양자 장치를 모방하지 않으며, 구체적인 백엔드 동작을 측정하는 데 사용해서는 안 됩니다. 이는 일반적인 백엔드 인터페이스 기능을 테스트하는 데 사용할 수 있는 '합리적인 기본값'입니다. 기존 디바이스를 보다 정확하게 시뮬레이션하려면 qiskit-aer 에서 제공하는 기능을 사용하여 실제 백엔드에서 노이즈 모델을 수동으로 빌드할 수 있습니다.

업그레이드 주의사항

  • symengine 에 필요한 최소 버전이 >= 0.11 으로 상향되었습니다. 이로 인해 이전 릴리스에서 버그를 처리하기 위해 ParameterExpression.is_real() 의 이전 릴리스에서 버그를 처리하기 위해 symengine.

지원 중단 노트

  • 그리고 ScheduleBlock.scoped_parameters()ScheduleBlock.search_parameters() 메서드는 더 이상 사용되지 않습니다. 이러한 메서드는 Parameter 객체를 생성하며, 펄스 범위를 나타내도록 이름이 수정됩니다. 메서드의 원래 의도는 이러한 객체가 여전히 원래의 범위가 지정되지 않은 Parameter 객체에 링크하는 것이었습니다. 그러나 이름을 수정하면 링크가 끊어져 범위가 지정된 버전을 사용하여 할당하는 것이 작동하지 않습니다. 자세한 내용은 #11654를 참조하세요.

  • 전달 QuasiDistribution, ProbDistribution또는 배포 사전을 data 인자로 전달할 수 있습니다 plot_histogram() 시각화 함수는 이제 더 이상 사용되지 않습니다. 이 기능에 대한 지원은 키스킷 1.0 릴리스에서 제거될 예정입니다. 에서 히스토그램을 그리려면 QuasiDistribution, ProbDistribution또는 분포 사전에서 히스토그램을 그리려면 대신 plot_distribution() 함수를 사용해야 합니다.

  • qiskit-terra Python 패키지는 더 이상 사용되지 않으며, 키스킷 1.0.0 에서부터 더 이상 업데이트를 받지 않습니다. qiskit-terra 을 단독으로 설치하는 경우 Qiskit>=1.0.0 에 대해 더 이상 업데이트되지 않습니다. qiskit 패키지 없이 키스킷을 실행하는 경우, FutureWarning 패키지를 가져올 때 qiskit 를 사용하여 qiskit 패키지를 사용하지 않음을 나타냅니다.

  • qiskit.Aer 오브젝트의 사용은 더 이상 사용되지 않으며, 키스킷 1.0 에서 제거될 예정입니다. 대신 드롭인 대체물인 qiskit_aer 네임스페이스의 동일한 객체를 사용해야 합니다.

  • qiskit.providers.aer 에서 가져오기는 더 이상 사용되지 않으며 키스킷 1.0 에서 더 이상 작동하지 않습니다. 대신 드롭인 대체품인 qiskit_aer 에서 가져와야 합니다.

  • 에서 백엔드에서 펄스 작업을 실행하는 것은 qiskit.providers.fake_provider 는 더 이상 사용되지 않으며, 키스킷 1.0 에서 모든 지원이 제거됩니다. 이는 키스킷 에어가 이러한 작업에 대한 시뮬레이션 기능을 제거했기 때문입니다. 낮은 수준의 해밀턴 시뮬레이션 워크로드의 경우, 키스킷 다이내믹스와 같은 전문 라이브러리를 사용하는 것을 고려하세요.

  • qiskit.transpiler.synthesis 모듈은 더 이상 사용되지 않으며 키스킷 1.0 에서 제거될 예정입니다. 다음 개체가 이동되었습니다:

  • qiskit.tools.jupyter 모듈은 더 이상 사용되지 않으며 키스킷 1.0.0 에서 제거될 예정입니다. 이 모듈의 기능이 더 이상 지원되지 않는 레거시 qiskit-ibmq-provider 패키지에 연결되어 있고 또한 BackendV1. 현재 이 기능을 사용하고 있는 경우, 유사한 jupyter 도구가 qiskit-ibm-provider 패키지에 존재하며 이를 대신 사용할 수 있습니다.

  • qiskit.tools.monitor 모듈은 더 이상 사용되지 않으며 키스킷 1.0.0 에서 제거될 예정입니다. 이 모듈의 기능이 더 이상 지원되지 않는 레거시 qiskit-ibmq-provider 패키지에 연결되어 있고 또한 BackendV1.

  • qiskit.tools.visualization 모듈은 더 이상 사용되지 않으며 키스킷 1.0.0 에서 제거될 예정입니다. 이 모듈은 키스킷의 시각화 모듈의 원래 위치에서 레거시 리디렉션된 것으로, 키스킷의 시각화 모듈이 qiskit.visualization 키스킷 0.8.0 으로 이전되었다. 이 경로를 계속 사용하는 경우 가져오기 경로를 qiskit.tools.visualization 에서 qiskit.visualization.

  • qiskit.tools.events 모듈과 이 모듈에 노출된 progressbar() 유틸리티는 더 이상 사용되지 않으며, 키스킷 1.0.0 릴리스에서 제거될 예정입니다. 이 모듈의 기능은 널리 사용되지 않았으며 tqdm과 같은 전용 패키지가 더 잘 다루고 있습니다.

  • qiskit.tools 모듈은 더 이상 사용되지 않으며 키스킷 1.0.0 에서 제거될 예정입니다. 특정 하위 모듈(qiskit.tools.jupyter, qiskit.tools.monitor, qiskit.tools.events , qiskit.tools.visualization)에 대한 위의 릴리스 노트에 명시된 경우를 제외하고 이 모듈의 기능은 다음과 같이 마이그레이션되었습니다 qiskit.utils. 이 모듈의 기능을 사용하는 경우 가져오기를 qiskit.tools 에서 qiskit.utils.

  • qiskit.test 모듈은 더 이상 사용되지 않습니다. 이 모듈에는 내부 키스킷 테스트를 위한 도구와 헬퍼가 포함되어 있으며, 대부분의 기능이 이전되었거나 더 이상 키스킷에서 사용되지 않습니다. 실제로 이 모듈은 외부에서 사용하기 위한 것이 아닙니다. 모듈의 코드 중 키스킷 외에 꼭 필요한 코드가 있다면 해당 코드를 자체 테스트 인프라로 복사하는 것을 고려하세요.

  • qiskit.quantum_info.synthesis 모듈은 더 이상 사용되지 않으며 키스킷 1.0.0 에서 제거될 예정입니다. 다음 개체가 다음으로 이동되었습니다 qiskit.synthesis:

    • OneQubitEulerDecomposer 로 이동되었습니다 qiskit.synthesis.one_qubit
    • TwoQubitBasisDecomposer 로 이동되었습니다 qiskit.synthesis.two_qubits
    • XXDecomposer 로 이동되었습니다 qiskit.synthesis.two_qubits
    • two_qubit_cnot_decompose() 로 이동되었습니다 qiskit.synthesis.two_qubits

    클래스 Quaternion 클래스가 qiskit.quantum_info.synthesis 에서 qiskit.quantum_info. 이 이동은 클래스의 일반적인 가져오기 경로에는 영향을 미치지 않지만 qiskit.quantum_info.synthesis 을 통해 액세스하는 것은 이제 더 이상 사용되지 않습니다.

    이 기능은 더 이상 사용되지 않으며 키스킷에서 제거될 예정입니다 1.0.0:

    • cnot_rxx_decompose()
  • 이전에 존재했던 레거시 OpenQASM 2 파서 모듈은 qiskit.qasm 에 있던 2 파서 모듈은 더 이상 사용되지 않습니다. 이 기능은 키스킷 1.0.0 릴리스에서 제거될 예정입니다. 레거시 OpenQASM 2 파서가 대체되었습니다 qiskit.qasm2 모듈로 대체되어 OpenQASM 2에 대해 더 빠르고 정확한 파서를 제공합니다.

  • qiskit.converters.ast_to_dag 함수는 더 이상 사용되지 않으며 키스킷 1.0.0 릴리스에서 제거될 예정입니다. 이전에는 레거시 OpenQASM 2 파서에서 생성된 추상 구문 트리를 변환하는 데 사용되었지만 더 이상 사용되지 않는 qiskit.qasm 모듈)에서 생성된 추상 구문 트리를 직접 DAGCircuit. 레거시 OpenQASM 2 구문 분석기가 더 이상 사용되지 않으므로 레거시 구문 분석기가 제거된 후에는 이 기능을 더 이상 사용할 수 없습니다. 이전에 이 방법을 사용했다면 OpenQASM 2 파일을 대신 QuantumCircuit 로 구문 분석하고 QuantumCircuit.from_qasm_file() 또는 QuantumCircuit.from_qasm_str() 생성자 메서드를 사용한 다음 QuantumCircuitDAGCircuitcircuit_to_dag().

  • 메서드 QuantumCircuit.qasm() 객체의 OpenQASM 2 표현을 생성하는 데 사용되는 QuantumCircuit 객체를 생성하는 메서드는 더 이상 사용되지 않으며 키스킷 1.0.0 릴리스에서 제거될 예정입니다. 또는 qasm2.dump() 또는 qasm2.dumps() 함수를 대신 사용하여 유사한 기능을 제공해야 합니다. 메서드를 사용하여 QuantumCircuit.qasm() 메서드를 사용하여 파이그먼트 형식의 출력을 생성하는 경우 대신 이 기능을 제공하는 독립형 openqasm-pygments 패키지를 살펴봐야 합니다( qasm2.dump()qasm2.dumps() 는 파이그램 컬러 출력을 제공하지 않습니다).

  • 베이스 클래스와 ParametricPulse 베이스 클래스와 펄스는 이제 더 이상 사용되지 않으며, 키스킷 1.0 에서 제거될 예정입니다. 여기에는 다음과 같은 혜택이 포함됩니다.

    이 클래스는 SymbolicPulse 및 해당 펄스 라이브러리로 대체되었습니다. SymbolicPulse 는 더 나은 성능, 유연성 및 QPY 지원을 제공합니다.

  • 트랜스파일러 패스와 NoiseAdaptiveLayout 트랜스파일러 패스와 해당 "noise_adaptive" 레이아웃 스테이지 플러그인은 더 이상 사용되지 않으며 1.0.0 릴리스에서 제거될 예정입니다. 이 패스는 대부분 다음과 같이 대체되었습니다 VF2LayoutVF2PostLayout 로 대체되었으며, 백엔드의 보고된 노이즈 특성을 기반으로 레이아웃을 설정합니다.

  • 트랜스파일러 CrosstalkAdaptiveSchedule 트랜스파일러 패스는 더 이상 사용되지 않으며 1.0.0 릴리스에서 제거될 예정입니다. 이 패스는 내부 작동이 사용자 정의 속성의 BackendProperties 페이로드에 설정된 BackendV1 인스턴스의 페이로드에 설정된 커스텀 프로퍼티에 의존했기 때문입니다. 이러한 필드를 설정하는 백엔드가 없으므로 패스는 더 이상 사용되지 않습니다.

  • qiskit.visualization.qcstyle 모듈은 이제 더 이상 사용되지 않으며 키스킷 1.0.0 릴리스에서 제거될 예정입니다. 대신 qiskit.visualization.circuit.qcstyle 을 직접 대체해야 합니다.

  • 이제 펄스 빌더 컨텍스트에 회로 게이트 연산을 주입하는 기능은 더 이상 사용되지 않습니다. 사용 중단은 다음 기능에 영향을 줍니다:

    • call_gate(),
    • cx(),
    • u1(),
    • u2(),
    • u3(),
    • x()

    유형의 입력 인자뿐만 아니라 QuantumCircuit 유형의 입력 인자 call().

    그래도 백엔드에서 보정된 스케줄을 삽입하려면 게이트 명령을 호출하는 대신 다음 패턴을 사용할 수 있습니다.

    from qiskit.providers.fake_provider import GenericBackendV2
    from qiskit import pulse
    
    backend = GenericBackendV2(num_qubits=5)
    sched = backend.target['x'][(qubit,)].calibration
    
    with pulse.build() as only_pulse_scheds:
      pulse.call(sched)

    마찬가지로 QuantumCircuit 는 빌더 컨텍스트에서 오브젝트를 수동으로 트랜스파일링하고 스케줄링하여 삽입할 수 있습니다.

    from math import pi
    from qiskit.compiler import schedule, transpile
    qc = QuatumCircuit(2)
    qc.rz(pi/2, 0)
    qc.sx(0)
    qc.rz(pi/2, 0)
    qc.cx(0, 1)
    
    qc_t = transpile(qc, backend)
    sched = schedule(qc_t, backend)
    with pulse.build() as only_pulse_scheds:
        pulse.call(sched)

    어쨌든 이제 빌더를 사용하여 최소 펄스 프로그램을 작성하고 이를 QuantumCircuit 를 통해 QuantumCircuit.add_calibration() 메서드를 통해 게이트 명령의 마이크로코드로 첨부하는 것이 좋습니다.

    의 다음 인수는 더 이상 사용되지 않습니다 build() 의 다음 인수도 더 이상 사용되지 않습니다:

    • default_transpiler_settings
    • default_circuit_scheduler_settings

    기능과 함께:

  • 의 다음 도구는 더 이상 사용되지 않습니다 qiskit.utils 의 다음 도구는 더 이상 사용되지 않습니다:

    • 유틸리티 qiskit.utils.arithmetic
    • 유틸리티 qiskit.utils.circuit_utils
    • 유틸리티 qiskit.utils.entangler_map
    • 유틸리티 qiskit.utils.name_unnamed_args

    이 기능은 qiskit.algorithmsqiskit.opflow 에서만 사용되었으며, 키스킷 1.0 에서 qiskit.algorithmsqiskit.opflow 이 제거됨에 따라 제거될 예정입니다.

  • 모듈이 qiskit.providers.fake_provider 모듈이 qiskit-ibm-runtime Python 패키지로 마이그레이션되었습니다. 이러한 이유로, 다음 요소들은 qiskit.providers.fake_provider 은 키스킷 0.46 에서 더 이상 사용되지 않으며 키스킷에서 제거될 예정입니다 1.0:

    새 가짜 공급자로의 마이그레이션 예시:

    # Legacy path
    from qiskit.providers.fake_provider import FakeProvider, FakeSherbrooke
    backend1 = FakeProvider().get_backend("fake_ourense")
    backend2 = FakeSherbrooke()
    
    # New path
    # run "pip install qiskit-ibm-runtime"
    from qiskit_ibm_runtime.fake_provider import FakeProvider, FakeSherbrooke
    backend1 = FakeProvider().get_backend("fake_ourense")
    backend2 = FakeSherbrooke()

    또한, 특수 테스트 목적으로 설계된 다음과 같은 가짜 백엔드가 새로운 GenericBackendV2 클래스로 대체되었으며, 키스킷에서 더 이상 사용되지 않는다 0.46:

    새 클래스로의 마이그레이션 예제 GenericBackendV2 클래스로의 마이그레이션 예제:

    # Legacy path
    from qiskit.providers.fake_provider import FakeBackend5QV2
    backend = FakeBackend5QV2()
    
    # New path
    from qiskit.providers.fake_provider import GenericBackendV2
    backend = GenericBackendV2(num_qubits=5)
    # note that this class will generate 5q backend with generic
    # properties that serves the same purpose as FakeBackend5QV2
    # but will generate different results
  • 모듈은 이제 qiskit.extensions 모듈은 이제 더 이상 사용되지 않습니다. 이 기능은 키스킷 0.45 릴리스 이후 사용 중단 대기 중이었습니다. 대부분의 개체는 qiskit.circuit.library로 이동되었습니다:

    객체가 더 이상 사용되지 않음에 따라 다음 회로 메서드도 더 이상 사용되지 않습니다:

    • QuantumCircuit.diagonal,
    • QuantumCircuit.hamiltonian,
    • QuantumCircuit.isometryQuantumCircuit.iso,
    • QuantumCircuit.uc,
    • QuantumCircuit.ucrx,
    • QuantumCircuit.ucry,
    • QuantumCircuit.ucrz.
  • 키스킷의 execute() 함수는 더 이상 사용되지 않습니다. 이 함수는 일부 트랜스파일 옵션을 사용하여 회로를 트랜스파일하고 일부 실행 옵션을 사용하여 백엔드에서 실행하는 것에 대한 높은 수준의 래퍼 역할을 합니다. 같은 작업을 수행하려면 명시적으로 transpile() 함수(적절한 트랜스파일 옵션 포함) 뒤에 backend.run() (적절한 실행 옵션 포함)를 사용하면 됩니다.

    예를 들어, 달리기 대신

    from qiskit import execute
    job = execute(circuit, backend)

    실행할 수 있습니다:

    from qiskit import transpile
    new_circuit = transpile(circuit, backend)
    job = backend.run(new_circuit)

    또는 Sampler 프리미티브는 의미상 더 이상 사용되지 않는 execute() 함수와 의미적으로 동일합니다. 클래스 BackendSampler 는 프리미티브를 지원하지 않는 백엔드를 위한 일반 래퍼입니다:

    from qiskit.primitives import BackendSampler
    sampler = BackendSampler(backend)
    job = sampler.run(circuit)
  • 밀도가 높은 BaseOperator` 에서 암시적 변환을 SparsePauliOp 에서 Estimator 관찰 가능한 인자로의 암시적 변환은 Qiskit 0.46 에서 더 이상 사용되지 않으며 Qiskit 1.0 에서 제거될 예정입니다. 명시적으로 변환해야 합니다 SparsePauliOp 대신 SparsePauliOp.from_operator() 로 명시적으로 변환해야 합니다.

  • 개별 펄스 라이브러리는 이제 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 여기에는 다음과 같은 혜택이 포함됩니다.

    대신 해당 SymbolicPulse, 와 함께 get_waveform(). 예를 들어 pulse.gaussian(100,0.5,10) 대신 pulse.Gaussian(100,0.5,10).get_waveform() 을 사용합니다.

    SawtoothSquare 의 위상은 모두 불연속 위상과 달리 2pi2\\pi 의 위상이 전체 주기만큼 이동하도록 정의되어 있다는 점에 유의하세요. 또한 심볼 펄스 라이브러리에서 복잡한 진폭 지원은 더 이상 사용되지 않으므로 대신 float, ampangle 을 사용하세요.

  • 주로 내부 테스트에 사용되던 ConfigurableFakeBackend 클래스는 주로 내부 테스트에 사용되어 왔으며 이제 더 이상 사용되지 않습니다. 이 기능은 키스킷 1.0.0 릴리스에서 제거될 예정입니다. 대신 GenericBackendV2 클래스를 사용하여 유사한 백엔드를 빌드하여 테스트할 수 있습니다.

  • 버전 5 이하(키스킷 테라 < 0.23.0 )의 qpy 파일에서 복잡한 amp 매개변수가 있는 라이브러리 ScalableSymbolicPulse 객체를 로드하는 것은 이제 더 이상 사용되지 않습니다. 키스킷( 1.0.0 )에서 제거한 후 복합체 amp 는 자동으로 플로트(amp, angle)로 변환됩니다. 변경 사항은 펄스에 적용됩니다:

    • Constant
    • Drag
    • Gaussian
    • GaussianSquare
  • 모듈과 qiskit.providers.basicaer 모듈과 모든 클래스는 키스킷 0.46 이후부터 더 이상 사용되지 않습니다. 이들의 사용은 qiskit.quantum_info 모듈과 새로운 qiskit.providers.basic_provider 모듈로 대체해야 합니다.

    사용에서 qiskit.providers.basicaer 에서 qiskit.providers.basic_provider 로의 마이그레이션은 다음과 같이 수행할 수 있습니다:

    Migrate from                     |   Replace with
    ------------------------------------------------------------------------------
    :mod:`.basicaer`                 |  :mod:`.basic_provider`
    :class:`.BasicAerProvider`       |  :class:`.BasicProvider`
    :class:`.BasicAerJob`            |  :class:`.BasicProviderJob`
    :class:`.QasmSimulatorPy`        |  :class:`.BasicSimulator`
    :class:`.UnitarySimulatorPy`     |  use :class:`~.quantum_info.Operator`
    :class:`.StatevectorSimulatorPy` |  use :class:`~.quantum_info.Statevector`

    주목할 만한 차이점은 새 공급자는 더 이상 글로벌 인스턴스(예: BasicAer)를 통해 노출되지 않으므로 from qiskit import BasicProvider 을 수행하는 것이 유효하지 않다는 것입니다. 대신 공급자 클래스는 해당 서브모듈에서 가져와서 인스턴스화해야 합니다:

    from qiskit.providers.basic_provider import BasicProvider
    provider = BasicProvider()
    backend = provider.get_backend("sim_name")

    다음 예제는 세 시뮬레이터의 마이그레이션 경로를 보여줍니다 basicaer.

    1. 상태 벡터 시뮬레이터:

      from qiskit import QuantumCircuit
      qc = QuantumCircuit(3)
      qc.h(0)
      qc.h(1)
      qc.cx(1,2)
      qc.measure_all()
      
      # Former path
      from qiskit import BasicAer
      backend = BasicAer.get_backend("statevector_simulator")
      statevector = backend.run(qc).result().get_statevector()
      
      # New path
      qc.remove_final_measurements() # no measurements allowed
      from qiskit.quantum_info import Statevector
      statevector = Statevector(qc)
    2. 유니티 시뮬레이터:

      from qiskit import QuantumCircuit
      qc = QuantumCircuit(3)
      qc.h(0)
      qc.h(1)
      qc.cx(1,2)
      qc.measure_all()
      
      # Former path
      from qiskit import BasicAer
      backend = BasicAer.get_backend("unitary_simulator")
      result = backend.run(qc).result()
      
      # New path
      qc.remove_final_measurements() # no measurements allowed
      from qiskit.quantum_info import Operator
      result = Operator(qc).data
    3. Qasm 시뮬레이터:

      from qiskit import QuantumCircuit
      qc = QuantumCircuit(3)
      qc.h(0)
      qc.h(1)
      qc.cx(1,2)
      qc.measure_all()
      
      # Former path
      from qiskit import BasicAer
      backend = BasicAer.get_backend("qasm_simulator")
      result = backend.run(qc).result()
      
      # New path
      from qiskit.providers.basic_provider import BasicProvider
      backend = BasicProvider().get_backend("basic_simulator")
      result = backend.run(qc).result()
      # or, directly
      from qiskit.providers.basic_provider import BasicSimulator
      backend = BasicSimulator()
      result = backend.run(qc).result()
  • PauliList 를 호출할 때 계수 1을 사용하여 암시적으로 a SparsePauliOp 를 호출할 때 계수 1을 사용하여 Estimator.run() 는 더 이상 사용되지 않습니다. 대신 SparsePauliOp(pauli_list) 을 사용하여 인수를 명시적으로 변환해야 합니다.

중요 문제

  • 키스킷을 0.46.x 에서 1.0.0 으로 업데이트할 때 제자리에서 업데이트할 수 없습니다. 예를 들어 pip install -U qiskit 또는 pip install --upgrade qiskit 은 지원되지 않으며 작동하지 않을 가능성이 높습니다. qiskit 를 업그레이드하려면 권장되는 경로는 새 가상 환경(venv)를 사용하여 Qiskit>=1.0.0 를 위한 별도의 환경을 새로 구축하는 것입니다. 예를 들어,

    python -m venv qiskit_1.0
    source qiskit_1.0/bin/activate
    pip install qiskit>=1

    라는 이름의 새 가상 환경이 생성되고 qiskit_1.0 새 버전의 키스킷이 포함됩니다.

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