키스킷 0.44 릴리즈 노트
버전 히스토리
qiskit 은 여러 가지 '요소'를 포함하는 '메타 패키지'로서 최종 릴리스입니다. 이번(및 이전) 릴리스 노트에서 "키스킷 테라"라고 불린 것은 주로 현재 "키스킷"이라고 불리고 있습니다.
이 표는 메타 패키지 버전과 설치된 각 레거시 키스킷 요소의 버전을 추적합니다:
키스킷 메타패키지 버전 | 키스킷-테라 | 키스킷-에어 | 키스킷-이그니스 | 키스킷-IBMQ-프로바이더 | 키스킷-아쿠아 | 릴리스 날짜 |
|---|---|---|---|---|---|---|
| 0.44.1 | 0.25.1 | 2023-08-17 | ||||
| 0.44.0 | 0.25.0 | 2023-07-27 | ||||
| 0.43.3 | 0.24.2 | 0.12.2 | 0.20.2 | 2023-07-19 | ||
| 0.43.2 | 0.24.1 | 0.12.1 | 0.20.2 | 2023-06-28 | ||
| 0.43.1 | 0.24.1 | 0.12.0 | 0.20.2 | 2023-06-02 | ||
| 0.43.0 | 0.24.0 | 0.12.0 | 0.20.2 | 2023-05-04 | ||
| 0.42.1 | 0.23.3 | 0.12.0 | 0.20.2 | 2023-03-21 | ||
| 0.42.0 | 0.23.2 | 0.12.0 | 0.20.2 | 2023-03-10 | ||
| 0.41.1 | 0.23.2 | 0.11.2 | 0.20.1 | 2023-02-23 | ||
| 0.41.0 | 0.23.1 | 0.11.2 | 0.20.0 | 2023-01-31 | ||
| 0.40.0 | 0.23.0 | 0.11.2 | 0.19.2 | 2023-01-26 | ||
| 0.39.5 | 0.22.4 | 0.11.2 | 0.19.2 | 2023-01-17 | ||
| 0.39.4 | 0.22.3 | 0.11.2 | 0.19.2 | 2022-12-08 | ||
| 0.39.3 | 0.22.3 | 0.11.1 | 0.19.2 | 2022-11-25 | ||
| 0.39.2 | 0.22.2 | 0.11.1 | 0.19.2 | 2022-11-03 | ||
| 0.39.1 | 0.22.1 | 0.11.1 | 0.19.2 | 2022-11-02 | ||
| 0.39.0 | 0.22.0 | 0.11.0 | 0.19.2 | 2022-10-13 | ||
| 0.38.0 | 0.21.2 | 0.11.0 | 0.19.2 | 2022-09-14 | ||
| 0.37.2 | 0.21.2 | 0.10.4 | 0.19.2 | 2022-08-23 | ||
| 0.37.1 | 0.21.1 | 0.10.4 | 0.19.2 | 2022-07-28 | ||
| 0.37.0 | 0.21.0 | 0.10.4 | 0.19.2 | 2022-06-30 | ||
| 0.36.2 | 0.20.2 | 0.10.4 | 0.7.1 | 0.19.1 | 2022-05-18 | |
| 0.36.1 | 0.20.1 | 0.10.4 | 0.7.0 | 0.19.1 | 2022-04-21 | |
| 0.36.0 | 0.20.0 | 0.10.4 | 0.7.0 | 0.19.0 | 2022-04-06 | |
| 0.35.0 | 0.20.0 | 0.10.3 | 0.7.0 | 0.18.3 | 2022-03-31 | |
| 0.34.2 | 0.19.2 | 0.10.3 | 0.7.0 | 0.18.3 | 2022-02-09 | |
| 0.34.1 | 0.19.1 | 0.10.2 | 0.7.0 | 0.18.3 | 2022-01-05 | |
| 0.34.0 | 0.19.1 | 0.10.1 | 0.7.0 | 0.18.3 | 2021-12-20 | |
| 0.33.1 | 0.19.1 | 0.9.1 | 0.7.0 | 0.18.2 | 2021-12-10 | |
| 0.33.0 | 0.19.0 | 0.9.1 | 0.7.0 | 0.18.1 | 2021-12-06 | |
| 0.32.1 | 0.18.3 | 0.9.1 | 0.6.0 | 0.18.1 | 0.9.5 | 2021-11-22 |
| 0.32.0 | 0.18.3 | 0.9.1 | 0.6.0 | 0.18.0 | 0.9.5 | 2021-11-10 |
| 0.31.0 | 0.18.3 | 0.9.1 | 0.6.0 | 0.17.0 | 0.9.5 | 2021-10-12 |
| 0.30.1 | 0.18.3 | 0.9.0 | 0.6.0 | 0.16.0 | 0.9.5 | 2021-09-29 |
| 0.30.0 | 0.18.2 | 0.9.0 | 0.6.0 | 0.16.0 | 0.9.5 | 2021-09-16 |
| 0.29.1 | 0.18.2 | 0.8.2 | 0.6.0 | 0.16.0 | 0.9.5 | 2021년 9월 10일 |
| 0.29.0 | 0.18.1 | 0.8.2 | 0.6.0 | 0.16.0 | 0.9.4 | 2021-08-02 |
| 0.28.0 | 0.18.0 | 0.8.2 | 0.6.0 | 0.15.0 | 0.9.4 | 2021-07-13 |
| 0.27.0 | 0.17.4 | 0.8.2 | 0.6.0 | 0.14.0 | 0.9.2 | 2021-06-15 |
| 0.26.2 | 0.17.4 | 0.8.2 | 0.6.0 | 0.13.1 | 0.9.1 | 2021-05-19 |
| 0.26.1 | 0.17.4 | 0.8.2 | 0.6.0 | 0.13.1 | 0.9.1 | 2021-05-18 |
| 0.26.0 | 0.17.3 | 0.8.2 | 0.6.0 | 0.13.1 | 0.9.1 | 2021-05-11 |
| 0.25.4 | 0.17.2 | 0.8.2 | 0.6.0 | 0.12.3 | 0.9.1 | 2021-05-05 |
| 0.25.3 | 0.17.1 | 0.8.2 | 0.6.0 | 0.12.3 | 0.9.1 | 2021-04-29 |
| 0.25.2 | 0.17.1 | 0.8.1 | 0.6.0 | 0.12.3 | 0.9.1 | 2021-04-21 |
| 0.25.1 | 0.17.1 | 0.8.1 | 0.6.0 | 0.12.2 | 0.9.1 | 2021-04-15 |
| 0.25.0 | 0.17.0 | 0.8.0 | 0.6.0 | 0.12.2 | 0.9.0 | 2021-04-02 |
| 0.24.1 | 0.16.4 | 0.7.6 | 0.5.2 | 0.12.2 | 0.8.2 | 2021-03-24 |
| 0.24.0 | 0.16.4 | 0.7.6 | 0.5.2 | 0.12.1 | 0.8.2 | 2021-03-04 |
| 0.23.6 | 0.16.4 | 0.7.5 | 0.5.2 | 0.11.1 | 0.8.2 | 2021-02-18 |
| 0.23.5 | 0.16.4 | 0.7.4 | 0.5.2 | 0.11.1 | 0.8.2 | 2021-02-08 |
| 0.23.4 | 0.16.3 | 0.7.3 | 0.5.1 | 0.11.1 | 0.8.1 | 2021-01-28 |
| 0.23.3 | 0.16.2 | 0.7.3 | 0.5.1 | 0.11.1 | 0.8.1 | 2021-01-26 |
| 0.23.2 | 0.16.1 | 0.7.2 | 0.5.1 | 0.11.1 | 0.8.1 | 2020-12-15 |
| 0.23.1 | 0.16.1 | 0.7.1 | 0.5.1 | 0.11.1 | 0.8.1 | 2020-11-12 |
| 0.23.0 | 0.16.0 | 0.7.0 | 0.5.0 | 0.11.0 | 0.8.0 | 2020-10-16 |
| 0.22.0 | 0.15.2 | 0.6.1 | 0.4.0 | 0.10.0 | 0.7.5 | 2020-10-05 |
| 0.21.0 | 0.15.2 | 0.6.1 | 0.4.0 | 0.9.0 | 0.7.5 | 2020-09-16 |
| 0.20.1 | 0.15.2 | 0.6.1 | 0.4.0 | 0.8.0 | 0.7.5 | 2020-09-08 |
| 0.20.0 | 0.15.1 | 0.6.1 | 0.4.0 | 0.8.0 | 0.7.5 | 2020-08-10 |
| 0.19.6 | 0.14.2 | 0.5.2 | 0.3.3 | 0.7.2 | 0.7.3 | 2020-06-25 |
| 0.19.5 | 0.14.2 | 0.5.2 | 0.3.2 | 0.7.2 | 0.7.3 | 2020-06-19 |
| 0.19.4 | 0.14.2 | 0.5.2 | 0.3.0 | 0.7.2 | 0.7.2 | 2020-06-16 |
| 0.19.3 | 0.14.1 | 0.5.2 | 0.3.0 | 0.7.2 | 0.7.1 | 2020-06-02 |
| 0.19.2 | 0.14.1 | 0.5.1 | 0.3.0 | 0.7.1 | 0.7.1 | 2020-05-14 |
| 0.19.1 | 0.14.1 | 0.5.1 | 0.3.0 | 0.7.0 | 0.7.0 | 2020-05-01 |
| 0.19.0 | 0.14.0 | 0.5.1 | 0.3.0 | 0.7.0 | 0.7.0 | 2020-04-30 |
| 0.18.3 | 0.13.0 | 0.5.1 | 0.3.0 | 0.6.1 | 0.6.6 | 2020-04-24 |
| 0.18.2 | 0.13.0 | 0.5.0 | 0.3.0 | 0.6.1 | 0.6.6 | 2020-04-23 |
| 0.18.1 | 0.13.0 | 0.5.0 | 0.3.0 | 0.6.0 | 0.6.6 | 2020-04-20 |
| 0.18.0 | 0.13.0 | 0.5.0 | 0.3.0 | 0.6.0 | 0.6.5 | 2020-04-09 |
| 0.17.0 | 0.12.0 | 0.4.1 | 0.2.0 | 0.6.0 | 0.6.5 | 2020-04-01 |
| 0.16.2 | 0.12.0 | 0.4.1 | 0.2.0 | 0.5.0 | 0.6.5 | 2020-03-20 |
| 0.16.1 | 0.12.0 | 0.4.1 | 0.2.0 | 0.5.0 | 0.6.4 | 2020-03-05 |
| 0.16.0 | 0.12.0 | 0.4.0 | 0.2.0 | 0.5.0 | 0.6.4 | 2020-02-27 |
| 0.15.0 | 0.12.0 | 0.4.0 | 0.2.0 | 0.4.6 | 0.6.4 | 2020-02-06 |
| 0.14.1 | 0.11.1 | 0.3.4 | 0.2.0 | 0.4.5 | 0.6.2 | 2020-01-07 |
| 0.14.0 | 0.11.0 | 0.3.4 | 0.2.0 | 0.4.4 | 0.6.1 | 2019-12-10 |
| 0.13.0 | 0.10.0 | 0.3.2 | 0.2.0 | 0.3.3 | 0.6.1 | 2019-10-17 |
| 0.12.2 | 0.9.1 | 0.3.0 | 0.2.0 | 0.3.3 | 0.6.0 | 2019-10-11 |
| 0.12.1 | 0.9.0 | 0.3.0 | 0.2.0 | 0.3.3 | 0.6.0 | 2019-09-30 |
| 0.12.0 | 0.9.0 | 0.3.0 | 0.2.0 | 0.3.2 | 0.6.0 | 2019-08-22 |
| 0.11.2 | 0.8.2 | 0.2.3 | 0.1.1 | 0.3.2 | 0.5.5 | 2019-08-20 |
| 0.11.1 | 0.8.2 | 0.2.3 | 0.1.1 | 0.3.1 | 0.5.3 | 2019-07-24 |
| 0.11.0 | 0.8.2 | 0.2.3 | 0.1.1 | 0.3.0 | 0.5.2 | 2019-07-15 |
| 0.10.5 | 0.8.2 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.2 | 2019-06-27 |
| 0.10.4 | 0.8.2 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.1 | 2019-06-17 |
| 0.10.3 | 0.8.1 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.1 | 2019-05-29 |
| 0.10.2 | 0.8.0 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.1 | 2019-05-24 |
| 0.10.1 | 0.8.0 | 0.2.0 | 0.1.1 | 0.2.2 | 0.5.0 | 2019-05-07 |
| 0.10.0 | 0.8.0 | 0.2.0 | 0.1.1 | 0.2.1 | 0.5.0 | 2019-05-06 |
| 0.9.0 | 0.8.0 | 0.2.0 | 0.1.1 | 0.1.1 | 0.5.0 | 2019-05-02 |
| 0.8.1 | 0.7.2 | 0.1.1 | 0.1.0 | 2019-05-01 | ||
| 0.8.0 | 0.7.1 | 0.1.1 | 0.1.0 | 2019-03-05 | ||
| 0.7.3 | >=0.7,<0.8 | >=0.1,<0.2 | 2019-02-19 | |||
| 0.7.2 | >=0.7,<0.8 | >=0.1,<0.2 | 2019-01-22 | |||
| 0.7.1 | >=0.7,<0.8 | >=0.1,<0.2 | 2019-01-17 | |||
| 0.7.0 | >=0.7,<0.8 | >=0.1,<0.2 | 2018-12-14 |
0.7.0, 0.7.1, 0.7.2 메타 패키지 릴리스의 경우 메타 패키지 버전 관리 전략이 아직 공식화되지 않았습니다.
0.44.1
테라 0.25.1
Prelude
키스킷 테라 0.25.1 는 버그 수정 릴리스로, 0.25.1 릴리스 이후 확인된 몇 가지 문제를 해결합니다.
버그 수정
-
QPY 직렬화의 버그(
qiskit.qpy)에서 한 회로에 여러 개의 제어된 커스텀 게이트가 존재할 경우 구문 분석할 수 없는 잘못된 QPY 파일이 생성될 수 있는 버그를 수정했습니다. 수정 #9746. -
트위들덤이 반환하는 순서대로 비등록 합성에 레이블을 지정하여 #9363을 수정했습니다. 예를 들어 이 예시를 수정 전과 후를 비교해 보세요:
from qiskit.circuit import QuantumCircuit from qiskit.circuit.classicalfunction import BooleanExpression boolean_exp = BooleanExpression.from_dimacs_file("simple_v3_c2.cnf") circuit = QuantumCircuit(boolean_exp.num_qubits) circuit.append(boolean_exp, range(boolean_exp.num_qubits)) circuit.draw("text") from qiskit.circuit.classicalfunction import classical_function from qiskit.circuit.classicalfunction.types import Int1 @classical_function def grover_oracle(a: Int1, b: Int1, c: Int1) -> Int1: return (a and b and not c) quantum_circuit = grover_oracle.synth(registerless=False) print(quantum_circuit.draw())어느 쪽이 인쇄될까요?
Before After c: ──■── a: ──■── │ │ b: ──■── b: ──■── │ │ a: ──o── c: ──o── ┌─┴─┐ ┌─┴─┐ return: ┤ X ├ return: ┤ X ├ └───┘ └───┘ -
이전에는 상태 계수를 , 여기서 은 큐비트 수로 감쇠시켰던
plot_state_paulivec()을 수정했습니다. 이제 막대 그래프에 계수가 로 올바르게 표시되며, 여기서 은 플롯할 상태이고 는 단일 큐비트 폴리스의 가능한 모든 텐서 곱을 반복합니다. -
이제 OpenQASM 2 내보내기(
QuantumCircuit.qasm())의 각도에는 항상 소수점이 포함됩니다(예:1.e-5의 경우). 이는 OpenQASM 2의 부동 소수점 리터럴 사양에 대한 엄격한 해석에 따라 요구됩니다. 키스킷의 OpenQASM 2 파서(qasm2.load()와loads())는 기본적으로 더 허용적이며strict모드가 아닌 한 소수점 없이1e-5을 허용합니다. -
의 세터는 이제
SparsePauliOp.paulis의 설정자는 이제 잘못된 모양의 데이터로 어트리뷰트를 설정하려는 시도를 자동으로 거부하는 대신 잘못된 객체가 생성되도록 허용하지 않습니다. 10384번을 참조하세요. -
의 성능 퇴보를 수정했습니다
SabreLayout및SabreSwap트랜스파일러 패스의 성능 저하를 수정했습니다. 수정 #10650
0.44.0
이번 릴리스는 공식적으로 키스킷 IBMQ 공급자 패키지에 대한 지원이 종료되고 키스킷 메타패키지에서 키스킷 에어가 제거됨을 의미합니다. 이번 릴리스 이후 메타패키지에는 키스킷 테라만 포함되므로, 이번 최종 릴리스에서는 키스킷 메타패키지와 키스킷 테라를 별개의 것으로 지칭할 것입니다. 다음 릴리스( 0.45.0 )부터 키스킷 패키지는 이전의 키스킷 테라와 동일하며, 더 이상 두 패키지가 분리되지 않습니다.
아직 qiskit-ibmq-provider 패키지를 사용 중이라면 이 패키지는 더 이상 지원되지 않으며 폐기되었습니다. 새로운 대체 패키지로 전환하는 방법은 해당 패키지의 README에 있는 마이그레이션 가이드 링크를 참조하세요 qiskit-ibm-provider, qiskit-ibm-runtime, qiskit-ibm-experiment:
https://github.com/Qiskit/qiskit-ibmq-provider#migration-guides
키스킷 에어 프로젝트는 여전히 진행 중이며 앞으로도 계속 유지될 예정이지만 qiskit 패키지에 더 이상 포함되지 않을 뿐입니다. qiskit-aer 을 계속 사용하려면 qiskit-aer 을 명시적으로 설치하고 qiskit_aer 에서 패키지를 가져와야 합니다.
이것은 키스킷 메타패키지의 최종 릴리스이므로 선택적 종속성을 설치하는 데 사용되는 다음 셋업툴 엑스트라는 다음 릴리스에서 더 이상 작동하지 않습니다 0.45.0:
naturemachine-learningfinanceoptimizationexperiments
추가 기능을 사용하여 패키지를 설치하는 경우 추가 기능 대신 패키지를 직접 사용하도록 마이그레이션해야 합니다. 예를 들어 이전에 pip install qiskit[experiments] 을 사용했다면 pip install qiskit qiskit-experiments 으로 전환하여 두 패키지를 모두 설치해야 합니다. 마찬가지로 all 추가( pip install "qiskit[all]" 를 통해 설치되는 것)는 더 이상 키스킷 0.45.0 에 이러한 패키지를 포함하지 않습니다.
테라 0.25.0
Prelude
키스킷 테라 0.25.0 릴리즈의 주요 내용은 다음과 같습니다:
-
이제 트랜스파일러를 통해 레벨 2와 3을 포함한 모든 최적화 레벨에서 제어 흐름 작업이 지원됩니다(예
transpile()또는generate_preset_pass_manager()키워드 인수를 2 또는 3으로 지정한optimization_level호출이 이제 지원됩니다.) -
필드
IfElseOp.condition,WhileLoopOp.condition및SwitchCaseOp.target필드는 이제 새로운 런타임 클래식 표현식 유형인expr.Expr. 이는 이러한 작업을 지원하는 백엔드에 대해 런타임에 평가되기 때문에ParameterExpression와는 다른데, 이러한 작업을 지원하는 백엔드에 대해 런타임에 평가되기 때문입니다.이 새로운 표현식은 기존의 2중 형식의 고전적인 조건을 제공하는 것보다 훨씬 더 강력한 힘을 가지고 있습니다. 예를 들어, 이제 서로 다른 두 클래식 레지스터 간의 동등 제약 조건이나 두 클래식 비트의 "또는" 논리를 표현할 수 있습니다. 이 두 가지 예는 다음과 같습니다:
from qiskit.circuit import QuantumCircuit, ClassicalRegister, QuantumRegister from qiskit.circuit.classical import expr qr = QuantumRegister(4) cr1 = ClassicalRegister(2) cr2 = ClassicalRegister(2) qc = QuantumCircuit(qr, cr1, cr2) qc.h(0) qc.cx(0, 1) qc.h(2) qc.cx(2, 3) qc.measure([0, 1, 2, 3], [0, 1, 2, 3]) # If the two registers are equal to each other. with qc.if_test(expr.equal(cr1, cr2)): qc.x(0) # While either of two bits are set. with qc.while_loop(expr.logic_or(cr1[0], cr1[1])): qc.reset(0) qc.reset(1) qc.measure([0, 1], cr1)더 많은 예제를 보려면
qiskit.circuit.classical.이 기능은 키스킷과 키스킷과 함께 작동하는 사용 가능한 양자 하드웨어 모두에 새로 추가된 기능입니다. 아직 기능이 개발 중이므로 예상치 못한 에지 케이스가 발생하여 해결에 시간이 필요한 부분이 있을 수 있습니다. 클래식 표현식 지원 또는 사용과 관련된 문제가 발생하면 키스킷 또는 하드웨어 공급업체에 문제를 제기해 주세요.
이번 초기 릴리스에서 키스킷은 작업을 추가했습니다:
bit_not()logic_not()bit_and()bit_or()bit_xor()logic_and()logic_or()equal()not_equal()less()less_equal()greater()greater_equal()
이들은 Python 정수 및 부울 리터럴 또는
ClassicalRegister및Clbit인스턴스.이러한 모든 고전적인 표현식은 키스킷 트랜스파일러 스택을 통해, QPY 직렬화(
qiskit.qpy) 및 OpenQASM 3으로 내보내기(qiskit.qasm3). OpenQASM 3에서 가져오기는 현재 별도의 패키지로 관리되고 있으며(qiskit.qasm3)로 관리되고 있으며, 키스킷의 새로운 기능에 맞게 확장되기를 희망합니다. -
모듈은
qiskit.algorithms모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 라이브러리는 새로운 독립형 라이브러리(qiskit-algorithms)로 대체되었으며, PyPi 또는 Github에서 확인할 수 있습니다:https://github.com/qiskit-community/qiskit-algorithms
모듈은 향후 제거될 때까지
qiskit.algorithms모듈은 이전처럼 계속 작동하며 향후 제거될 때까지 버그 수정이 이루어지겠지만, 새로운 기능의 활발한 개발은 새 패키지로 이전되었습니다. 에 의존하는 경우qiskit.algorithms를 사용하는 경우qiskit-algorithms도 포함하도록 Python 요구 사항을 업데이트하고qiskit.algorithms에서qiskit_algorithms로 가져오기를 업데이트해야 합니다. 이 새 패키지에는opflow및QuantumInstance기반 알고리즘을 포함하여 이미 사용되지 않는 알고리즘 코드가 포함되어 있지 않습니다. 아직QuantumInstance-기반에서 프리미티브 기반 알고리즘으로 마이그레이션하지 않은 경우 https://qisk.it/algo _migration의 마이그레이션 가이드라인을 따라야 합니다. 모듈을 별도의 패키지로 마이그레이션하기로 결정한 것은algorithms모듈을 별도의 패키지로 마이그레이션하기로 결정한 것은 키스킷의 목적을 명확히 하고 그 위에 구축된 도구와 라이브러리를 구분하기 위해서였습니다.
키스킷 테라 0.25 는 키스킷 테라 0.23 에서 시작된 사용 중단 경고에 따라 Python 3.7 에 대한 지원을 중단했습니다. 이는 Python 3.7’s 2023년 6월 27일에 종료되는 것과 일치합니다. 키스킷을 계속 사용하려면 Python 의 최신 버전으로 업그레이드해야 합니다.
새 기능
- 이번 릴리스에는 다음과 같은 기능이 추가되었습니다.
트랜스파일러 기능
-
BlockCollector에 두 가지 새로운 옵션이 추가되었습니다.첫 번째 새로운 옵션
split_layers을 사용하면 수집된 블록을 분리된 큐비트 하위 집합을 통해 하위 블록, 즉 depth-1 하위 블록으로 분할할 수 있습니다.두 번째 새로운 옵션
collect_from_back을 사용하면 회로의 출력부터 블록을 탐욕스럽게 수집할 수 있습니다. 이는 이전 블록보다 이후 블록에 게이트를 배치하는 것을 선호하는 ALAP 스케줄링 패스와 함께 사용할 때 중요합니다. -
에 새로운 옵션
split_layers및collect_from_back추가CollectLinearFunctions및CollectCliffords트랜스파일러 패스를 추가했습니다.split_layers이 True이면 수집된 블록은 분리된 큐비트 하위 집합을 통해 하위 블록, 즉 depth-1 하위 블록으로 분할됩니다. 다음 예를 고려하십시오.from qiskit.circuit import QuantumCircuit from qiskit.transpiler.passes import CollectLinearFunctions circuit = QuantumCircuit(5) circuit.cx(0, 2) circuit.cx(1, 4) circuit.cx(2, 0) circuit.cx(0, 3) circuit.swap(3, 2) circuit.swap(4, 1) # Collect all linear gates, without splitting into layers qct = CollectLinearFunctions(split_blocks=False, min_block_size=1, split_layers=False)(circuit) assert qct.count_ops()["linear_function"] == 1 # Collect all linear gates, with splitting into layers qct = CollectLinearFunctions(split_blocks=False, min_block_size=1, split_layers=True)(circuit) assert qct.count_ops()["linear_function"] == 4원래 회로는 선형입니다. 레이어로 분할하지 않고 선형 게이트를 수집할 때는 단일 선형 함수로 끝내야 합니다. 그러나 선형 게이트를 수집하고 레이어로 분할할 때는 4개의 선형 함수로 끝나야 합니다.
collect_from_back이 True이면 블록은 출력에서 회로의 입력으로 탐욕스럽게 수집됩니다. 다음 예를 고려하십시오.from qiskit.circuit import QuantumCircuit from qiskit.transpiler.passes import CollectLinearFunctions circuit = QuantumCircuit(3) circuit.cx(1, 2) circuit.cx(1, 0) circuit.h(2) circuit.swap(1, 2) # This combines the CX(1, 2) and CX(1, 0) gates into a single linear function qct = CollectLinearFunctions(collect_from_back=False)(circuit) # This combines the CX(1, 0) and SWAP(1, 2) gates into a single linear function qct = CollectLinearFunctions(collect_from_back=True)(circuit)원래 회로에는 하다마드 게이트가 포함되어 있으므로 CX(1, 0) 게이트는 CX(1, 2) 또는 SWAP(1, 2)와 결합할 수 있지만 둘 다 결합할 수는 없습니다.
collect_from_back이 False이면, 선형 블록은 회로의 시작부터 탐욕스럽게 수집되므로 CX(1, 0)은 CX(1, 2)와 결합됩니다.collect_from_back이 True이면, 선형 블록은 회로의 끝에서 탐욕스럽게 수집되므로 CX(1, 0)는 SWAP(1, 2)와 결합됩니다. -
추가
DAGCircuit.classical_predecessors()와DAGCircuit.classical_successors()를 추가하여 DAG 노드의 내부 그래프에 직접 액세스할 필요가 없는 기존 와이어 선택의 대안으로 사용할 수 있습니다. 다음 예는 새로운 기능을 설명합니다:from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister from qiskit.converters import circuit_to_dag from qiskit.circuit.library import RZGate q = QuantumRegister(3, 'q') c = ClassicalRegister(3, 'c') circ = QuantumCircuit(q, c) circ.h(q[0]) circ.cx(q[0], q[1]) circ.measure(q[0], c[0]) circ.rz(0.5, q[1]).c_if(c, 2) circ.measure(q[1], c[0]) dag = circuit_to_dag(circ) rz_node = dag.op_nodes(RZGate)[0] # Contains the "measure" on clbit 0, and the "wire start" nodes for clbits 1 and 2. classical_predecessors = list(dag.classical_predecessors(rz_node)) # Contains the "measure" on clbit 0, and the "wire end" nodes for clbits 1 and 2. classical_successors = list(dag.classical_successors(rz_node)) -
다음에 대한 지원 활성화
ControlFlowOp연산에 대한CommutativeCancellation패스. 이전에는 제어 흐름 작업의 블록이 이 패스로 건너뛰었습니다. -
다음에 대한 지원 활성화
ControlFlowOp연산에 대한ConsolidateBlocks패스. -
추가
DAGCircuit.quantum_causal_cone()를 추가하여 큐비트의 인과 원뿔을 얻으려면DAGCircuit. 다음 예는 올바른 사용법을 보여줍니다:from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister from qiskit.circuit.library import CXGate, CZGate from qiskit.dagcircuit import DAGCircuit # Build a DAGCircuit dag = DAGCircuit() qreg = QuantumRegister(5) creg = ClassicalRegister(5) dag.add_qreg(qreg) dag.add_creg(creg) dag.apply_operation_back(CXGate(), qreg[[1, 2]], []) dag.apply_operation_back(CXGate(), qreg[[0, 3]], []) dag.apply_operation_back(CZGate(), qreg[[1, 4]], []) dag.apply_operation_back(CZGate(), qreg[[2, 4]], []) dag.apply_operation_back(CXGate(), qreg[[3, 4]], []) # Get the causal cone of qubit at index 0 result = dag.quantum_causal_cone(qreg[0]) -
새로운 메서드
find_bit()메서드가 추가되었습니다DAGCircuit클래스에 새로운 메서드가 추가되었습니다Qubit또는Clbit의 비트 위치를 회로 내 비트의 위치 인덱스 튜플과 회로의 레지스터에서 해당 비트의 위치를 찾는 튜플 목록으로 반환합니다. -
트랜스파일러의 내장
EquivalenceLibrary(qiskit.circuit.equivalence_library.SessionEquivalenceLibrary)는 순환 폴리 관계 , 및 를 학습했습니다. 이를 통해 제약되고 불완전할 수 있는 기저 집합에 대한 트랜스파일링을 보다 안정적으로 수행할 수 있습니다. 자세한 내용은 #10293을 참조하세요. -
이제 트랜스파일러를 통해 레벨 2와 3을 포함한 모든 최적화 수준에서 제어 흐름 작업이 지원됩니다(예
transpile()또는generate_preset_pass_manager()키워드 인자로optimization_level=3). -
DAGCircuit.substitute_node()의 동일한 인수와 유사한propagate_condition키워드 인수를 얻었습니다substitute_node_with_dag(). 이를False으로 설정하면node의 조건을 대체하는 새op로 복사하는 기존 동작이 선택 해제됩니다.이 옵션은 조건을 전파하거나 다른 노드의 조건을 수락하지 않는 일반적인 제어 흐름 작업에서는 무시됩니다.
-
새로운 메서드를 도입했습니다,
DAGCircuit.separable_circuits()객체 목록을 반환하는DAGCircuit객체 목록을 반환하는 새로운 메서드를 도입했습니다. 이 메서드는 연결된 큐비트 세트마다 하나씩 다른 세트에 연결되는 게이트가 없습니다.각
DAGCircuit인스턴스에는self와 동일한 수의 클릿이 포함됩니다. 이 메서드는 클릿으로만 구성된DAGCircuit인스턴스를 반환하지 않습니다. -
속성을 추가했습니다
Target.concurrent_measurements속성을 추가했는데, 이는 동시에 측정된 큐비트의 하드웨어 제약 조건을 나타냅니다. 이 제약 조건은 중첩된 목록 형식으로 제공되며, 각 요소는 함께 측정할 큐비트 그룹을 나타냅니다. 아래 예시에서는[[0, 1], [2, 3, 4]]큐비트 0과 1, 2, 3, 4는 장치에서 함께 측정됩니다. 이 제약 조건은 개별 큐비트 측정을 차단하지는 않지만, 키스킷 펄스 스케줄러로 작업하거나 타이밍을 인식하는 새로운 트랜스파일러 패스(즉, 스케줄링을 수행하는 패스)를 작성할 때 이러한 큐비트에 대한 측정 작업의 정렬을 고려해야 할 수 있습니다.
-
트랜스파일러 패스
SetLayout는 이제 양자 회로가 매핑될 물리적 큐비트를 나타내는 정수 목록으로 구성할 수 있습니다. 즉, 회로의 첫 번째 큐비트는 목록의 0번 위치에 있는 물리적 큐비트에 할당되는 식입니다. -
트랜스파일러에 내장된
EquivalenceLibrary는 1큐비트 , 및 게이트와 2큐비트 , 및 게이트 사이에 더 많은 파울리 회전 등가성을 학습했습니다. 이렇게 하면 간단한 기본 번역, 특히 회전을 사용하는 회로의 안정성을 높일 수 있습니다. 7332번을 참조하세요. -
제어 흐름 작업은 이제 Sabre 트랜스파일러 패스 제품군, 즉 레이아웃 패스
SabreLayout및 라우팅 패스SabreSwap. Functiontranspile()키워드 인자layout_method및routing_method는 이제 제어 흐름이 있는 회로에 대해 이전에는 지원되지 않았던"sabre"옵션을 허용합니다.
회로 기능
-
필드
IfElseOp.condition,WhileLoopOp.condition및SwitchCaseOp.target필드는 이제 새로운 런타임 클래식 표현식 유형인expr.Expr. 이는 이러한 작업을 지원하는 백엔드에 대해 런타임에 평가되기 때문에ParameterExpression와는 다른데, 이러한 작업을 지원하는 백엔드에 대해 런타임에 평가되기 때문입니다.이 새로운 표현식은 기존의 2중 형식의 고전적인 조건을 제공하는 것보다 훨씬 더 강력한 힘을 가지고 있습니다. 예를 들어, 이제 서로 다른 두 클래식 레지스터 간의 동등 제약 조건이나 두 클래식 비트의 "또는" 논리를 표현할 수 있습니다. 이 두 가지 예는 다음과 같습니다:
from qiskit.circuit import QuantumCircuit, ClassicalRegister, QuantumRegister from qiskit.circuit.classical import expr qr = QuantumRegister(4) cr1 = ClassicalRegister(2) cr2 = ClassicalRegister(2) qc = QuantumCircuit(qr, cr1, cr2) qc.h(0) qc.cx(0, 1) qc.h(2) qc.cx(2, 3) qc.measure([0, 1, 2, 3], [0, 1, 2, 3]) # If the two registers are equal to each other. with qc.if_test(expr.equal(cr1, cr2)): qc.x(0) # While either of two bits are set. with qc.while_loop(expr.logic_or(cr1[0], cr1[1])): qc.reset(0) qc.reset(1) qc.measure([0, 1], cr1)더 많은 예제를 보려면
qiskit.circuit.classical.이 기능은 키스킷과 키스킷과 함께 작동하는 사용 가능한 양자 하드웨어 모두에 새로 추가된 기능입니다. 아직 기능이 개발 중이므로 예상치 못한 에지 케이스가 발생하여 해결에 시간이 필요한 부분이 있을 수 있습니다. 클래식 표현식 지원 또는 사용과 관련된 문제가 발생하면 키스킷 또는 하드웨어 공급업체에 문제를 제기해 주세요.
이번 초기 릴리스에서 키스킷은 작업을 추가했습니다:
bit_not()logic_not()bit_and()bit_or()bit_xor()logic_and()logic_or()equal()not_equal()less()less_equal()greater()greater_equal()
이들은 Python 정수 및 부울 리터럴 또는
ClassicalRegister및Clbit인스턴스.이러한 모든 고전적인 표현식은 키스킷 트랜스파일러 스택을 통해, QPY 직렬화(
qiskit.qpy) 및 OpenQASM 3으로 내보내기(qiskit.qasm3). OpenQASM 3에서 가져오기는 현재 별도의 패키지로 관리되고 있으며(qiskit.qasm3)로 관리되고 있으며, 키스킷의 새로운 기능에 맞게 확장되기를 희망합니다. -
기존 런타임 표현식의 새로운 표현으로 작업할 수 있는 툴이 추가되었습니다. 일반
ExprVisitor은 이러한 표현식의 소비자를 위해 서브클래스로 제공됩니다. 이 구조를 기반으로 하는 두 가지 유틸리티,iter_vars()과structurally_equivalent()도 제공되며, 이 유틸리티는 각각Var노드를 통해 이터레이터를 생성하고 두Expr인스턴스가 구조적으로 동일한지 여부를 확인합니다Var노드의 매핑까지 두 인스턴스가 구조적으로 동일한지 확인합니다. -
기능 추가
lift_legacy_condition()함수를 추가하여 이전 스타일의 조건을 새로운 스타일의Expr노드로 변환하는 함수를 추가했습니다. 이러한 표현식 노드는 구형 필드에서는 허용되지 않습니다Instruction.condition필드에서는 허용되지 않으며, 이는 다음과 같은 고급 클래식 처리로 대체될 예정입니다IfElseOp. -
의 절대값 취하기 지원이 추가되었습니다
ParameterExpressions. 예를 들어 이제 다음과 같은 작업이 가능합니다:from qiskit.circuit import QuantumCircuit, Parameter x = Parameter("x") circuit = QuantumCircuit(1) circuit.rx(abs(x), 0) bound = circuit.bind_parameters({x: -1}) -
의 성능은
QuantumCircuit.assign_parameters()및bind_parameters()의 성능은 애플리케이션 용도의 일반적인 구조를 가진 대형 회로에서 크게 향상되었습니다. 여기에는 다음과 같은 구조를 기반으로 하는 대부분의 회로가 포함됩니다NLocal구조를 기반으로 하는 대부분의 회로가 포함됩니다EfficientSU2. 자세한 내용은 #10282를 참조하세요. -
메서드
QuantumCircuit.assign_parameters()에flat_input와strict라는 두 개의 새로운 키워드 인수가 추가되었습니다. 이는 매개변수 바인딩을 딕셔너리로 전달할 때 메서드 속도를 높이는 데 사용할 수 있는 고급 옵션입니다;flat_input=True은 딕셔너리 키에 오직Parameter인스턴스(가 아닌ParameterVector가 아닌)만 포함하도록 보장하고,strict=False는 회로에 존재하지 않는 매개변수를 포함할 수 있도록 합니다. 이 두 가지 옵션을 사용하면 이 함수에서 입력 정규화의 오버헤드를 줄일 수 있습니다. -
다음 클래스의 생성자에 새 키워드 인수
flatten를 추가했습니다:이 인수를
True로 설정하면QuantumCircuit서브 클래스는 생성된 구현을Gate또는Instruction객체로 래핑하지 않습니다. 시각화에는 최적이 아니지만 일반적으로 런타임 성능이 훨씬 더 좋아지며 특히QuantumCircuit.bind_parameters()및QuantumCircuit.assign_parameters()의 경우 중첩된 래핑된 기본 출력에 비해 평평한 출력으로 런타임이 크게 향상됩니다. -
구성에 대한 지원 추가
LinearFunction를 포함할 수 있는 보다 일반적인 양자 회로에 대한 지원이 추가되었습니다:- 장벽(유형
Barrier) 및 지연(Delay), 단순히 무시되는 - 순열(유형
PermutationGate) - 기타 선형 함수
- 클리포드(
Clifford), 클리포드가 선형 함수를 나타내는 경우 (그렇지 않은 경우CircuitError예외가 발생합니다) - 이 형식의 중첩된 양자 회로
- 장벽(유형
-
LinearFunction.__eq__()메소드를 추가했습니다. 타입의 두 객체LinearFunction유형의 두 개체는 이진 반전 행렬로 표현이 같을 때 동일한 것으로 간주됩니다. -
추가된
LinearFunction.extend_with_identity()메서드를 추가하여k큐비트에 대한 선형 함수를n >= k큐비트에 대한 선형 함수로 확장하여 원래 큐비트의 새 위치를 지정하고 나머지 큐비트에 ID를 패딩할 수 있습니다. -
예쁜 인쇄를 위한 두 가지 메서드 추가
LinearFunction객체에 두 가지 메서드를 추가했습니다:LinearFunction.mat_str()0/1 항목의 행렬로 표시된 선형 함수의 문자열 표현을 반환하는 메서드와LinearFunction.function_str()는 선형 변환으로 표시된 선형 함수의 문자열 표현을 반환합니다. -
지침
StatePreparation및Initialize, 그리고 관련 회로 메서드QuantumCircuit.prepare_state()와initialize()는 배열 대상을 자동으로 정규화하기 위해True으로 설정할 수 있는 키워드 인수normalize를 얻습니다. 기본값은False이며, 정규화되지 않은 입력이 주어질 때 예외를 발생시키는 현재 동작을 유지합니다.
알고리즘 기능
- 옵티마이저에 콜백을 전달하는 옵션이 추가되어
UMDA옵티마이저에 콜백을 전달하는 옵션을 추가하여 함수 평가 횟수, 현재 매개변수, 달성한 최고 함수 값을 추적할 수 있습니다.
OpenQASM 기능
- OpenQASM 3개의 수출업체(
qasm3.dump(),dumps()및Exporter)에는 새로운allow_aliasing인수가 있으며, 이는 결국alias_classical_registers인수를 대체하게 됩니다. 클래식 비트에만 사용할 수 있는 옵션이 아닌, 클래식 비트 또는 큐비트에 앨리어싱을 허용할지 여부를 제어합니다.
양자 정보 특성
-
양자 상태의 음의 얽힘 측정을 계산하는 새로운 함수
negativity()를 추가했습니다. 위 함수의 사용 예는 다음과 같습니다:from qiskit.quantum_info.states.densitymatrix import DensityMatrix from qiskit.quantum_info.states.statevector import Statevector from qiskit.quantum_info import negativity import numpy as np # Constructing a two-qubit bell state vector state = np.array([0, 1/np.sqrt(2), -1/np.sqrt(2), 0]) # Calculating negativity of statevector negv = negativity(Statevector(state), [1]) # Creating the Density Matrix (DM) rho = DensityMatrix.from_label("10+") # Calculating negativity of DM negv2 = negativity(rho, [0, 1]) -
기능 추가
schmidt_decomposition(). 이 기능은Statevector및DensityMatrix클래스와 함께 작동합니다. -
곱셈에 대한 지원을 추가합니다
SparsePauliOp객체와Parameter연산자를 사용하여 객체를 곱하는 기능을 추가합니다:from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp param = Parameter("a") op = SparsePauliOp("X") param * op
펄스 기능
-
라이브러리가
SymbolicPulse라이브러리가 확장되었습니다. 라이브러리의 새로운 펄스 기능은 다음과 같습니다:새 함수는
ScalableSymbolicPulse인스턴스를 반환하며, 다음을 제외하고 이산 펄스 라이브러리에 있는 해당 함수의 기능과 일치합니다Square()의 위상이 전체 주기만큼 이동하는 경우( 위상에 의해 이러한 이동이 유도되는 이산square()위상이 위상에 의해 유도되는 것과는 반대로). -
메서드
filter()는ScheduleBlock클래스에서 활성화됩니다. 이 메서드를 사용하면 제공된 모든 필터를 통과한Instruction객체만 유지합니다. 내장 필터 조건으로 펄스Channel서브클래스 인스턴스 및Instruction서브클래스 유형을 지정할 수 있습니다. 인스턴스를 받는 사용자 정의 콜백Instruction인스턴스도 필터에 추가할 수 있습니다. -
메서드
exclude()는ScheduleBlock클래스에서 활성화됩니다. 이 메서드를 사용하면 사용자가 제공된 필터 중 하나 이상을 통과하지 않은Instruction객체만 유지하도록 합니다. 내장 필터 조건으로 펄스Channel서브클래스 인스턴스 및Instruction서브클래스 유형을 지정할 수 있습니다. 인스턴스를 받는 사용자 정의 콜백Instruction인스턴스도 필터에 추가할 수 있습니다. 이 메서드는filter()을 보완하므로 다음 조건이 항상 충족됩니다:block.filter(*filters) + block.exclude(*filters) == block포함된 지침의 경우block는ScheduleBlock인스턴스입니다. -
펄스 라이브러리에 새로운 기능
gaussian_square_echo()를 펄스 라이브러리에 추가했습니다. 반환된 펄스는 세 가지로 구성됩니다GaussianSquare펄스로 구성됩니다. 처음 두 개는 전체 지속 시간의 절반 길이의 에코 펄스이며 회전 톤을 구현합니다. 세 번째 펄스는 전체 펄스 기간 동안 지속되는 취소 톤으로, 단일 큐비트 회전 보정을 구현합니다. -
QPY는
Discriminator및Kernel객체를 지원합니다. 이 기능을 통해 사용자는 QPY를 사용하여 이러한 객체와 함께Acquire명령어를 직렬화하고 역직렬화할 수 있습니다.
합성 기능
-
새로운 합성 기능 추가
synth_cx_cz_depth_line_my()는 최대 2쿼비트 깊이( 5n )의 선형 최인접 이웃(LNN) 연결을 위해 CX 회로와 위상 게이트(S, Sdg 또는 Z)를 사용하여 CX 회로와 CZ 회로의 회로 형태를 생성하는 기능입니다. 합성 알고리즘은 Maslov와 Yang의 논문을 기반으로 합니다, arXiv:2210.16195.이 알고리즘은 CX 회로를 나타내는 이진 반전 행렬(
mat_x)과 CZ 회로를 나타내는 이진 대칭 행렬(mat_z)을 받아들이고, 최대 2큐비트 깊이의 양자 회로( 5n )를 반환하여 CX 회로와 CZ 회로의 구성을 계산합니다. 다음 예는 새로운 기능을 설명합니다:import numpy as np from qiskit.synthesis.linear_phase import synth_cx_cz_depth_line_my mat_x = np.array([[0, 1], [1, 1]]) mat_z = np.array([[0, 1], [1, 0]]) qc = synth_cx_cz_depth_line_my(mat_x, mat_z)이 함수는 이제 클리포드 합성 알고리즘에서 기본적으로 사용됩니다
synth_clifford_depth_lnn()에서 기본적으로 사용되며, 2쿼비트 깊이를 9n+4 에서 7n+2 으로 개선했습니다. 클리포드 합성 알고리즘은 다음과 같이 사용할 수 있습니다:from qiskit.quantum_info import random_clifford from qiskit.synthesis import synth_clifford_depth_lnn cliff = random_clifford(3) qc = synth_clifford_depth_lnn(cliff)위의 합성은 2큐비트 레이어 간의 로컬 최적화를 사용하여 Maslov와 Yang의 논문에서 설명한 대로 더욱 개선할 수 있습니다. 이 개선 사항은 후속 작업을 위해 남겨져 있습니다.
시각화 기능
-
QuantumCircuit.draw()및 기능circuit_drawer()옵션을 사용할 때output='mpl'이제 중첩된 회로 블록 그리기를 지원합니다ControlFlowOpif,else,while,for,switch/case를 포함한 중첩 회로 블록 그리기를 지원합니다. 회로 블록은 회로를 묘사하기 위해 상자로 둘러싸여 있습니다. -
회로 서랍에서
wire_order사용 시 일부 제한이 완화되었습니다. 이제wire_order는 큐비트만 나열할 수 있으며, 이 경우 기존 비트에 영향을 주지 않으므로cregbundle=True과 함께 사용할 수 있습니다.from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister qr = QuantumRegister(4, "q") cr = ClassicalRegister(4, "c") cr2 = ClassicalRegister(2, "ca") circuit = QuantumCircuit(qr, cr, cr2) circuit.h(0) circuit.h(3) circuit.x(1) circuit.x(3).c_if(cr, 10) circuit.draw('text', wire_order=[2, 3, 0, 1], cregbundle=True)q_2: ──────────── ┌───┐ ┌───┐ q_3: ┤ H ├─┤ X ├─ ├───┤ └─╥─┘ q_0: ┤ H ├───╫─── ├───┤ ║ q_1: ┤ X ├───╫─── └───┘┌──╨──┐ c: 4/═════╡ 0xa ╞ └─────┘ ca: 2/════════════
기타 기능
-
새로운 지연 임포트 테스터
HAS_PYGMENTS를 사용하여 파이그먼트 구문 강조 라이브러리의 존재 여부를 테스트할 수 있습니다. -
이제
qiskit.tools.jupyter의 마술%qiskit_version_table에는 이름에qiskit이 포함된 모든 가져온 모듈이 포함됩니다.
업그레이드 주의사항
-
키스킷 테라 0.25 는 키스킷 테라 0.23 에서 시작된 사용 중단 경고에 따라 Python 3.7 에 대한 지원을 중단했습니다. 이는 Python 3.7’s 2023년 6월 27일에 종료되는 것과 일치합니다. 키스킷을 계속 사용하려면 Python 의 최신 버전으로 업그레이드해야 합니다.
-
키스킷 테라 0.25 는 이제
rustworkx의 버전 0.13.0 이 필요합니다. -
기본적으로 키스킷은 컴파일된 확장을 키스킷에서 지원하는 가장 오래된 버전인 Python (현재 3.8 )을 지원하는 Python 안정 ABI를 사용하여 빌드합니다. 즉, 앞으로는 키스킷이 지원하는 모든 Python 버전에서 작동하는 하나의 사전 컴파일된 휠이 출시와 함께 제공될 것입니다. 제한된 API를 사용해도 예상되는 런타임 성능 차이가 없으므로 이제 모든 빌드에서 기본적으로 활성화됩니다. 이전에는 컴파일된 확장 기능이 버전별 API를 사용하여 빌드되었으며 단일 Python 버전에서만 작동했습니다. 이 변경은 각 릴리스에서 빌드하고 게시해야 하는 패키지 파일 수를 줄이기 위해 이루어졌습니다. 소스에서 키스킷을 빌드할 때, 제한된 API의 사용을 반영하기 위해 출력 파일 이름의 기본 태그가 달라지는 것 외에는 빌드 프로세스에 필요한 변경 사항이 없어야 합니다.
트랜스파일러 업그레이드 노트
-
함수에 인수 값 목록 전달에 대한 지원이 제거되었습니다
transpile()함수에 인수 값 목록 전달 지원이 제거되었습니다. 이 기능은 0.23.0 릴리스의 일부로 더 이상 사용되지 않습니다. 여전히 첫 번째 위치 인자에 대해QuantumCircuit객체 목록을 전달할 수 있습니다. 제거된 것은 해당 입력 목록의 각 회로에 대한 다른 인수의 목록 브로드캐스팅입니다. 이 기능을 제거하면 여러 회로를 한 번에 트랜스파일링할 때 병렬 실행에 대한 오버헤드를 크게 줄일 수 있었습니다. 현재 이 기능을 사용 중인 경우에는 대신transpile()를 여러 번 호출할 수 있습니다. 예를 들어 이전에 다음과 같은 작업을 수행한 경우입니다:from qiskit.transpiler import CouplingMap from qiskit import QuantumCircuit from qiskit import transpile qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() cmaps = [CouplingMap.from_heavy_hex(d) for d in range(3, 15, 2)] results = transpile([qc] * 6, coupling_map=cmaps)대신 이제 다음과 같이 실행해야 합니다:
from qiskit.transpiler import CouplingMap from qiskit import QuantumCircuit from qiskit import transpile qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() cmaps = [CouplingMap.from_heavy_hex(d) for d in range(3, 15, 2)] results = [transpile(qc, coupling_map=cm) for cm in cmap]또는
parallel_map()또는 Python 표준 라이브러리에서multiprocessing를 활용할 수도 있습니다. -
세이버 트랜스파일러 패스 제품군(
SabreLayout와SabreSwap)는 이제 최적화 레벨 1에서 트랜스파일러를 호출할 때 모든 회로에 기본적으로 사용됩니다 (예를 들어transpile()또는generate_preset_pass_manager()키워드 인자로optimization_level=1). 이전에는 제어 흐름 연산이 있는 회로에서DenseLayout및StochasticSwap를 사용했습니다.
회로 업그레이드 노트
-
OpenQASM 2 생성자 메서드의
QuantumCircuit(from_qasm_str()와from_qasm_file())는 키스킷 테라 0.24 에 추가된 러스트 기반 파서를 사용하도록 전환되었습니다. 이렇게 하면 구문 분석 시간이 훨씬 빨라지고(10배 이상은 드물지 않습니다) 중간 메모리 사용량도 크게 줄어듭니다.메서드는 연속성을 위해 동일한 인터페이스를 유지합니다
QuantumCircuit메서드는 연속성을 위해 동일한 인터페이스를 유지합니다. OpenQASM 2 임포터에 액세스하는 가장 선호되는 방법은qasm2.load()와qasm2.loads()를 사용하는 것이며, 이는 구문 분석 및 구성을 제어할 수 있는 확장된 인터페이스를 제공합니다. -
클래스의 생성자에 대한 더 이상 사용되지 않는
circuit_cregs인수가 제거되었습니다InstructionSet클래스의 생성자 인수가 제거되었습니다. 0.19.0 릴리스에서 더 이상 사용되지 않습니다. 이 인수를 사용하여 수동으로 객체를 생성하는 경우InstructionSet객체(주로 내부적으로 사용되므로 매우 드물지만)를 수동으로 구성하는 경우resource_requester키워드 인자에 콜러블을 대신 전달해야 합니다. 예를 들어,from qiskit.circuit import Clbit, ClassicalRegister, InstructionSet from qiskit.circuit.exceptions import CircuitError def my_requester(bits, registers): bits_set = set(bits) bits_flat = tuple(bits) registers_set = set(registers) def requester(specifier): if isinstance(specifer, Clbit) and specifier in bits_set: return specifier if isinstance(specifer, ClassicalRegster) and specifier in register_set: return specifier if isinstance(specifier, int) and 0 <= specifier < len(bits_flat): return bits_flat[specifier] raise CircuitError(f"Unknown resource: {specifier}") return requester my_bits = [Clbit() for _ in [None]*5] my_registers = [ClassicalRegister(n) for n in range(3)] InstructionSet(resource_requester=my_requester(my_bits, my_registers))
OpenQASM 업그레이드 노트
-
OpenQASM 2 생성자 메서드의
QuantumCircuit(from_qasm_str()와from_qasm_file())는 키스킷 테라 0.24 에 추가된 러스트 기반 파서를 사용하도록 전환되었습니다. 이렇게 하면 구문 분석 시간이 훨씬 빨라지고(10배 이상은 드물지 않습니다) 중간 메모리 사용량도 크게 줄어듭니다.메서드는 연속성을 위해 동일한 인터페이스를 유지합니다
QuantumCircuit메서드는 연속성을 위해 동일한 인터페이스를 유지합니다. OpenQASM 2 임포터에 액세스하는 가장 선호되는 방법은qasm2.load()와qasm2.loads()를 사용하는 것이며, 이는 구문 분석 및 구성을 제어할 수 있는 확장된 인터페이스를 제공합니다. -
OpenQASM 3개의 수출업체(
qasm3.dump(),dumps()및Exporter)는 이제 출력에서 더 적은 수의 "등록 별칭" 정의를 사용합니다. 설명한 회로는 변경되지 않지만 이제_loose_bits레지스터를 생성하고 여기에서 더 많은 레지스터를 앨리어싱하는 대신 직접bit,qubit및qubit[n]유형으로 우선적으로 내보냅니다. 이는 사용 중인 고급 OpenQASM 3 기능의 수를 최소화하고 필요하지 않은 프로그램에 불필요한 배열 구조가 도입되는 것을 방지하기 위한 것입니다.
양자 정보 업그레이드 노트
Clifford.from_circuit()는 더 이상 다른 객체와definition필드가 다른 객체와 상호 재귀적인 인스트럭션을 해결하려고 시도하지 않습니다. 이러한 재귀적 정의는 이미 필드에서 요구하는 엄격한 계층적 순서를 위반하는 것입니다definition필드가 요구하는 엄격한 계층적 순서를 위반하는 것이므로 코드에서는 이러한 가능성을 전혀 의존해서는 안 됩니다. (상호) 주기를 가질 수 있는 등가물을 정의하려면EquivalenceLibrary.
시각화 업그레이드 안내
-
내부
~qiskit.visualization.circuit.matplotlib.MatplotlibDrawer객체에서layout,global_phase,qregs및cregs인수가 제거되었습니다. 원래 키스킷 테라 0.20 에서 더 이상 사용되지 않습니다. 이러한 객체는 이제 주어진circuit에서 간단히 유추할 수 있습니다.시각화 루틴의 내부 작업자 클래스입니다. 코드를 변경할 필요는 거의 없습니다.
기타 업그레이드 주의사항
qiskit.util가져오기 위치는 키스킷 테라 0.17 이후 더 이상 사용되지 않으므로 제거되었습니다. 사용자는 새 가져오기 위치인qiskit.utils을 사용해야 합니다.
지원 중단 노트
-
외부 패키지에 의한
qiskit및qiskit.providers네임스페이스 확장은 이제 더 이상 사용되지 않으며 이를 가능하게 하는 후크 포인트는 향후 릴리스에서 제거될 예정입니다. 과거에 키스킷 프로젝트는 공유 네임스페이스를 확장하는 요소로 구성되었고, 이러한 훅 포인트는 이를 가능하게 했습니다. 그러나 이러한 인터페이스는 다른 패키지에서 사용하도록 의도된 것이 아닙니다. 이제 전체 키스킷 패키지는 더 이상 해당 패키징 모델을 사용하지 않으므로, 이러한 확장 가능성을 남겨두는 것은 이점보다 위험이 더 크므로 향후 제거를 위해 더 이상 사용되지 않습니다. 키스킷 네임스페이스를 확장하는 패키지를 유지 관리하는 경우(예: 사용자가qiskit.x또는qiskit.providers.y에서 가져오는 경우), 패키지에 독립형 Python 네임스페이스를 사용하도록 전환해야 합니다. 외부 패키지에 이러한 변경 사항을 경고하는 데 필요한 패키징 수준에서 경고를 삽입하는 방법이 없기 때문에 이에 대한 경고는 표시되지 않습니다. -
키스킷은 단일 패키지(
qiskit-terra)로 정의되므로qiskit.__qiskit_version__딕셔너리는 더 이상 사용되지 않습니다. 앞으로는qiskit.__version__이 표준 문자열로서 키스킷 버전을 쿼리하는 단일 지점이 될 것입니다.
트랜스파일러 사용 중단 사항
qiskit.transpiler.preset_passmanagers.common모듈을 통해 사용할 수 있는get_vf2_call_limit기능은 더 이상 사용되지 않습니다. 이 함수는 명시적으로 내보내거나 문서화되지 않았기 때문에 영향을 받는 사용자는 극소수에 불과할 것입니다. 해당 기능은 동일한 모듈의 기능으로 대체 및 확장되었습니다.
회로 사용 중단
- 메서드
qasm()와 :class:~qiskit.circuit.Instruction 의 하위 클래스의 모든 재정의 메서드는 더 이상 사용되지 않습니다. 일반적으로 단일 명령어 객체에는 유효한 OpenQASM2 문자열을 완전히 생성하기에 컨텍스트가 충분하지 않으므로 격리된 명령어에 대해 OpenQASM2 문자열을 생성하는 것을 대체할 수 없습니다. 현재 이 메서드를 사용하는 경우 OpenQASM2 내보내기를 대신 사용해야 합니다:QuantumCircuit.qasm()를 사용하여 전체 회로 객체에 대한 OpenQASM2 을 생성해야 합니다.
알고리즘 사용 중단
-
모듈은
qiskit.algorithms모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 라이브러리는 새로운 독립형 라이브러리(qiskit-algorithms)로 대체되었으며, PyPi 또는 Github에서 확인할 수 있습니다:https://github.com/qiskit-community/qiskit-algorithms
모듈은 향후 제거될 때까지
qiskit.algorithms모듈은 이전처럼 계속 작동하며 향후 제거될 때까지 버그 수정이 이루어지겠지만, 새로운 기능의 활발한 개발은 새 패키지로 이전되었습니다. 에 의존하는 경우qiskit.algorithms를 사용하는 경우qiskit-algorithms도 포함하도록 Python 요구 사항을 업데이트하고qiskit.algorithms에서qiskit_algorithms로 가져오기를 업데이트해야 합니다. 이 새 패키지에는opflow및QuantumInstance기반 알고리즘을 포함하여 이미 사용되지 않는 알고리즘 코드가 포함되어 있지 않습니다. 아직QuantumInstance-기반에서 프리미티브 기반 알고리즘으로 마이그레이션하지 않은 경우 https://qisk.it/algo _migration의 마이그레이션 가이드라인을 따라야 합니다. 모듈을 별도의 패키지로 마이그레이션하기로 결정한 것은algorithms모듈을 별도의 패키지로 마이그레이션하기로 결정한 것은 키스킷의 목적을 명확히 하고 그 위에 구축된 도구와 라이브러리를 구분하기 위해서였습니다.
펄스 기능 폐기
-
amp에 대한 복잡한 값으로ScalableSymbolicPulse초기화하기. 이 변경 사항은 다음 라이브러리 펄스에도 영향을 줍니다:복잡한 값으로
amp초기화도 이제 더 이상 사용되지 않습니다.대신
amp및angle매개변수를 지정할 때 두 개의 실수(amp)를 사용하세요. 여기서 은 복소수 진폭의 크기를 나타내고, 각도는 복소수 진폭의 각도를 나타냅니다. 즉, 복소 진폭은 으로 표시됩니다. -
명령은
Call명령은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 함수call()모듈에서qiskit.pulse.builder의 함수를 사용하세요.
기타 지원 중단
-
주피터 마법
%circuit_library_info과qiskit.tools.jupyter.library의 객체가 차례로 호출됩니다:circuit_data_tableproperties_widgetqasm_widgetcircuit_digram_widgetcircuit_library_widget
는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이러한 개체는 문서 빌드에만 사용하도록 만들어졌습니다. 더 이상 사용되지 않으므로 더 이상 지원하거나 유지 관리하지 않습니다.
알려진 문제점
- 모듈로 만든 고전적인 표현식을 포함하는 회로는
expr모듈로 만든 기존 표현식을 포함하는 회로는 아직 회로 시각화 도구에서 지원되지 않습니다.
버그 수정
-
인덱스 유효성 검사가 잘못 수행되어 인덱스가 정수가 아닌 음수일 때만 오류가 발생하던
Channel에서 인덱스 유효성 검사가 잘못 수행되어 인덱스가 정수가 아닌 음수인 경우에만 오류가 발생하던 버그를 수정했습니다. -
함수 관련 문제를 수정했습니다
transpile()함수와 다음을 통해 생성된 모든 프리셋 패스 매니저의 문제를 수정했습니다generate_preset_pass_manager()를 통해 생성된 모든 사전 설정 패스 관리자QuantumCircuit객체의layout속성이 유효하지 않은TranspileLayout.final_layout어트리뷰트를 가질 수 있는 문제를 수정했습니다. 이는 패스가VF2PostLayout패스가 실행되어 보고된 오류율이 낮은 대체 초기 레이아웃을 찾을 때 발생합니다. 초기 레이아웃을 변경할 때final_layout속성은 이 변경 사항을 반영하도록 업데이트되지 않았습니다. 라우팅 단계에서 발생하는 출력 순열이 항상final_layout에 올바르게 반영되도록 수정되었습니다. 수정 #10457 -
OpenQASM 2 파서(
qasm2.load()및loads())는 이제strict모드에서 실행되는barrier문에 인수가 없는 경우 오류를 올바르게 출력합니다. (기본값인) 보다 허용적인 모드에서 실행할 때 인수가 없는barrier문은 현재 범위 내의 모든 큐비트(게이트 정의가 영향을 미치는 큐비트 또는 문이 게이트 본문 또는 전역 범위에 있는 경우 프로그램에 의해 정의된 모든 큐비트)에 계속해서 배리어를 발생시킵니다(각각 게이트 본문 또는 전역 범위에 있는 경우). -
OpenQASM 2 내보내기(
QuantumCircuit.qasm())는 이제 더 이상 큐비트 없이 작동하는barrier문을 출력하려고 시도하지 않습니다. 이러한 배리어 문은 키스킷에서도 효력이 없으며 유효하지 않습니다 OpenQASM 2. -
키스킷은 0개의 큐비트 또는 0이 아닌 수의 클래식 비트에 동작하는 사용자 지정 명령어를 나타낼 수 있습니다. OpenQASM 2로 내보낼 수 없지만 이전에는
QuantumCircuit.qasm()는 시도하여 잘못된 OpenQASM 2를 출력합니다. 대신QASM2ExportError가 올바르게 발생합니다. 7351 및 #10435를 참조하세요. -
지도와 결합하지 않고
Target를 맵과 연결하지 않고FullAncillaAllocation트랜스파일러 패스와 연결하지 않고 사용하는 문제를 수정했습니다. 이 경우FullAncillaAllocation는 이제 앤실라 큐비트를 추가하여DAGCircuit의 큐비트 수가Target.num_qubits의 큐비트 수와 일치하도록 합니다. -
DAGCircuit.substitute_node()는 더 이상 지정된 대체물의 기존 조건을 자동으로 덮어쓰지 않습니다op.propagate_condition가True(기본값)으로 설정되어 있으면 대신DAGCircuitError가 대신 발생합니다. -
이제 정의에 파라미터화된 전역 위상이 있는 사용자 정의 게이트가 포함된 파라미터화된 회로는 내부 전역 위상에 파라미터를 성공적으로 바인딩할 수 있습니다. 자세한 내용은 #10283을 참조하세요.
-
건설
Statevector에서QuantumCircuit에서 0-큐비트 연산을 포함하는 a를 구성하면 더 이상 오류가 발생하지 않습니다. 이러한 연산은 결과 상태벡터에 전역 위상을 부여합니다. -
이제 제어 흐름 빌더 인터페이스에 포함된 회로 범위에서
ClassicalRegister리소스를 포함하는 회로 범위에 올바르게 포함됩니다. 10398번을 참조하세요. -
의 문제를 수정했습니다
QuantumCircuit.decompose()에서 복합 게이트 이름과 일치하는 함수에 회로 이름을 전달해도 게이트에 레이블이 할당된 경우 게이트가 분해되지 않던 문제를 수정했습니다. 수정 #9136 -
관련 문제를 수정했습니다
qiskit.visualization.plot_histogram()에서 지정된 데이터 집합의 첫 번째 위치에 0 값이 있을 때 상대 범례가 표시되지 않는 문제를 수정했습니다. 자세한 내용은 #10158을 참조하세요. -
메서드에서 발생하는 오류를 수정했습니다
Target.update_from_instruction_schedule_map()가 지정된inst_map에 의해 트리거되는 오류를 수정했습니다Schedule를 포함하는 메서드에서 발생하는 오류를 수정했습니다. -
에
conditional=True매개변수를 지정하면random_circuit()에 지정하면 이제 결과 회로의 조건부 연산에 전체 중간 회로 측정이 선행됩니다. 수정 #9016 -
메서드의 유형 주석을 개선하여
QuantumCircuit.assign_parameters()메서드의 유형 주석을 개선하여inplace인수에 따른 반환 유형 변경을 반영했습니다. -
OpenQASM 2 회로 생성자 메서드(
QuantumCircuit.from_qasm_str()및from_qasm_file())가U또는CX명령어가 포함된gate정의를 만나면 더 이상 오류가 발생하지 않습니다. 5536번을 참조하세요. -
패스의 오버헤드 감소
ConsolidateBlocks의 인스턴스를 생성하는 대신 모든 2쿼비트 블록에 대해 행렬 연산을 수행하여QuantumCircuit의 인스턴스를 생성하고 이를Operator. 속도 향상은 2쿼비트 블록을 통합할 때만 적용됩니다. 그보다 높은 값은 여전히Operator클래스가 처리합니다. 자세한 내용은 #8779를 확인하세요. -
OpenQASM 3 내보내기(
qiskit.qasm3)는 더 이상 단일이 아닌 인스턴스에 대해 유효하지 않은 OpenQASM 3을 출력하지 않습니다Instruction인스턴스를 출력하지 않고 대신QASM3ExporterError를 발생시켜 아직 지원되지 않는다는 것을 설명합니다. 이 기능은 라이브러리 전체에 더 많은 클래식 처리 기능이 추가되는 키스킷의 이후 릴리스에 추가될 예정입니다. -
문제 #10185를 수정합니다.
-
함수 관련 문제 수정
state_to_latex(). 이전에는 의도하지 않은 계수 반올림으로 잘못된 LaTeX 을 생성하여state_drawer()을 호출할 때 오류가 발생했습니다. 수정 #9297.