키스킷 0.25 릴리즈 노트
0.25.4
테라 0.17.2
Prelude
0.17.1 릴리스의 몇 가지 문제를 수정하는 버그 수정 릴리스입니다. 가장 중요한 것은 이 릴리스가 백엔드 기반에서 실행될 때 QuantumInstance 클래스를 기반으로 하는 백엔드에서 실행할 때 BackendV1 추상 클래스. 이렇게 하면 기반이 되는 모든 알고리즘과 애플리케이션이 qiskit.algorithms 또는 qiskit.opflow 에서 빌드된 모든 알고리즘과 애플리케이션을 수정합니다.
버그 수정
- 트랜스파일러 패스 관련 문제를 수정했습니다
BasisTranslator트랜스파일러 패스가 경우에 따라 이미 타깃에 있는 게이트를 변환하는 문제를 수정했습니다. 이렇게 하면 실행 시간이 길어지고 최적의 결과가 나오지 않을 수 있습니다. 수정 #6085 callbackkwarg를 통해 콜백 함수로 옵티마이저를 초기화할 때 오류가 발생할 수 있는SPSA문제를 수정했습니다.- 의 문제를 수정했습니다
qiskit.quantum_info.Statevector.expectation_value()및qiskit.quantum_info.DensityMatrix.expectation_value`methods where the ``qargs`()kwarg가 운영자가Pauli또는SparsePauliOp연산자 객체인 경우 무시되었습니다. 수정 #6303 - 메서드의 문제를 수정했습니다
qiskit.quantum_info.Pauli.evolve()메서드에서 진화할 때 잘못된 폴리가 반환될 수 있었던 문제를 수정했습니다CZGate,CYGate또는SwapGate게이트로 진화할 때 잘못된 폴리가 반환되던 문제를 고쳤습니다. - 인덱스 오류로 인해 이전에 모든 0 상태에 대해 최대 하나의 항목만 있던
qiskit.opflow.SparseVectorStateFn.to_dict_fn()메서드의 문제를 수정했습니다. - 단일 요소의 희소 벡터 비교 대신
True또는False를 올바르게 반환하도록qiskit.opflow.SparseVectorStateFn.equals()메서드의 문제를 수정했습니다. - 의 문제를 수정합니다
Statevector및DensityMatrix확률 메서드qiskit.quantum_info.Statevector.probabilities(),qiskit.quantum_info.Statevector.probabilities_dict(),qiskit.quantum_info.DensityMatrix.probabilities(),qiskit.quantum_info.DensityMatrix.probabilities_dict()의 특정 값에 대해 반환된 확률이 잘못된 순서를 가질 수 있는 경우qargskwarg. 수정 #6320 TaperedPauliSumOp클래스가 곱셈을 지원하지 않는 문제를 수정했습니다ParameterExpression객체와의 곱셈을 지원하지 않고, 또한 필요한assign_parameters()메서드가 없는 문제를 수정했습니다ParameterExpression객체로 작업하는 데 필요한 메서드가 없는 문제를 수정했습니다. 수정 #6127- 백엔드를 기반으로 실행되는
QuantumInstance클래스의 호환성을 수정했습니다BackendV1추상 클래스를 기반으로 하는 백엔드에서 실행할 때 클래스의 호환성을 수정했습니다. 수정 #6280
에어 0.8.2
변경 없음
이그니스 0.6.0
변경 없음
아쿠아 0.9.1
변경 없음
IBM Q 제공자 0.12.3
변경 없음
0.25.3
테라 0.17.1
변경 없음
에어 0.8.2
알려진 문제점
- 특정 폴리 연산자 구성 요소에 대해 잘못된 값을 반환하여
QasmSimulator및AerSimulator의 확장_stabilizer 메서드에 대해SaveExpectationValue및SaveExpectationValueVariance이 비활성화되었습니다. 자세한 내용과 예시는 #1227 <https://github.com/Qiskit/qiskit-aer/issues/1227> 을 참조하세요.
버그 수정
basis_gates구성 속성의 설정 방식과 관련된 성능 문제를 수정했습니다. 이전에는 백엔드 클래스에 의도하지 않은 부작용이 발생하여 시뮬레이션 런타임이 점점 더 늘어날 수 있었습니다. 자세한 내용과 예시는 #1229 <https://github.com/Qiskit/qiskit-aer/issues/1229> 를 참조하세요.- 대상 큐비트와 제어 큐비트의 순서가 키스킷 명령어의 순서와 뒤바뀌는
"multiplexer"시뮬레이터 명령어의 버그가 수정되었습니다. - 0.8.0 에 도입된 버그를 수정하여 GPU 시뮬레이션이 GPU 메모리 외에 불필요한 호스트 메모리를 할당하던 문제를 해결했습니다.
QasmSimulator및AerSimulator의stabilizer시뮬레이터 메서드에서save_expectation_value및snapshot_expectation_value의 기대값이 특정Y폴리에 대해 잘못된 부호를 가질 수 있는 버그를 수정합니다.
이그니스 0.6.0
변경 없음
아쿠아 0.9.1
변경 없음
IBM Q 제공자 0.12.3
변경 없음
0.25.2
테라 0.17.1
변경 없음
에어 0.8.1
변경 없음
이그니스 0.6.0
변경 없음
아쿠아 0.9.1
변경 없음
IBM Q 제공자 0.12.3
기타 참고사항
qiskit.providers.ibmq.experiment.analysis_result.AnalysisResultfit속성은 이제 선택 사항입니다.
0.25.1
테라 0.17.1
Prelude
0.17.0 릴리스의 몇 가지 문제를 수정하는 버그 수정 릴리스입니다. 가장 중요한 것은 이번 릴리스에서 실제로 빌드할 수 없고 미리 컴파일된 바이너리가 없는 플랫폼에서 설치를 차단하던 0.17.0 릴리스에 대해 잘못 구성된 sdist 패키지를 수정한다는 점입니다.
버그 수정
-
속성이 출력에 보존되지 않는 문제를 수정했습니다
global_phase속성이 출력에 보존되지 않는 문제를 수정했습니다QuantumCircuit객체에 속성이 보존되지 않는 문제를 수정했습니다qiskit.circuit.QuantumCircuit.reverse_bits()메서드가 호출되었을 때 속성이 출력 객체에 보존되지 않는 문제를 수정했습니다. 예를 들어,import math from qiskit import QuantumCircuit qc = QuantumCircuit(3, 2, global_phase=math.pi) qc.h(0) qc.s(1) qc.cx(0, 1) qc.measure(0, 1) qc.x(0) qc.y(1) reversed = qc.reverse_bits() print(reversed.global_phase)이제 이 올바르게 인쇄됩니다.
-
트랜스파일러 패스가
Unroller가 정의에 하나의 규칙이 있는 중첩된 명령어의 경우 전역 위상을 보존하지 않는 문제를 수정했습니다. 수정 #6134 -
parameter객체의 속성이ControlledGateUnitaryGate속성이UnitaryGate객체의 단일 행렬로 설정되지 않는 문제를 수정했습니다. 이전에는control()에서ControlledGateparameter속성을UnitaryGate행렬의 제어 버전으로 설정했습니다. 이렇게 하면 기본UnitaryGate객체의parameter가 수정되고 이후 호출은inverse()는 이중 제어된UnitaryGate의 역을 생성했습니다. 수정 #5750 -
사전 설정 패스 관리자 관련 문제 수정
level_0_pass_manager및level_1_pass_manager(optimization_level0 및 1의 경우transpile())가 경우에 따라 요청된 기준이 아닌 회로를 생성하는 문제를 수정했습니다. -
학습 속도와 교란을 자동으로 보정하는
SPSA를 사용하면 학습 속도와 섭동이 자동으로 보정되는 버그 수정 (예learning_rate및perturbation)는 이니셜라이저에서None)는 향후 모든 최적화를 위한 캘리브레이션을 저장합니다. 대신 새로운 목적 함수마다 보정을 수행해야 합니다.
에어 0.8.1
버그 수정
- 크라우스 오류와 함께 노이즈 시뮬레이션을 실행할 때
AerSimulator및QasmSimulator시뮬레이터의matrix_product_state메서드 사용 관련 문제를 수정했습니다. 이전에는 행렬 곱 상태 시뮬레이션 방식이 크라우스 행렬을 적용한 후 인접 큐비트에 변경 사항을 전파하지 않았습니다. 시뮬레이션 결과가 올바르게 출력되도록 이 문제가 수정되었습니다. 1184 및 1205 수정 qiskit.extensions.Initialize명령어가 첫 번째 회로 명령어이거나 모든 큐비트에 적용되어 결정론적일 때에도AerSimulator및QasmSimulator시뮬레이터의statevector및matrix_product_state시뮬레이션 방법에 대한 측정 샘플링 최적화를 비활성화하던 문제를 수정했습니다. 수정 #1210AerSimulator및QasmSimulator시뮬레이터의extended_stabilizer시뮬레이션 메서드와 함께 사용할 때 정규화되지 않은 상태 벡터를 반환하는SaveStatevector및SnapshotStatevector명령어 관련 문제를 수정했습니다. 수정 #1196- 이제
matrix_product_state시뮬레이션 메서드에 이전에 없던 상태 설정 명령(qiskit.providers.aer.library.SetMatrixProductState)이 지원되어 회로에서 시뮬레이션의 상태를 설정할 수 있습니다.
이그니스 0.6.0
변경 없음
아쿠아 0.9.1
IBM Q 제공자 0.12.2
변경 없음
0.25.0
이번 릴리스에서는 키스킷 아쿠아 프로젝트가 공식적으로 지원되지 않습니다. 따라서 향후 릴리스에서 qiskit-aqua 패키지는 키스킷 메타패키지에서 제거될 것이며, 이는 향후 릴리스에서 pip install qiskit 에 더 이상 qiskit-aqua 이 포함되지 않음을 의미합니다. 키스킷-아쿠아에서 제공하는 애플리케이션 모듈이 여러 개의 새로운 패키지로 분리되었습니다: qiskit-optimization, qiskit-nature, qiskit-machine-learning, 그리고 qiskit-finance 이다. 이러한 패키지는 표준 pip 설치 명령(예: pip install qiskit-nature)을 통해 자체적으로 설치할 수 있습니다 또는 나머지 키스킷 메타패키지를 선택적 추가 기능으로 제공(예 pip install 'qiskit[finance,optimization]' 또는 pip install 'qiskit[all]' 핵심 알고리즘과 연산자 흐름은 이제 qiskit-terra의 일부로 존재합니다 qiskit.algorithms 와 qiskit.opflow. 기존 아쿠아 사용법에 따라 애플리케이션 패키지를 사용하거나 키스킷 테라의 새로운 모듈을 사용해야 합니다. 키스킷 아쿠아에서 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.
테라 0.17.0
Prelude
키스킷 테라 0.17.0 에는 많은 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 주요 새로운 기능은 qiskit.algorithms 및 qiskit.opflow 모듈을 도입한 것입니다. qiskit.aqua 프로젝트에서 마이그레이션하여 적용했습니다.
새 기능
-
qiskit.pulse.call()함수는 이제 매개변수화된 서브루틴과 함께Parameter객체를 매개변수화된 서브루틴과 함께 받을 수 있습니다. 이렇게 하면 각 서브루틴 호출마다 다른 값을Parameter객체에 다른 값을 할당할 수 있습니다.예를 들면 다음과 같습니다.
from qiskit.circuit import Parameter from qiskit import pulse amp = Parameter('amp') with pulse.build() as subroutine: pulse.play(pulse.Gaussian(160, amp, 40), DriveChannel(0)) with pulse.build() as main_prog: pulse.call(subroutine, amp=0.1) pulse.call(subroutine, amp=0.3) -
에는
qiskit.providers.models.QasmBackendConfiguration에는 선택적으로 백엔드 프로세서에 대한 정보를 제공하는 데 사용할 수 있는 새로운 필드processor_type가 있습니다:{"family": <str>, "revision": <str>, segment: <str>}. 예:{"family": "Canary", "revision": "1.0", segment: "A"}. -
와
qiskit.pulse.Schedule,qiskit.pulse.Instruction,qiskit.pulse.Channel클래스에는 이제parameter프로퍼티가 있으며, 이 프로퍼티는 객체에 사용된 모든Parameter객체와 객체에 매개변수가 사용된 경우is_parameterized()메서드가 있으며, 객체에 매개변수가 사용된 경우True을 반환합니다.예를 들어,
from qiskit.circuit import Parameter from qiskit import pulse shift = Parameter('alpha') schedule = pulse.Schedule() schedule += pulse.SetFrequency(shift, pulse.DriveChannel(0)) assert schedule.is_parameterized() == True print(schedule.parameters) -
추가
PiecewiseChebyshev에qiskit.circuit.library에 입력 함수의 부분 체비셰프 근사치를 구현하기 위해 추가되었습니다. 주어진 함수 와 차수 에 대해 이 클래스는 주어진 간격으로 큐비트에서 로의 부분 다항식 체비셰프 근사치를 구현합니다. 근사치의 모든 다항식은 차수 입니다.예를 들어,
import numpy as np from qiskit import QuantumCircuit from qiskit.circuit.library.arithmetic.piecewise_chebyshev import PiecewiseChebyshev f_x, degree, breakpoints, num_state_qubits = lambda x: np.arcsin(1 / x), 2, [2, 4], 2 pw_approximation = PiecewiseChebyshev(f_x, degree, breakpoints, num_state_qubits) pw_approximation._build() qc = QuantumCircuit(pw_approximation.num_qubits) qc.h(list(range(num_state_qubits))) qc.append(pw_approximation.to_instruction(), qc.qubits) qc.draw(output='mpl') -
클래스는 이제
BackendProperties클래스에는 이제readout_length()메서드가 추가되어 주어진 큐비트의 읽기 길이 [초를] 반환합니다. -
새로운 클래스
ScheduleBlock클래스가qiskit.pulse모듈에 추가되었습니다. 이 클래스는 펄스 프로그램의 새로운 표현을 제공합니다. 이 표현은 펄스 빌더 구문에 가장 적합하며 상대적인 명령어 순서를 기반으로 합니다.이 표현은 각 명령어에 대해 시작 시간
t0을 지정하는 대신alignment_context을 사용합니다. 인스트럭션 시작 시간은 지정된 변환과 인스트럭션의 상대적 위치에 따라 암시적으로 할당됩니다.는
ScheduleBlock는 지연 명령어 스케줄링을 허용하므로 명령어 지속 시간에 임의의 매개변수를 할당할 수 있습니다.예를 들어,
from qiskit.pulse import ScheduleBlock, DriveChannel, Gaussian from qiskit.pulse.instructions import Play, Call from qiskit.pulse.transforms import AlignRight from qiskit.circuit import Parameter dur = Parameter('rabi_duration') block = ScheduleBlock(alignment_context=AlignRight()) block += Play(Gaussian(dur, 0.1, dur/4), DriveChannel(0)) block += Call(measure_sched) # subroutine defined elsewhere이 코드는 가우스 펄스의 지속 시간을 스캔한 후
measure_sched, 즉 라비 실험을 측정하는 실험을 정의합니다. 대상 기간 값을 지정하여 스캔한 모든 기간에 대해block개체를 재사용할 수 있습니다. -
새로운 기능 추가
array_to_latex()모듈에qiskit.visualization모듈에 벡터와 행렬을 표현하고 시각화하는 데 사용할 수 있는 새로운 함수를 추가했습니다( LaTeX ).from qiskit.visualization import array_to_latex from numpy import sqrt, exp, pi mat = [[0, exp(pi*.75j)], [1/sqrt(8), 0.875]] array_to_latex(mat) -
그리고
Statevector및DensityMatrix클래스에는 이제draw()메서드를 통해 텍스트 행렬, IPython 라텍스 객체, 라텍스 소스, Q-구, 블로흐 구 및 힌튼 플롯으로 객체를 그릴 수 있습니다. 기본적으로 출력 유형은__repr__의 출력과 동일하지만 사용자 구성 파일에서state_drawer옵션을 설정하여 이 기본값을 변경할 수 있습니다. 예를 들어,from qiskit.quantum_info import DensityMatrix dm = DensityMatrix.from_label('r0') dm.draw('latex')from qiskit.quantum_info import Statevector sv = Statevector.from_label('+r') sv.draw('qsphere')또한, 이제 이러한 클래스의
draw()메서드가 이제 이러한 클래스의 아이피썬 디스플레이에 사용되므로 사용자 구성 파일에서 기본 출력 유형을 변경하면Statevector또는DensityMatrix객체가 주피터 노트북에 표시될 때 해당 출력 유형이 객체에 사용됩니다. -
펄스
qiskit.pulse.Instruction개체 및 파라메트릭 펄스 개체(예Gaussian이제Parameter및ParameterExpressionduration객체를 지원합니다. 예를 들어,from qiskit.circuit import Parameter from qiskit.pulse import Gaussian dur = Parameter('x_pulse_duration') double_dur = dur * 2 rx_pulse = Gaussian(dur, 0.1, dur/4) double_rx_pulse = Gaussian(double_dir, 0.1, dur/4)매개변수화된
duration으로 인스트럭션을 생성할 수 있지만, 바인딩되지 않은 매개변수duration를 스케줄에 추가하는 것은 새로 도입된 표현인ScheduleBlock. 자세한 내용은 알려진 문제 릴리스 노트 섹션을 참조하세요. -
메서드
run()메서드에 대한QasmSimulatorPy,StatevectorSimulatorPy및UnitarySimulatorPy백엔드의 메서드는 이제QuantumCircuit(또는QuantumCircuit객체 목록)을 입력으로 받습니다. 이전QasmQobj객체는 현재로서는 계속 지원되지만 향후 릴리스에서 더 이상 사용되지 않을 예정입니다.사용 방법에 대한 예는 다음을 참조하세요:
from qiskit import transpile, QuantumCircuit from qiskit.providers.basicaer import BasicAer backend = BasicAer.get_backend('qasm_simulator') circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.measure_all() tqc = transpile(circuit, backend) result = backend.run(tqc, shots=4096).result() -
트랜스파일러 패스의
CommutativeCancellation트랜스파일러 패스에는 생성자basis_gates에 새로운 옵션 kwarg가 있는데, 이는 대상 백엔드의 베이시스 게이트 이름 목록을 받습니다. 지정하면 패스는basis_gateskwarg의 게이트만 사용합니다. 이전에는 패스가 자동으로 출퇴근하는 연속된 게이트를ZGate를U1Gate로 자동 교체되었습니다.basis_gateskwarg를 사용하면 이를 방지하기 위해 타겟에 존재하는 z-회전 게이트를 지정할 수 있습니다. -
클래스의 생성자와
Bit클래스와 서브클래스의 생성자Qubit,Clbit와AncillaQubit는 이제 두 개의 매개변수register및index를 선택 사항으로 사용할 수 있도록 업데이트되었습니다. 이를 통해 레지스터와 독립적인 비트 객체를 생성할 수 있습니다. -
새로운 클래스
BooleanExpression클래스가qiskit.circuit.classicalfunction모듈에 추가되었습니다. 이 클래스를 사용하면 Python 부울 표현식에서 오라클을 만들 수 있습니다. 예를 들어,from qiskit.circuit import BooleanExpression, QuantumCircuit expression = BooleanExpression('~x & (y | z)') circuit = QuantumCircuit(4) circuit.append(expression, [0, 1, 2, 3]) circuit.draw('mpl')circuit.decompose().draw('mpl')메서드에는
BooleanExpression메서드도 포함되어 있습니다,from_dimacs_file()메서드도 포함되어 있어 DIMACS-CNF 형식으로 설명된 수식을 로드할 수 있습니다. 예를 들어,from qiskit.circuit import BooleanExpression, QuantumCircuit 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')┌───────────────────┐ q_0: ┤0 ├ │ │ q_1: ┤1 ├ │ SIMPLE_V3_C2.CNF │ q_2: ┤2 ├ │ │ q_3: ┤3 ├ └───────────────────┘circuit.decompose().draw('text')q_0: ──o────o──────────── │ │ q_1: ──■────o────■─────── │ │ │ q_2: ──■────┼────o────■── ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐ q_3: ┤ X ├┤ X ├┤ X ├┤ X ├ └───┘└───┘└───┘└───┘ -
새로운 클래스가 추가되었습니다,
PhaseOracle클래스가qiskit.circuit.library모듈에 추가되었습니다. 이 클래스를 사용하면 Python 부울 표현식에서 위상 오라클 회로를 구성할 수 있습니다.from qiskit.circuit.library.phase_oracle import PhaseOracle oracle = PhaseOracle('x1 & x2 & (not x3)') oracle.draw('mpl')이러한 위상 오라클은 예를 들어 다음과 같이 더 큰 알고리즘의 일부로 사용할 수 있습니다
qiskit.algorithms.AmplificationProblem:from qiskit.algorithms import AmplificationProblem, Grover from qiskit import BasicAer backend = BasicAer.get_backend('qasm_simulator') problem = AmplificationProblem(oracle, is_good_state=oracle.evaluate_bitstring) grover = Grover(quantum_instance=backend) result = grover.amplify(problem) result.top_measurement클래스에는
PhaseOracle클래스에는 또한from_dimacs_file()메서드도 포함되어 있어 DIMACS-CNF 형식의 수식을 설명하는 파일에서 위상 오라클을 구성할 수 있습니다.from qiskit.circuit.library.phase_oracle import PhaseOracle oracle = PhaseOracle.from_dimacs_file("simple_v3_c2.cnf") oracle.draw('text')state_0: ─o───────o────────────── │ ┌───┐ │ ┌───┐ state_1: ─■─┤ X ├─■─┤ X ├─■────── │ └───┘ └───┘ │ ┌───┐ state_2: ─■───────────────o─┤ Z ├ └───┘ -
이제 모든 트랜스파일러 패스(즉,
BasePass의 모든 인스턴스)를 직접 호출할 수 있습니다. 패스를 호출하면 객체에서 패스를 실행할 수 있는 편리한 인터페이스가 제공됩니다QuantumCircuit객체에서 패스를 실행할 수 있는 편리한 인터페이스를 제공합니다.예를 들어, 다음과 같은 단일 변환 패스를 실행하는 경우
BasisTranslator와 같은 단일 변환 패스를 실행할 수 있습니다:from qiskit import QuantumCircuit from qiskit.transpiler.passes import BasisTranslator from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel circuit = QuantumCircuit(1) circuit.h(0) pass_instance = BasisTranslator(sel, ['rx', 'rz', 'cx']) result = pass_instance(circuit) result.draw(output='mpl')분석 패스를 실행할 때 속성 집합(
dict또는PropertySet)을 매개변수로 추가해야 하며 '제자리에서' 수정할 수 있습니다. 예를 들어,from qiskit import QuantumCircuit from qiskit.transpiler.passes import Depth circuit = QuantumCircuit(1) circuit.h(0) property_set = {} pass_instance = Depth() pass_instance(circuit, property_set) print(property_set) -
클래스에는
QasmQobjConfig클래스에는 이제meas_level및meas_return에 대한 선택적 kwarg 가 있습니다. 이 필드는 다음을 생성하는 데 사용할 수 있습니다QasmQobj회로 작업에 대해meas_level=1(커널화된 데이터)를 지원하는 작업 페이로드(이전에는PulseQobj객체에 대해서만 노출되었습니다). 함수가 업데이트되어assemble()함수가 생성하는 객체에 대해 이 필드를 설정하도록QasmQobj객체에 대해 이 필드를 설정하도록 업데이트되었습니다. -
새로운
tensor()메서드가 추가되었습니다QuantumCircuit클래스에 새로운 메서드가 추가되었습니다. 이 방법을 사용하면 기존 회로로 다른 회로를 텐서링할 수 있습니다. 이 메서드는 다음과 유사하게 작동하며qiskit.quantum_info.Operator.tensor()와 유사하게 작동하며 키스킷의 리틀 엔디안 규칙과 일치합니다.예를 들어,
from qiskit import QuantumCircuit top = QuantumCircuit(1) top.x(0); bottom = QuantumCircuit(2) bottom.cry(0.2, 0, 1); bottom.tensor(top).draw(output='mpl') -
클래스는 이제
qiskit.circuit.QuantumCircuit클래스는 이제 임의의 자유 형식 메타데이터를 지원하며metadata어트리뷰트를 지원합니다. 사용자( 또는 그 위에 구축된 프로그램QuantumCircuit)는 회로를 추적하는 데 사용할 메타데이터를 회로에 첨부할 수 있습니다. 예를 들어,from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2, user_metadata_field_1='my_metadata', user_metadata_field_2='my_other_value')또는:
from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2) qc.metadata = {'user_metadata_field_1': 'my_metadata', 'user_metadata_field_2': 'my_other_value'}이 메타데이터는 회로의 실행에 영향을 미치는 데 사용되지 않고 객체의 수명 동안 회로를 추적하는 데만 사용됩니다.
metadata속성은 다음을 포함한 모든 회로 변환 간에 유지됩니다transpile()및assemble(). 제공자가 반환하는 결과에 메타데이터를 연결하여 사용자가 현재QuantumCircuit.name에서 하는 것과 같은 방식으로 서킷 메타데이터를 기반으로 결과를 필터링할 수 있도록 하는 것이 기대됩니다. -
새 연산자 클래스 추가
CNOTDihedral가qiskit.quantum_info모듈에 새로운 연산자 클래스를 추가했습니다. 이 클래스는 양자 게이트에 의해 생성되는 CNOT-이원체 그룹을 나타내는 데 사용됩니다CXGate,TGate와XGate. -
BaseOperator서브클래스에&(__and__) 이진 연산자를 추가합니다 (예qiskit.quantum_info.Operator)에qiskit.quantum_info모듈에 추가합니다. 이것은 클래스를 호출하는 속기입니다compose()메서드를 호출하는 약어입니다(예:A & B == A.compose(B)).예를 들어,
import qiskit.quantum_info as qi qi.Pauli('X') & qi.Pauli('Y') -
&(__and__) 이진 연산자를qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix클래스를 추가합니다. 이것은 클래스를 호출하는 속기입니다evolve()메서드를 호출하는 약어입니다(예:psi & U == psi.evolve(U)).예를 들어,
import qiskit.quantum_info as qi qi.Statevector.from_label('0') & qi.Pauli('X') -
새로운 2큐비트 게이트,
ECRGate에코 교차 공명(ECR)이 모듈에 추가되었습니다qiskit.circuit.library모듈에 해당 메서드와 함께 추가되었습니다,ecr()메서드와 함께 모듈에 추가되었습니다QuantumCircuit클래스. ECR 게이트는 에코를 위해 두 개의 펄스 사이에XGate가 있는 두 개의 펄스입니다. 이 게이트는 로컬에서CXGate(로컬 사전 또는 사후 회전을 통해 CNOT로 변환할 수 있음)와 동일합니다. 이 게이트는 현재 IBM 하드웨어의 기본 게이트이며, 이 게이트로 컴파일하면 사전/사후 회전을 나머지 회로에 병합할 수 있습니다. -
대략적인 컴파일을 가능하게 하는 새로운 kwarg
approximation_degree가transpile()함수에 추가되어 대략적인 컴파일이 가능해졌습니다. 유효한 값의 범위는 0에서 1까지이며, 값이 클수록 근사치가 작아집니다. 회로 근사치를 실험하기 위한 휴리스틱 다이얼입니다. 이 숫자에 대한 구체적인 해석은 각 패스에 맡겨지며, 각 패스는 이 숫자를 사용하여 대략적인 버전의 패스를 수행할 수 있습니다. 구체적인 예로는UnitarySynthesis패스 또는 또는 변환기를 개별 게이트 집합으로 변환하는 것입니다. 패스가 이 옵션을 지원하지 않는다면 정확한 변환을 의미합니다. -
두 개의 새로운 트랜스파일러 패스,
GateDirection와qiskit.transpiler.passes.CheckGateDirection가qiskit.transpiler.passes모듈에 추가되었습니다. 이 새로운 패스는CXDirection및CheckCXDirection(현재 사용되지 않음, 자세한 내용은 사용 중단 노트 참조)을 보다 일반적으로 대체하기 위한 것으로, 동일한 기능을 수행하지만 다른 게이트와 함께 작동합니다CXGate. -
Windows에서 실행할 때 이제
parallel_map()함수를 사용한 병렬 실행을 활성화할 수 있습니다(기본적으로 여전히 비활성화되어 있음). 이렇게 하려면 사용자 구성 파일에서parallel = True을 설정하거나QISKIT_PARALLEL환경 변수를TRUE로 설정하면 됩니다(이 경우transpile()와assemble()와parallel_map()를 사용합니다). Windows에서 병렬 처리를 사용하도록 설정할 때 Python 이 Windows용 프로세스를 실행하는 방식에 제한이 있다는 점에 유의하세요. Windows에서 병렬 실행의 제한 사항에 대한 자세한 내용은 아래의 알려진 문제 섹션을 참조하세요. -
새로운 함수
hellinger_distance()두 카운트 분포 사이의 헬러 거리를 계산하는 새로운 함수인qiskit.quantum_info모듈에 추가되었습니다. -
모듈의
decompose_clifford()함수(내부적으로 사용되는qiskit.quantum_info모듈( 내부적으로qiskit.quantum_info.Clifford.to_circuit()메서드에서 내부적으로 사용됨)에는'AG'또는'greedy'로 설정하여 사용되는 합성 방법을 선택할 수 있는 새로운 kwargmethod이 있습니다. 기본적으로 3큐비트 이상의 경우, 이 값은'greedy'으로 설정되어 있으며, 이는 Bravyi 등의 클리포드 요소 합성을 위해 비최적의 탐욕적인 컴파일 루틴을 사용합니다. al., 이 방법은 일반적으로 이전에 사용되던 Aaronson-Gottesman 방법(2큐비트 이상)에 비해 더 나은 CX 비용을 산출합니다.method='AG'을 설정하여 이전 기본 Aaronson-Gottesman 방법으로 되돌리려면methodkwarg를 사용할 수 있습니다. -
모듈의
Initialize클래스는 이제qiskit.extensions모듈의 클래스는 이제 정수를 사용하여 생성할 수 있습니다. 정수의 '1' 비트는 해당 큐비트에 대한 회로에Reset및 anXGate를 해당 큐비트에 대한 회로에 삽입합니다. 이는 표준 리틀 엔디안 규칙인 키스킷을 사용하여 수행됩니다. 즉, 정수의 가장 오른쪽 비트는 큐비트 0을 설정합니다. 예를 들어Initialize에서 파라미터를5으로 설정하면 큐비트 0과 2가 값 1로 설정됩니다.from qiskit.extensions import Initialize initialize = Initialize(13) initialize.definition.draw('mpl') -
모듈의
Initialize클래스는 이제qiskit.extensions모듈의 클래스는 이제 폴리 레이블에서 직접 구성하는 것을 지원합니다(qiskit.quantum_info.Statevector.from_label()메서드와 유사). 파울리 레이블은 파울리 고유 상태 Z, X, Y의 기저 상태를 나타냅니다. 이러한 레이블은 키스킷의 표준 리틀 엔디안 표기법을 사용합니다. 예를 들어'01'레이블은 큐비트 0을 , 큐비트 1을 로 초기화합니다.from qiskit.extensions import Initialize initialize = Initialize("10+-lr") initialize.definition.draw('mpl') -
Kwarg,
template_list, 의 생성자에 대한qiskit.transpiler.passes.TemplateOptimization트랜스파일러 패스의 생성자가 이제QuantumCircuit와DAGDependency객체 목록을 받습니다. 이전에는QuantumCircuit만 허용되었지만(내부적으로DAGDependency객체)만 입력 목록에서 허용되었습니다. -
새로운 트랜스파일러 패스
qiskit.transpiler.passes.RZXCalibrationBuilder캘리브레이션을 생성하여 양자 회로에 추가할 수 있는 새로운 트랜스파일러 패스가 도입되었습니다. 이 패스는 보정된CXGate오브젝트를 가져와서 임의의 회전 각도를 가진qiskit.circuit.library.RZXGate오브젝트에 대한 보정을 생성합니다. 스케줄은 에코 교차 공명 게이트의GaussianSquare펄스를 늘리고 압축하여 만들어집니다. -
사용하기 위한 새로운 템플릿 회로
qiskit.circuit.library.RZXGate를 사용하기 위한 새로운 템플릿 회로가qiskit.circuit.library모듈(예rzx_yz). 이렇게 하면TemplateOptimization패스와qiskit.transpiler.passes.RZXCalibrationBuilder패스와 페어링하여CNOT - P(theta) - CNOT와 같은 게이트 시퀀스를 자동으로 찾아서 더 효율적인 회로로 대체할 수 있습니다qiskit.circuit.library.RZXGate를 기반으로 더 효율적인 회로로 교체할 수 있습니다. -
Matplotlib 출력 유형은
circuit_drawer()와draw()메서드에 대한QuantumCircuit클래스의 메서드는 이제 시각화 스타일 설정을 위한 구성 파일을 지원합니다. 이전 릴리스에서는 사용자가stylekwarg를dict받아mpl서랍의 색상 및 기타 표시 기능을 사용자 지정할 수 있는 기본 기능이 있었습니다. 이제 사전을 전달할 필요 없이 JSON 파일에서 직접 이러한 사전을 로드할 수 있도록 기능이 확장되었습니다. 이렇게 하면 사용자가 스타일 파일 이름을stylekwarg에 문자열로 전달하여 새 스타일 파일을 만들고 해당 스타일을 시각화에 사용할 수 있습니다.이 기능을 활용하려면 사용자 구성 파일에서
circuit_mpl_style_path옵션을 설정해야 합니다. 이 옵션은 키스킷이 스타일 JSON 파일을 검색할 경로로 설정해야 합니다. 경로 항목을 여러 개 지정하는 경우:로 구분해야 합니다. 예를 들어 사용자 설정 파일에circuit_mpl_style_path = ~/.qiskit:~/user_styles을 설정하면~/.qiskit과~/user_styles모두에서 JSON 파일을 찾습니다. -
marginal_counts()함수에 새로운 kwarg,format_marginal가 추가되어True로 설정하면 회로의cregs에 따라 출력되는 카운트 형식을 지정하고 누락된 인덱스는_로 표시됩니다. 예를 들어,from qiskit import QuantumCircuit, execute, BasicAer, result from qiskit.result.utils import marginal_counts qc = QuantumCircuit(5, 5) qc.x(0) qc.measure(0, 0) result = execute(qc, BasicAer.get_backend('qasm_simulator')).result() print(marginal_counts(result.get_counts(), [0, 2, 4], format_marginal=True)) -
의 성능 개선
qiskit.quantum_info.Statevector.expectation_value()및qiskit.quantum_info.DensityMatrix.expectation_value()인자 연산자가Pauli또는SparsePauliOp연산자의 성능을 개선했습니다. -
사용자 구성 파일에는
num_processes와parallel의 기본 동작을 제어하는 데 사용되는 두 가지 새로운 구성 옵션이 있습니다parallel_map().parallel옵션은 여러 프로세스에서 실행할지 여부를 지정하는 데 사용되는 부울입니다parallel_map()가 여러 프로세스에서 실행될지 여부를 지정하는 데 사용됩니다.False로 설정하면parallel_map()호출은 직렬로 실행되고True로 설정하면 병렬 실행이 활성화됩니다.num_processes옵션은 병렬 실행 시 사용할 CPU 수를 설정하는 정수를 받습니다. 기본적으로 시스템의 CPU 코어 수를 사용합니다. -
의 기본 동작을 제어하는 데 사용할 수 있는 2개의 새로운 환경 변수
QISKIT_PARALLEL와QISKIT_NUM_PROCS가 있습니다parallel_map().QISKIT_PARALLEL옵션을TRUE(대문자)로 설정하여 호출 시 여러 프로세스에서 실행되도록 기본값을 설정할 수 있습니다parallel_map()가 호출될 때 여러 프로세스에서 실행되도록 설정합니다. 다른 값으로 설정하면parallel_map()로 설정하면 연속적으로 실행됩니다.QISKIT_NUM_PROCS는 실행할 기본 프로세스 수로 사용되는 정수(예:QISKIT_NUM_PROCS=5)를 받습니다. 이 두 가지 옵션은 사용자 구성 파일에 설정된 동등한 옵션보다 우선합니다. -
새로운 메서드
gradient()메서드가ParameterExpression클래스에 추가되었습니다. 이 메서드는 객체의 그라데이션을 평가하는 데 사용됩니다ParameterExpression객체의 기울기를 평가하는 데 사용됩니다. -
__eq__메서드(즉,==연산자를 사용할 때 호출되는 메서드)를 사용하면ParameterExpression에 대해 이제 숫자 값과 비교할 수 있습니다. 이전에는 두 개의 인스턴스만 비교할 수 있었습니다ParameterExpression와==. 예를 들어,from qiskit.circuit import Parameter x = Parameter("x") y = x + 2 y = y.assign(x, -1) assert y == 1 -
클래스의
PauliFeatureMap모듈의qiskit.circuit.library모듈의 클래스는 이제 생성자에서 kwargalpha를 사용하여 설정하거나 생성 후alpha어트리뷰트를 설정하면 됩니다. 이전에는 이 값이2.0로 고정되어 있었습니다. 이 속성을 조정하면 의사 결정 경계를 더 잘 제어할 수 있으며 데이터 집합에서 명시적으로 확장하지 않고도 입력 기능을 유연하게 처리할 수 있습니다. -
새로운
Gate클래스PauliGate클래스가 추가되었습니다qiskit.circuit.library모듈과 해당 메서드가 추가되었습니다,pauli()가QuantumCircuit클래스에 추가되었습니다. 이 새로운 게이트 클래스를 사용하면 여러 개의 개별 폴리 게이트를 동시에 여러 큐비트에 적용할 수 있습니다. 이는 주로 이 새로운 게이트를 사용하여 여러 개의 동시 폴리 게이트를 보다 효율적으로 구현할 수 있는 시뮬레이터에 유용합니다. -
연산자 개선
qiskit.quantum_info.Pauli연산자를 개선합니다. 이 클래스는 이제 복소 계수를 포함한 전체 N-큐비트 폴리 그룹을 표현하고 요소를 나타냅니다. 이제 다음과 같은 연산자 API 메서드를 지원합니다compose(),dot(),tensor()등, 전체 폴리 그룹에 대해 컴포지션 및 점이 정의된 메서드를 지원합니다.이 클래스는 편의를 위해 폴리의 문자열 표현을 변환할 수도 있습니다.
예를 들면 다음과 같습니다
from qiskit.quantum_info import Pauli P1 = Pauli('XYZ') P2 = Pauli('YZX') P1.dot(P2)폴리를 직접 추가할 수도 있습니다
QuantumCircuit객체from qiskit import QuantumCircuit from qiskit.quantum_info import Pauli circ = QuantumCircuit(3) circ.append(Pauli('XYZ'), [0, 1, 2]) circ.draw(output='mpl')추가 메서드를 사용하면 두 명의 폴리가 출퇴근(
commutes()메서드 사용) 또는 출퇴근 반대(anticommutes()메서드 사용), 클리포드 활용( )으로 인한 폴리를 계산할 수 있습니다evolve()메서드를 사용합니다.클래스의 API 설명서를 참조하세요
Pauli클래스의 API 문서를 참조하세요. -
새로운 함수
random_pauli()n-큐비트 폴리 그룹의 무작위 요소를 생성하는 새로운 함수인qiskit.quantum_info모듈에 추가되었습니다. -
새로운 클래스
PiecewisePolynomialPauliRotations클래스가qiskit.circuit.library모듈에 추가되었습니다. 이 회로 라이브러리 요소는 중단점과 계수를 통해 정의되는 조각 다항식 함수( )를 큐비트 진폭에 매핑하는 데 사용됩니다. 중단점 은 의 하위 집합이며, 여기서 은 상태 큐비트 수입니다. 해당 계수 , 여기서 은 모든 다항식 중 가장 높은 차수입니다. 그러면 으로 정의됩니다:
를 암시적으로 가정합니다 . 그리고 진폭에 적용된 매핑은 다음과 같이 주어집니다
이 매핑은 제어된 폴리 Y 회전을 기반으로 하고 PolynomialPauliRotations.
-
새로운 모듈
qiskit.algorithms이 도입되었습니다. 이 모듈에는 이전에qiskit.aqua.algorithms모듈(현재는 사용되지 않음)에서 제공하던 것과 동일한 기능이 포함되어 있으며, 양자 알고리즘을 구성하기 위한 빌딩 블록을 제공합니다.qiskit-aqua에서 이 새 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요. -
새로운 모듈
qiskit.opflow이 도입되었습니다. 이 모듈에는 이전에qiskit.aqua.operators모듈(현재는 사용되지 않음)에서 제공하던 것과 동일한 기능이 포함되어 있으며, 양자 알고리즘을 구축하는 데 사용되는 연산자와 상태 함수를 제공합니다.qiskit-aqua에서 이 새 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요. -
Linux aarch64 시스템용 사전 컴파일된 바이너리 휠이 포함된 첫 번째 릴리스입니다. manylinux2014 호환 aarch64 Linux 시스템을 실행하는 경우 이제 PyPI, 에서 미리 컴파일된 휠을 사용할 수 있으므로 더 이상 소스에서 빌드하여 qiskit-terra를 설치할 필요가 없습니다.
-
이제
qiskit.quantum_info.process_fidelity()함수를 이제 단일이 아닌 타겟 채널에 사용할 수 있습니다. 이 경우 반환된 값은 정규화된 값의qiskit.quantum_info.state_fidelity()채널의 정규화된qiskit.quantum_info.Choi행렬과 같습니다.참고
qiskit.quantum_info.average_gate_fidelity()및qiskit.quantum_info.gate_error()함수는 여전히 대상 채널이 단일 채널이어야 하며, 그렇지 않은 경우 예외를 발생시킵니다. -
새로운 펄스 빌더 기능(
qiskit.pulse.macro())이 추가되었습니다. 이렇게 하면 일반 Python 함수를 매크로로 꾸밀 수 있습니다. 이렇게 하면 펄스 빌더 기능을 데코레이션된 함수 내에서 사용할 수 있습니다. 그런 다음 빌더 매크로를 펄스 빌드 컨텍스트 내에서 호출하여 코드를 재사용할 수 있습니다.예를 들면 다음과 같습니다.
from qiskit import pulse @pulse.macro def measure(qubit: int): pulse.play(pulse.GaussianSquare(16384, 256, 15872), pulse.MeasureChannel(qubit)) mem_slot = pulse.MemorySlot(0) pulse.acquire(16384, pulse.AcquireChannel(0), mem_slot) return mem_slot with pulse.build(backend=backend) as sched: mem_slot = measure(0) print(f"Qubit measured into {mem_slot}") sched.draw() -
새로운 클래스
PauliTwoDesign클래스가 추가되었습니다qiskit.circuit.library의 특정 형태의 2-디자인 회로를 구현하는 클래스입니다 https://arxiv.org/pdf/1803.11173.pdf 예를 들어, 이 회로는 다음과 같습니다:from qiskit.circuit.library import PauliTwoDesign circuit = PauliTwoDesign(4, reps=2, seed=5, insert_barriers=True) circuit.decompose().draw(output='mpl') -
이제 새로운 펄스 서랍
qiskit.visualization.pulse_v2.draw()(별칭은qiskit.visualization.pulse_drawer_v2)을 사용할 수 있습니다. 이 새로운 펄스 서랍은 기존 펄스 서랍에는 없던 여러 가지 새로운 기능을 지원합니다(pulse_drawer()).- 긴 펄스 지침 잘라내기.
- 파라메트릭 펄스의 시각화.
- 새로운 스타일시트
IQXStandard,IQXSimple,IQXDebugging. - 시스템 정보 시각화(채널 주파수 등...) 를 지정하여
qiskit.providers.Backend개체를 지정하여 시각화할 수 있습니다. - 플롯에
axis객체를 지정하여 생성된 플롯의 추가 확장, 즉 게시 조작을 허용합니다.
새로운 스타일시트는 채널 컬렉션 재조립, 지침 세부 정보 표시, 펄스 봉투 모양 업데이트 등과 같이 출력 이미지의 모양을 동적으로 수정하는 콜백 함수를 사용할 수 있습니다 사용자 지정 콜백 함수를 만들어 스타일시트 인스턴스에 공급하여 드로어 코드를 수정하지 않고도 그림 모양을 수정할 수 있습니다. 자세한 내용은 펄스 서랍 모듈 문서 설명을 참조하세요.
파일 저장은 이제 Matplotlib 로 위임되었습니다. 이미지 파일을 저장하려면
Figure객체를 반환하는savefig메서드를 호출해야 합니다. -
메서드를 추가합니다
reverse_qargs()메서드에qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix클래스에 메서드를 추가합니다. 이 메서드는 상태의 하위 시스템 순서를 반대로 하며, N-큐비트 상태에 대한qiskit.circuit.QuantumCircuit.reverse_bits()메서드와 동일합니다. 예를 들어,from qiskit.circuit.library import QFT from qiskit.quantum_info import Statevector circ = QFT(3) state1 = Statevector.from_instruction(circ) state2 = Statevector.from_instruction(circ.reverse_bits()) state1.reverse_qargs() == state2 -
메서드를 추가합니다
reverse_qargs()메서드를 추가합니다qiskit.quantum_info.Operator클래스에 메서드를 추가합니다. 이 메서드는 연산자의 서브시스템 순서를 뒤집는 것으로, N-큐비트 연산자를 위한qiskit.circuit.QuantumCircuit.reverse_bits()메서드와 동일합니다. 예를 들어,from qiskit.circuit.library import QFT from qiskit.quantum_info import Operator circ = QFT(3) op1 = Operator(circ) op2 = Operator(circ.reverse_bits()) op1.reverse_qargs() == op2 -
함수에 대한
latex출력 메서드qiskit.visualization.circuit_drawer()함수와draw()메서드는 이제 출력 시각화에서 게이트에 사용자 정의 레이블을 사용합니다. 예를 들어,import math from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(2) qc.h(0) qc.rx(math.pi/2, 0, label='My Special Rotation') qc.draw(output='latex') -
routing_methodkwargtranspile()함수는 이제 새로운 옵션인'none'을 허용합니다.routing_method='none'시 라우팅 패스가 트랜스파일링의 일부로 실행되지 않습니다. 회로가 커플링 맵에 맞지 않으면TranspilerError예외가 발생합니다. -
새로운 게이트 클래스
RVGate라는 새로운 게이트 클래스가qiskit.circuit.library모듈에 해당QuantumCircuit메서드rv(). 는RVGate는 일반적인 회전 게이트이며, 이는UGate와 유사하지만 오일러 각을 지정하는 대신 회전 벡터의 세 가지 구성 요소가 지정되며, 벡터의 방향은 회전 축을 지정하고 크기는 축에 대한 회전 각도(라디안)를 지정합니다. 예를 들어,import math import np from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(1) theta = math.pi / 5 phi = math.pi / 3 # RGate axis: axis = np.array([math.cos(phi), math.sin(phi)]) rotation_vector = theta * axis qc.rv(*rotation_vector, 0) -
언바운드
Parameter객체에서 사용된QuantumCircuit객체는 이제 이름별로 정렬됩니다. 속성이 반환하는 매개변수에 대해 적용되며parameters어트리뷰트가 반환하는 매개변수에 적용됩니다. 또한qiskit.circuit.QuantumCircuit.bind_parameters()와qiskit.circuit.QuantumCircuit.assign_parameters()메서드는 이제 값 목록을 받아 이름 정렬 순서대로 매개변수에 바인딩/할당할 수 있습니다. 이전에는 이러한 메서드에 매개변수와 값의 사전만 필요했습니다. 예를 들어,from qiskit.circuit import QuantumCircuit, Parameter circuit = QuantumCircuit(1) circuit.rx(Parameter('x'), 0) circuit.ry(Parameter('y'), 0) print(circuit.parameters) bound = circuit.bind_parameters([1, 2]) bound.draw(output='mpl') -
의 생성자와
qiskit.quantum_info.Statevector과qiskit.quantum_info.DensityMatrix클래스의 생성자는 이제QuantumCircuit객체를 가져와서Statevector와DensityMatrix객체를 생성할 수 있습니다(큐비트가 에서 초기화되어 있다고 가정). 예를 들어from qiskit import QuantumCircuit from qiskit.quantum_info import Statevector qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) statevector = Statevector(qc) statevector.draw(output='latex') -
새로운 가짜 백엔드 클래스는
qiskit.test.mock에서 확인할 수 있습니다. 여기에는ibmq_casablanca,ibmq_sydney,ibmq_mumbai,ibmq_lima,ibmq_belem,ibmq_quito의 모의 버전이 포함되었습니다. 다른 가짜 백엔드와 마찬가지로 여기에는 캘리브레이션 데이터의 스냅샷(예:backend.defaults())이 포함됩니다 및 오류 데이터(예:backend.properties()) 실제 시스템에서 가져온 것으로 로컬 테스트, 컴파일 및 시뮬레이션에 사용할 수 있습니다.
알려진 문제점
-
qiskit.pulse.Instruction매개변수화된duration(즉,duration값이 바인딩되지 않은Parameter또는ParameterExpression객체)를qiskit.pulse.Schedule는 지원되지 않습니다. 시도하면UnassignedDurationErrorPulseError가 표시됩니다. 이는 현재Instruction중첩 제약 조건이 평가되는 방식의 한계입니다. 이는 다음에서 지원됩니다ScheduleBlock에서 지원되며, 이 경우 오버랩 제약 조건은 실행 직전에 평가됩니다. -
Windows 시스템에서 병렬 실행이 활성화된 경우
parallel_map()에 병렬 실행이 활성화된 경우if __name__ == '__main__':블록 외부에서 실행되는 스크립트에서 호출할 때 병렬 처리가 작동하지 않을 수 있습니다. 이는 Python 이 Windows에서 병렬 프로세스를 실행하는 방식 때문입니다.RuntimeError또는AttributeError을 호출하는 스크립트에서 발생하는 경우parallel_map()(내부적으로parallel_map()를 사용하는 함수 사용 포함transpile()) Windows 및 병렬 처리가 활성화된 상태에서 스크립트 호출을if __name__ == '__main__':안에 삽입하여 문제를 해결할 수 있습니다. 예를 들어,from qiskit import QuantumCircuit, QiskitError from qiskit import execute, Aer qc1 = QuantumCircuit(2, 2) qc1.h(0) qc1.cx(0, 1) qc1.measure([0,1], [0,1]) # making another circuit: superpositions qc2 = QuantumCircuit(2, 2) qc2.h([0,1]) qc2.measure([0,1], [0,1]) execute([qc1, qc2], Aer.get_backend('qasm_simulator'))는 다음과 같이 변경되어야 합니다.
from qiskit import QuantumCircuit, QiskitError from qiskit import execute, Aer def main(): qc1 = QuantumCircuit(2, 2) qc1.h(0) qc1.cx(0, 1) qc1.measure([0,1], [0,1]) # making another circuit: superpositions qc2 = QuantumCircuit(2, 2) qc2.h([0,1]) qc2.measure([0,1], [0,1]) execute([qc1, qc2], Aer.get_backend('qasm_simulator')) if __name__ == '__main__': main()에서 병렬 처리에 오류가 발생하는 경우.
업그레이드 주의사항
-
사전 설정 패스 관리자
level_1_pass_manager,level_2_pass_manager및level_3_pass_manager(optimization_level1, 2, 3의transpile()과execute()함수)는 이제 무조건 1 큐비트 게이트 최적화를 위해Optimize1qGatesDecomposition패스를 무조건 사용합니다. 이전에는 이러한 패스 관리자가 기본 게이트에Optimize1qGates기본 게이트에u1,u2, 또는u3이 포함된 경우 패스를 사용했습니다. 이전 버전을 계속 사용하려면Optimize1qGates패스로 사용자 정의PassManager를 생성해야 합니다. -
매개변수화된
QuantumCircuit를 변환한 후global_phase어트리뷰트가 더 이상 단순화된 형태로 반환되지 않을 수 있으며, 전역 위상이 a인 경우ParameterExpression.예를 들어,
qc = QuantumCircuit(1) theta = Parameter('theta') qc.rz(theta, 0) qc.rz(-theta, 0) print(transpile(qc, basis_gates=['p']).global_phase)이전에는
0을 반환했지만 이제-0.5*theta + 0.5*theta을 반환합니다. 이 변경이 필요했던 이유는 기호 표현식을 단순화하면 런타임 성능이 크게 저하될 수 있기 때문인데, 특히 회로에 객체가 많은 경우ParameterExpression객체가 많은 경우 특히 그렇습니다. -
이제
BasicAerJobBasicAer 백엔드에서 반환된 작업 객체는 이제 동기 인스턴스인JobV1. 즉, 시뮬레이션 실행이 완료될 때까지run()호출은 시뮬레이션 실행이 완료될 때까지 차단됩니다. 이전 비동기 동작을 복원하려면 다음을 래핑해야 합니다run()를futures.ThreadPoolExecutor또는futures.ProcessPoolExecutor과 같은 별도의 스레드나 프로세스에서 실행되는 것으로 래핑해야 합니다. -
BasicAer 시뮬레이터의
allow_sample_measuring옵션QasmSimulatorPy의 기본값이False에서True으로 변경되었습니다. 이는 입력 회로가 샘플 측정을 지원하는 경우(활성화되어 있지 않더라도) 이를 사용하는 시뮬레이터의 실제 기본 동작을 더 잘 반영하기 위해 수행되었습니다. 샘플 측정을 지원하지 않는 회로를 실행하는 경우(즉,Reset연산이 있거나 큐비트에서 측정 후 연산이 있는 경우) 이 옵션을False으로 명시적으로 설정해야 합니다run(). -
트랜스파일러 패스는
CommutativeCancellation트랜스파일러 패스는 이제 대상 기준 게이트를 인식하므로 지정된 기준의 게이트만 사용합니다. 이전에는 패스로 출퇴근하는 연속 게이트는 무조건ZGate를U1Gate. 그러나 이제 패스가 베이스를 인식하고 대상 베이스를 지정하기 위한 kwarg(basis_gates)가 있으므로 kwarg를 설정하지 않으면 동작이 변경될 가능성이 있습니다.basis_gateskwarg가 사용되지 않고 회로에 가변 Z 회전 게이트가 없는 경우 정류 취소가 발생하지 않습니다. -
Register(의 부모 클래스인QuantumRegister와ClassicalRegister와Bit(의 부모 클래스인Qubit및Clbit) 객체는 이제 불변입니다. 이전 릴리스에서는 값을 조정할 수 있었습니다size또는name속성의 값을 조정할 수 있었습니다Register객체의 값과index또는register속성의 값을 조정할 수 있었습니다Bit객체를 처음 생성한 후 그러나 이러한 속성은 레지스터 또는 비트의 불변 속성으로 취급되므로 해시(예: 딕셔너리)에 의존하는 컨테이너 구조를 손상시키는 불건전한 동작이 발생할 수 있습니다(자세한 내용은 #4705 참조). 이러한 불건전한 동작을 방지하기 위해 이 속성은Register및Bit의 속성은 최초 생성 후 더 이상 설정할 수 없습니다. 이전에 런타임에 개체를 조정했다면 이제 새 값으로Register또는Bit개체를 새로 만들어야 합니다. -
DAGCircuit.__eq__메서드(==운영자가 사용하는)는 구조적 동일성을 확인하는 데 사용됩니다DAGCircuit및QuantumCircuit인스턴스의 구조적 동일성을 확인하는 데 사용되는global_phase및calibrations속성이 동일성을 검사하는 필드에 포함됩니다. 즉, 이전 릴리스에서는 동일한 것으로 평가되던 회로가global_phase또는calibrations이 다를 경우 더 이상 동일하지 않을 수 있습니다. 예를 들어, 이전 릴리스에서는True을 반환합니다:import math from qiskit import QuantumCircuit qc1 = QuantumCircuit(1) qc1.x(0) qc2 = QuantumCircuit(1, global_phase=math.pi) qc2.x(0) print(qc2 == qc1)그러나 이제 회로의
global_phase속성이 다르므로 이제False을 반환합니다. -
이전에 더 이상 사용되지 않는
qubits()및clbits()메서드가 제거되었습니다DAGCircuit클래스의 메서드는 0.15.0 테라 릴리스에서 더 이상 사용되지 않습니다. 대신qubits및clbits속성을 사용해야 합니다DAGCircuit클래스의 속성을 사용해야 합니다. 예를 들어, 달리기를 하는 경우입니다:from qiskit.dagcircuit import DAGCircuit dag = DAGCircuit() qubits = dag.qubits()이는 다음과 같이 대체됩니다:
from qiskit.dagcircuit import DAGCircuit dag = DAGCircuit() qubits = dag.qubits -
가짜 펄스 백엔드에서 반환되는
PulseDefaults가짜 펄스 백엔드에서 반환되는qiskit.test.mock.FakeOpenPulse2Q및qiskit.test.mock.FakeOpenPulse3Q이 보다 현실적인 펄스 시퀀스 정의를 갖도록 업데이트되었습니다. 이러한 가짜 백엔드 클래스를 사용 중인 경우 이러한 변경 사항으로 인해 사용법을 업데이트해야 할 수 있습니다. -
decompose_clifford()함수에서 사용하는 기본 합성 방법은quantum_info모듈( 내부적으로qiskit.quantum_info.Clifford.to_circuit()메서드에서 내부적으로 사용됨)는 이제 3 큐비트 이상의 클리포드 요소 합성을 위해 최적이 아닌 탐욕스러운 컴파일 루틴을 사용합니다(Bravyi 등). al., 를 사용하면 일반적으로 기존 기본값에 비해 더 나은 CX 비용을 얻을 수 있습니다. 이전 아론슨-고츠먼 방식으로 되돌려야 하는 경우method='AG'을 설정하면 됩니다. -
0.15.0 릴리스에서 사용되지 않는 모듈
qiskit.visualization.interactive은 이제 제거되었습니다. 대신 matplotlib 기반 시각화를 사용해야 합니다:대화형 기능 제거동등한 matplotlib 함수iplot_bloch_multivectorqiskit.visualization.plot_bloch_multivector()iplot_state_cityqiskit.visualization.plot_state_city()iplot_state_qsphereqiskit.visualization.plot_state_qsphere()iplot_state_hintonqiskit.visualization.plot_state_hinton()iplot_histogramqiskit.visualization.plot_histogram()iplot_state_paulivecqiskit.visualization.plot_state_paulivec() -
qiskit.Aer및qiskit.IBMQ최상위 속성은 이제 지연 로드됩니다. 즉, 이제 개체가 항상 존재하며qiskit-aer또는qiskit-ibmq-provider이 설치되어 있지 않거나 Python 에서 찾을 수 없는 경우 가져오기 시 더 이상 경고가 표시되지 않습니다. 이러한 모듈 속성을 사용하여qiskit-aer또는qiskit-ibmq-provider의 존재 여부를 확인하고None와 명시적으로 비교하거나 속성이 없는지 확인했다면 이제 항상 객체로 정의되어 있으므로 더 이상 작동하지 않습니다. 즉, 다음과 같이 실행합니다:try: from qiskit import Aer except ImportError: print("Aer not available") or:: try: from qiskit import IBMQ except ImportError: print("IBMQ not available")는 더 이상 작동하지 않습니다. 대신 이러한 제공업체가 있는지 확인하려면
qiskit.providers.aer.Aer및qiskit.providers.ibmq.IBMQ을 명시적으로 사용할 수 있습니다:try: from qiskit.providers.aer import Aer except ImportError: print("Aer not available") try: from qiskit.providers.ibmq import IBMQ except ImportError: print("IBMQ not available")를 클릭하거나
bool(qiskit.Aer),bool(qiskit.IBMQ)등을 확인하세요:import qiskit if not qiskit.Aer: print("Aer not available") if not qiskit.IBMQ: print("IBMQ not available")이 변경은 키스킷 패키지 간의 잠재적인 가져오기 주기 문제를 방지하고 Aer 또는 IBMQ를 사용하지 않을 때 가져오기 시간을 개선하기 위해 필요했습니다.
-
사용자 구성 파일 옵션
suppress_packaging_warnings옵션과QISKIT_SUPPRESS_PACKAGING_WARNINGS환경 변수는 더 이상 영향을 미치지 않으며 자동으로 무시됩니다. 이 옵션이 제어하던 경고는 제거되었으며 더 이상qiskit모듈에서 가져오기 시점에 표시되지 않습니다. -
이전에 사용되지 않던
conditionkwarg forqiskit.dagcircuit.DAGNode생성자가 제거되었습니다. 0.15.0 릴리스에서 더 이상 사용되지 않습니다. 대신 이제 전달된 객체에 대해 고전적인 조건을 설정해야 합니다Instruction생성자에 전달된 객체에DAGNodeop생성자에 전달된 객체에 기존 조건을 설정해야 합니다. -
새 클래스를 생성할 때
Register(의 부모 클래스인QuantumRegister및ClassicalRegister) 또는QuantumCircuit객체를 생성할 때(예:QuantumCircuit(2)), 이제 비트 수를 정수 또는 모호하지 않은 정수로 형변환 가능한 다른 유형(예:2.0)으로 지정해야 합니다. 정수가 아닌 값은 이제 의도가 불분명하므로 오류가 발생합니다(분수 비트를 가질 수 없음). 변경된 이유에 대한 자세한 내용은 다음을 참조하세요: #4855 -
네트워크X는 더 이상 키스킷-테라에 대한 요구 사항이 아닙니다. 3개의 메서드를 제외한 모든 네트워크x 사용은 qiskit-terra 내에서 제거되었습니다:
qiskit.dagcircuit.DAGCircuit.to_networkxqiskit.dagcircuit.DAGCircuit.from_networkxqiskit.dagcircuit.DAGDependency.to_networkx
이러한 방법 중 하나를 사용하는 경우 계속 사용하려면 사용자 환경에 네트워크x를 수동으로 설치해야 합니다.
-
기본적으로 macOS 에서 Python >= 3.8
parallel_map()는 더 이상 여러 프로세스에서 실행되지 않습니다. 이는 이전 릴리스에서 기본 동작이 여러 프로세스가parallel_map()가 여러 프로세스를 실행하는 것이 기본 동작이었습니다. macOS 이 변경은 Python 3.8 및 3.9 의 최신 버전에서는 멀티 프로세싱이 불안정하거나fork대신spawn으로 새 프로세스를 시작하는 Python 3.8 의 변경으로 인해 상당한 오버헤드가 추가되기 때문에 이루어졌습니다. Python >= 3.8 를 사용하여 macOS 에서 병렬 실행을 다시 활성화하려면 사용자 구성 파일parallel옵션을 사용하거나 환경 변수QISKIT_PARALLEL를True로 설정하면 됩니다. -
클래스의 생성자에서 이전에 더 이상 사용되지 않는 kwarg
callbackPassManager클래스의 생성자에서 이전에 사용되지 않던 쿽이 제거되었습니다. 이 kwarg는 0.13.0 릴리스(2020년 4월 9일) 이후 더 이상 사용되지 않습니다. 대신callbackkwarg를 직접qiskit.transpiler.PassManager.run()메서드에 직접 전달할 수 있습니다. 예를 들어, 사용 중인 경우from qiskit.circuit.random import random_circuit from qiskit.transpiler import PassManager qc = random_circuit(2, 2) def callback(**kwargs) print(kwargs['pass_']) pm = PassManager(callback=callback) pm.run(qc)로 대체할 수 있습니다:
from qiskit.circuit.random import random_circuit from qiskit.transpiler import PassManager qc = random_circuit(2, 2) def callback(**kwargs) print(kwargs['pass_']) pm = PassManager() pm.run(qc, callback=callback) -
이제 더 이상
qiskit.pulse.Channel또는qiskit.pulse.PulseChannel과 같은 접두사 없이 기본 채널을 인스턴스화할 수 없습니다. 이러한 클래스는qiskit.pulse.DriveChannel와 같은 다양한 사용자 대면 채널 클래스의 유형을 분류하도록 설계되었지만 대상 리소스로서의 정의는 없습니다. 이전에qiskit.pulse.Channel또는qiskit.pulse.PulseChannel을 직접 인스턴스화했다면 더 이상 허용되지 않습니다. 적절한 하위 클래스를 사용하세요. -
require_cp및/또는require_tp의 경우qiskit.quantum_info.process_fidelity(),qiskit.quantum_info.average_gate_fidelity(),qiskit.quantum_info.gate_error()가True인 경우, 이제 입력 채널이 각각 CP가 아닌 경우 예외를 발생시키는 이전 동작 대신QiskitError예외를 발생시키는 이전 동작 대신 경고만 기록합니다. -
클래스의
QFT모듈의qiskit.circuit.library모듈의 클래스는 이제 텐서의 리틀 엔디안 표현을 사용하여 푸리에 변환을 계산합니다. 즉, 계산 기반이 정수의 리틀 엔디안 비트 순서와 일치한다고 가정하면 상태는 에 매핑됩니다. 등 이는 비트 순서에 리틀 엔디안 규칙을 사용하는 키스킷의 나머지 부분과 일관성을 유지하기 위한 것입니다. 이전 비트 순서에 의존하고 있었다면reverse_bits()메서드를 사용하여 이전 동작으로 되돌릴 수 있습니다. 예를 들어,from qiskit.circuit.library import QFT qft = QFT(5).reverse_bits() -
이전에는
dict이었던qiskit.__qiskit_version__모듈 어트리뷰트는 이제 가져오기 시점이 아닌 런타임에 qiskit 요소의 버전을 확인하는 사용자 정의 읽기 전용Mapping객체를 반환합니다. 이는 패키지에서 버전이 필요한 경우에만 런타임에 요소 패키지를 가져옴으로써 qiskit의 가져오기 경로를 가속화하고 가능한 가져오기 주기를 없애기 위해 수행되었습니다. 이는 이전에 반환한dict과 완전히 호환되어야 하며 대부분의 일반적인 사용 사례에서는 차이가 없습니다. 그러나 일부 애플리케이션이 콘텐츠를 변경하거나 명시적으로 유형 검사에 의존하는 경우 이 변경 사항에 적응하기 위해 업데이트가 필요할 수 있습니다. -
qiskit.execute모듈의 이름이qiskit.execute_function. 이는 다음과 같이 재내보내는 함수 사이의 잠재적인 이름 충돌을 피하기 위해 필요했습니다execute()함수로 다시 내보내는qiskit.execute.qiskit.execute함수가qiskit.execute모듈과 충돌할 수 있는데, 이는 Python 이qiskit.execute을 모듈로 취급하거나 그 반대의 경우로 인해 암호화된 오류로 이어질 수 있습니다. 이 충돌을 피하기 위해 모듈 이름을 변경해야 했습니다.qiskit.execute를 가져와서 모듈을 가져오는 경우(일반적인 사용법은from qiskit.execute import execute)에는qiskit.execute_function를 대신 사용하도록 업데이트해야 합니다.qiskit.execute는 이제 항상 해당 함수로 해결됩니다. -
qiskit.compiler.transpile,qiskit.compiler.assemble,qiskit.compiler.schedule,qiskit.compiler.sequence모듈의 이름이 각각qiskit.compiler.transpiler,qiskit.compiler.assembler,qiskit.compiler.scheduler,qiskit.compiler.sequence로 변경되었습니다. 이는 모듈과 다시 내보낸 함수 경로 사이의 잠재적인 이름 충돌을 피하기 위해 필요했습니다qiskit.compiler.transpile(),qiskit.compiler.assemble(),qiskit.compiler.schedule()및qiskit.compiler.sequence(). 일부 상황에서는 모듈 경로와 다시 내보낸 함수 경로 간의 이름 충돌로 인해 Python 이 함수를 사용하려는 의도가 있는데도 가져오기를 모듈로 취급하거나 그 반대의 경우 암호화된 오류가 발생할 수 있습니다. 이 충돌을 피하기 위해 모듈 이름을 변경해야 했습니다. 이전에 임포트를 사용하여 모듈을 가져온 경우(일반적인 사용법은 qiskit.compiler.transpile import transpile``에서``처럼) 새 모듈 경로를 사용하려면 이를 업데이트해야 합니다.qiskit.compiler.transpile(),qiskit.compiler.assemble(),qiskit.compiler.schedule()및qiskit.compiler.sequence()는 이제 항상 함수로 리졸브됩니다. -
클래스는
qiskit.quantum_info.Quaternion클래스는 그 목적을 더 잘 반영하기 위해qiskit.quantum_info.operator서브모듈에서qiskit.quantum_info.synthesis서브모듈로 이동했습니다. 루트 모듈에서 가져오는 경우 변경할 필요가 없지만qiskit.quantum_info모듈에서 임포트하는 경우에는 변경할 필요가 없지만qiskit.quantum_info.operator에서 임포트하는 경우에는 임포트 경로를 업데이트해야 합니다. -
2020년 4월 키스킷 테라 0.14.0 릴리스 이후 사용되지 않는
QuantumCircuit.mcmt메서드를 제거했습니다. 메서드를 사용하는 대신MCMT클래스를 대신 사용하여 다중 제어 다중 타겟 게이트를 구성하고qiskit.circuit.QuantumCircuit.append()또는qiskit.circuit.QuantumCircuit.compose()를 사용하여 회로에 추가하세요.예를 들어 교체할 수 있습니다:
circuit.mcmt(ZGate(), [0, 1, 2], [3, 4])다음 행으로 바꾸십시오.
from qiskit.circuit.library import MCMT mcmt = MCMT(ZGate(), 3, 2) circuit.compose(mcmt, range(5)) -
2020년 4월 키스킷 테라 0.14.0 릴리스 이후 더 이상 사용되지 않는
QuantumCircuit.diag_gate메서드를 제거했습니다. 대신diagonal()메서드의QuantumCircuit. -
2020년 4월 키스킷 테라 0.14.0 릴리스 이후 더 이상 사용되지 않는
QuantumCircuit.ucy메서드를 제거했습니다. 대신ucry()메서드의QuantumCircuit. -
이전에 더 이상 사용되지 않는
mirror()메서드qiskit.circuit.QuantumCircuit가 제거되었습니다. 0.15.0 릴리스에서 더 이상 사용되지 않습니다. 대신qiskit.circuit.QuantumCircuit.reverse_ops()메서드를 대신 사용해야 합니다. 미러링은 회로의 출력 큐비트를 교체하는 것과 혼동될 수 있기 때문입니다.reverse_ops()메서드는 미러링 대신 적용되는 게이트의 순서만 바꿉니다. -
이전에 더 이상 사용되지 않는 플로트 전달 지원(
scalekwarg를 첫 번째 위치 인수로 사용하는 경우qiskit.circuit.QuantumCircuit.draw()가 제거되었습니다. 0.12.0 릴리스에서 더 이상 사용되지 않습니다. 메서드의 첫 번째 위치 인수는qiskit.circuit.QuantumCircuit.draw()메서드의 첫 번째 위치 인수는 이제 부동형을 허용하지 않는outputkwarg입니다. 대신scale을 위치적으로 사용하는 대신 네임드 kwarg로 사용해야 합니다.예를 들어 이전에
draw으로 전화했다면:from qiskit import QuantumCircuit qc = QuantumCircuit(2) qc.draw(0.75, output='mpl')이제 이렇게 해야 합니다:
from qiskit import QuantumCircuit qc = QuantumCircuit(2) qc.draw(output='mpl', scale=0.75)또는:
qc.draw('mpl', scale=0.75) -
키스킷 펄스의 기능(
qiskit.pulse) 기능은 0.15.0 릴리스(2020년 8월)에서 더 이상 사용되지 않으며 제거되었습니다. 전체 변경 사항은 다음과 같습니다:모듈이전새로 작성qiskit.pulse.librarySamplePulseWaveformqiskit.pulse.libraryConstantPulseConstant(모듈 이름 변경) pulse.pulse_lib모듈qiskit.pulse.library클래스이전 메소드새 메소드ParametricPulseget_sample_pulseget_waveformInstructioncommand해당사항 없음 명령과 지침이 통합되었습니다. operands()을 사용하여 지침 데이터에 대한 정보를 얻으세요.Acquireacquires,mem_slots,reg_slotsacquire(),mem_slot(),reg_slot(). (Acquire명령어는 더 이상 여러 큐비트에 걸쳐 브로드캐스트되지 않습니다.) -
이전에 붙잡고 있던 사전
DAGCircuit가장자리가 제거되었습니다. 대신, 이제 엣지는 이전에 사전에 포함되었던Bit인스턴스를'wire'필드에 포함시킵니다.to_networkx()에서 반환된 NetworkX 그래프에는 여전히 에지 속성에 대한 사전이 있지만'name'필드는 더 이상 채워지지 않습니다. -
속성의
parameters속성은QuantumCircuit클래스의 속성이 더 이상set을 반환하지 않습니다. 대신set에서 제공하는 모든 메서드를 구현하는ParameterView객체를 반환합니다(더 이상 사용되지 않지만). 이는 이름 정렬된 매개변수를 보존하는 모델을 지원하기 위해 수행되었습니다. 속성이 반환한set의 이전 사용법과 완전히 호환되어야 합니다parameters속성이 반환한 이전 사용법과 호환되어야 합니다. 단, 집합의 명시적 유형 검사가 수행된 경우는 예외입니다. -
실행 시
transpile()에서QuantumCircuit와 함께delay()명령어로 실행할 때, 단위는 dt(샘플 시간)의 값이transpile()로 명시적으로 또는dtkwarg를 통해 또는BackendConfigurationbackend를 통해 전달된Backend객체의 경우입니다. -
meas_map(객체의 어트리뷰트이거나PulseBackendConfiguration객체의 속성이거나meas_map에 대응하는schedule(),assemble(),sequence()또는execute()함수)의 해석이 하드웨어의 실제 제약 조건과 더 잘 일치하도록 업데이트되었습니다. 이 데이터의 형식은 목록 목록이며, 내부 목록의 항목은 큐비트 레이블을 지정하는 정수입니다. 예:[[A, B, C], [D, E, F, G]]이전에는
meas_map제약 조건이 하나의 큐비트(예: A)가 획득되면 해당 큐비트와 하위 그룹을 공유하는 다른 모든 큐비트(B 및 C)가 동시에 같은 기간 동안 획득되어야 한다고 해석되었습니다. 이 제약 조건이 완화되었습니다. 한 번 획득했다고 해서 더 많은 획득이 필요하지 않습니다. (A를 획득한 경우 B와 C는 획득할 필요가 없습니다.) 대신, 동일한 측정 그룹의 큐비트는 부분적으로 겹치는 방식으로 획득할 수 없습니다.meas_map이 공유 획득 리소스를 지정한다고 생각하면 됩니다(t=1000에서t=2000로 A를 획득하면1000<t<2000에서 시작하는 B를 획득할 수 없습니다). 예를 들어,# Good meas_map = [[0, 1]] # Acquire a subset of [0, 1] sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) # Acquire 0 and 1 together (same start time, same duration) sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) # Acquire 0 and 1 disjointly sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) << 10 # Acquisitions overlap, but 0 and 1 aren't in the same measurement # grouping meas_map = [[0], [1]] sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) << 1 # Bad: 0 and 1 are in the same grouping, but acquisitions # partially overlap meas_map = [[0, 1]] sched = pulse.Schedule() sched = sched.append(pulse.Acquire(10, acq_q0)) sched = sched.append(pulse.Acquire(10, acq_q1)) << 1
지원 중단 노트
-
에 두 개의 새로운 인수가 추가되었습니다
qiskit.dagcircuit.DAGNode.semantic_eq(),bit_indices1및bit_indices2에 두 개의 새로운 인수가 추가되었는데, 이는 각 인스턴스의Bit인스턴스를DAGNode의 인스턴스를qubits또는clbits목록의 해당 인덱스에 매핑할 것으로 예상됩니다DAGCircuit. 사용 중단 기간 동안 이러한 인수는 선택 사항이며 지정하지 않으면 각 인스턴스의register및index속성을 기반으로 매핑이 자동으로 구성됩니다Bit인스턴스의 속성을 기반으로 매핑이 자동으로 구성됩니다. 그러나 향후 릴리스에서는 필수 인수가 될 것이며 매핑은 사용자가 제공해야 합니다. -
빌더 함수
pulse빌더 기능:qiskit.pulse.call_circuit()qiskit.pulse.call_schedule()
는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이러한 기능은
qiskit.pulse.call()으로 통합되어 대신 사용해야 합니다. -
메서드
qiskit.pulse.Schedule메서드qiskit.pulse.Schedule.flatten()메서드는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 동일한 작업을 수행하는qiskit.pulse.transforms.flatten()함수를 사용하여 동일한 작업을 수행할 수 있습니다. -
다음 클래스의 경우
assign_parameters():qiskit.pulse.channels.Channel,qiskit.pulse.library.Pulse,qiskit.pulse.instructions.Instruction,
및 모든 하위 클래스는 이제 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 기능은 매개변수화된 펄스 프로그램을 구성하는
ScheduleBlock에 포함되었으며, 이는 파라미터화된 펄스 프로그램을 구성하기 위한 향후 방향입니다. -
다음 클래스에 대한
parameters속성입니다:은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 기능은 매개변수화된 펄스 프로그램을 구성하는
ScheduleBlock에 포함되었으며, 이는 파라미터화된 펄스 프로그램을 구성하기 위한 향후 방향입니다. -
Python 3.6 지원은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 지원이 중단되면 사용 중인 Python 버전을 Python 3.7 이상으로 업그레이드해야 합니다.
-
Two
QuantumCircuit메서드combine()및extend()와 해당 Python 연산자+및+=는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신QuantumCircuit메서드compose()메서드를 사용해야 합니다. 메서드를 사용하면compose()메서드를 사용하면 일치하는 레지스터가 없는 두 개의 회로를 보다 유연하게 구성할 수 있습니다. 그러나 더 이상 사용되지 않는 방법과 달리 큐비트/클릭비트를 자동으로 추가하지는 않습니다. 새 큐비트/클릭비트에 회로를 추가하려면qiskit.circuit.QuantumCircuit.tensor()메서드를 사용할 수 있습니다. 예를 들어,from qiskit.circuit import QuantumRegister, QuantumCircuit a = QuantumRegister(2, 'a') circuit_a = QuantumCircuit(a) circuit_a.cx(0, 1) b = QuantumRegister(2, 'b') circuit_b = QuantumCircuit(b) circuit_b.cz(0, 1) # same as circuit_a + circuit_b (or combine) added_with_different_regs = circuit_b.tensor(circuit_a) # same as circuit_a + circuit_a (or combine) added_with_same_regs = circuit_a.compose(circuit_a) # same as circuit_a += circuit_b (or extend) circuit_a = circuit_b.tensor(circuit_a) # same as circuit_a += circuit_a (or extend) circuit_a.compose(circuit_a, inplace=True) -
인스턴스 전달 지원
Qubit인스턴스를qubitskwarg로 전달하기 위한 지원은qiskit.transpiler.InstructionDurations.get()메서드에 대한 지원은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 원하는 큐비트의 정수 인덱스로get()메서드를 원하는 큐비트의 정수 인덱스로 호출해야 합니다. -
BaseOperator서브클래스의compose메서드 호출에@(__matmul__)를 사용하는 경우(예Operator)는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 메서드qiskit.quantum_info.Operator.compose()메서드를 직접 사용하거나&(__and__) 연산자를 사용하여 호출할 수도 있습니다. -
*(__mul__)를 사용하여dot()메서드를 호출하는 데BaseOperator서브클래스(예qiskit.quantum_info.Operator)는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신dot()를 직접 호출할 수 있습니다. -
@(__matmul__)를 사용하여evolve()메서드의qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.evolve메서드는 직접 사용하거나&(__and__) 연산자를 사용하여 호출할 수도 있습니다. -
qiskit.pulse.schedule.ParameterizedSchedule클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 펄스 객체를 직접 매개변수화할 수 있습니다Schedule객체를 직접 매개변수화할 수 있습니다Parameter객체로 직접 매개변수화할 수 있습니다:from qiskit.circuit import Parameter from qiskit.pulse import Schedule from qiskit.pulse import ShiftPhase, DriveChannel theta = Parameter('theta') target_schedule = Schedule() target_schedule.insert(0, ShiftPhase(theta, DriveChannel(0)), inplace=True) -
모듈의
qiskit.pulse.ScheduleComponent클래스는qiskit.pulse모듈의 클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 또는qiskit.pulse.Schedule또는qiskit.pulse.Instruction으로 직접 교체해야 합니다. 또한ScheduleComponent클래스의 주요 목적은 두 가지 모두에 대한 공통 기본 클래스였습니다ScheduleScheduleComponent및Instruction입력을 수락하는 것을 명시적으로 형식 검사하거나 문서화했던 모든 곳의 경우Instruction또는Schedule. -
IBMQ API 페이로드에 대한 JSON 스키마 파일 및 사용법은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 여기에는
qiskit.schemas모듈과qiskit.validation모듈 아래의 모든 것이 포함됩니다. 여기에는validatekwargs에 대한qiskit.qobj.QasmQobj.to_dict()와qiskit.qobj.QasmQobj.to_dict()의 모듈 수준 fastjsonschema 유효성 검사기와 함께qiskit.qobj(사용 중단 경고를 발생시키지 않음). 스키마 파일은 Qiskit/ibmq-schemas 리포지토리로 이동되었으며, 이 스키마 파일은 API 스키마의 정식 버전으로 취급되어야 합니다. 앞으로는 해당 스키마만 업데이트를 수신하고 스키마의 진실 소스로 사용됩니다. 키스킷-테라에 번들로 제공되는 스키마에 의존하고 있다면 대신 해당 저장소를 사용하도록 업데이트해야 합니다. -
qiskit.util모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 으로 대체되었습니다qiskit.utils로 대체되었으며, 동일한 기능을 제공하며 향후 확장될 예정입니다. Python 3.6 에서는 지원되지 않았으므로 이 사용 중단과 관련된DeprecationWarning은 발행되지 않습니다. -
모듈의
CXDirection트랜스파일러 패스는qiskit.transpiler.passes모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신GateDirection을 사용해야 합니다.CXDirection와 동일하게 동작하지만, 이제 다음과 같은 회로 변환을 지원한다는 점을 제외하면ECRGate게이트 외에CXGategates. -
모듈의
CheckCXDirection트랜스파일러 패스는qiskit.transpiler.passes모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신CheckGateDirection패스를 사용해야 합니다.CheckCXDirection와 동일하게 동작하지만, 이제 2쿼비트 게이트뿐만 아니라 모든 2쿼비트 게이트의 방향 확인도 지원한다는 점을 제외하면CXGate게이트. -
메서드
WeightedAdder메서드num_ancilla_qubits()는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 다른 회로 라이브러리 API와 일치하는qiskit.circuit.library.WeightedAdder.num_ancillas속성으로 대체되었으며, 이는 다른 회로 라이브러리의 API와 일치합니다. -
클래스의 다음 레거시 메서드는
qiskit.quantum_info.Pauli클래스의 다음 레거시 메서드는 더 이상 사용되지 않습니다. 업데이트된 폴리 클래스에서 대체 사용법은 메서드 문서를 참조하세요.from_label()sgn_prod()to_spmatrix()kron()update_z()update_x()insert_paulis()append_paulis()delete_qubits()pauli_single()random()
-
의
channel또는target인수로list또는numpy.ndarray사용qiskit.quantum_info.process_fidelity(),qiskit.quantum_info.average_gate_fidelity(),qiskit.quantum_info.gate_error()및qiskit.quantum_info.diamond_norm()함수는 더 이상 사용되지 않으며 향후 릴리스에서는 지원되지 않습니다. 입력은 대신Gate또는BaseOperator서브클래스 객체(예Operator,Choi등) -
에서 참조에 액세스
Qubit및Clbit인스턴스를 통해 해당 레지스터를 포함하는register또는index속성은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신Register객체를 쿼리하여 포함된Bit객체를 쿼리할 수 있습니다. -
현재 기능의
qiskit.visualization.pulse_drawer()함수의 현재 기능은 더 이상 사용되지 않으며 향후 릴리스에서qiskit.visualization.pulse_drawer_v2()(이전 버전과 호환되지 않음)로 대체될 예정입니다. -
set유형에서 상속된 메서드를 출력에 사용하는 것은parameters속성(이전에는set)에서 상속된 메서드의 사용은 더 이상 사용되지 않습니다QuantumCircuit클래스의 메서드 사용은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 여기에는add(),difference(),difference_update(),discard(),intersection(),intersection_update(),issubset(),issuperset(),symmetric_difference(),symmetric_difference_update(),union(),update(),__isub__()(-=운영자) 및__ixor__()(^=운영자)의 방법이 포함됩니다. -
메서드의 첫 번째(그리고 유일한) 위치 인자의 이름이
qiskit.circuit.QuantumCircuit.bind_parameters()메서드의 첫 번째 위치 인수 이름이value_dict에서values으로 변경되었습니다.values_dict이라는 이름으로 인수를 전달하는 기능은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 예를 들어, 이전에 다음과 같은 호출로bind_parameters()와 같은 호출을 사용했다면bind_parameters(values_dict={})이는 더 이상 사용되지 않으며bind_parameters(values={})으로 대체하거나 인수를 위치적으로 전달bind_parameters({})하는 것이 좋습니다. -
메서드의 첫 번째(그리고 유일한) 위치 인자의 이름이
qiskit.circuit.QuantumCircuit.assign_parameters()메서드의 첫 번째 위치 인수 이름이param_dict에서parameters으로 변경되었습니다.param_dict이라는 이름으로 인수를 전달하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 예를 들어, 이전에 다음과 같은 호출로assign_parameters()와 같은 호출을 사용했다면assign_parameters(param_dict={})이는 더 이상 사용되지 않으며assign_parameters(values={})으로 대체하거나 인수를 위치적으로 전달assign_parameters({})하는 것이 좋습니다.
버그 수정
-
함수가
execute()함수가QiskitError예외를 발생시키는 문제를 수정했습니다ParameterVectorparameter_bind객체가 전달될 때 함수가 예외를 발생시키는 문제를 수정했습니다. IMPORT의 경우, 조치 문자열(예: "REPLACE into ...") 매개변수에서 컬럼 목록의 닫는 괄호 이후에 공백 이외의 문자가 있습니다. 예를 들어, 이제 다음과 같이 호출할 수 있습니다:execute(circuit, backend, parameter_binds=[{pv1: [...], pv2: [...]}])여기서
pv1및pv2은ParameterVector객체입니다. 수정 #5467 -
클래스의 파라메트릭 펄스 레이블과 관련된 문제를 수정했습니다
PulseQobjInstruction클래스의 파라메트릭 펄스 레이블이 샘플링된 펄스 그대로 제대로 설정되지 않던 문제를 수정했습니다. 이는 또한 반환된 펄스 이름에서 가져온 펄스 이름이PulseDefaults에서 반환된Backend에서 가져온 펄스 이름(예:x90,x90m등)이 올바르게 설정됩니다. 수정 #5363 -
바인딩되지 않은 매개변수가 속성의
global_phase어트리뷰트에서만 발생하는QuantumCircuit객체의 속성에서만 발생하는 바인딩되지 않은 매개변수가parameters속성에 표시되지 않고 바인딩할 수 없는 문제를 수정했습니다. 수정 #5806 -
속성은
calibrations속성은QuantumCircuit객체의 속성은 이제+=(즉,extend()메서드) 및+(즉,combine()메서드)를 사용할 때 보존됩니다. 5930 및 5908 수정 -
클래스의
name클래스의 세터 메서드Register(의 부모 클래스인QuantumRegister및ClassicalRegister)는 이전에는 할당된 문자열이 OpenQASM 사양에 따라 유효한 레지스터 이름인지 확인하지 않았습니다. 이전에는 생성자에서 이름이 지정된 경우에만 이 검사가 수행되었지만, 이제name속성을 잘못된 값으로 직접 설정해도 예외가 발생하도록 수정되었습니다. 수정 #5461 -
함수 관련 문제를 수정했습니다
qiskit.visualization.circuit_drawer()함수 및qiskit.circuit.QuantumCircuit.draw()메서드 관련 문제를 수정했습니다QuantumCircuit와GateMeasure를 시각화할 때 발생하는 문제를 수정했습니다ClassicalRegister를 사용할 때 조건부Gate을Measure의 왼쪽에 표시할 수 있었습니다. 수정 #5387 -
트랜스파일러 패스에서
qiskit.transpiler.passes.CSPLayout에서 낮은 번호의 큐비트에 대한 편향이 관찰될 수 있습니다. 이 바람직하지 않은 편향은 후보를 무작위로 섞어 결과를 무작위화함으로써 수정되었습니다. 또한CSPLayout패스의preset_passmanagers(레벨 2 및 3의 경우)의 패스 사용법이seed_transpilerkwarg가 설정된 경우 구성된 시드를 사용하도록 조정되었습니다transpile()가 호출될 때 설정된 시드를 사용하도록 변경되었습니다. 수정 #5990 -
객체의
channels필드가 출력에 포함되지 않는 버그 수정PulseBackendConfiguration객체에 대한 필드가qiskit.providers.models.PulseBackendConfiguration.to_dict메서드의 출력에 포함되지 않던 버그를 수정합니다. 수정 #5579 -
에지 케이스에 대한
'circular'얽힘을 수정했습니다qiskit.circuit.library.NLocal회로 클래스가 얽힘 블록과 크기가 같은 에지 케이스(예: 2큐비트 회로 및 CZ 얽힘 게이트)에 대해 수정되었습니다. 이 경우 얽힘 게이트는 하나만 있어야 하는데, 실수로 첫 번째 게이트와 반대 방향으로 두 번째 게이트가 추가되었습니다. 수정됨 qiskit-community/qiskit-aqua#1452 -
클래스에서 중단점 처리를 수정했습니다
PiecewisePolynomialPauliRotations클래스의 중단점 처리를 수정했습니다qiskit.circuit.library. 이제n간격의 경우n+1중단점이 허용됩니다. 이렇게 하면 이외의 다른 끝 간격을 지정할 수 있습니다. 이는 마지막 간격의 끝에서 까지의 함수가 아이덴티티이기 때문에 중요합니다. -
회로 클래스의 문제를 수정했습니다
qiskit.circuit.library.Permutation회로 클래스에서 일부 순열이 제대로 생성되지 않는 문제를 수정했습니다. 이 문제는qiskit.circuit.library.QuantumVolume와 함께 호출된 경우에도 영향을 줄 수 있습니다. 5812 수정 -
메서드를 사용하여 QASM 출력을 생성할 때 발생하는 문제를 수정했습니다
qasm()메서드를 사용하여QuantumCircuit객체에 대한 메서드로ControlledGate컨트롤이 있는 객체에 대한 메서드를 사용하여 출력을 생성하면 지정된 컨트롤 상태와 무관하게 모든 컨트롤이 닫힌 것처럼 출력되는 문제를 수정했습니다. 이렇게 하면 생성된 QASM을 구문 분석할 경우from_qasm_str()와 다른 회로가 생성됩니다.이 문제는 다음에서 QASM 출력을 업데이트하여 해결되었습니다
qasm()XGate를 사용하여 개방형 컨트롤을 구현하는 복합 게이트를 정의함으로써 해결되었습니다. 복합 게이트의 이름은<original_gate_name>_o<ctrl_state>, 여기서o은 개방형 제어를 나타내고ctrl_state은 제어 상태의 정수 값입니다. 수정 #5443 -
객체를 바인딩하는 문제를 수정했습니다
Parameter객체를QuantumCircuitparameter_binds에 있는 객체를 바인딩하면execute함수로 바인딩하면 바인딩된 모든QuantumCircuit객체가 모두 동일한name을 갖게 되어 결과 이름도 고유하지 않게 되는 문제를 수정했습니다. 이 수정으로 인해bind_parameters()와assign_parameters()를inplace=False로 지정할 때 고유한 회로 이름을 지정합니다:<base name>-<class instance no.>[-<pid name>]여기서
<base name>은 "이름" kwarg에서 제공한 이름이며, 그렇지 않으면 기본값은 "회로"입니다. 클래스 인스턴스 번호는 클래스의 인스턴스가 생성될 때마다 증가합니다.<pid name>가 주 프로세스 외부에서 호출되면 추가됩니다. 수정 #5185 -
입력 회로에 바인딩되지 않은 객체가 포함된 경우 예외를 발생시키는
scheduler()함수의 문제를 수정했습니다QuantumCircuit객체가 포함된 경우 예외를 발생시키는 문제를 수정했습니다. 수정 #5304 -
트랜스파일러 패스의
qiskit.transpiler.passes.TemplateOptimization트랜스파일러 패스의 문제를 수정했습니다Parameter객체가 포함된 템플릿 회로가 일부 시나리오에서 템플릿 일치 중에 매개변수를 바인딩할 수 없는 경우 충돌하는 문제를 수정했습니다. 이제Parameter객체가 바인딩되지 않은 템플릿을 바인딩할 수 없는 경우Parameter이 있는 템플릿은 버려지고TemplateOptimization패스에 의해 무시됩니다. 수정 #5533 -
클래식 비트가 부적절하게 처리되던
qiskit.visualization.timeline_drawer()함수의 클래식 비트가 부적절하게 처리되는 문제를 수정했습니다. 수정 #5361 -
함수의 문제를 수정했습니다
qiskit.visualization.circuit_drawer()함수와qiskit.circuit.QuantumCircuit.draw()메서드에서Delay객체의 인스트럭션이QuantumCircuit객체의 명령이 유휴 시간으로 올바르게 처리되지 않던 문제를 수정했습니다. 따라서idle_wireskwarg를False으로 설정하면 전선이 있는Delay객체가 있는 와이어가 계속 표시됩니다. 전선에 개체만 있는 경우 유휴 전선이 시각화에서 제거되도록 수정되었습니다Delay오브젝트만 있는 경우 시각화에서 제거되도록 수정되었습니다. -
이전에는
layout_methodkwarg 옵션이 함수에 제공되고transpile()함수에 제공되고optimization_levelkwarg가 >= 2로 설정되어 패스qiskit.transpiler.passes.CSPLayout가 실행될 경우CSPLayout가 해결책을 찾으면layout_method의 메서드가 실행되지 않았습니다. 지정한 경우 항상layout_method을 사용하도록 수정되었습니다. 수정 #5409 -
인자
coupling_map=None(명시적으로 설정하거나 기본값으로 암시적으로 설정하거나backendkwarg를 통해 설정)를 사용하면 트랜스파일링 프로세스가 회로를 '임베딩'하지 않습니다. 즉,initial_layout을 지정하더라도 가상 큐비트는 물리적 큐비트에 할당되지 않았습니다. 이 문제가 수정되어 이제qiskit.compiler.transpile()함수는 회로를 임베드하여initial_layout인수를 존중합니다:from qiskit import QuantumCircuit, QuantumRegister from qiskit.compiler import transpile qr = QuantumRegister(2, name='qr') circ = QuantumCircuit(qr) circ.h(qr[0]) circ.cx(qr[0], qr[1]) transpile(circ, initial_layout=[1, 0]).draw(output='mpl')initial_layout이 회로보다 더 많은 큐비트를 참조하는 경우, 트랜스파일링 프로세스는 부호로 회로를 확장합니다.from qiskit import QuantumCircuit, QuantumRegister from qiskit.compiler import transpile qr = QuantumRegister(2, name='qr') circ = QuantumCircuit(qr) circ.h(qr[0]) circ.cx(qr[0], qr[1]) transpile(circ, initial_layout=[4, 2], coupling_map=None).draw()수정 #5345
-
트랜스파일러 패스의 생성자에 새로운 kwarg(
user_cost_dict)가 추가되었습니다qiskit.transpiler.passes.TemplateOptimization트랜스파일러 패스의 생성자에 추가되었습니다. 이를 통해 사용자는 기본 템플릿 매칭 알고리즘에 게이트에 대한 사용자 지정 비용 사전을 제공할 수 있습니다. 예를 들어,from qiskit.transpiler.passes import TemplateOptimization cost_dict = {'id': 0, 'x': 1, 'y': 1, 'z': 1, 'h': 1, 't': 1} pass = TemplateOptimization(user_cost_dict=cost_dict) -
반환된 객체를 전달할 때 발생하는 문제
Counts에서 반환된 객체를get_counts()에marginal_counts()에 반환된 객체를 전달할 때 특정 입력이 있는 부적절한 형식의Counts객체를 생성하는 문제가 수정되었습니다. 수정 #5424 -
에서 헬퍼 큐비트 할당을 개선했습니다
PolynomialPauliRotations와PiecewiseLinearPauliRotations에 헬퍼 큐비트 할당을 개선하여 회로를 더 효율적으로 구현할 수 있습니다. 5320 및 5322 수정 -
에서 할당된 헬퍼 큐 비트의 사용법을 수정합니다
MCXGate클래스에서WeightedAdder클래스에서 할당된 헬퍼 큐비트 사용을 수정합니다. 이 수정 이전에는 이전에 할당되었지만 사용되지 않았습니다. 수정 #5321 -
많은 경우,
latex출력 메서드에 대한qiskit.visualization.circuit_drawer()함수와draw()메서드가 게이트 이름을 올바르게 표시하지 않았고, 다른 경우에는 게이트 매개 변수가 있어야 할 위치에 포함되지 않았습니다. 이제 게이트 이름은mpl출력 메서드에서 표시되는 것과 동일한 방식으로 표시되며 매개변수가 있는 모든 게이트에 대해 매개변수가 표시됩니다. 또한 일부 게이트가 올바른 형태로 표시되지 않는 문제가 있었는데, 이를 수정했습니다. 5605, #4938, #3765 수정 -
qiskit.circuit.Instruction.to_instruction()메서드가 클래식 레지스터를 포함하는 하위 회로에서 사용되었고 그 후 해당Instruction객체가QuantumCircuit객체에 추가되면qiskit.visualization.circuit_drawer()함수와qiskit.circuit.QuantumCircuit.draw()메서드의 출력이 경우에 따라 측정값의 왼쪽에 표시되어야 할 하위 회로를 오른쪽에 표시하는 문제를 수정했습니다. 수정 #5947 -
다음과 관련된 문제를 수정했습니다
Delay객체의QuantumCircuit의 객체에서qiskit.compiler.transpile()의 객체가Delay의 단위를Backend의 단위로 변환되지 않는 문제를 수정했습니다(backendkwarg가transpile()에 설정된 경우). 단위 불일치로 인해 잘못된 동작(예: 실행)이 발생할 수 있습니다:from qiskit import transpile, execute from qiskit.circuit import QuantumCircuit qc = QuantumCircuit(1) qc.delay(100, [0], unit='us') qc = transpile(qc, backend) job = execute(qc, backend)를 사용하면 이전에는 예상( 100e-6 / dt) 타임스텝이 아닌 100개의 타임스텝(각각 지속 시간 dt)에 대한 백엔드 지연이 발생했을 것입니다. 이 문제가 수정되어
qiskit.compiler.transpile()함수가 단위를 올바르게 변환하도록 수정되었습니다.
기타 참고사항
qiskit.test.mock에 있는 모든 가짜/모의 백엔드의 스냅샷이 최근 기기 변경 사항을 반영하도록 업데이트되었습니다. 여기에는basis_gates속성을BackendConfiguration에서['cx', 'rz', 'sx', 'x', 'id']로,readout_length속성을 큐비트 속성에 추가하고BackendProperties로 변경하고PulseDefaults를 업데이트하여 모든 모의 백엔드가 파라메트릭 펄스 기반InstructionScheduleMap인스턴스를 지원하도록 업데이트했습니다.
에어 0.8.0
Prelude
0.8 릴리스에는 몇 가지 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 주요 특징은 지원되는 시뮬레이션 방법을 사용하여 회로 시뮬레이션을 실행하기 위한 통합 백엔드( AerSimulator )의 도입, 다양한 종류의 시뮬레이터 데이터를 저장하기 위한 사용자 지정 지침이 포함된 시뮬레이터 지침 라이브러리(qiskit.providers.aer.library), 분산 컴퓨팅 환경에서 대규모 시뮬레이션을 실행하기 위한 MPI 지원 등입니다.
새 기능
-
Python 3.9 지원이 이번 릴리스에 추가되었습니다. 이제 소스에서 빌드하지 않고 Python 3.9 을 사용하여 키스킷 에어를 실행할 수 있습니다.
-
CMake 플래그
DISABLE_CONAN(기본값=``OFF``)를 추가합니다. 소스에서 설치하는 경우ON으로 설정하면 시스템에 이미 설치된 라이브러리를 찾기 위해 Conan 패키지 관리자를 우회할 수 있습니다. 이는 환경 변수DISABLE_CONAN로도 사용할 수 있으며, CMake 플래그보다 우선합니다. 이것은 AER을 구축하는 공식 절차가 아닙니다. 따라서 사용자는 필요한 모든 라이브러리와 해당 파일을 CMake에서 찾을 수 있도록 제공해야 할 책임이 있습니다. -
이번 릴리스에는 분산 컴퓨팅 환경에서 대규모 시뮬레이션을 실행하기 위해 MPI를 지원하는 qiskit-aer를 빌드하는 기능이 포함되어 있습니다. MPI 환경에서의 빌드 및 실행에 대한 지침은 기여 가이드를 참조하세요.
-
이제 Windows에서 CUDA를 활성화한 상태에서 qiskit-aer를 빌드할 수 있습니다. GPU를 지원하는 소스에서 빌드하는 방법에 대한 지침은 기여 가이드를 참조하세요.
-
소스에서 qiskit-aer Python 확장을 빌드할 때 C++ 컴파일을 사용하려면 몇 가지 빌드 종속성을 미리 설치해야 합니다. 확장 프로그램을 빌드할 때 사용자 편의를 위해 누락된 빌드 종속성은 일반적인
setuptools설치 단계 전에pip을 사용하여 자동으로 설치되지만, 이전에는 이러한 자동 설치를 피할 수 없었습니다. 이 문제를 해결하기 위해 새로운 환경 변수DISABLE_DEPENDENCY_INSTALL가 추가되었습니다. 소스에서 파이썬 확장 프로그램을 빌드할 때1또는ON로 설정하면 이러한 누락된 빌드 종속성의 자동 설치가 비활성화됩니다. -
최적화된 N-큐비트 폴리 게이트에 대한 지원을 추가합니다
qiskit.circuit.library.PauliGate),StatevectorSimulator,UnitarySimulator, 그리고QasmSimulator및AerSimulator의 상태 벡터 및 밀도 행렬 메서드에 대한 지원을 추가했습니다. -
AerSimulator,QasmSimulator,StatevectorSimulator,UnitarySimulator백엔드에 대한run()메서드는 이제QuantumCircuit(또는QuantumCircuit객체 목록)을 입력으로 받습니다. 이전QasmQobj객체는 현재로서는 계속 지원되지만 향후 릴리스에서 더 이상 사용되지 않을 예정입니다.사용 방법에 대한 예는 다음을 참조하세요:
from qiskit import transpile, QuantumCircuit from qiskit.providers.aer import Aer backend = Aer.get_backend('aer_simulator') circuit = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() tqc = transpile(circuit, backend) result = backend.run(tqc, shots=4096).result() -
PulseSimulator백엔드에 대한run()메서드는 이제Schedule(또는Schedule객체 목록)을 입력으로 받습니다. 이전PulseQobj객체는 현재로서는 계속 지원되지만 향후 릴리스에서 더 이상 사용되지 않을 예정입니다. -
다음 시뮬레이션 방법을 지원하는 새로운
AerSimulator시뮬레이터 백엔드를 추가합니다automaticstatevectorstabilizerdensity_matrixmatrix_product_stateunitarysuperop
기본 자동 방법은 회로 명령어와 노이즈 모델(있는 경우)에 따라 각 실행 회로에 대해 개별적으로 시뮬레이션 방법을 자동으로 선택합니다. 특정 방법으로 시뮬레이터를 초기화하는 것은 방법 옵션을 사용하여 수행할 수 있습니다.
상태 벡터, 밀도 행렬 및 단일 메서드에 대한 GPU 시뮬레이션은
device='GPU'백엔드 옵션을 설정하여 활성화할 수 있습니다.unitary및superop메서드는 실행 회로의 유니타리 행렬 또는 슈퍼 연산자 행렬을 시뮬레이션하므로 측정을 지원하지 않으므로 새로운save_unitary(),save_superop()또는save_state()명령어 중 하나를 사용하여 시뮬레이터 상태를 반환된 결과에 저장해야 합니다. 다른 시뮬레이션 방법의 상태도 적절한 지침을 사용하여 유사하게 저장할 수 있습니다. 자세한 내용은qiskit.providers.aer.libraryAPI 문서를 참조하세요.AerSimulator시뮬레이터가QasmSimulator,StatevectorSimulator,UnitarySimulator백엔드를 대체하며 향후 릴리스에서 더 이상 사용되지 않습니다. -
사용 가능한 모든 시뮬레이션 방법 및 시뮬레이션 장치에 대해 사전 구성된 여러
AerSimulator백엔드를 포함하도록AerProvider클래스를 업데이트합니다. 새 백엔드는 공급자 인터페이스를 통해 다음 이름을 사용하여 액세스할 수 있습니다"aer_simulator""aer_simulator_statevector""aer_simulator_stabilizer""aer_simulator_density_matrix""aer_simulator_matrix_product_state""aer_simulator_extended_stabilizer""aer_simulator_unitary""aer_simulator_superop"
또한 호환되는 시스템에 GPU 지원과 함께 Aer를 설치한 경우 다음 GPU 백엔드도 사용할 수 있습니다
"aer_simulator_statevector_gpu""aer_simulator_density_matrix_gpu""aer_simulator_unitary_gpu"
예를 들어,
from qiskit import Aer # Get the GPU statevector simulator backend backend = Aer.get_backend('aer_simulator_statevector_gpu') -
"extended_stabilizer"시뮬레이션 방법을 사용할 때 측정을 수행하기 위한 새로운norm estimation방법을 추가했습니다. 이 규범 추정 방법은AerSimulator및QasmSimulator백엔드에 다음 옵션을 전달하여 사용할 수 있습니다simulator = QasmSimulator( method='extended_stabilizer', extended_stabilizer_sampling_method='norm_estimation')규범 추정 방법은
metropolis또는resampled_metropolis옵션보다 느리지만 출력 분포가 희박한 회로에서 더 나은 성능을 제공합니다. 자세한 내용은QasmSimulator문서를 참조하세요. -
시뮬레이터의 상태를 다양한 형식으로 저장하는 지침을 추가합니다. 이러한 지침은 다음과 같습니다
qiskit.providers.aer.library.SaveDensityMatrixqiskit.providers.aer.library.SaveMatrixProductStateqiskit.providers.aer.library.SaveStabilizerqiskit.providers.aer.library.SaveStateqiskit.providers.aer.library.SaveStatevectorqiskit.providers.aer.library.SaveStatevectorDictqiskit.providers.aer.library.SaveUnitary
이러한 지침은 Aer를 가져올 때
QuantumCircuit에 추가되는save_density_matrix,save_matrix_product_state,save_stabilizer,save_state,save_statevector,save_statevector_dict,save_unitary회로 메서드를 사용하여 양자 회로에 추가할 수 있습니다.각 인스트럭션의 메서드 호환성에 대한 자세한 내용은
qiskit.providers.aer.libraryAPI 설명서를 참조하세요.스냅샷 지침
SnapshotStatevector,SnapshotDensityMatrix,SnapshotStabilizer은 여전히 지원되지만 향후 릴리스에서 더 이상 사용되지 않습니다. -
시뮬레이터 상태 에 대한 에르미티안 연산자 의 기대값 또는 기대값과 분산 을 저장하기 위한
qiskit.providers.aer.library.SaveExpectationValue및qiskit.providers.aer.library.SaveExpectationValueVariance양자 회로 명령어를 추가합니다. 이러한 명령어는save_expectation_value및save_expectation_value_variance회로 메서드를 사용하여 양자 회로에 추가할 수 있으며, 이는 Aer를 가져올 때QuantumCircuit에 추가됩니다.스냅샷 명령어
SnapshotExpectationValue는 여전히 지원되지만 향후 릴리스에서 더 이상 사용되지 않습니다. -
시뮬레이터 상태의 Z 기준 측정에 대한 모든 측정 결과 확률을 저장하기 위한
qiskit.providers.aer.library.SaveProbabilities및qiskit.providers.aer.library.SaveProbabilitiesDict양자 회로 지침을 추가합니다. 이러한 명령어는save_probabilities및save_probabilities_dict회로 메서드를 사용하여 양자 회로에 추가할 수 있으며, 이는 Aer를 가져올 때QuantumCircuit에 추가됩니다.스냅샷 명령어
SnapshotProbabilities는 여전히 지원되지만 향후 릴리스에서 더 이상 사용되지 않습니다. -
선택된 복소 상태 벡터 진폭 또는 지원되는 시뮬레이션 방법에 대한 선택 확률(진폭 제곱)을 저장하기 위한
qiskit.providers.aer.library.SaveAmplitudes및qiskit.providers.aer.library.SaveAmplitudesSquared회로 지침을 추가합니다. 이러한 지침은save_amplitudes및save_amplitudes_squared회로 메서드를 사용하여 양자 회로에 추가할 수 있으며, 이 메서드는 Aer를 가져올 때QuantumCircuit에 추가됩니다. -
시뮬레이터 상태 설정에 대한 지침을 추가합니다. 이러한 명령은 회로의 전체 큐비트 수에 대해 정의되어야 합니다. 회로의 어느 지점에서나 적용할 수 있으며 시뮬레이터 상태를 지정된 상태로 재정의합니다. 추가된 지침은 다음과 같습니다
qiskit.providers.aer.library.SetDensityMatrixqiskit.providers.aer.library.SetStabilizerqiskit.providers.aer.library.SetStatevectorqiskit.providers.aer.library.SetUnitary
이러한 명령어는 Aer를 가져올 때
QuantumCircuit에 추가되는set_density_matrix,set_stabilizer,set_statevector,set_unitary회로 메서드를 사용하여 양자 회로에 추가할 수 있습니다.각 인스트럭션의 메서드 호환성에 대한 자세한 내용은
qiskit.providers.aer.libraryAPI 설명서를 참조하세요. -
"matrix_product_state"시뮬레이션 메서드에 대각선 게이트에 대한 지원이 추가되었습니다. -
"matrix_product_state"시뮬레이션 방법에initialize명령어에 대한 지원이 추가되었습니다.
알려진 문제점
"matrix_product_state"시뮬레이션 방법을 사용하여 크라우스 노이즈 모델로 특정 회로를 시뮬레이션하면 시뮬레이터가 충돌할 수 있는 알려진 문제가 있습니다. 자세한 내용은 306번을 참조하세요.
업그레이드 주의사항
-
코난의 최소 버전이 1.31.2 으로 증가했습니다. 이는 최신 버전과의 호환성 문제를 해결하기 위해 필요했습니다 urllib3 (코난의 종속성)과의 호환성 문제를 해결하기 위해서였습니다. 또한 새로운 Apple 컴퓨터를 사용하는 사용자에게 유용한 AppleClang 12에 대한 기본 지원도 추가되었습니다.
-
pybind11필요한 최소 버전은 2.4 대신 2.6 입니다. 이는 Windows에서 CUDA 지원 컴파일을 지원하기 위해 필요합니다. -
Cython이 빌드 종속성으로 제거되었습니다.
-
Qiskit-aer 0.7 에서 더 이상 사용되지 않는 노이즈 모델에서 x90 게이트 분해를 제거했다. 이 분해는 이제 일반 노이즈 모델 기반 게이트와 키스킷 트랜스파일러를 사용하여 수행됩니다.
-
"extended_stabilizer"시뮬레이션 방법의 다음 옵션이 변경되었습니다.extended_stabilizer_measure_sampling: 이 옵션은extended_stabilizer_sampling_method옵션으로 대체되었으며, 이 옵션은 쿼비트 측정 시뮬레이션 방법을 제어합니다.extended_stabilizer_mixing_time: 이 옵션은metropolis및resampled_metropolis샘플링 방법에만 적용된다는 점을 명확히 하기 위해extended_stabilizer_metropolis_mixing_time로 이름이 변경되었습니다.extended_stabilizer_norm_estimation_samples: 이 옵션의 이름이extended_stabilizer_norm_estimation_default_samples으로 변경되었습니다.
표준 추정 샘플링 방법의 일부 동작을 제어하는
extended_stabilizer_norm_estimation_repetitions옵션이 추가되었습니다.
지원 중단 노트
- Python 3.6 지원은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 지원이 중단되면 사용 중인 Python 버전을 Python 3.7 이상으로 업그레이드해야 합니다.
버그 수정
set_options()을 사용하여 반환된 백엔드에 설정된 옵션이 공급자에 저장되어 이후 동일한 이름의 백엔드에 대한get_backend()호출 시 지속되는 버그(AerProvider)를 수정했습니다. 이제backends()으로 호출할 때마다 구성할 수 있는 시뮬레이터 백엔드의 새 인스턴스가 반환됩니다.- 회로에 지원되지 않는 시뮬레이터 명령어가 포함된 경우 반환되는 오류 메시지의 버그를 수정했습니다. 이전에는 일부 지원되는 지침도 지원되지 않는 지침과 함께 오류 메시지에 나열되었습니다.
"method"및"noise_model"옵션을 함께 사용하거나from_backend()을 사용하여 구축된 시뮬레이터와 함께 사용할 때QasmSimulator기준 게이트 설정 관련 문제를 수정했습니다. 이제 나열된 기준 게이트는 백엔드 구성, 시뮬레이션 방법 및 노이즈 모델 기준 게이트가 지원하는 게이트의 교차점이 됩니다. 노이즈 모델 기준 게이트와 시뮬레이터 기준 게이트의 교집합이 비어 있으면 경고가 기록됩니다."sx"`게이트SXGate가matrix_product_state.hp의StateOpSet에서 C++ 코드에 지원되는 게이트로 나열되지 않는 버그 수정."csx","cu2","cu3"이"density_matrix"메서드의 지원되는 베이시스 게이트로 잘못 나열되던 버그 수정QasmSimulator.matrix_product_state_internal.cpp에서 함수 간에 매개변수가 잘못 전달되어 잘못된 시뮬레이션이 발생하고 유효하지 않은 상태에 도달하여 무한 루프가 발생하는 버그를 수정했습니다.- 조건부 레지스터의 너비가 64보다 클 때
c_if이 작동하지 않던 버그가 수정되었습니다. 1077번을 참조하세요. - 조건부 게이트의 노이즈가 클래식 레지스터 값을 기준으로 조건부 게이트가 실제로 적용되었는지 여부와 관계없이 항상 적용되던 버그 #1153 )를 수정했습니다. 이제 조건부 게이트의 노이즈는 조건부 게이트가 적용된 경우에만 적용됩니다.
- 중첩된 OpenMP 플래그가 참으로 설정되어서는 안 되는 경우 참으로 설정되던 버그를 수정했습니다.
- QasmSimulator 의 행렬 곱 상태 메서드에서 잘림을 적용할 때 발생하는 버그를 수정했습니다.
- 문제 #1126 : 단일 큐비트 측정값 보고 버그가 수정되었습니다. 측정값을 출력 데이터 구조에 복사할 때 버그가 발생했습니다.
- MPS에서 apply_kraus는 내부 큐비트 대신 매개변수 큐비트의 입력 비트에서 직접 작동했습니다. MPS 알고리즘에서는 큐비트가 지속적으로 이동하므로 모든 연산이 내부 큐비트에 적용되어야 합니다.
- MPS::sample_measure를 호출할 때, qasm_controller.This 에서 이동_all_쿼비트_to_sorted_ordering 메서드를 호출하여 수행한다고 가정하므로 먼저 큐비트를 기본 순서로 정렬해야 합니다. 샘플_측정_사용_적용_측정에서는 정확했지만 샘플_측정_사용_확률에서는 누락되었습니다.
QasmSimulator의local속성을 항상True로 설정하지 않고 백엔드 값으로 설정하는from_backend()메서드의 버그 수정.- 기본 게이트가 설정된 IBMQ 장치에 대해
basis_gates가 잘못 설정된from_backend()및from_backend()의 버그 수정['id', 'rz', 'sx', 'x', 'cx']. 이제 노이즈 모델에 오류가 있는지 여부에 관계없이 백엔드 베이시스 게이트와 항상 동일한 베이시스 게이트를 갖게 됩니다. - 출력 분포가 희박한 양자 회로에서 확장된 "확장_안정기" 시뮬레이션 방법이 잘못된 결과를 제공하던 문제를 수정했습니다. 자세한 내용과 예시는 306번을 참조하세요.
이그니스 0.6.0
새 기능
qiskit.ignis.mitigation.expval_meas_mitigator_circuits()함수는 CTMP 방식으로 캘리브레이션에 사용되는 함수가 생성하는 회로 수를 에서 (여기서 은 큐비트 수)로 줄이도록 개선되었습니다.
업그레이드 주의사항
qiskit.ignis.verification.randomized_benchmarking_seq()함수는 이제 두 개 이상의 큐비트에서 CNOT-Dihedral 무작위 벤치마킹을 수행할 수 있는 업그레이드된 CNOTDihedral 클래스(qiskit.ignis.verification.CNOTDihedral)를 사용하고 있습니다.- 이제 파이썬 패키지
retworkx는 qiskit-ignis를 설치하기 위한 요구 사항입니다. 더 나은 성능을 얻기 위해 더 이상 요구 사항이 아닌 이전networkx사용법을 대체합니다. scikit-learn종속성은 더 이상 필수 사항이 아니며 이제 선택 사항입니다. IQ 측정 판별기(IQDiscriminationFitter,LinearIQDiscriminationFitter,QuadraticIQDiscriminationFitter,SklearnIQDiscriminator)를 사용하는 경우 이제pip install scikit-learn를 실행하거나pip install qiskit-ignis[iq]와 함께 qiskit-ignis를 설치하는 경우 scikit-learn을 수동으로 설치해야 합니다.
버그 수정
- 오류 완화 클래스
TensoredExpvalMeasMitigator및CTMPExpvalMeasMitigator의 경우qubitskwarg를 지정하지 않으면 카운트 사전의 클래식 비트 수가 아닌 완화자의 총 큐비트 수를 잘못 사용하여 성능이 크게 저하되는 기대값 메서드expectation_value()의 문제를 수정했습니다. 수정 #561 TomographyFitter,StateTomographyFitter,ProcessTomographyFitter의"auto"메서드를 수정하여 CVXPY가 설치되어 있고 SCS가 아닌 타사 SDP 솔버를 사용할 수 있는 경우에만"cvx"을 사용하도록 합니다. 이는 SCS 솔버가 다른 솔버 방법보다 정확도가 낮고, 완전 양수가 아닌 밀도 행렬이나 최 행렬을 반환하는 경우가 많아서qiskit.quantum_info.state_fidelity()또는qiskit.quantum_info.process_fidelity()함수.
아쿠아 0.9.0
이번 릴리스는 공식적으로 키스킷 아쿠아 프로젝트를 더 이상 지원하지 않으며, 향후 (이 릴리스에서 3개월 이내에) 아쿠아 프로젝트는 최종 릴리스가 되어 보관될 예정입니다. 키스킷-아쿠아가 제공하는 모든 기능은 새로운 패키지 또는 다른 키스킷 패키지로 마이그레이션되었습니다. 키스킷-아쿠아에서 제공하는 애플리케이션 모듈이 여러 개의 새로운 패키지로 분리되었습니다: qiskit-optimization, qiskit-nature, qiskit-machine-learning, 그리고 qiskit-finance 이다. 이 패키지는 표준 pip 설치 명령(예: pip install qiskit-nature)을 통해 단독으로 설치하거나 나머지 키스킷 메타패키지(예: pip install 'qiskit[finance,optimization]' 또는 pip install 'qiskit[all]')와 함께 선택적 추가 패키지로 설치할 수 있다. 알고리즘과 연산자 흐름을 위한 핵심 빌딩 블록은 이제 키스킷 테라의 일부로 다음과 같이 존재합니다 qiskit.algorithms 와 qiskit.opflow. 기존 아쿠아 사용법에 따라 애플리케이션 패키지를 사용하거나 키스킷 테라의 새로운 모듈을 사용해야 합니다.
키스킷 아쿠아 사용에서 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.
IBM Q 제공자 0.12.2
변경 없음