키스킷 0.45 릴리즈 노트
이 페이지에는 기존 "요소" 구조가 완전히 제거된 후 첫 번째 릴리스인 키스킷( 0.45 )의 릴리스 노트가 포함되어 있습니다. 키스킷의 이전 "메타 패키지" 구조로 거슬러 올라가는 릴리스 노트를 포함한 모든 릴리스 노트는 릴리스 노트를 참조하세요. 메타 패키지 버전 표는 키스킷 0.44 릴리즈 노트를 참조하세요.
0.45.3
Prelude
키스킷 0.45.3 은 포인트 릴리스로, 잘못된 환경에서 키스킷이 설치되었음을 감지하면 ImportError1.0 를 발생시키는 것 외에는 코드 변경이 없습니다.
오류에 대한 도움말, 키스킷 준비 방법 및 자세한 배경 정보는 새 패키징에 대한 마이그레이션 가이드 1.0 를 참조하세요.
키스킷 1.0 은 키스킷 0.45.3 으로부터 약 2주 후인 2024년 2월 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 로 안전하게 전환할 수 있습니다. 테스트 및 준비에 대한 자세한 내용과 권장 사항은 마이그레이션 가이드의 개발자용 섹션을 참조하세요.
0.45.2
Prelude
키스킷 0.45.2 은 0.45 릴리스 시리즈에서 발견된 몇 가지 버그를 수정하는 소규모 패치 릴리스입니다.
버그 수정
-
전화
copy()또는copy_empty_like()을 호출하면 이제BlueprintCircuit에 있는global_phase를 복사본에 올바르게 전달합니다. 이전에는 복사 후 글로벌 단계가 항상 0이었습니다. -
QPY(
qpy.dump()및qpy.load())는 이제 클리포드 연산자(Clifford). -
mpl서랍에서 텍스트가 상자 끝을 넘어 인쇄되는 문제를 수정했습니다SwitchCaseOp의 텍스트가 상자 끝을 넘어 인쇄되던 문제를 수정했습니다. -
의 큐비트 인수 방송이
QuantumCircuit.delay()의 큐비트 인자 방송은 이제 의도한 대로 각 큐비트에 대한Delay인스트럭션을 올바르게 생성합니다. 이전에는 특정 이터러블(예를 들어set와 같은) 이터러블이 주어지면 비정상적인 위치에서 실패할 수 있는 유효하지 않은 회로를 자동으로 생성했습니다. -
특정 상황에서 사용자가 게이트의.calibration 데이터를 로드하려고 할 때 오류가 발생하는 버그가 수정되었습니다
Target로 로드하려고 할 때 오류가 발생하는 버그를 수정했습니다. 이는 백엔드가 명령 정의에서 파형 펄스를 참조하지만 펄스 라이브러리에는 해당 파형 펄스를 포함하지 않는 등 일부 보정 데이터만 보고할 때 발생합니다. 이 상황에서는 키스킷 펄스 오브젝트를 빌드할 수 없으므로 캘리브레이션을 위한 펄스 스케줄을 빌드하지 못합니다. 이제 보정 데이터가 불완전하면Target는 보정이 전혀 보고되지 않은 것과 동일하게 취급하며 예외를 발생시키지 않습니다. -
트랜스파일러 패스 관련 문제를 수정했습니다
Optimize1qGatesDecomposition트랜스파일러 패스가 잠재적으로 단일 이상(오류율이0.0) 게이트를 재합성할 수 있는 문제를 수정했습니다Target. 이제 오류율이 같으면 패스Optimize1qGatesDecomposition가 오류율(게이트 수 포함)이 동일한 경우 회로의 게이트로 지연되도록 수정되었습니다. 수정 #10568 -
스왑 및 측정 명령어와 관련된 회로를 잘못 최적화하는
OptimizeSwapBeforeMeasure패스의 문제를 수정했습니다. 이 커밋은 버그를 수정하여DAGCircuit.successors()를DAGCircuit.descendants(). 또한 버그가 수정되었는지 확인하기 위해 몇 가지 추가 테스트를 추가했습니다. 예를 들어,from qiskit import QuantumCircuit from qiskit.transpiler.passes import OptimizeSwapBeforeMeasure pass_ = OptimizeSwapBeforeMeasure() qc = QuantumCircuit(2, 1) qc.swap(0, 1) qc.measure(0, 0) qc.measure(0, 0) print(qc.draw()) print(pass_(qc).draw())가 이전에는 인쇄되었습니다:
┌─┐┌─┐ q_0: ─X─┤M├┤M├ │ └╥┘└╥┘ q_1: ─X──╫──╫─ ║ ║ c: 1/════╩══╩═ 0 0 ┌─┐ q_0: ┤M├─── └╥┘┌─┐ q_1: ─╫─┤M├ ║ └╥┘ c: 1/═╩══╩═ 0 0이제 두 번째 서킷이 올바르게 최적화되었습니다:
q_0: ────── ┌─┐┌─┐ q_1: ┤M├┤M├ └╥┘└╥┘ c: 1/═╩══╩═ 0 0 -
문자열 표현의 버그를 수정했습니다
StabilizerState문자열 표현의 버그를 수정합니다.
0.45.1
Prelude
키스킷 테라 0.45.1 는 0.45 릴리스 시리즈에서 발견된 몇 가지 버그를 수정하는 소규모 패치 릴리스입니다. 또한 Python 3.12 에 대한 공식 지원을 제공하는 첫 번째 릴리스입니다. 0.45.1 릴리스는 Python 3.8, 3.9, 3.10, 3.11, 3.12 을 지원합니다.
새 기능
- 키스킷 사용 지원 추가 Python 3.12. 이 릴리스부터 키스킷은 Python 버전 3.8, 3.9, 3.10, 3.11, 3.12 에서 실행을 지원합니다.
버그 수정
-
QuantumCircuit.barrier()는 이제 입력 중 하나로set가 입력 중 하나로 주어지면 올바른 출력을 생성합니다. 이전에는 유효하지 않은 연산을 회로에 추가했지만, 실제로는 일반적으로 관찰 가능한 문제를 일으키지 않았습니다. 수정 #11208 -
속성
Instruction.condition_bits는 이제 런타임 클래식 표현식(qiskit.circuit.classical). -
키스킷 펄스 오브젝트의
hash()키스킷 펄스Channel객체(예DriveChannel) 채널이 한 Python 프로세스에서 다른 해시 시드를 사용하는 다른 프로세스로 전송되는 경우를 수정했습니다. -
OpenQASM 2에서 가져온 조건부 사용자 지정 게이트는 이제 피클 및 딥 복사 시 조건이 올바르게 유지됩니다. 이전에는 조건부 사용자 정의 게이트( OpenQASM 2 파일의
gate문으로 정의됨)를 복사하거나 피클하면 조건이 손실되었습니다. -
의 QPY 역직렬화를 수정했습니다
StatePreparation및Initialize회로 명령어를 문자열 및 정수 매개변수로 역직렬화하도록 수정했습니다(기존에 작동하던 명시적 상태벡터와 반대로). 수정 #11158. -
버그 수정
SabreLayout의 버그를 수정했습니다Layout에 사용된 객체에TranspileLayout.initial_layout. 이는 회로 시각화에 영향을 미쳤습니다QuantumCircuit.draw()및circuit_drawer()변환 후 레지스터 이름(예:q0)을 사용하여 예상되는 가상 큐비트 레이블이 아닌Qubit[QuantumRegister(6, 'q', 0)]형식의 가상 큐비트 레이블이 표시됩니다. 수정 #11038 -
의 문제를 수정했습니다
qpy.dump()함수가 직렬화할 때use_symengine값을 무시할 수 있는 문제를 수정했습니다ScheduleBlock객체를 직렬화할 때 이렇게 하면 심볼릭 표현식에 심엔진을 사용한다고 보고하지만 실제로는 심파이 직렬화된 데이터를 포함하므로 잘못된 QPY 페이로드가 생성될 수 있습니다. -
초기화 시 오류를 일으키는 버그를 수정했습니다
UnitaryOverlap가 배리어가 포함된 입력 회로가 주어지면 초기화 시 오류가 발생하던 버그를 수정했습니다.
0.45.0
Prelude
키스킷 0.45.0 은 1.0 이전의 마지막 기능 릴리스입니다. 이는 첫 번째 주요 버전 릴리스에서 계획 중인 API 변경의 기반을 마련하는 것으로, 여기에는 이전에 사용되지 않던 많은 기능의 제거와 일련의 새로운 사용 중단이 포함됩니다.
프로젝트가 키스킷에 의존하는 경우, 키스킷에서 더 이상 지원되지 않는 기능에 의존할 수 있습니다 1.0. 따라서 지원 버전을 <1.0 으로 미리 제한하는 것이 좋습니다.
키스킷( 0.45.0 )의 주요 기능은 다음과 같습니다:
- 이번 릴리스부터 키스킷 표준 회로 라이브러리의 모든 파라미터화되지 않은 게이트는 이제 싱글톤이 됩니다. 기본적으로 이러한 게이트는 메모리에서 단일 인스턴스를 공유하므로 특정 유형의 게이트, 예를 들어
XGate의 인스턴스가 인스턴스화되면 이후의 모든XGate의 후속 인스턴스는 첫 번째 인스턴스에 대한 참조가 됩니다. 따라서 회로에서 동일한 유형의 게이트를 여러 개 사용할 때 메모리 사용량과 구성 오버헤드가 줄어듭니다. 이 기능을 구현하기 위해 새로운 베이스 클래스가 도입되었습니다:SingletonInstruction와SingletonGate. 자세한 내용은 기능 노트를 참조하세요. - 새로운 일반 패스 관리자 인터페이스가 추가되었습니다
qiskit.passmanager모듈에서 찾을 수 있습니다. 이것은 키스킷 트랜스파일러를 구축하는 데 사용된 패스 매니저를 일반화한 것으로, 사용자가 다른 중간 표현(IR)을 사용하는 새로운 패스 매니저를 만들 수 있는 일반 프레임워크를 도입합니다. 이 모듈에는 일반 패스 관리자 베이스 클래스, 플로우 컨트롤러, 패스 관리자 작업 실행을 관리하는 데 필요한 인프라가 포함되어 있습니다. 새로운 인터페이스는 기존 패스 매니저를 재구축하는 데 사용되었습니다qiskit.transpiler모듈의 기존 패스 관리자를 재구축하여 코드의 기술적 부채를 정리하고 사용성과 성능을 개선하는 데 사용되었습니다. 자세한 내용은 기능 및 업그레이드 노트를 참조하세요. - 0.45.0 를 사용하면 트랜스파일러가 수행하는 레이아웃 순열과 더 잘 상호작용할 수 있습니다. 클래스에 포함된 데이터는
TranspileLayout클래스에 포함된 데이터는 이제 일련의 새로운 메서드와 속성을 통해 더욱 쉽게 액세스할 수 있습니다. 그리고 새로운SparsePauliOp.apply_layout()메서드를 사용하면 특정 레이아웃 순열을 트랜스파일러에 입력 회로용으로 만들어진SparsePauliOp옵저버블에 특정 레이아웃 순열을 적용할 수 있습니다. 자세한 내용은 기능 노트를 참조하세요. - 마지막으로, 주석이 달린 연산을 도입하여 새로운
AnnotatedOperation클래스를 통해 복잡한 회로 명령어를 수정자 집합으로 기본 명령어로 공식화할 수 있습니다. 예를 들어, 제어된 역을 구현하는 특정 연산 유형인RXGate의 역수를 구현하는 특정 연산 유형 대신 이제 주석이 달린RXGate를 역 및 제어 속성과 함께 사용할 수 있습니다. 자세한 내용은 기능 노트를 참조하세요.
회로 기능
-
새로운 클래스 추가
AnnotatedOperation의 서브클래스이며Operation의 서브클래스이며 "수정자" 목록에 의해 수정된 "기본 연산"을 나타냅니다. 기본 연산은 타입Operation유형이며 현재 지원되는 수정자는 다음과 같습니다InverseModifier,ControlModifier과PowerModifier. 수정자는 목록에 표시되는 순서대로 적용됩니다.에를 들면 다음과 같습니다.
gate = AnnotatedOperation( base_op=SGate(), modifiers=[ InverseModifier(), ControlModifier(1), InverseModifier(), PowerModifier(2), ], )는 논리적으로
gate = SGate().inverse().control(1).inverse().power(2)와 같거나:gate = AnnotatedOperation( AnnotatedOperation(SGate(), [InverseModifier(), ControlModifier(1)]), [InverseModifier(), PowerModifier(2)], )그러나 이러한 동등성은 논리적일 뿐, 내부적으로 표현하는 방식은 매우 다릅니다.
편의를 위해 단일 수정자를 직접 전달할 수도 있으므로
AnnotatedGate(SGate(), [ControlModifier(1)])은AnnotatedGate(SGate(), ControlModifier(1))과 동일합니다.주석이 달린 오퍼레이션의 특징은 오퍼레이션이 선언될 때 회로 정의가 구성되지 않고 트랜스파일링 중에, 특히
HighLevelSynthesis트랜스파일러 패스 중에만 발생한다는 것입니다.주석이 달린 연산은 양자 회로에 추가할 수 있는 "더 높은 수준" 또는 "더 추상적인" 객체로 볼 수도 있습니다. 이를 통해 이 상위 레벨 표현을 활용하는 트랜스파일러 최적화 패스를 작성할 수 있습니다(예: 게이트 바로 뒤에 역으로 오는 게이트를 제거하는 경우)(게이트와 역이 모두 더 간단한 게이트로 먼저 합성된 경우에는 이러한 감소가 불가능할 수 있습니다).
어떤 의미에서 주석이 달린 작업은 기본 작업의 확장으로 볼 수 있습니다
ControlledGate의 확장으로 볼 수 있으며, 기본 연산에 제어 기능을 추가할 수도 있습니다. 향후에는 다음을 대체할 계획입니다ControlledGate를AnnotatedOperation. 제어 게이트와 마찬가지로 트랜스파일러는 레이아웃/라우팅이 수행되기 전에 주석이 달린 연산을 합성합니다.현재로서는 주석이 달린 연산은 양자 회로의 최상위 레벨에만 나타날 수 있으며, 즉 재귀적으로 정의된
definition회로 내부에는 나타날 수 없습니다. 이 제한은 추후 제거할 계획입니다. -
에 새로운 옵션
max_num_qubits을 추가했습니다qiskit.circuit.CommutationChecker.commute()에 더 비싼 행렬 곱셈 기반 정류성 검사에 고려할 최대 큐비트 수를 지정하는 옵션을 추가했습니다. 이렇게 하면 내부적으로 크기의 배열을 할당하려고 시도하는 것을 피할 수 있습니다. 더 간단한 버전의 정류성 검사(예: 두 양자 연산이 서로 다른 큐비트 집합에 걸쳐 있을 때 정류하는 경우)는 이 제한 없이 계속 작동합니다. -
클래스의 생성자에 새 인수
check_input를 추가했습니다UnitaryGate클래스의 생성자에 새 인수를 추가했습니다. 이 플래그는 입력 객체가 단일 행렬을 나타내는지 기본 초기화 검사를 비활성화하는 데 사용됩니다. 입력이 이미 단일 행렬이라는 것을 알고 있는 경우 이 방법을 사용하여UnitaryGate객체를 빠르게 생성하는 데 사용할 수 있습니다. 이 새 옵션은False로 설정되어 있고 입력이 단일이 아닌 경우 잘못된UnitaryGate객체가 생성되므로 이러한 경우에만 사용해야 합니다. -
새로운 방법
Parameter.assign()가 추가되었습니다. 이 방법은 주로 나중에 할당되는 단일 매개변수가 주로 포함된 회로의 경우QuantumCircuit.assign_parameters()의 성능을 향상시키는 빠른 경로입니다. 주로 나중에 할당될 단일 매개변수인 '표현식'을 포함하는 회로의 일반적인 경우에 사용됩니다. -
의 성능이 향상되었습니다
QuantumCircuit.assign_parameters()의 성능이 여러 매개변수가 포함된 회로의 단일 매개변수를 할당할 때 개선되었습니다. -
두 가지 새로운 클래스를 도입했습니다,
SingletonInstruction과SingletonGate의 서브클래스인Instruction와Gate의 서브클래스로, 각각 해당 유형의 모든 객체에 대해 단일 인스턴스를 사용합니다. 이 클래스의 목적은 글로벌 공유 상태를 갖는 대신 회로에서 여러 게이트를 사용하는 데 따른 메모리 및 구성 오버헤드를 최소화하는 것입니다. 따라서 이 클래스는 인스턴스에 고유하거나 변경 가능한 상태가 저장되지 않은 게이트에만 적용할 수 있습니다. 예를 들어, 가장 좋은 예는XGate는 상태를 포함하지 않고 레버리지를 활용할 수 있지만SingletonGate(그리고 이번 릴리스부터 사용)를 활용할 수 있는 반면RXGate는 각도 매개변수를 인스턴스에 저장하므로 단일 공유 전역 인스턴스는 매개변수 값을 나타낼 수 없으므로SingletonGate단일 공유 전역 인스턴스는 매개변수 값을 나타낼 수 없기 때문입니다.싱글톤 클래스를 사용할 때 주의해야 할 또 다른 잠재적 문제는
Instruction데이터 모델이 일부 변경 가능한 상태를 지원한다는 것입니다. 특히label,duration,unit및condition어트리뷰트는 모두 접근 가능하고 변경 가능합니다Instruction와 그 직접 서브클래스에서 접근 및 변경 가능합니다. 그러나 이것은 공유 객체를 사용하는 것과는 호환되지 않습니다SingletonInstruction. 의 인스턴스의 경우SingletonInstruction의 경우 이러한 속성을 직접 설정하는 것은 허용되지 않으며 예외가 발생합니다. 특정 인스턴스에 필요한 경우 다음을 사용하여 변경 가능한 인스턴스가 있는지 확인해야 합니다Instruction.to_mutable()(또는Instruction.c_if()forcondition).label,duration와unit를 클래스 생성 시 키워드 인수로 지정할 수도 있습니다. -
이제 다음 표준 라이브러리 게이트가 인스턴스화됩니다
SingletonGate:즉, 이러한 클래스가 (예를 들어) 다음과 같이 인스턴스화된 경우
XGate()모든 생성자 기본값을 사용하면 모두 하나의 전역 인스턴스를 공유하게 됩니다. 따라서 이러한 유형의 오브젝트가 1개 이상일 경우 메모리 오버헤드가 크게 감소하고 오브젝트 구성 시간이 훨씬 빨라집니다. -
새로운 클래스 도입
SingletonControlledGate의 서브클래스인ControlledGate의 서브클래스로 해당 유형의 모든 객체에 대해 단일 인스턴스를 사용하는 새로운 클래스를 도입했습니다. 이 클래스의 목적은 글로벌 공유 상태를 갖는 대신 회로에서 여러 게이트를 사용하는 데 따른 메모리 및 구성 오버헤드를 최소화하는 것입니다. 따라서 이 클래스는 인스턴스에 고유하거나 변경 가능한 상태가 저장되어 있지 않은 게이트에만 적용됩니다. 예를 들어, aCXGate는 어떤 상태도 포함하지 않으므로SingletonControlledGate를 활용할 수 있습니다(이번 릴리스부터는 가능합니다). 반대로CRXGate는 각도 매개 변수를 인스턴스 데이터의 일부로 저장하므로 사용할 수 없습니다SingletonControlledGate.사용할 때 주의해야 할 또 다른 잠재적 문제는
SingletonControlledGate의 원본 데이터 모델이ControlledGate의 원본 데이터 모델이 변형을 지원한다는 것입니다. 특히label,duration,unit,condition및ctrl_state속성은 모두 접근 및 변경이 가능한ControlledGate에서 접근 가능하고 변경 가능하지만, 이러한 어트리뷰트를SingletonControlledGate서브클래스에서 이러한 어트리뷰트를 변경하는 것은 허용되지 않으며 예외가 발생합니다. 이러한 속성은 사용자 지정할 수 있지만 생성 시에만(즉, 생성자를 통해서만) 사용자 지정할 수 있습니다. 이 경우 새로 생성된 게이트는 전역적으로 공유되는 인스턴스 대신 사용자 지정 상태를 가진 별도의 인스턴스가 됩니다.SingletonControlledGate.to_mutable()메서드를 사용하여 게이트 객체의 변경 가능한 복사본을 가져온 다음 다른 객체에서와 마찬가지로 속성을 변경할 수도 있습니다Instruction객체처럼 속성을 변경할 수 있습니다. -
이제 다음 표준 라이브러리 게이트가 인스턴스화됩니다
SingletonControlledGate:즉, 생성 시점에 인스턴스에
label,condition,duration,unit,ctrl_state이 설정되어 있지 않으면 새 게이트 객체가 생성될 때마다 모두 하나의 전역 인스턴스를 공유하게 됩니다. 이렇게 하면 이러한 유형의 객체가 1개 이상일 경우 메모리 오버헤드가 크게 감소합니다. -
새로운 메서드
Instruction.to_mutable()와 어트리뷰트Instruction.mutable메서드 및 어트리뷰트가 추가되었습니다Instruction객체가 변경 가능한지 확인하는 데 사용되는 메서드와 어트리뷰트가 추가되었습니다. 의 도입으로SingletonGate를 도입하면 이러한 메서드를 사용하여 명령 객체의 가변성을 처리하는 통합 인터페이스를 가질 수 있습니다. -
어트리뷰트 추가
Instruction.base_class속성을 추가하여 인스트럭션의 "기본" 유형을 가져옵니다. 많은 인스트럭션이type(obj) == obj.base_class을 만족하지만, 싱글톤 인스턴스인SingletonInstruction와SingletonGate의 싱글톤 인스턴스는 기본 타입의 서브클래스입니다. 새로운base_class속성을 사용하여 이러한 기본 클래스를 찾을 수 있습니다. 다른 서브클래스가 어트리뷰트 문서를 참조하여 언제 다른 서브클래스의base_class를 수정할 수 있는 경우와 이것이 실행에 미치는 영향에 대해 설명합니다. -
키스킷 회로 라이브러리에
UnitaryOverlap회로를 키스킷 회로 라이브러리에 추가했습니다. 올제로 상태의 출력 분포 확률을 보거나, 이와 동등하게 올제로 상태에 대한 프로젝터의 기대값을 계산하여 유니타리에서 생성된 상태의 충실도를 계산하는 데 사용할 수 있습니다. 이는 머신 러닝, 양자 화학의 여기 상태 계산과 같은 애플리케이션에 유용합니다.
펄스 기능
-
를 사용하여 회로-펄스 스케줄링 활성화
BackendV2.# import a fake backend which is a sub-class of BackendV2 from qiskit.providers.fake_provider import FakePerth from qiskit.compiler.scheduler import schedule from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(1, 1) qc.x(0) qc.measure(0,0) sched = schedule(circuits=qc, backend=FakePerth())이후
BackendV2함수에 의해 지원되지 않았기 때문에schedule()함수에서 지원되지 않았기 때문에backend인수가 인스턴스와 함께 제공되었을 때schedule()메서드에 오류가 발생했습니다BackendV2. 자세한 내용은 #10837을 참조하세요.
OpenQASM 기능
-
OpenQASM 2 모듈
qiskit.qasm2은 내보내기 기능dump()와dumps(). 이들은 이전과 매우 유사한 방식으로 사용됩니다QuantumCircuit.qasm():from qiskit import qasm2, QuantumCircuit qc = QuantumCircuit(2, 2) qc.h(0) qc.cx(0, 1) qc.measure([0, 1], [0, 1]) print(qasm2.dumps(qc))새로운 함수는 다음과 같은 코드에서 비롯됩니다
QuantumCircuit.qasm()와 동일한 코드에서 비롯되며, OpenQASM 3 (...)과 비교할 때 보다 일관된 인터페이스를 제공하기 위해 단계적으로 폐지되고 새로운 경로로 대체될 예정입니다qiskit.qasm3) 및 QPY(qiskit.qpy) 모듈에 비해 일관된 인터페이스를 제공합니다. 메서드 이름에qasm()에 OpenQASM 버전이 표시되지 않았고, 처음 추가된 이후 키스킷은 쉽게 혼동될 수 있는 여러 직렬화 모듈을 갖게 되었습니다.
QPY 기능
-
QPY는 이제 펄스 스케줄 블록의 기호 표현식뿐만 아니라
ParameterExpression유형의 객체에 대한 심엔진 네이티브 직렬화 및 역직렬화 사용을 지원합니다. 이는 더 빠른 직렬화 대안이지만 모든 플랫폼에서 지원되지는 않습니다. 이 옵션을 설정하기 전에 대상 플랫폼이 심엔진 라이브러리에서 지원되는지 확인하시기 바랍니다. 페이로드를 역직렬화하려면 qpy가 필요하므로 이 옵션을 설정하세요.이 기능은
qpy.dump()의use_symengine파라미터를 통해 활성화할 수 있습니다:from qiskit.circuit import QuantumCircuit, Parameter from qiskit import qpy theta = Parameter("theta") phi = Parameter("phi") sum_param = theta + phi qc = QuantumCircuit(1) qc.rz(sum_param, 0) qc.measure_all() with open('bell.qpy', 'wb') as fd: qpy.dump(qc, fd, use_symengine=True) with open('bell.qpy', 'rb') as fd: new_qc = qpy.load(fd)[0]
양자 정보 특성
-
추가
Clifford.from_linear_function()및Clifford.from_permutation()메서드를 추가하여Clifford객체를 생성하는LinearFunction과PermutationGate를 각각 추가했습니다. 결과적으로 이제Clifford는 이제 a에서 직접LinearFunction, aPermutationGate또는 이러한 게이트를 포함하는 양자 회로로 직접 구성할 수 있습니다. -
클래스는 이제
Operator클래스에는 이제draw()메서드를 사용하여 텍스트 매트릭스, IPython LaTeX 객체 또는 LaTeX 소스로 표시할 수 있습니다. 기본 그리기 유형은 여전히 연산자의 ASCII__repr__입니다. -
새로운 메서드를 추가했습니다,
apply_layout()메서드를SparsePauliOp클래스에 메서드를 추가했습니다. 이 메서드는 트랜스파일러에서TranspileLayout레이아웃을 트랜스파일러의SparsePauliOp옵저버블에 트랜스파일러의 레이아웃을 적용하는 데 사용됩니다. 이를 통해BaseEstimator구현 및 로컬 번역 작업을 더 쉽게 수행할 수 있습니다. 예를 들어,from qiskit.circuit.library import RealAmplitudes from qiskit.quantum_info import SparsePauliOp from qiskit.primitives import BackendEstimator from qiskit.compiler import transpile from qiskit.providers.fake_provider import FakeNairobiV2 psi = RealAmplitudes(num_qubits=2, reps=2) H1 = SparsePauliOp.from_list([("II", 1), ("IZ", 2), ("XI", 3)]) backend = FakeNairobiV2() estimator = BackendEstimator(backend=backend, skip_transpilation=True) thetas = [0, 1, 1, 2, 3, 5] transpiled_psi = transpile(psi, backend, optimization_level=3) permuted_op = H1.apply_layout(transpiled_psi.layout) res = estimator.run(transpiled_psi, permuted_op, thetas)로 전달되기 전에 입력 회로가 로컬에서 트랜스파일링되는 경우
run로 전달됩니다. 트랜스필레이션은 원래 회로를 2 큐비트에서 7 큐비트(backend)로 확장하고 레이아웃을 퍼뮤트한 다음H1에 적용하여apply_layout()에 의해 수행된 변환을 반영하기 위해transpile().
트랜스파일러 기능
-
클래스는
HighLevelSynthesis클래스가 확장되어 유형의 객체가 있는 회로를 합성합니다AnnotatedOperation. -
새로운
qiskit.passmanager모듈이 키스킷 라이브러리에 추가되었습니다. 이 모듈은 일반 패스 매니저와 플로우 컨트롤러를 구현하고 패스 매니저 작업의 실행을 관리하기 위한 인프라를 제공합니다. 이 모듈은 패스(GenericPass) 및 흐름 컨트롤러(BaseController)를 위한 베이스 클래스와 패스 매니저의 실행을 관리하는 새로운 인터페이스 클래스passmanager.Task를 제공합니다(Task.execute()메서드 참조). 이러한 새로운 클래스는 복합 패턴을 따르는데, 흐름 컨트롤러는 패스의 모음이며 컨트롤러는 작업 파이프라인에 재귀적으로 중첩될 수 있기 때문입니다. 또한 기본 클래스는 입력 및 출력 객체 유형을 인식하지 못하므로 최적화를 위해 특정 프로그램 유형에 맞게 서브클래싱해야 한다는 점에 유의해야 합니다. 이 통합 설계는 기존 패스 관리자의 복잡성을 줄여주며, 실행 로직 디스패치 및 작업 구조 정규화를 처리하기 위해RunningPassManager같은 클래스를 더 이상 사용할 필요가 없습니다. 모듈은qiskit.transpiler모듈은 일반 패스 매니저를 기반으로 기존 패스 매니저를 재구성하도록 재구성되었습니다. 자세한 내용은 업그레이드 노트를 참조하세요. -
새로운 분석
SabrePreLayout에 대한 시작 레이아웃을 생성하는 새로운 분석 패스를 추가했습니다SabreLayout에 대한 시작 레이아웃을 생성하는 분석 패스를 추가했습니다sabre_starting_layouts.패스는 커플링 맵에 점점 더 많은 "추가" 가장자리를 추가하여
VF2Layout가 완벽한 그래프 동형성을 찾는 데 성공할 때까지 작동합니다. 보다 정확하게는 증강된 커플링 맵에는 원래 커플링 맵에서 주어진 거리d내에 있는 노드 간의 에지가 포함되며, 동형성을 찾을 때까지d값이 증가합니다. 또한 패스는 선택적으로 로컬 최소값을 찾을 때까지 레이아웃에 관련된 추가 가장자리 수를 최소화합니다. 여기에는 여분의 가장자리를 제거하고 동형이 여전히 존재하는지 확인하기 위해VF2Layout를 호출하여 동형이 여전히 존재하는지 확인합니다.다음은
SabrePreLayout전에SabreLayout:import math from qiskit.transpiler import CouplingMap, PassManager from qiskit.circuit.library import EfficientSU2 from qiskit.transpiler.passes import SabrePreLayout, SabreLayout qc = EfficientSU2(16, entanglement='circular', reps=6, flatten=True) qc.assign_parameters([math.pi / 2] * len(qc.parameters), inplace=True) qc.measure_all() coupling_map = CouplingMap.from_heavy_hex(7) pm = PassManager( [ SabrePreLayout(coupling_map=coupling_map), SabreLayout(coupling_map), ] ) pm.run(qc) -
인수를
coupling_map,target및use_qubit_indices에 추가했습니다HighLevelSynthesis트랜스파일러 패스에 추가했습니다.target인수는 타겟 백엔드를 지정하여 패스 내에서 호출되는 합성 플러그인이 커플링 맵 및 지원되는 게이트 세트와 같은 모든 타겟별 정보에 액세스할 수 있도록 합니다.coupling_map인수는 커플링 맵만 지정하며target을 지정하지 않은 경우에만 사용됩니다.use_qubit_indices인수는 레이아웃이 설정되기 전 또는 후에 상위 수준 합성 패스가 실행 중인지, 즉 상위 수준 객체의 큐비트 인덱스가 대상 백엔드의 큐비트 인덱스에 해당하는지 여부를 나타냅니다. -
에
coupling_map,target및qubits인수를 추가했습니다HighLevelSynthesisPlugin. 위치 인수target는 대상 백엔드를 지정하여 플러그인이 커플링 맵, 지원되는 게이트 세트 등과 같은 모든 대상별 정보에 액세스할 수 있도록 합니다. 위치 인수coupling_map는 커플링 맵만 지정하며target이 지정되지 않은 경우에만 사용됩니다. 위치 인자qubits는 물리적 회로에서 합성이 수행되는 경우 상위 레벨 객체가 정의되는 큐비트 목록을 지정합니다.None값은 레이아웃이 아직 선택되지 않았음을 나타냅니다.이렇게 하면 합성 플러그인 옵션을 플러그인용 일반 인터페이스 옵션(
coupling_map,target,qubits)과 플러그인별 옵션(options을 통해 지정된 자유 형식 구성 사전)으로 더 깔끔하게 분리할 수 있습니다. 이 변경 사항은 이전 버전과 호환되므로coupling_map, 등의 옵션이 플러그인의run()메서드에 명시적으로 추가되지 않은 경우options의 일부로 표시됩니다. -
메서드의
DAGCircuit메서드apply_operation_back()와apply_operation_front()가check키워드 인수를 얻었으며, 이 인수는False으로 설정하여 입력이DAGCircuit데이터 구조 불변성을 준수하는지 검증을 생략할 수 있습니다. 이는 트랜스파일러 패스와 같이 알려진 양호한 데이터로 DAG를 빌드할 때 성능 최적화에 유용합니다. -
메서드
CouplingMap.reduce()는 이제 기본값이True인 추가 인수check_if_connected를 허용합니다. 이는 이전 동작에 해당하는 것으로, 축소된 커플링 맵이 연결되어 있는지 확인하고 그렇지 않은 경우CouplingError을 발생시킵니다.False로 설정하면 확인을 건너뛰고 연결이 끊어진 축소 커플링 맵을 사용할 수 있습니다. -
의 생성자는
HighLevelSynthesis트랜스파일러 패스의 생성자는 이제 추가 인자equivalence_library,basis_gates,min_qubits를 허용합니다. 이제 패스는 사용자 정의 정의를 언롤링할 수 있습니다UnrollCustomDefinitions와 유사하게 사용자 정의 정의를 펼칠 수 있으므로 후자의 패스의 기능을 완전히 대체합니다. 특히HighLevelSynthesis은 이제 재귀적이어서 초기 구현에서 간과했던 부분을 수정했습니다. 따라서target또는basis_gates중 하나를 지정하면HighLevelSynthesis는 회로의 모든 상위 수준 객체, 주석이 달린 연산 및 사용자 정의 게이트를 재귀적으로 합성하여 대상에서 지원되거나 동등성 라이브러리에 속하는 게이트만 남깁니다. 이를 통해HighLevelSynthesis의 드롭인 대체로UnrollCustomDefinitions. 반면에target또는basis_gates모두 지정되지 않은 경우 패스는 "최상위" 상위 수준 객체와 주석이 달린 연산만 합성합니다. 즉, 사용자 정의 게이트definition필드로 재귀적으로 하강하지 않습니다. 이것은 (아무것도 하지 않는)UnrollCustomDefinitions(아무것도 하지 않음) 및 하이 레벨 합성 패스의 이전 동작과 모두 호환되며, 중간 변환으로 사용할 수 있으며HLSConfig에 지정된 대로 하이 레벨 객체만 합성할 수 있습니다. -
장벽을 병합하기 위해 전체 DAG를 재구성하는
MergeAdjacentBarriers트랜스파일러 패스의 성능을 크게 개선했습니다. 전체 DAG를 다시 빌드하여 장벽을 병합하는 데 사용되었습니다. -
새 키워드 인수
min_qubits를 트랜스파일러 패스의 생성자에 추가했습니다BasisTranslator트랜스파일러 패스의 생성자에 추가했습니다. 0이 아닌 값으로 설정하면 회로에서 변환할 연산을 필터링할 최소 큐비트 수를 설정하는 데 사용됩니다. 예를 들어min_qubits=3을 설정하면BasisTranslator인스턴스는 3개 이상의 큐비트에서 작동하는 회로의 게이트만 변환합니다. -
새 키워드 인수
min_qubits를 트랜스파일러 패스의 생성자에 추가했습니다UnrollCustomDefinitions트랜스파일러 패스의 생성자에 추가했습니다. 0이 아닌 값으로 설정하면 회로에서 변환할 연산을 필터링할 최소 큐비트 수를 설정하는 데 사용됩니다. 예를 들어min_qubits=3을 설정하면UnrollCustomDefinitions인스턴스는 3개 이상의 큐비트에서 작동하는 회로의 게이트만 변환합니다. -
지정된 시작 레이아웃을 추가할 수 있는
SabreLayout패스를 지원하여 지정된 시작 레이아웃으로 평가판을 추가할 수 있습니다. 트랜스파일러 패스는SabreLayout트랜스파일러 패스는 일반적으로 완전히 무작위 레이아웃으로 시작한 다음 스왑을 삽입하는 대신 라우팅 패스를 사용하여 해당 레이아웃을 퍼뮤트하여 스왑 게이트가 더 적은 레이아웃을 찾는 여러 레이아웃 트라이얼을 실행합니다. 이 새로운 기능을 사용하면AnalysisPass이전SabreLayout를 실행하여 속성 세트의"sabre_starting_layout"필드를 설정하면SabreLayout에 내부 평가판에서 사용할 추가 시작 레이아웃을 제공할 수 있습니다. 예를 들어DenseLayout를 한 번의 평가판의 시작점으로SabreLayout에서 시작점으로 실행하려면 다음과 같이 하시면 됩니다:from qiskit.providers.fake_provider import FakeSherbrooke from qiskit.transpiler import AnalysisPass, PassManager from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager from qiskit.transpiler.passes import DenseLayout class SabreDenseLayoutTrial(AnalysisPass): def __init__(self, target): self.dense_pass = DenseLayout(target=target) super().__init__() def run(self, dag): self.dense_pass.run(dag) self.property_set["sabre_starting_layouts"] = [self.dense_pass.property_set["layout"]] backend = FakeSherbrooke() opt_level_1 = generate_preset_pass_manager(1, backend) pre_layout = PassManager([SabreDenseLayoutTrial(backend.target)]) opt_level_1.pre_layout = pre_layout그런 다음
opt_level_1StagedPassManager를 회로와 함께 실행하면DenseLayout패스의 출력은 다음 중 하나에 사용됩니다SabreLayout최적화 레벨 1에서 기본적으로 실행되는 5개의 완전 무작위 트라이얼에 추가됩니다. -
두 개의 새로운 트랜스파일러 패스가 추가되어 싱글 펄스 RX 게이트 캘리브레이션을 즉시 생성할 수 있습니다. 이러한 단일 펄스 RX 보정을 통해 게이트 시간을 절반으로 줄일 수 있으며, 이는 P.Gokhale 외, 최적화 양자 컴파일을 통한 근시일 알고리즘( OpenPulse, 2020)에 설명되어 있습니다, arXiv:2004.11205.
생성해야 하는 RX 보정 데이터의 양을 줄이기 위해
NormalizeRXAngle는 세 가지 최적화를 수행합니다RXGate회전 각도를[0, pi]로 바꾸고RX(pi/2)과RX(pi)를SXGate및XGate로 바꾸고 회전 각도를 정량화합니다. 이 패스를 실행하려면RXCalibrationBuilder를 실행하기 전에 실행해야 합니다.최적화를 통해
NormalizeRXAngle를 통해 캘리브레이션 데이터의 양을 줄이고 보다 정확한 하드웨어 캘리브레이션 펄스를 활용할 수 있게 되었습니다. 에 의해 생성된 캘리브레이션은RXCalibrationBuilder에서 생성된 캘리브레이션은SXGate캘리브레이션에서 부트스트랩되며, 대상에 이미 존재해야 합니다. 진폭은 원하는 임의의 회전 각도를 얻기 위해 선형적으로 스케일링됩니다.이러한 단일 펄스 캘리브레이션은 두 개의 펄스로 구성된 기존 시퀀스에 비해
RXGate두 개의 펄스로 구성된 기존 시퀀스에 비해 시간을 절반으로 줄입니다SXGate펄스. 이러한 게이트 시간 단축으로 인해 충실도가 향상될 수 있습니다. -
에 새로운 메서드가 추가되었습니다
TranspileLayout,initial_index_layout()와routing_permutation()의 목록 보기를 생성하는 데 사용되는TranspileLayout.initial_layout및TranspileLayout.final_layout속성의 목록 보기를 생성하는 데 사용되는 메서드를 추가했습니다. 예를 들어final_layout속성이Layout({ qr[0]: 2, qr[1]: 3, qr[2]: 0, qr[3]: 1, })를 입력하면
routing_permutation()가 반환됩니다:[2, 3, 0, 1] -
에 새로운 메서드를 추가했습니다
TranspileLayout,initial_virtual_layout()에 새로운 메서드를 추가했는데, 이는TranspileLayout.initial_layout속성과 동일하지만 회로에 추가된 앤실라 큐비트를 필터링할 수 있는 옵션을 제공합니다. 기본적으로TranspileLayout.initial_layout에는 일반적으로 트랜스파일러가 추가한 모든 부수어가 포함됩니다. -
새로운 메서드가 추가되었습니다,
final_index_layout()와final_virtual_layout()메서드를TranspileLayout클래스에 이러한 메서드는 최종 레이아웃(입력 회로 큐비트를 출력의 최종 위치에 매핑하는 것)을 반환하는 데 사용됩니다. 이것은 라우팅으로 인한 순열인final_layout속성과는 구별되며, 라우팅으로 인한 순열인Layout객체로 라우팅할 때 발생하는 순열입니다. 메서드는final_index_layout()메서드는 입력 회로의 각 큐비트에 대한 출력 위치를 트랜스파일러에 표시하는 리스트를 반환합니다. 예를 들어, 오리지널 회로를 사용합니다:qc = QuantumCircuit(3) qc.h(0) qc.cx(0, 1) qc.cx(0, 2)를 입력했고 트랜스파일러의 출력은 다음과 같았습니다:
tqc = QuantumCircuit(3) tqc.h(2) tqc.cx(2, 1) tqc.swap(0, 1) tqc.cx(2, 1)의 출력은
final_index_layout()의 출력은 목록을 반환합니다:[2, 0, 1]는
final_virtual_layout()는 이것을Layout객체로 반환하므로 위 예제에서 반환되는 값은 다음과 같습니다:Layout({ qc.qubits[0]: 2, qc.qubits[1]: 0, qc.qubits[2]: 1, })
시각화 기능
-
에서 조건을 표현식으로 표시하는 기능이 추가되었습니다
Expr의QuantumCircuit.draw()메서드 및circuit_drawer()함수가 있는 회로를 시각화할 때ControlFlowOp인스트럭션이 있는 회로를 시각화할 때 -
matplotlib회로 서랍에 IBM Quantum Platform 색 구성표를 기반으로 하는"iqp"및"iqp-dark"색상 스타일을 추가했습니다. -
TextDrawer에서 빌드된 작업은ControlFlowOp를 포함하여if,else,while,for,switch/case에서 직접 인스턴스화되거나 메서드를 사용하여 빌드된 작업은 이제QuantumCircuit에 정의된 회로를 ControlFlowOps 에 괄호로 묶어 완전히 표시합니다. -
펄스 타임라인 드로어에 대한 사용자 정의 스타일시트를 정의할 때
qiskit.visualization.timeline_drawer()로 설정된 개체 속성accepts_program이True으로 설정된 "생성기" 함수는 전체 스케줄이 포함된 추가 키워드 인수program를 받게 됩니다QuantumCircuit을 포함하는 추가 키워드 인수를 받습니다. -
의 시각화는
plot_gate_map(),plot_coupling_map().plot_error_map(), 및plot_circuit_layout()함수는 많은 수의 큐비트가 있는 백엔드의 레이아웃을 렌더링하기 위해 크게 개선되었습니다. 이는 러스트워크엑스의graphviz_draw()함수를 통해 그래프 시각화를 활용하여 많은 수의 큐비트에 맞게 확장되는 보다 정교한 알고리즘 그래프 레이아웃을 수행함으로써 달성할 수 있었습니다.
기타 기능
-
의 부호 표현에 대한 지원이 추가되었습니다
ParameterExpression. 구체적인 값을 할당하고numpy.sign또는 다른 라이브러리 함수를 사용하는 대신 사용자는ParameterExpression클래스의 인스턴스를 사용하여 부호를 계산할 수 있으며 표현식이 완전히 할당되기 전에 부호로 작업할 수 있습니다.다음과 같이 사용할 수 있습니다.
from qiskit.circuit import Parameter b = Parameter("phi") sign_value = b.sign() print("sign of an unassigned Parameter is: ", sign_value) print("Sign of a Parameter assigned to -3 is: ", sign_value.assign(b,-3))자세한 내용은 #10360을 참조하세요.
-
Parameter는 이제 생성자에 고급 사용 키워드 인수uuid를 사용하여Parameter를 같은 이름의 다른 것과 동일하게 만드는 데 사용할 수 있습니다. 이는 일반적으로 사용자가 사용해서는 안 되며 사용자 지정 직렬화 및 역직렬화에 가장 유용합니다.
회로 업그레이드 노트
-
의
ControlledGate.definition메서드에서 출력되는Gate.control()메서드의 출력은 이전 릴리스와 다를 수 있습니다. 메서드의 내부 생성은Gate.control()메서드의 내부 생성은 이제 더 이상 사용되지 않는Unroller트랜스파일러 패스를 사용하여 정의를 생성하므로 잠재적으로 다른 정의가 생성될 수 있습니다. 출력ControlledGate객체의 정의는 이전에 생성된 것과 동일한 단일 정의가 됩니다. 그러나 호출에서 정확한 정의가 필요한 경우Gate.control()호출에서 정확한 정의가 필요한 경우 이전 릴리스를 사용하여 회로를 저장하고qpy.dump()로 저장한 다음 최신 릴리스로 로드하면 됩니다. -
클래스의
num_ancilla_qubits속성이PolynomialPauliRotations는 키스킷 0.23.0 에서 더 이상 사용되지 않으므로 제거되었습니다. 대신 속성PolynomialPauliRotations.num_ancillas. -
다음은 표준 라이브러리 게이트입니다:
를 더 이상 설정할 수 없습니다
label,condition,duration또는unit(및ctrl_stateforControlledGate서브클래스의 경우) 더 이상 객체를 인스턴스화하지 않습니다. 여전히 설정할 수 있습니다condition를 사용하여c_if(). 를 사용하여to_mutable()를 사용하여 명령어의 변경 가능한 복사본을 가져온 다음 원본 객체 대신 해당 복사본에 설정자를 사용할 수 있습니다.label,duration와unit를 이러한 게이트에 키워드 인자로 지정할 수 있으며, 생성 시 변경 가능한 인스턴스가 자동으로 반환됩니다. 이러한 클래스를 다음과 같이 변환하기 위해 이 변경이 필요했습니다SingletonGate및SingletonControlledGate유형으로 변환하는 과정에서 필요했기 때문에 이러한 게이트의 반복 인스턴스의 메모리 풋프린트를 크게 줄였습니다. -
와 상호 작용하는 모든 것에 대해
Gate,Operation또는Instruction객체와 상호 작용하거나QuantumCircuit또는DAGCircuit클래스의 일부로 작동하는 경우 인스턴스에 대한 공유 참조를 사용하는 것이 훨씬 더 일반적이라는 점에 유의하는 것이 중요합니다. 이전에는 회로 작업의 인스턴스를 재사용하고 공유할 수 있었지만, 일반적으로 사용되지는 않았고 복사하면 고유한 인스턴스가 생성되었습니다. 이번 릴리스부터 다음과 같은 이유로 변경되었습니다SingletonInstruction및SingletonGate를 사용할 수 있게 되었기 때문입니다(그리고 이제 이를 기반으로 구축된 수많은 표준 라이브러리 게이트가 있습니다). 이러한 객체를 사용할 때 모든 회로 작업에 대해 고유한 인스턴스를 가정하는 경우, 이제 동일한 유형의 작업 간에 공유 상태가 재사용되므로(복사 및 심층 복사를 통해 유지됨) 잠재적인 문제가 될 수 있습니다. 속성을 사용하여Instruction.mutable속성을 사용하여 객체의 변경 가능성을 확인하거나Instruction.to_mutable()를 사용하여 변경 가능한 인스트럭션의 복사본을 얻을 수 있습니다. -
More
Instruction인스턴스(싱글톤을 반환하는 인스턴스)는 더 이상 엄격하게 만족하지 않습니다(예를 들어):type(XGate()) is XGate그러나 반환된 객체는 여전히 표준 서브클래스가 되므로
isinstance()(올바른 타입 검사 방법)은 계속 올바르게 작동합니다. 이미 여러 명령어에 이 프로퍼티가 있습니다(예MCXGate), 하지만 이제는 더 많은 표준 게이트가 이 작업을 수행하므로 더 일반적입니다.어떤 이유로 "베이스" 유형의 게이트가 필요하여 인스턴스화할 수 없는 합성 싱글톤 서브클래스를 생략하려면
Instruction.base_class. -
의 정의는
UnitaryGate의 정의는 이제 단일 큐비트 단위의 경우UGate레거시U3Gate클래스로 정의됩니다.
공급자 업그레이드 안내
-
파이썬 기반 시뮬레이터에 포함된
QasmSimulatorPy에 포함된 파이썬 기반 시뮬레이터qiskit.providers.basicaer에 포함된 파이썬 기반 시뮬레이터는 이제'h'(HGate),'p'(PhaseGate),'u'(UGate)를 기본 게이트 세트에 포함합니다. -
메서드에서
channel인자PulseBackendConfiguration.control()인수가 제거됩니다. 2021년 12월에 릴리스된 키스킷 0.33 (테라 0.19 )에서 더 이상 사용되지 않습니다. 대신qubits인수를 사용합니다. -
의
qobj[Qobj]인수를QasmSimulatorPy.run()를run_input[QuantumCircuit or list]다음은 코드를 마이그레이션하는 예제입니다:
# Importing necessary Qiskit libraries from qiskit import transpile, QuantumCircuit from qiskit.aer import QasmSimulator # Defining the Quantum Circuit qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() # Transpile the circuit to optimize for the target simulator simulator = QasmSimulator() transpiled_circuit = transpile(qc, simulator) # Run the simulation job = simulator.run(transpiled_circuit, shots=1024) # Get the simulation result result = job.result()이러한 기능은 모두 0.22 (2022년 10월 13일 출시) 이후 사용되지 않으며 현재 제거되었습니다.
펄스 업그레이드 노트
-
qiskit.scheduler.utils.format_meas_map(),qiskit.scheduler.utils.measure(),qiskit.scheduler.utils.measure_all()기능은 각각qiskit.pulse.utils.format_meas_map(),qiskit.pulse.macros.measure(),qiskit.pulse.macros.measure_all()로 이전되었습니다. 이전 위치는 키스킷 0.20.0 (Terra 0.15.0, 2020-08-10에 릴리스됨)에서 더 이상 지원되지 않으며 더 이상 사용되지 않습니다. -
클래스의
to_dict메서드pulse.transforms.AlignmentKind,pulse.transforms.AlignEquispaced및pulse.transforms.AlignFunc가 제거됩니다. 2022년 6월에 릴리스된 키스킷 0.37 (테라 0.21 )에서 더 이상 사용되지 않습니다.
QPY 업그레이드 노트
- 함수의 첫 번째 위치 인자에
circuits키워드 사용qiskit.qpy.dump()은 2022년 6월에 릴리스된 키스킷 0.37 (테라 0.21 )에서 더 이상 사용되지 않으므로 제거되었습니다. 대신programs키워드를 대신 사용하거나 인수를 위치적으로 전달하면 동일하게 작동합니다.
양자 정보 업그레이드 노트
-
메서드
qiskit.quantum_info.pauli_basis()는 더 이상pauli_list인수를 허용하지 않습니다. 이 기능은 2022년 10월에 릴리스된 키스킷 0.39 (테라 0.22 )에서 더 이상 사용되지 않습니다. -
qiskit.quantum_info.random모듈의random_stabilizer_table함수가 제거되었습니다. 이 기능은 2022년 10월에 릴리스된 키스킷 0.39 (테라 0.22 )에서 더 이상 사용되지 않습니다. 대신qiskit.quantum_info.random.random_pauli_list()을 사용하세요. -
qiskit.quantum_info.PauliTable및qiskit.quantum_info.StabilizerTable클래스가 제거되었습니다.random_pauli_table()기능도 제거됩니다. 2023년 5월에 릴리스된 키스킷 0.43 (테라 0.24 )에서 더 이상 사용되지 않습니다. 대신PauliList와random_pauli_list(). -
에 대한 이니셜라이저에 대한
z및x인자Pauli인수는 키스킷 테라 0.17 (2021년 4월에 출시)에서 더 이상 사용되지 않으므로 제거되었습니다. 대신x및z한 쌍을 단일 튜플로 전달해야 합니다(Pauli((z, x))). -
초기화자에 대한
label인수가Pauli인수는 키스킷 테라 0.17 (2021년 4월에 출시)에서 더 이상 사용되지 않으므로 제거되었습니다. 대신Pauli("XYZ")와 같이 레이블을 위치에 전달합니다. -
qiskit.quantum_info.operators.pauli에서 가져오기는 키스킷 테라 0.21 (2022년 6월에 출시)에서 더 이상 사용되지 않으므로 더 이상 허용되지 않습니다. 대신qiskit.quantum_info에서 직접 가져옵니다.
합성 업그레이드 노트
- 생성자의
order매개변수는synthesis.SuzukiTrotter생성자의 매개변수가 홀수로 설정되면 사용 중단 경고 대신 예외를 발생시킵니다. 스즈키 제품 공식은 대칭형이므로 짝수 주문에 대해서만 정의됩니다.
트랜스파일러 업그레이드 노트
-
패스 관리자의 리팩토링 노력의 결과로 기존 흐름 컨트롤러:
FlowControllerLinear,ConditionalController와DoWhileController는 이제BaseController. 이러한 컨트롤러는 다음과 같이__iter__()메서드의 구현을 삭제했습니다. 이제 각 내부 작업이 실행된 후 컴파일 상태를 스레딩하는 흐름 컨트롤러 실행의 컨텍스트에서만 이터러블합니다. -
RunningPassManager클래스는 기능적으로 새로운 패스 관리자 프레임워크(BasePassManager및BaseController). 실행 중인 패스 관리자는 이제 상태 비저장 흐름 컨트롤러(본질적으로FlowControllerLinear)로, 패스 관리자는 태스크 파이프라인의 구성을 담당하고 컨트롤러는 연결된 태스크의 실행을 담당합니다.RunningPassManager서브클래싱은 더 이상 권장되지 않으며, 이 클래스는 향후 릴리스에서 플로우 컨트롤러로 완전히 대체될 예정입니다. -
새로운 클래스
WorkflowStatus라는 새로운 클래스가 도입되어 패스 관리자 워크플로우의 상태를 추적할 수 있습니다. 이 휴대용 개체는 패스 관리자가 실행될 때 생성되어 기본 작업으로 전달됩니다. 이러한 상태는 이전에는RunningPassManager에서 인스턴스 변수를 사용하여 관리했습니다. -
트랜스파일러 전용
transpiler.PassManager( 에 사용된transpile())은 이제passmanager.BasePassManager. 그러나 이 클래스 계층 구조 변경으로 인해 공개용 API에 획기적인 변화가 생기지는 않습니다. -
이제 패스 관리자 실행 중에 발생하는 예외는 새로 도입된
PassManagerError. 패스 관리자 기계의 일반적인 실패는 일반 패스 관리자에게는PassManagerError를 발생시키지만, 트랜스파일러 전용transpile.PassManager은 현재 이전 버전과의 호환성을 위해 이를 특정TranspilerError로 래핑하여 이전 버전과의 호환성을 유지합니다. 이 래핑은 향후 제거될 예정입니다. -
패스 관리자 프레임워크에서
FencedObject사용이 제거되었습니다. 이 래퍼 클래스는 변경 가능한 객체 속성을 수정으로부터 보호할 수 없으며, 제대로 구현된 코드에서는 문제가 되지 않습니다. 분석 패스는 입력 IR을 수정해서는 안 되며, 컨트롤러는 프로퍼티 세트를 업데이트해서는 안 됩니다. 패스가 객체 속성을 수정하지 않도록 하는 것은 패스 관리자 개발자의 책임입니다, -
플러그인 이름
default은 플러그인 단계init,layout,optimization,scheduling를 위해 예약되어 있습니다. 이전에는 이 플러그인 이름을 예약하지 않았지만, 이제default이름은 이러한 단계에 대한 키스킷의 내장 기본 메서드를 나타내는 데 사용됩니다. 이 단계에서 플러그인에 이러한 이름을 사용했다면 키스킷의 사용법과 충돌하므로 플러그인 이름을 변경해야 합니다. -
사전 설정 패스 관리자에서
RemoveResetInZeroState클래스 사용을 비활성화합니다. 이전에는transpile()또는generate_preset_pass_manager()를 레벨 1, 2 또는 3에서optimization_level로 실행하면RemoveResetInZeroState. 그러나 이 패스는 재설정을 통해 명시적으로 0으로 설정하지 않는 한 임의의 초기 상태라는 개념을 금지했습니다. 컴파일 파이프라인의 일부로 패스를 실행해야 하는 경우 다음과 같이 실행할 수 있습니다:pm = generate_preset_pass_manager(1, backend) pm.init.append(RemoveResetInZeroState()) pm.run(circuit)를 사용하여 회로 컴파일을 위해 이 기능을 유지합니다.
-
더 이상 사용되지 않는 트랜스파일러 라우팅 패스(
BIPMapping)가 제거되었습니다. 이 기능은 키스킷 0.43.0 릴리스에서 더 이상 사용되지 않는 것으로 표시되었습니다. 외부 플러그인 패키지로 대체되었습니다:qiskit-bip-mapper. 이 새로운 패키지에 대한 자세한 내용은 패키지의 깃허브 리포지토리에서 확인할 수 있습니다:패스를 별도의 플러그인 패키지로 만든 이유는 두 가지입니다. 첫째, CPLEX에 대한 종속성으로 인해 사용하기가 더 어려워지고 둘째, 플러그인 패키지가 더 깔끔하게
transpile(). 이 패스를 지원하기 위한cplex및docplex설치를 위한 추가 옵션(bip-mapper)은 키스킷에서 더 이상 선택적으로 필요하지 않으므로 제거되었습니다. -
메서드에서
qubits인자InstructionDurations.get()는 더 이상Qubit(또는 그 목록)을 더 이상 허용하지 않습니다. 이 기능은 2021년 12월에 릴리스된 키스킷 0.33 (테라 0.19 )에서 더 이상 사용되지 않습니다. 대신 큐비트 인덱스에 정수를 사용하세요. -
에서
qubit_channel_mapping인자를 제거했다RZXCalibrationBuilder에서 더 이상 사용되지 않는 인수를 제거했습니다 0.39 (2022년 10월에 qiskit-terra 0.22 로 출시됨) -
In
transpiler.CouplingMap메서드subgraph는 0.20 에서 사용되지 않는 것으로 제거되었습니다.reduce()메서드 대신subgraph을 사용할 수 있습니다.
시각화 업그레이드 안내
-
의 첫 번째 위치 인수에
rho키워드 사용에 대한 지원을 제거했습니다plot_state_hinton(),plot_bloch_multivector(),plot_state_city(),plot_state_paulivec()및plot_state_qsphere().rho대신state을 사용할 수 있습니다. 포함된 모든 기능이qiskit.pulse.macros및qiskit.pulse.utils로 이전되었으므로qiskit.scheduler.utils을 제거했습니다. 이 모든 기능은 0.15 (2020년 8월 6일 출시) 이후 더 이상 사용되지 않으며 현재 제거되었습니다. -
visualization.QCircuitImage에 대한 클래스 생성자 인수qregs,cregs,layout및global_phase는 0.20 에서 더 이상 사용되지 않으므로 제거되었습니다. -
시각화 기능:
plot_gate_map(),plot_coupling_map().plot_error_map()및plot_circuit_layout()는 이제 그래프 시각화 설치 여부에 따라 작동합니다. 이 변경은 더 많은 수의 큐비트를 사용하는 백엔드를 시각화하기 위해 필요했습니다. 이 추가 외부 요구 사항은 이전에 이러한 기능에 필요했던 기존의 선택적 종속성에 추가됩니다. 그래프 시각화 설치 방법에 대한 자세한 내용은 여기에서 확인할 수 있습니다: https://graphviz.org/download/
기타 업그레이드 주의사항
-
값에
QuasiDistribution값에는 부동 소수점 오류가 포함될 수 있습니다.QuasiDistribution.__repr__라운드는numpy.round()및 매개 변수ndigits를 사용하여 클래스 속성__ndigits__으로 조작할 수 있습니다. 기본값은15입니다. -
qiskit.qobj.Qobj클래스가 제거되었습니다. 2021년 12월에 릴리스된 키스킷 0.33 (테라 0.19 )에서 더 이상 사용되지 않습니다. 대신qiskit.qobj.QasmQobj또는qiskit.qobj.PulseQobj. -
데코레이터
qiskit.utils.deprecation.deprecate_function()는 키스킷 0.39.0 (2022년 10월에 출시, 키스킷-테라 0.22.0 ) 이후 더 이상 사용되지 않으며 현재 제거되었습니다. 대신qiskit.utils.deprecate_func()대신 사용하세요. -
함수
execute()함수는 더 이상qobj_id및qobj_header인수를 허용하지 않습니다. 2022년 6월에 릴리스된 키스킷 0.37 (테라 0.21 )에서 사용이 중단되었습니다. -
트랜스파일레이션 패스
qiskit.transpiler.passes.CXDirection가 제거되었습니다. 이 기능은 2022년 6월에 출시된 키스킷 0.37 (테라 0.21 )에서 더 이상 사용되지 않습니다. 대신 보다 일반적인GateDirection패스를 사용합니다. -
트랜스파일레이션 패스
qiskit.transpiler.passes.CheckCXDirection가 제거되었습니다. 이 기능은 2022년 6월에 출시된 키스킷 0.37 (테라 0.21 )에서 더 이상 사용되지 않습니다. 대신 보다 일반적인CheckGateDirection패스를 사용합니다. -
이제 소스에서 키스킷을 빌드하려면 언어 버전 1.64 과 호환되는 Rust 컴파일러가 필요합니다. 이는 이전 버전의 키스킷을 빌드할 때 지원되던 최소 Rust 버전( 1.61 )보다 높아졌습니다.
알고리즘 사용 중단
qiskit.utils.validation및qiskit.utils.algorithm_globals의 알고리즘 유틸리티는 이제 더 이상 사용되지 않으며 출시일로부터 3개월 이내에 제거될 예정입니다. 이러한 유틸리티는 레거시 및 프리미티브 기반 알고리즘 워크플로우를 지원하기 위해qiskit.algorithms모듈과 함께 도입되었습니다. 이제qiskit.algorithms이 더 이상 사용되지 않고 프리미티브 기반 알고리즘 코드베이스가 독립형 라이브러리로 마이그레이션되었으므로, 이러한 유틸리티는 더 이상 키스킷의 컨텍스트에서 사용되지 않습니다. 애플리케이션에서 허용하는 경우,qiskit_algorithms.utils에서algorithm_globals및validation에서 관련 유틸리티를 가져올 수 있는 qiskit_algorithms를 사용하도록 코드를 마이그레이션할 것을 권장합니다. 레거시 기능은 새 패키지로 마이그레이션되지 않았다는 점에 유의하세요.
회로 사용 중단
-
qargs또는cargs인수를None으로 전달하고DAGCircuit.apply_operation_back()또는apply_operation_front()는 더 이상 사용되지 않으며 키스킷 1.0 에서 제거될 예정입니다. 이것은 한동안 타이핑 문서에 명시적으로 위배되었지만 키스킷에서 조용히 받아들여졌습니다. 대신None대신()을 전달하면 됩니다. -
메서드
QuantumCircuit.bind_parameters()메서드는 이제 더 이상 사용되지 않으며 출시일로부터 3개월 이내에 코드베이스에서 제거될 예정입니다. 와 기능이 매우 중복되며QuantumCircuit.assign_parameters()와 기능이 매우 중복되며 완전히 대체할 수 있습니다. 대신QuantumCircuit.assign_parameters()대신 사용하세요. -
에서 중복된 게이트 메서드 사용 중지
QuantumCircuit. 적용된 규칙은 메서드 이름이 해당 게이트 이름을 반영한다는 것입니다CXGate는QuantumCircuit.cx()가 아닌QuantumCircuit.cnot(). 더 이상 사용되지 않습니다:QuantumCircuit.cnot()찬성QuantumCircuit.cx()QuantumCircuit.toffoli()찬성QuantumCircuit.ccx()QuantumCircuit.fredkin()찬성QuantumCircuit.cswap()QuantumCircuit.mct()찬성QuantumCircuit.mcx()QuantumCircuit.i()찬성QuantumCircuit.id()
참고
QuantumCircuit.i()는 위의 규칙에 대한 유일한 예외이지만, 이 규칙은QuantumCircuit.id()가 더 직관적으로 아이덴티티를 나타내고 더 많이 사용되기 때문에 다른 이름 대신 이 이름을 선택했습니다. -
키스킷의 게이트와 운영 구조를 간소화하기 위해, 키스킷은
qiskit.extensions모듈은 사용 중단 대기 중이며 향후 릴리스에서 사용 중단될 예정입니다. 다음 개체가 다음 위치로 이동되었습니다qiskit.circuit.libraryDiagonalGate,HamiltonianGate,Initialize,Isometry,MCGupDiag,UCGate,UCPauliRotGate,UCRXGate,UCRYGate,UCRZGate,UnitaryGate.
이 지침은 이번 릴리스에서 이미 더 이상 사용되지 않습니다,
SingleQubitUnitary대신library.UnitaryGate,Snapshot로 대체되었으며, 이는 키스킷 에어의 저장 지침으로 대체되었습니다,
회로 방법과 함께
또한 다음 회로 메서드는 사용 중단이 보류 중입니다
QuantumCircuit.diagonal(),QuantumCircuit.hamiltonian(),QuantumCircuit.isometry()및QuantumCircuit.iso(),QuantumCircuit.uc(),QuantumCircuit.ucrx(),QuantumCircuit.ucry(),QuantumCircuit.ucrz().
전체 모듈이 사용 중단 대기 중이므로
ExtensionError. -
거의 사용되지 않는
QuantumCircuit클래스 데이터 속성header및extension_lib는 더 이상 사용되지 않으며 제거될 예정입니다. 이들은 각각 OpenQASM 2.0 버전 헤더 문과qelib1.incinclude 문의 문자열을 보유합니다. 대안은 제공되지 않으며 대부분 내부 세부 사항입니다.
트랜스파일러 사용 중단 사항
-
플로우 컨트롤러 팩토리 메서드
FlowController.controller_factory()와 함께 더 이상 사용되지 않습니다FlowController.add_flow_controller()및FlowController.remove_flow_controller(). 앞으로는 메서드에 키워드 인수를 사용하여 작업을 구성하는BasePassManager.append()메서드를 사용한 작업 구성도 더 이상 사용되지 않습니다. 컨트롤러는 명시적으로 인스턴스화하여 패스 매니저에 추가해야 합니다. 예를 들어, 이전에 사용된 기존 구문은 다음과 같습니다pm.append([task1, task2], condition=lambda x: x["value1"] > 10)를
controller = ConditionalController([task1, task2], condition=lambda x: x["value1"] > 10) pm.append(controller)후자는 특히 여러 키워드 인수가 함께 지정될 때 컨트롤러의 순서를 보다 정밀하게 제어할 수 있으며, 파이프라인이 두 개 이상이거나 생성자에 하나의 단순 조건 함수를 사용하지 않는 일반적인 흐름 컨트롤러를 구성할 수 있습니다.
-
그리고
FlowControllerLinear.append(),DoWhileController.append()및ConditionalController.append()메서드는 모두 즉시 사용되지 않습니다. 패스 관리자 작업 파이프라인의 구성은 이제BasePassManager를 통해 이루어지며, 개별 흐름 컨트롤러는 이 방법을 사용할 필요가 없습니다. 플로우 컨트롤러의 경우 모든 패스를 생성자에 직접 한 번에 지정해야 합니다. -
일반 속성 및 변수 이름
passes은 전체 모듈에서tasks으로 대체됩니다qiskit.passmanager모듈로 대체됩니다. 작업은 pass와 컨트롤러의 결합을 나타내야 하며, 단수형 pass는 Python 키워드와 충돌한다는 점에 유의하세요. 이런 의미에서 작업을 사용하는 것이 훨씬 더 바람직합니다. -
트랜스파일러 패스는
Unroller트랜스파일러 패스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 는Unroller는 유사한 기능을 제공하지만 더 일반적인 방식으로 제공하는BasisTranslator로 대체되었으며, 이는 유사한 기능을 제공하지만 보다 일반적인 방식으로 제공하므로 회로를 모든 범용 기본 집합으로 변환할 수 있습니다. 클래스는Unroller클래스는 회로의 게이트 정의가 대상 기준으로 재귀적으로 정의되는 상황에서만 작동합니다; 키스킷의 표준 라이브러리 게이트의 경우 이는UGate와CXGate. 패스를 사용하는 경우Unroller형식의 사용자 지정 패스 관리자를 사용하여 대체할 수 있습니다:from qiskit.transpiler import PassManager from qiskit.transpiler.passes import UnrollCustomDefinitions, BasisTranslator from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel pm = PassManager( [ UnrollCustomDefinitions(sel, basis_gates=basis_gates), BasisTranslator(sel, target_basis=basis_gates), ] ) pm.run(circuit) -
translation_method키워드 인수에"unroller"값을 사용하는 것은transpile()및generate_preset_pass_manager()는 더 이상 사용되지 않습니다. 이 번역 단계 플러그인은"unroller"플러그인과 유사하게 작동하지만 더 광범위한 대상 백엔드를 지원하는 기본"translator"메서드로 대체되었으므로 향후 릴리스에서 키스킷에서 제거될 예정입니다.
시각화 기능의 사용 중단
-
기본
matplotlib서랍 설정은 이제 기본 스타일이"iqp"스타일(이전에는"iqx")로 변경되므로FutureWarning을 발행합니다. 이전 기본값은"clifford"스타일로 사용할 수 있습니다. 경고를 무음으로 설정하려면 원하는 스타일을 명시적으로 설정할 수 있습니다. g.:from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.x(0) circuit.h(0) circuit.cp(0.5, 0, 1) circuit.draw("mpl", style="clifford") # or style="iqp" -
예약된 노드 시작 시간 정보가 없는
qiskit.visualization.timeline_drawer()에 예약된 노드 시작 시간 정보가 없는 회로를 전달하는 것은 더 이상 사용되지 않습니다. 스케줄링 분석 패스 중 하나를 통과한 회로만(예를 들어ALAPScheduleAnalysis또는ASAPScheduleAnalysis)를 거친 회로만 시각화할 수 있습니다. 이전 스타일의 예약 패스 중 하나를 사용한 경우(예ALAPSchedule또는ASAPSchedule)을 사용했다면 실행하여 스케줄링 정보를 전파할 수 있습니다:from qiskit import transpile from qiskit.transpiler import InstructionDurations scheduled = transpile( my_old_style_circuit, optimization_level=0, scheduling_method="alap", instruction_durations=InstructionDurations(), )이 동작은 이전에 키스킷( 0.37 )에서 더 이상 사용되지 않을 예정이었으나 경고의 버그로 인해 지금까지 사용자에게 표시되지 않았습니다. 이 동작은 키스킷 1.0 에서 제거될 예정입니다.
버그 수정
-
행렬 곱셈 기반 정류성 검사에 고려할 최대 큐비트 수
CommutationChecker은 이제 기본적으로 3으로 제한됩니다. 수정 #10488 -
트랜스파일러 패스는
GateDirection트랜스파일러 패스는 이제 연속형에 의존하지 않고 불연속형 기준 번역을 사용합니다RYGate에 의존하지 않고 이산 기준 변환을 사용하므로 일부 이산 기준 설정 타깃의 안정성이 약간 더 높아질 것입니다. 일반적으로transpile()는 연속적으로 매개변수화된 연산을 포함하지 않는 기저 집합을 부분적으로만 지원하므로 이러한 상황에서 항상 성공하지 못할 수 있으며 최적의 결과를 생성하지 못할 가능성이 거의 높습니다. -
수정
CommutationAnalysis를 사용하여 와이어의 게이트를 세트로 그룹화하고 각 세트에는 쌍으로 통근하는 게이트만 포함하도록 수정했습니다. 이렇게 하면CommutationCancellation이 불건전한 최적화를 수행하지 못하게 됩니다. 8020 참조 -
CUGate로 호출하는 동안 올바르게 작동합니다QuantumCircuit.assign_parameters(). 이전에는 초기 회로 할당 후 시간이 지나면 여러 가지 이상한 오류가 발생하곤 했습니다. 7326, #7410, #9627, #10002 및 #10131을 참조하세요. -
제어 흐름 빌더 인터페이스( 컨텍스트 관리자 형식의
QuantumCircuit.if_test(),while_loop(),for_loop()및switch())는 이제 해당 블록 내에서 별도의 전역 단계 진행을 올바르게 추적합니다. 다음을 할당하여 내부 블록에 전역 단계 발전을 추가할 수 있습니다QuantumCircuit.global_phase에 할당하면 됩니다:from math import pi from qiskit import QuantumCircuit qc = QuantumCircuit(3, 3) qc.global_phase = pi / 2 # Set the outer circuit's global phase. with qc.if_test((qc.clbits[0], False)) as else_: # The global phase advancement in a control-flow block begins at 0, # because it represents how much the phase will be advanced by an # execution of the block. The defined phase of the outer scope is not # affected by this set. qc.global_phase = pi with else_: # Similarly, the `else` block may induce a different global-phase # advancement to the `if`, so it can also be set separately. qc.global_phase = 1.5 * pi # The phase advancement caused directly by the outer scope is independent # of the phase advancement conditionally caused by each control-flow path. assert qc.global_phase == pi / 2의 의미는
QuantumCircuit.global_phase의 의미는 블록의 단일 실행에 내재된 글로벌 단계의 진전으로 간주됩니다. 블록이 입력되면 전체 프로그램의 모든 큐비트의 위상이 진전된다는 점에서 여전히 글로벌 위상 진전입니다. -
"iqx"및"iqx-dark"matplotlib 색 구성표의 색상을 수정했습니다RZGate,RZZGate, (다중)제어PhaseGate와iSwapGate를 잘못된 색으로 그렸습니다. -
의 해시는
Parameter의 해시는 이제 비교 대상인ParameterExpression의 해시와 같습니다. 이전에는 해시가 달라서 다음과 같은 경우 해시맵에 잘못된 추가 항목이 발생했습니다Parameter와ParameterExpression값이 같은 맵에 혼합되어 Python 의 데이터 모델을 위반하는 경우가 있었습니다. -
QPY 직렬화의 버그(
qiskit.qpy)에서 회로의 제어된 단일 게이트가 역직렬화되지 않을 수 있는 버그가 수정되었습니다. 수정 #10802. -
의 구현을 수정하여
random_statevector()의 구현을 수정하여 균일한 분포에서 샘플링하도록 했습니다. -
패스
NoiseAdaptiveLayout는 이제CouplingMap를 선택적 인수로 받습니다. 이것은 플러그인에서 다음과 같은 불일치를 제어하는 데 사용됩니다configuration()와properties()의 경우처럼FakeMelbourne. 수정 #7677. -
메소드
QuantumCircuit.copy()와copy_empty_like()는 이제name인수를 잘못 입력하면 잘못된 회로를 생성하는 대신 오류를 발생시킵니다. -
"decay"휴리스틱의SabreSwap와SabreLayout는 이제 가상 큐비트에서 스왑의 '깊이'를 잘못 추적하는 대신 물리적 큐비트에서 깊이를 올바르게 추적합니다. -
의 간과된 부분을 수정했습니다
ECRGate에서 객체 생성 시ECRGate.label어트리뷰트를 설정하지 못하게 하는 문제를 수정했습니다. 다른 모든Gate클래스 및 서브클래스는 생성자에서label키워드 인수를 설정할 수 있습니다. -
(및 표준 라이브러리 서브 클래스) 생성자에서 간과된 부분을 수정했습니다
Gate(및 표준 라이브러리 서브 클래스) 생성자의 간과를 수정했습니다duration및unit어트리뷰트를 생성 중에 키워드 인수로 설정할 수 없던 문제를 수정했습니다. 부모 클래스Instruction는 이 설정을 지원하지만Gate는 이전에는 이 인터페이스를 올바르게 노출하지 않았습니다. -
정적 메서드에 빈 이터러블을 전달하는
SparsePauliOp기본 초기화를 허용하는 지원이 추가되었습니다from_list()와from_sparse_list(). 수정 #10159. -
에 (더 이상 사용되지 않는)
Optimizer클래스를 사용하는 것은AQC에는 더 이상 사용되지 않는 대체 경로가 없었으며, 이는 키스킷 0.44 에 도입되었어야 했습니다. 이제 더 이상 사용되지 않는 경고에 명시된 대로Minimizer프로토콜을 구현하는 호출러블을 허용합니다(사용 중단 경고에 명시된 대로). 콜러블은 다음 예시와 같이 보일 수 있습니다:from scipy.optimize import minimize from qiskit.transpiler.synthesis.aqc.aqc import AQC optimizer = partial(minimize, args=(), method="L-BFGS-B", options={"maxiter": 200}) aqc = AQC(optimizer=optimizer) -
클래스 관련 문제를 수정했습니다
Barrier클래스 관련 문제를 수정했습니다. 인스턴스를 추가할 때Barrier인스턴스를 추가할 때QuantumCircuit에 인스턴스를 추가할 때QuantumCircuit.append()메서드에 인스턴스를 추가할 때 이전에는 배리어의 크기가 지정된 qargs와 일치하는지 검증할 수 없었습니다. -
이제
BlockCollapser트랜스파일러 패스는 동일한 클래식 레지스터에 두 개 이상의 조건이 포함된 회로를 올바르게 처리합니다. -
BlueprintCircuit서브클래스는 이제 빌드되지 않은 상태의 블루프린트와 함께 반공개 메서드QuantumCircuit._append()를 사용할 때 올바르게 동작합니다(즉 , 추가를 시도하기 전에 회로가 빌드됩니다). -
확대/축소, 글꼴 크기 및 여백을 조정하여
plot_state_city()을 조정하여 더 많은 그림 크기에 맞게 플롯을 더 잘 맞출 수 있습니다. 막대와 영진폭 평면의 Z 정렬 동작을 수정하고 음수 실수값 막대의 표시를 수정했습니다.
기타 참고사항
-
이 버전의 키스킷은 아직 출시되지 않은 Numpy 2.x 시리즈에 대해 아직 컴파일되지 않은 확장자를 포함하고 있기 때문에 명시적으로 Numpy 1.x 시리즈에 고정되어 있습니다. 가능한 한 빠른 시일 내에 Numpy 2.x 를 지원하는 새로운 버전의 키스킷을 출시할 예정입니다.
호환되는 버전이 출시되기 전에 Numpy 2와 함께 키스킷을 강제로 설치하려고 하면 패키지 관리자가 이전 버전의 키스킷(핀이 같지는 않지만 여전히 호환되지 않을 가능성이 있는)으로 리셋하는 것을 막을 수 없습니다.
-
의 동작을 수정했습니다
VF2Layout및VF2PostLayout트랜스파일러 패스의 동작을 수정했는데, 이전에는 입력 회로가 충분히 큰 경우 멀티스레딩을 사용하여 내부 스코어링을 실행했습니다. 멀티스레딩 사용은 원래 의도한 대로 성능이 개선되지 않고 오히려 퇴보하는 것으로 나타났기 때문에 이제 패스에서 제거되었습니다.