키스킷 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())는 이제 시스템 크기 정수를 오버플로하는 정수 피연산자를 포함한 게이트-각 식을 평가할 수 있습니다. 나머지 표현식은 항상 그랬던 것처럼 배정밀도 부동소수점 컨텍스트에서 평가됩니다. 주의: 임의로 큰 정수는 반드시 배정밀도 부동 소수점으로 정확히 표현할 수 있는 것은 아니므로 회로가 생성되었더라도 이미 모든 수치 정밀도 모듈로 를 잃어버렸을 가능성이 있습니다.
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-terraPython 패키지는 더 이상 사용되지 않으며, 키스킷 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.transpiler.synthesis.aqc로 이전되었습니다qiskit.synthesis.unitary.aqc(qiskit.synthesis.unitary.aqc.AQCSynthesisPlugin제외)로 이전되었습니다.qiskit.synthesis.unitary.aqc.AQCSynthesisPlugin이qiskit.transpiler.passes.synthesis.AQCSynthesisPlugin로 이전되었습니다.qiskit.transpiler.synthesis.graysynth()이qiskit.synthesis.synth_cnot_phase_aam().qiskit.transpiler.synthesis.cnot_synth()이qiskit.synthesis.synth_cnot_count_full_pmh().
-
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_qubitTwoQubitBasisDecomposer로 이동되었습니다qiskit.synthesis.two_qubitsXXDecomposer로 이동되었습니다qiskit.synthesis.two_qubitstwo_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()생성자 메서드를 사용한 다음QuantumCircuit를DAGCircuit와circuit_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 에서 제거될 예정입니다. 여기에는 다음과 같은 혜택이 포함됩니다.ParametricPulseConstantDragGaussianGaussianSquare
이 클래스는
SymbolicPulse및 해당 펄스 라이브러리로 대체되었습니다.SymbolicPulse는 더 나은 성능, 유연성 및 QPY 지원을 제공합니다. -
트랜스파일러 패스와
NoiseAdaptiveLayout트랜스파일러 패스와 해당"noise_adaptive"레이아웃 스테이지 플러그인은 더 이상 사용되지 않으며 1.0.0 릴리스에서 제거될 예정입니다. 이 패스는 대부분 다음과 같이 대체되었습니다VF2Layout와VF2PostLayout로 대체되었으며, 백엔드의 보고된 노이즈 특성을 기반으로 레이아웃을 설정합니다. -
트랜스파일러
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_settingsdefault_circuit_scheduler_settings
기능과 함께:
-
의 다음 도구는 더 이상 사용되지 않습니다
qiskit.utils의 다음 도구는 더 이상 사용되지 않습니다:- 유틸리티
qiskit.utils.arithmetic - 유틸리티
qiskit.utils.circuit_utils - 유틸리티
qiskit.utils.entangler_map - 유틸리티
qiskit.utils.name_unnamed_args
이 기능은
qiskit.algorithms와qiskit.opflow에서만 사용되었으며, 키스킷 1.0 에서qiskit.algorithms와qiskit.opflow이 제거됨에 따라 제거될 예정입니다. - 유틸리티
-
모듈이
qiskit.providers.fake_provider모듈이qiskit-ibm-runtimePython 패키지로 마이그레이션되었습니다. 이러한 이유로, 다음 요소들은qiskit.providers.fake_provider은 키스킷 0.46 에서 더 이상 사용되지 않으며 키스킷에서 제거될 예정입니다 1.0:qiskit.providers.fake_provider.FakeProviderqiskit.providers.fake_provider.FakeProviderForBackendV2qiskit.providers.fake_provider.FakeProviderFactoryqiskit.providers.fake_provider.fake_backends.FakeBackendV2qiskit.providers.fake_provider.backends에 포함된 모든 가짜 백엔드(공급자를 통해 액세스 가능)qiskit.providers.fake_provider.FakeQasmSimulatorqiskit.providers.fake_provider.FakeJobqiskit.providers.fake_provider.FakeQobj
새 가짜 공급자로의 마이그레이션 예시:
# 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:qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendV2LegacyQubitPropsqiskit.providers.fake_provider.fake_backend_v2.FakeBackend5QV2qiskit.providers.fake_provider.fake_backend_v2.FakeBackendSimple
새 클래스로의 마이그레이션 예제
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로 이동되었습니다:DiagonalGate,HamiltonianGateGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
객체가 더 이상 사용되지 않음에 따라 다음 회로 메서드도 더 이상 사용되지 않습니다:
QuantumCircuit.diagonal,QuantumCircuit.hamiltonian,QuantumCircuit.isometry및QuantumCircuit.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()로 명시적으로 변환해야 합니다. -
개별 펄스 라이브러리는 이제 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 여기에는 다음과 같은 혜택이 포함됩니다.
constant()zero()square()sawtooth()triangle()cos()sin()gaussian()gaussian_deriv()sech()sech_deriv()gaussian_square()drag()
대신 해당
SymbolicPulse, 와 함께get_waveform(). 예를 들어pulse.gaussian(100,0.5,10)대신pulse.Gaussian(100,0.5,10).get_waveform()을 사용합니다.Sawtooth및Square의 위상은 모두 불연속 위상과 달리 의 위상이 전체 주기만큼 이동하도록 정의되어 있다는 점에 유의하세요. 또한 심볼 펄스 라이브러리에서 복잡한 진폭 지원은 더 이상 사용되지 않으므로 대신float,amp및angle을 사용하세요. -
주로 내부 테스트에 사용되던
ConfigurableFakeBackend클래스는 주로 내부 테스트에 사용되어 왔으며 이제 더 이상 사용되지 않습니다. 이 기능은 키스킷 1.0.0 릴리스에서 제거될 예정입니다. 대신GenericBackendV2클래스를 사용하여 유사한 백엔드를 빌드하여 테스트할 수 있습니다. -
버전 5 이하(키스킷 테라 < 0.23.0 )의 qpy 파일에서 복잡한
amp매개변수가 있는 라이브러리ScalableSymbolicPulse객체를 로드하는 것은 이제 더 이상 사용되지 않습니다. 키스킷( 1.0.0 )에서 제거한 후 복합체amp는 자동으로 플로트(amp,angle)로 변환됩니다. 변경 사항은 펄스에 적용됩니다:ConstantDragGaussianGaussianSquare
-
모듈과
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.-
상태 벡터 시뮬레이터:
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) -
유니티 시뮬레이터:
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 -
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을 사용하여 암시적으로 aSparsePauliOp를 호출할 때 계수 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새 버전의 키스킷이 포함됩니다.