키스킷 0.28 릴리즈 노트
0.28.0
테라 0.18.0
Prelude
이번 릴리스에는 많은 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 하이라이트는 두 가지 새로운 트랜스파일러 패스, BIPMapping 와 DynamicalDecoupling이 패스는 새로운 pulse_optimize kwarg 와 결합하면 UnitarySynthesis 에 설명된 기술을 사용하여 퀀텀 볼륨 64 결과를 다시 생성할 수 있습니다: https://arxiv.org/abs/2008.08571. 이 새로운 트랜스파일러 패스와 옵션은 일반적으로 모든 회로 최적화에 적용할 수 있습니다.
새 기능
-
생성자에 대한
measurement_error_mitgationkwargQuantumInstance생성자를 이미 지원되던CompleteMeasFitter외에 qiskit-ignis의TensoredMeasFitter클래스로 설정할 수 있습니다.TensoredMeasFitter을 사용하는 경우 새로운mit_patternkwarg를 설정하여TensoredMeasFitter사용할 큐비트를 지정할 수도 있습니다. 예상 형식은TensoredMeasFitter문서에서mit_pattern에 대한 문서를 참조할 수 있습니다. -
basiskwarg를 통해 지정된 단일 큐비트 게이트의 분해 방법이OneQubitEulerDecomposer이제 게이트와 게이트를 직접 사용할 수 있도록'ZSXX'기반도 포함하도록 확장되었습니다. -
두 개의 새로운 패스 추가
AlignMeasures와ValidatePulseGates모듈에qiskit.transpiler.passes모듈에 이러한 패스는 하드웨어 인식 최적화이며, 백엔드에 대한 명령어 시간 할당에 대한 정렬 제한을 관리하는 데 사용되는 유효성 검사 루틴입니다.백엔드에
Measure명령어의 정렬에 제한이 있는 경우(시간 정량화 측면에서)AlignMeasures패스는 예약된 회로의 지연을 조정하여 백엔드의 제약 조건에 따라 회로의 모든Measure명령어가 정렬되도록 하는 데 사용됩니다. 패스는ValidatePulseGates패스는 커스텀 펄스 게이트(커스텀 펄스 정의가 있는 게이트)가 있는지 확인하는 데 사용됩니다calibrations속성에 커스텀 펄스 정의가 있는QuantumCircuit객체의 속성에 커스텀 펄스 정의가 있는 게이트)가 타겟 백엔드에 대한 정렬 제약 조건이 주어졌을 때 유효한지 확인합니다.함수에서 사용되는 내장
preset_passmangers에서transpile()함수에서, 이러한 패스는 전용timing_constraintskwarg on을 통해 정렬 제약 조건이 있거나transpile()을 통해 또는 대상 백엔드의 객체에timing_constraints속성이 있는 경우BackendConfiguration속성이 있는 경우 자동으로 트리거됩니다.IBM Quantum Services ( qiskit-ibmq-provider 패키지를 통해 액세스 가능)의 백엔드에서 가까운 시일 내에 정렬 정보를 제공할 예정입니다.
예를 들어,
from qiskit import circuit, transpile from qiskit.test.mock import FakeArmonk backend = FakeArmonk() qc = circuit.QuantumCircuit(1, 1) qc.x(0) qc.delay(110, 0, unit="dt") qc.measure(0, 0) qc.draw('mpl')qct = transpile(qc, backend, scheduling_method='alap', timing_constraints={'acquire_alignment': 16}) qct.draw('mpl') -
에 설명된 대로 BIP(이진 정수 프로그래밍) 문제를 해결하여 최적의 레이아웃과 라우팅을 한 번에 찾으려는 새로운 트랜스파일러 패스 클래스
qiskit.transpiler.passes.BIPMapping가 추가되었습니다 arXiv:2106.06446 가 추가되었습니다.BIPMapping패스('레이아웃 및 라우팅'을 지칭하기 위해 '매핑'이라고 명명)는 매핑 문제를 BIP(이진 정수 프로그래밍) 문제로 나타내며, BIP 문제를 해결하기 위해 CPLEX(cplex)에 의존합니다. CPLEX를 포함한 종속 라이브러리는 qiskit-terra와 함께 설치할 수 있습니다:pip install qiskit-terra[bip-mapper]무료 버전의 CPLEX는 약 5큐비트 미만의 회로 매핑과 같은 작은 BIP 문제만 해결할 수 있으므로, 더 큰 회로를 매핑하려면 유료 버전의 CPLEX가 필요할 수 있습니다.
BIP 매퍼는 큐비트 또는 게이트 수에 따라 확장성이 떨어집니다. 예를 들어, 10큐비트를 초과하는
coupling_map에서는 BIP 솔버(CPLEX)가 기본 시간 제한 내에 해를 찾을 수 없기 때문에 작동하지 않습니다.매핑에 사용할 물리적 큐비트를 고정하려면(예: 퀀텀 볼륨(QV) 회로 실행), 사용할 큐비트만 포함된
coupling_map을 지정해야 합니다.다음은 QV 회로를 트랜스파일하기 위해 패스 매니저를 빌드하는 최소한의 예제 코드입니다:
num_qubits = 4 # QV16 circ = QuantumVolume(num_qubits=num_qubits) backend = ... basis_gates = backend.configuration().basis_gates coupling_map = CouplingMap.from_line(num_qubits) # supply your own coupling map def _not_mapped(property_set): return not property_set["is_swap_mapped"] def _opt_control(property_set): return not property_set["depth_fixed_point"] from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel pm = PassManager() # preparation pm.append([ Unroll3qOrMore(), TrivialLayout(coupling_map), FullAncillaAllocation(coupling_map), EnlargeWithAncilla(), BarrierBeforeFinalMeasurements() ]) # mapping pm.append(BIPMapping(coupling_map)) pm.append(CheckMap(coupling_map)) pm.append(Error(msg="BIP mapper failed to map", action="raise"), condition=_not_mapped) # post optimization pm.append([ Depth(), FixedPoint("depth"), Collect2qBlocks(), ConsolidateBlocks(basis_gates=basis_gates), UnitarySynthesis(basis_gates), Optimize1qGatesDecomposition(basis_gates), CommutativeCancellation(), UnrollCustomDefinitions(sel, basis_gates), BasisTranslator(sel, basis_gates) ], do_while=_opt_control) transpile_circ = pm.run(circ) -
새로운 생성자 메서드
initialize_from()에 새로운 생성자 메서드Schedule및ScheduleBlock클래스에 새로운 생성자 메서드가 추가되었습니다. 이 메서드는 다른 스케줄의 속성을 가져오는 새 빈 스케줄을 초기화합니다. 예를 들어,sched = Schedule(name='my_sched') new_sched = Schedule.initialize_from(sched) assert sched.name == new_sched.name -
함수(
line_discipline)에 새로운 kwarg가 추가되었습니다job_monitor()함수에 추가되었습니다. 이 kwarg를 사용하면job_monitor출력에 사용되는 캐리지 리턴 문자를 변경할 수 있습니다.line_disciplinekwarg의 기본값은 이전에 사용하던'\r'입니다. -
추상
Pulse클래스( 다음과 같은 클래스의 부모 클래스인Waveform,Constant와Gaussian)에는 이제 생성자limit_amplitude에 새로운 kwarg가 있으며,False로 설정하여 이전에 하드 코딩된 진폭 제한(1)을 비활성화할 수 있습니다. 펄스 클래스의 글로벌 기본값을 변경하기 위해 클래스 속성으로 직접 설정할 수도 있습니다. 예를 들어,from qiskit.pulse.library import Waveform # Change the default value of limit_amplitude to False Waveform.limit_amplitude = False wave = Waveform(2.0 * np.exp(1j * 2 * np.pi * np.linspace(0, 1, 1000))) -
새로운 클래스
PauliList클래스가qiskit.quantum_info모듈에 추가되었습니다. 이 클래스는 연산자 목록을 효율적으로 표현하는 데 사용됩니다Pauli연산자 목록을 효율적으로 표현하는 데 사용됩니다. 이 새 클래스는 기존PauliTable클래스와 동일한 부모 클래스에서 상속되지만(따라서 대부분 같은 의미로 사용할 수 있음),PauliTable클래스와는 다릅니다qiskit.quantum_info.PauliList클래스는 Z4 페이즈를 처리할 수 있습니다. -
새로운 트랜스파일러 패스를 추가했습니다,
RemoveBarriers를qiskit.transpiler.passes. 이 패스는 회로의 모든 장벽을 제거하는 데 사용됩니다. -
새 옵티마이저 클래스를 추가합니다,
SciPyOptimizer를qiskit.algorithms.optimizers모듈에 추가합니다. 이 클래스는scipy.optimize.minimize함수 (문서) 의 간단한 래퍼 클래스로,scipy.optimize.minimize에서 지원하는 모든 최적화 솔버와 모든 매개변수(예: 콜백)를 사용할 수 있습니다. 예를 들어,from qiskit.algorithms.optimizers import SciPyOptimizer values = [] def callback(x): values.append(x) optimizer = SciPyOptimizer("BFGS", options={"maxiter": 1000}, callback=callback) -
패스가
HoareOptimizer패스가 개선되어 이제 모든 제어 큐비트가 상태인 경우 회로에서ControlledGate를 모든 제어 큐비트가 상태인 경우 기본 게이트로 회로에서 대체할 수 있도록 개선되었습니다. -
두 가지 새로운 메서드가 추가되었습니다,
is_successor()과is_predecessor()메서드를DAGCircuit클래스에 이 함수는 노드가 다른 노드의 후속 노드인지 또는 이전 노드인지 확인하는 데 사용됩니다DAGCircuit. -
새로운 트랜스파일러 패스
RZXCalibrationBuilderNoEcho가qiskit.transpiler.passes모듈에 추가되었습니다. 이 패스는 기존RZXCalibrationBuilderRZXGate(theta)에 대한 캘리브레이션을 생성한다는 점에서 비슷하지만RZXCalibrationBuilderNoEcho는 펄스 스케줄에 에코 펄스를 삽입하지 않고 이 작업을 수행합니다. 이렇게 하면 교차 공명 시퀀스에서 에코를 게이트로 노출하여 트랜스파일러가 이를 단순화할 수 있습니다. 패스는RZXCalibrationBuilderNoEcho패스는 하드웨어 네이티브 방향의CXGate. -
새로운 kwarg(
wrap)가 메서드에 추가되었습니다compose()메서드에QuantumCircuit. 이를 통해 구성된 회로를 인스트럭션으로 래핑할지 여부를 선택할 수 있습니다. 기본값은False, 즉 래핑이 없는 상태입니다. 예를 들어,from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.h([0, 1]) other = QuantumCircuit(2) other.x([0, 1]) print(circuit.compose(other, wrap=True)) # wrapped print(circuit.compose(other, wrap=False)) # not wrapped -
새로운 어트리뷰트
control_channels속성이 추가되었습니다PulseBackendConfiguration클래스에 추가되었습니다. 이 속성은 백엔드의 제어 채널을 큐비트와 오브젝트 목록의ControlChannel객체 목록에 매핑합니다. -
epsilonIsometry클래스의 생성자와 해당 메서드에 해당하는QuantumCircuit메서드isometry(). 이 kwarg를 사용하면Isometry게이트에서 사용하는 엡실론 허용 오차를 선택적으로 설정할 수 있습니다. 예를 들어,import numpy as np from qiskit import QuantumRegister, QuantumCircuit tolerance = 1e-8 iso = np.eye(2,2) num_q_output = int(np.log2(iso.shape[0])) num_q_input = int(np.log2(iso.shape[1])) q = QuantumRegister(num_q_output) qc = QuantumCircuit(q) qc.isometry(iso, q[:num_q_input], q[num_q_input:], epsilon=tolerance) -
트랜스파일러 패스를 추가했습니다,
DynamicalDecoupling에 트랜스파일러 패스qiskit.transpiler.passes에 (물리적 큐비트에 매핑하고 스케줄링한 후) 회로의 유휴 기간에 동적 디커플링 시퀀스를 삽입하기 위한 트랜스파일러 패스를 추가했습니다. 패스를 통해 DD 게이트의 순서, 게이트 사이의 간격, 적용할 큐비트를 제어할 수 있습니다. 예를 들어,from qiskit.circuit import QuantumCircuit from qiskit.circuit.library import XGate from qiskit.transpiler import PassManager, InstructionDurations from qiskit.transpiler.passes import ALAPSchedule, DynamicalDecoupling from qiskit.visualization import timeline_drawer circ = QuantumCircuit(4) circ.h(0) circ.cx(0, 1) circ.cx(1, 2) circ.cx(2, 3) circ.measure_all() durations = InstructionDurations( [("h", 0, 50), ("cx", [0, 1], 700), ("reset", None, 10), ("cx", [1, 2], 200), ("cx", [2, 3], 300), ("x", None, 50), ("measure", None, 1000)] ) dd_sequence = [XGate(), XGate()] pm = PassManager([ALAPSchedule(durations), DynamicalDecoupling(durations, dd_sequence)]) circ_dd = pm.run(circ) timeline_drawer(circ_dd) -
메서드의
QuantumCircuit메서드qasm()에는 함수에 의해 생성된 출력 QASM 파일의 문자 인코딩을 선택적으로 설정하는 데 사용할 수 있는 새로운 kwarg(encoding)가 있습니다. Python 표준 라이브러리의 코덱 모듈에서 유효한 코덱 또는 별칭 문자열로 설정할 수 있습니다. -
새 클래스를 추가했습니다,
EvolvedOperatorAnsatz클래스를qiskit.circuit.library모듈에 새 클래스, 를 추가했습니다. 이 라이브러리 회로는 이전에 키스킷 네이처에 있던 것으로, 진화 시간이 가변 파라미터인 시간 진화 연산자로 구성된 앤사츠 회로를 구성하는 데 사용할 수 있습니다. 이러한 안사츠 회로의 예로는 키스킷 네이처의chemistry모듈에 있는UCCSD클래스 또는QAOAAnsatz클래스. -
ibmq_guadalupe백엔드에 대한 새로운 가짜 백엔드 클래스는qiskit.test.mock에서 사용할 수 있습니다. 다른 가짜 백엔드와 마찬가지로 여기에는 캘리브레이션 데이터의 스냅샷(예:backend.defaults())이 포함됩니다 및 오류 데이터(예:backend.properties()) 실제 시스템에서 가져온 것으로 로컬 테스트, 컴파일 및 시뮬레이션에 사용할 수 있습니다. -
새로운 방법
children()메서드Schedule클래스에 대한 새로운 메서드가 추가되었습니다. 이 메서드는 객체의 자식 스케줄 구성 요소를Schedule객체의 자식 스케줄 컴포넌트를 튜플로 반환합니다. 평탄화 없이 중첩된 일정을 반환합니다. 이 방법은 비공개(_children()) 방법과 동일하지만 공개적이고 안정적인 인터페이스를 제공합니다. -
새로운 옵티마이저 클래스
GradientDescent가qiskit.algorithms.optimizers모듈에 추가되었습니다. 이 옵티마이저 클래스는 다음과 같은 양자 가변 알고리즘과 함께 사용하기 위한 표준 그라데이션 하강 최적화 알고리즘을 구현합니다VQE. 이 클래스를 사용하는 방법에 대한 자세한 설명과 예제는GradientDescent클래스 문서를 참고하세요. -
새로운 옵티마이저 클래스
QNSPSA가qiskit.algorithms.optimizers모듈에 추가되었습니다. 이 클래스는 2-SPSA 알고리즘의 일반화인 양자 자연 SPSA(QN-SPSA) 알고리즘을 구현하고 헤시안 대신 양자 피셔 정보 행렬을 추정하여 양자 자연 경사도의 확률적 추정치를 얻습니다. 이 새로운 옵티마이저를 사용하는 방법에 대한 예제는QNSPSA클래스 문서를 참조하세요. -
클래스의 생성자에 새로운 kwarg,
second_order이 추가되었습니다SPSA클래스의 생성자에qiskit.algorithms.optimizers모듈의 클래스 생성자에 추가되었습니다.True로 설정하면 2차 SPSA를 사용할 수 있습니다. 2 차 SPSA 또는 2-SPSA는 일반 SPSA 알고리즘의 확장으로 기울기와 함께 헤시안 추정이 가능하며, 파라미터 업데이트 단계 전에 기울기를 사전 조정하는 데 사용됩니다. 두 번째 방법으로서, 이는 SPSA의 수렴을 개선하기 위한 시도입니다. 이 옵션을 사용하는 방법에 대한 예제는SPSA클래스 문서를 참조하세요. -
latex또는latex_source출력 모드를 사용하는 경우circuit_drawer()또는draw()의QuantumCircuit를 사용할 때mpl출력 형식과 마찬가지로stylekwarg를 사용할 수 있습니다. 그러나mpl출력 모드와 달리latex또는latex_source출력 모드를 사용할 때는displaytext필드만 사용됩니다(둘 다 색상을 지원하지 않으므로). -
mpl또는latex출력 메서드를 사용하는 경우circuit_drawer()함수 또는draw()의QuantumCircuit이제 텍스트에 수학 모드 서식을 사용하고stylekwarg를 사용자가 생성한 이름이나 레이블이 있는 딕셔너리로 설정하여 색상 서식(mpl만 해당)을 설정할 수 있습니다. 예를 들어, 구독을 추가하고 게이트 색상을 변경합니다:from qiskit import QuantumCircuit from qiskit.circuit.library import HGate qc = QuantumCircuit(3) qc.append(HGate(label='h1'), [0]) qc.append(HGate(label='h2'), [1]) qc.append(HGate(label='h3'), [2]) qc.draw('mpl', style={'displaytext': {'h1': 'H_1', 'h2': 'H_2', 'h3': 'H_3'}, 'displaycolor': {'h2': ('#EEDD00', '#FF0000')}}) -
세 가지 새로운 클래스를 추가했습니다,
CDKMRippleCarryAdder,ClassicalAdder과DraperQFTAdder를qiskit.circuit.library모듈에 추가했습니다. 이 새로운 회로 클래스는 동일한 크기의 큐비트 레지스터 두 개를 고전적으로 더하는 데 사용됩니다. 큐비트에서 및 두 레지스터의 경우, 세 개의 새로운 클래스가 연산을 수행합니다:
예를 들어,
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import CDKMRippleCarryAdder
from qiskit.quantum_info import Statevector
# a encodes |01> = 1
a = QuantumCircuit(2)
a.x(0)
# b encodes |10> = 2
b = QuantumCircuit(2)
b.x(1)
# adder on 2-bit numbers
adder = CDKMRippleCarryAdder(2)
# add the state preparations to the front of the circuit
adder.compose(a, [0, 1], inplace=True, front=True)
adder.compose(b, [2, 3], inplace=True, front=True)
# simulate and get the state of all qubits
sv = Statevector(adder)
counts = sv.probabilities_dict()
state = list(counts.keys())[0] # we only have a single state
# skip the input carry (first bit) and the register |a> (last two bits)
result = state[1:-2]
print(result) # '011' = 3 = 1 + 2- 두 개의 새로운 클래스를 추가했습니다,
RGQFTMultiplier과HRSCumulativeMultiplier를 추가했습니다qiskit.circuit.library모듈에 추가했습니다. 이 클래스는 크기가 같은 두 큐비트 레지스터의 고전적인 곱셈을 수행하는 데 사용됩니다. 큐비트에 있는 두 개의 레지스터 와 의 경우, 두 개의 새로운 클래스가 연산을 수행합니다
예를 들어,
from qiskit.circuit import QuantumCircuit
from qiskit.circuit.library import RGQFTMultiplier
from qiskit.quantum_info import Statevector
num_state_qubits = 2
# a encodes |11> = 3
a = QuantumCircuit(num_state_qubits)
a.x(range(num_state_qubits))
# b encodes |11> = 3
b = QuantumCircuit(num_state_qubits)
b.x(range(num_state_qubits))
# multiplier on 2-bit numbers
multiplier = RGQFTMultiplier(num_state_qubits)
# add the state preparations to the front of the circuit
multiplier.compose(a, [0, 1], inplace=True, front=True)
multiplier.compose(b, [2, 3], inplace=True, front=True)
# simulate and get the state of all qubits
sv = Statevector(multiplier)
counts = sv.probabilities_dict(decimals=10)
state = list(counts.keys())[0] # we only have a single state
# skip both input registers
result = state[:-2*num_state_qubits]
print(result) # '1001' = 9 = 3 * 3-
클래스는 이제
Delay클래스는 이제ParameterExpression또는Parameterduration값을 생성자 및 해당 클래스의duration어트리뷰트.예를 들어,
idle_dur = Parameter('t') qc = QuantumCircuit(1, 1) qc.x(0) qc.delay(idle_dur, 0, 'us') qc.measure(0, 0) print(qc) # parameterized delay in us (micro seconds) # assign before transpilation assigned = qc.assign_parameters({idle_dur: 0.1}) print(assigned) # delay in us transpiled = transpile(assigned, some_backend_with_dt) print(transpiled) # delay in dt # assign after transpilation transpiled = transpile(qc, some_backend_with_dt) print(transpiled) # parameterized delay in dt assigned = transpiled.assign_parameters({idle_dur: 0.1}) print(assigned) # delay in dt -
새로운 바이너리 직렬화 형식인 QPY가 도입되었습니다. 이는 키스킷 고유의 하위 호환성(이전 버전의 키스킷으로 생성된 QPY 파일을 최신 버전의 키스킷에서 로드할 수 있음)이 있는 빠른 바이너리 직렬화 포맷으로 설계되었습니다. QPY 직렬화 도구는
qiskit.circuit.qpy_serialization모듈을 통해 사용할 수 있습니다. 예를 들어 QPY 파일을 생성하는 경우입니다:from datetime import datetime from qiskit.circuit import QuantumCircuit from qiskit.circuit import qpy_serialization qc = QuantumCircuit( 2, metadata={'created_at': datetime.utcnow().isoformat()} ) qc.h(0) qc.cx(0, 1) qc.measure_all() circuits = [qc] * 5 with open('five_bells.qpy', 'wb') as qpy_file: qpy_serialization.dump(circuits, qpy_file)그런 다음 QPY 파일에 저장된 5개의 회로를 로드할 수 있습니다:
from qiskit.circuit.qpy_serialization with open('five_bells.qpy', 'rb') as qpy_file: circuits = qpy_serialization.load(qpy_file)QPY 파일 형식 사양은 모듈 설명서에서 확인할 수 있습니다.
-
클래스는
TwoQubitBasisDecomposer클래스는 CX, √X 및 가상 Rz 게이트가 있는 기저에 대해 펄스 최적 분해를 수행하도록 업데이트되었습니다 https://arxiv.org/pdf/2008.08571. 여기서 펄스 최적이란 모든 CX 게이트 앞이나 뒤에 더 많은 로컬 게이트가 있는 대신 분해의 CX 게이트 사이의 게이트 지속 시간이 줄어들어 회로로 구성될 때 인접한 게이트로 단일 큐비트 압축이 발생하여 전체 시퀀스 지속 시간이 줄어들 수 있다는 것을 의미합니다.에 대한 새로운 키워드 인자
`pulse_optimize가 생성자에 추가되었습니다TwoQubitBasisDecomposer의 생성자에 추가되었습니다:None: 펄스 최적 분해를 시도합니다. 디코더를 기준으로 최적의 펄스 분해를 알 수 없는 경우 경고 없이 표준 분해로 되돌아갑니다. 기본 설정입니다.True: 펄스 최적 분해를 시도합니다. 디코더의 기반에 대해 펄스 최적 분해를 알 수 없는 경우 QiskitError 을 올리세요.False: 펄스 최적 분해를 시도하지 마십시오.
예를 들어,
from qiskit.quantum_info import TwoQubitBasisDecomposer from qiskit.circuit.library import CXGate from qiskit.quantum_info import random_unitary unitary_matrix = random_unitary(4) decomposer = TwoQubitBasisDecomposer(CXGate(), euler_basis="ZSX", pulse_optimize=True) circuit = decomposer(unitary_matrix) -
에 있는 트랜스파일러 패스
UnitarySynthesisqiskit.transpiler.passes가 펄스 최적 분해 수행을 지원하도록 업데이트되었습니다. 이는 주로 생성자에 추가되어 펄스 최적 합성 수행 여부를 제어하는 데 사용되는pulse_optimize키워드 인수를 통해 이루어집니다. 이 kwarg의 동작은 클래스의 생성자에서pulse_optimizekwarg를 반영합니다TwoQubitBasisDecomposer클래스의 생성자와 유사합니다. 또한 생성자에는 합성을 시도할 게이트 이름 목록을 지정하는 데 사용되는 또 다른 새로운 키워드 인수synth_gates가 있습니다.None및pulse_optimize이False또는None인 경우"unitary"을 사용합니다. 없음이고 pulse_optimize가True인 경우"unitary"및"swap"를 사용합니다. 합성에서 CX 게이트의 방향은 임의적이므로 다른 키워드 인자natural_direction를 추가하여 먼저 커플링 맵을 고려한 다음CXGate기간을 추가하여 합성을 생성할 CX 방향을 선택할 수 있습니다.from qiskit.circuit import QuantumCircuit from qiskit.transpiler import PassManager, CouplingMap from qiskit.transpiler.passes import TrivialLayout, UnitarySynthesis from qiskit.test.mock import FakeVigo from qiskit.quantum_info.random import random_unitary backend = FakeVigo() conf = backend.configuration() coupling_map = CouplingMap(conf.coupling_map) triv_layout_pass = TrivialLayout(coupling_map) circ = QuantumCircuit(2) circ.unitary(random_unitary(4), [0, 1]) unisynth_pass = UnitarySynthesis( basis_gates=conf.basis_gates, coupling_map=None, backend_props=backend.properties(), pulse_optimize=True, natural_direction=True, synth_gates=['unitary']) pm = PassManager([triv_layout_pass, unisynth_pass]) optimal_circ = pm.run(circ) -
basis인자에 대한 새로운 기준 옵션인'XZX'이 추가되었습니다OneQubitEulerDecomposer클래스에 추가되었습니다. -
새로운 메서드가 추가되었습니다,
get_instructions()메서드를 추가했습니다QuantumCircuit클래스에 추가되었습니다. 이 메서드는 회로의 모든Instruction객체를 반환하는 데 사용됩니다namename인자와 일치하는 모든 객체를 반환하고, 관련qargs및cargs목록과 함께Qubit및Clbit객체를 반환합니다. -
새로운 옵션(
all)이 키스킷-테라 패키지에 추가되었습니다. 예를 들어 하나의 추가 기능으로 모든 선택적 요구 사항을 설치할 수 있습니다:pip install 'qiskit-terra[all]'이전에는 모든 선택적 종속 요소를 동시에 설치하려면 모든 추가 항목을 개별적으로 나열해야 했습니다. -
두 개의 새로운 클래스 추가
ProbDistribution과QuasiDistribution클래스를 추가하여 각각 확률 분포와 준확률 분포를 처리할 수 있도록 했습니다. 이 두 객체는 확률 및 준확률 분포 작업을 위한 추가 메서드를 추가하는 사전 하위 클래스입니다. -
새로운
settings속성을 추가했습니다Optimizer모듈의 모든 옵티마이저 클래스의 기반이 되는qiskit.algorithms.optimizers모듈의 모든 옵티마이저 클래스의 기반이 되는 새로운 프로퍼티를 추가했습니다. 이 속성은 동일한 옵티마이저 클래스의 다른 인스턴스를 인스턴스화하는 데 사용할 수 있는 옵티마이저 설정의 Python 딕셔너리를 반환합니다. 예를 들어,from qiskit.algorithms.optimizers import GradientDescent optimizer = GradientDescent(maxiter=10, learning_rate=0.01) settings = optimizer.settings new_optimizer = GradientDescent(**settings)settings사전은 JSON 또는 다른 직렬화 형식을 사용하여 옵티마이저 객체를 직렬화하는 데에도 잠재적으로 유용할 수 있습니다. -
qiskit.user_config모듈에 새로운 기능인set_config()이 추가되었습니다. 이 함수는 키스킷 API에서 사용자 구성의 값을 설정할 수 있게 해줍니다. 예를 들어,from qiskit.user_config import set_config set_config("circuit_drawer", "mpl", section="default", file="settings.conf")를 입력하면
settings.conf파일의default섹션에circuit_drawer = mpl값이 추가됩니다.file_path인수를 지정하지 않으면 현재 사용되는 사용자 구성 파일의 경로(설정된 경우QISKIT_SETTINGS환경 변수의 값 또는 기본 위치~/.qiskit/settings.conf)가 업데이트됩니다. 그러나 구성 파일은 가져오기 시점에 구문 분석되므로 기존 구성 파일의 변경 사항은 현재 세션에 반영되지 않습니다. -
새 상태 클래스를 추가했습니다,
StabilizerState를qiskit.quantum_info모듈에 새로운 상태 클래스를 추가했습니다. 이 클래스는 아론슨과 고트스만(2004) 의 규칙을 사용하여 안정화 시뮬레이터 상태를 나타냅니다. -
'value'및'value_desc'두 가지 새로운 옵션이sortkwarg에 추가되었습니다qiskit.visualization.plot_histogram()함수에 추가되었습니다.sort을 이러한 옵션 중 하나로 설정하면 출력 시각화는 각 비트 문자열에 대한 최대 확률을 기준으로 X 축을 정렬합니다. 예를 들어,from qiskit.visualization import plot_histogram counts = { '000': 5, '001': 25, '010': 125, '011': 625, '100': 3125, '101': 15625, '110': 78125, '111': 390625, } plot_histogram(counts, sort='value')
알려진 문제점
- 실행 시
parallel_map()(및 내부적으로 호출하는 함수parallel_map()와 같은transpile()및assemble())를 Python 3.9QISKIT_PARALLEL을 True로 설정한 상태에서 실행할 때 일부 시나리오에서는 프로그램이 교착 상태에 빠져 실행이 완료되지 않을 수 있습니다. 이러한 문제를 방지하기 위해 Python 3.9 의 기본값이 병렬로 실행되지 않도록 변경되었지만QISKIT_PARALLEL을 명시적으로 사용하도록 설정한 경우에도 여전히 이러한 문제가 발생할 수 있습니다.
업그레이드 주의사항
-
Retworkx 종속성의 최소 버전이 버전 0.9.0 으로 증가했습니다. 이는 일부 트랜스파일러 패스의 성능을 개선한 해당 릴리스에 도입된 새로운 API를 사용하기 위한 것입니다.
-
Python 3.9 환경에서
QISKIT_PARALLEL의 기본값이False으로 변경되었으므로 Python 3.9 에서 실행할 때 기본적으로 멀티프로세싱이 사용되지 않습니다. 이는 Python 3.9 (자세한 내용은 알려진 문제 섹션 참조)에서 멀티 프로세싱을 실행할 때 발생할 수 있는 잠재적인 교착 상태/중단 문제를 방지하기 위해 수행되었습니다.QISKIT_PARALLEL환경 변수를TRUE으로 명시적으로 설정하여 수동으로 활성화할 수도 있습니다. -
qiskit.test.mock의 기존 가짜 백엔드 클래스는 이제 엄격하게BackendV1인터페이스를 엄격하게 구현합니다. 즉, 수동으로 구성하는 경우QasmQobj또는PulseQobjrun()메서드와 함께 사용하기 위해 객체를 생성했다면 더 이상 작동하지 않습니다.run()메서드는QuantumCircuit또는Schedule객체만 허용합니다. 이는 이전에는 키스킷 테라 내에서 테스트가 없던 qobj 없이 구현된 새로운 백엔드의 테스트를 가능하게 하기 위해 필요했습니다. 가짜 백엔드를 활용해야 하는 경우QasmQobj또는PulseQobj를 사용하여 레거시 공급자 인터페이스를 명시적으로 테스트하기 위해 새로운 가짜 레거시 백엔드 객체가 추가되었습니다. 레거시 인터페이스가 더 이상 사용되지 않고 제거되면 제거됩니다. 앞으로 새로운 가짜 백엔드를 구현할 때는BackendV1인터페이스만 구현하며 새로운 가짜 백엔드를 위한 새로운 레거시 백엔드 클래스를 추가하지 않습니다. -
잘못된 문자열 레이블이 있는
Pauli객체를 만들 때 잘못된 문자열 레이블이 있는 경우QiskitError가 발생합니다. 이는 유효하지 않은 문자열 레이블에AttributeError오류가 발생하던 이전 릴리스에서 변경된 사항입니다. 이 변경은 오류 메시지가 더 많은 정보를 제공하고 일반적인AttributeError과 구별되도록 하기 위해 이루어졌습니다. -
펄스 빌더의 출력 프로그램 표현(
qiskit.pulse.builder.build())의 출력 프로그램 표현이Schedule에서ScheduleBlock. 이 새로운 표현은 시프트 및 삽입과 같은 일부 타이밍 관련 작업을 비활성화합니다. 그러나 이를 통해 빌더 컨텍스트 내에서 매개변수화된 명령어 지속 시간을 사용할 수 있습니다. 예를 들어,from qiskit import pulse from qiskit.circuit import Parameter dur = Parameter('duration') with pulse.build() as sched: with pulse.align_sequential(): pulse.delay(dur, pulse.DriveChannel(1)) pulse.play(pulse.Gaussian(dur, 0.1, dur/4), pulse.DriveChannel(0)) assigned0 = sched.assign_parameters({dur: 100}) assigned1 = sched.assign_parameters({dur: 200})지속 시간이 할당된 스케줄을 어셈블러(또는 백엔드)에 직접 전달하거나 양자 회로에 펄스 게이트로 연결할 수 있습니다.
-
이전에는 선택적 종속성이었던 트위들덤 라이브러리가 필수 종속성이 되었습니다. 이것은 널리 사용되기 때문에 수행되었습니다
PhaseOracle(트위들덤 설치 여부에 따라 다름)의 여러 알고리즘과 함께qiskit.algorithms. -
이전에
pip install qiskit-terra[full-featured-simulators]같은 것과 함께qiskit-aer을 설치하는 데 사용할 수 있었던 선택적 추가full-featured-simulators가 qiskit-terra 패키지에서 제거되었습니다.qiskit-terra대신qiskit-aer을 설치하는 데 사용했다면, qiskit 메타패키지를 사용하거나pip install qiskit-terra qiskit-aer과 함께 qiskit-terra 및 qiskit-aer 를 설치해야 한다. -
Linux ( x86_64, aarch64, ppc64le ) 및 macOS 사용자( x86_64, arm64 )를 위한 새로운 요구 사항 심엔진이 추가되었습니다. Windows( 64bit Windows용 사전 컴파일된 패키지로 PyPi 에서 제공) 및 기타 아키텍처에 대한 선택적 종속성입니다. 설치하면 다음과 같은 평가에 대해 크게 향상된 성능을 제공합니다
Parameter및ParameterExpression객체의 평가 성능이 향상됩니다. -
모든 라이브러리 회로 클래스, 즉 모든
QuantumCircuit파생 클래스qiskit.circuit.library의 모든 파생 클래스는 이제Instruction(또는Gate로 감싸집니다(단일 클래스인 경우). 예를 들어, 회로를 가져와서 그리는 경우QFT회로이전에는 다음과 같이 보였습니다
┌───┐ q_0: ────────────────────■────────■───────┤ H ├─X─ ┌───┐ │ │P(π/2) └───┘ │ q_1: ──────■───────┤ H ├─┼────────■─────────────┼─ ┌───┐ │P(π/2) └───┘ │P(π/4) │ q_2: ┤ H ├─■─────────────■──────────────────────X─ └───┘이제 다음과 같이 보입니다
┌──────┐ q_0: ┤0 ├ │ │ q_1: ┤1 QFT ├ │ │ q_2: ┤2 ├ └──────┘이전 회로를 얻으려면 회로의
decompose()메서드를 호출하면 됩니다이 변경은 주로 일관성을 위해 이루어졌으며, 이 릴리스 이전에는 일부 회로 클래스가
qiskit.circuit.library의 일부 회로 클래스는 이전에Instruction또는Gate로 래핑되었지만 전부는 아니었습니다.
지원 중단 노트
qiskit.exceptions.QiskitIndexError클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 예외는 키스킷에서 적극적으로 사용되지 않았으며, 사용 중이라면 사용자 정의 예외 클래스를 생성하여 대체할 수 있습니다.epsilon및factrkwarg는qiskit.algorithms.optimizers.L_BFGS_B생성자 및factrkwargP_BFGS옵티마이저 클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신epsilon대신epskarg를 사용하세요.factrkwarg는ftol으로 대체됩니다. 이 둘의 관계는ftol = factr * numpy.finfo(float).eps입니다. 이 변경은scipy.optimize.minimize함수'L-BFGS-B'메서드의 사용법과 일관성을 유지하기 위해 이루어졌습니다. 새로운 매개변수 사용 방법에 대한 자세한 내용은scipy.optimize.minimize(method='L-BFGS-B')문서를 참조하세요.qiskit.providers.BaseBackend,qiskit.providers.BaseJob,qiskit.providers.BaseProvider추상 클래스로 구성된 레거시 공급자 인터페이스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 버전이 지정된 인터페이스를 사용해야 하며, 현재 추상 클래스 버전은qiskit.providers.BackendV1,qiskit.providers.JobV1와qiskit.providers.ProviderV1. V1 개체는 대부분 이전 버전과 호환되므로 레거시 인터페이스에서 버전이 변경된 인터페이스로 쉽게 마이그레이션할 수 있습니다. 그러나 추상 인터페이스의 향후 버전은 더 다양해질 것으로 예상됩니다. 버전별 인터페이스에 대한 자세한 내용은qiskit.providers문서에서 버전이 지정된 인터페이스에 대한 자세한 내용을 확인할 수 있습니다.condition콰그는DAGDepNode생성자에 해당condition어트리뷰트와 함께DAGDepNode속성은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 노드가op유형인 경우DAGDepNode.op.condition을 사용하여DAGDepNode의condition에 액세스할 수 있습니다.- 클래스의
condition속성은DAGNode클래스의 속성은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 노드가op유형인 경우DAGNode.op.condition을 사용하여DAGNode객체의condition에 액세스할 수 있습니다. - 펄스 빌더(
qiskit.pulse.builder.build()) 구문qiskit.pulse.builder.inline()은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 컨텍스트를 사용하는 대신 인라인 컨텍스트 내에서 정렬 컨텍스트를 제거하면 됩니다. - 펄스 빌더(
qiskit.pulse.builder.build()) 구문qiskit.pulse.builder.pad()은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이는 현재 펄스 빌더가 반환하는ScheduleBlock가.insert메서드를 지원하지 않기 때문입니다(그리고 빌더에 삽입 구문이 없습니다). 다른 지침의 삽입을 차단하기 위해 시간 슬롯 자리 표시자를 사용하는 것은 더 이상 필요하지 않습니다.
버그 수정
-
그리고
OneQubitEulerDecomposer및TwoQubitBasisDecomposer클래스가 개선되어 허용 오차를 강화하고, 반복성과 단순성을 개선했으며, 여러 글로벌 위상 추적 버그가 수정되었습니다. -
속성을
name속성을Gateinverse`()메서드를 여러 번 호출하여 생성된 속성 할당 문제를 수정했습니다. 이 수정 이전에는inverse`()을 호출할 때마다 무조건_dg을 추가하여 역으로 호출했습니다. 이 문제가 수정되어inverse`()으로 두 번째 호출 시_dg접미사가 제거됩니다. -
의 사소성 확인 조건을 수정합니다
CZGate,CRZGate,CU1Gate및MCU1Gate의HoareOptimizer패스. 이전에는 어떤 경우에는 옵티마이저가 이러한 게이트를 제거하여 변환의 의미적 동등성을 깨뜨리기도 했습니다. -
객체를 변환할 때 발생하는 문제를 수정했습니다
ListOp객체를PauliSumOp객체를PauliExpectation또는AerPauliExpectation. 이전에는 잠재적으로 비용이 많이 드는 폴리 표현으로 변환하는 것에 대한 경고가 표시되었습니다. 내부적으로 이 문제를 해결하기 위해ListOp를SummedOp의PauliOp객체를 생성하는 대신 이제PauliSumOp를 생성하여 더 효율적입니다. 수정 #6159 -
클래스 관련 문제를 수정했습니다
NLocal모듈의qiskit.circuit.library모듈의 클래스에서 잘못된 유형이repskwarg에 사용되어 나중에 예기치 않은 런타임 오류가 발생하는 경우 객체 초기화 시 예외를 제대로 발생시키지 않는 문제를 수정했습니다. 이제repskwarg가int값이 아닌 경우TypeError가 올바르게 발생합니다. 수정 #6515 -
클래스의
TwoLocal모듈의qiskit.circuit.library모듈의 클래스가 널 정수형(예:numpy.int32,numpy.int64, 등)을entanglementkwarg의 유효한 입력으로 받아들이지 않는 문제를 수정했습니다. 수정 #6455 -
클래스에 대한
from_qasm_file()또는from_qasm_str()생성자와 함께 OpenQASM2 파일 또는 문자열을 로드할 때QuantumCircuit클래스의 OpenQASM2 회로에delay이름의 인스트럭션이 포함된 경우, 이는qiskit.circuit.Delay인스트럭션에 매핑됩니다. 예를 들어,from qiskit import QuantumCircuit qasm = """OPENQASM 2.0; include "qelib1.inc"; opaque delay(time) q; qreg q[1]; delay(172) q[0]; u3(0.1,0.2,0.3) q[0]; """ circuit = QuantumCircuit.from_qasm_str(qasm) circuit.draw()수정 #6510
-
객체 사이의 추가 관련 문제를 수정했습니다
PauliSumOp객체 사이의ParameterExpression계수가 있는 오브젝트 간의 덧셈 문제를 수정했습니다. 이전에는 추가가 올바르게 처리되지 않아QiskitError예외가 발생했습니다ParameterExpression가 올바르게 처리되지 않았기 때문입니다. 이 문제가 수정되어 다음과 같은 객체 사이에PauliSumOp객체 사이에ParameterExpression계수가 있는 오브젝트 간에 덧셈을 수행할 수 있도록 수정되었습니다. -
클래스 초기화 관련 문제를 수정했습니다
AmplificationProblem클래스 초기화 문제를 수정했습니다.is_good_statekwarg는 필수 필드였으나 선택 사항으로 잘못 취급되어 문서화되었습니다(그리고 그렇게 문서화되었습니다). 이 문제는 수정되었고 또한 업데이트되어oracle입력이 (평가 메서드에 있는)PhaseOracle객체(평가 메서드에 제공됨)가 아닌 한 필드는 필수이며is_good_state없이 구성될 경우TypeError이 발생합니다. -
컨트롤이 열려 있는
ControlledGate에 컨트롤을 추가하면 내부의 열린 컨트롤이 설정 해제되던 문제를 수정했습니다. 수정 #5857 -
메소드 관련 문제를 수정했습니다
convert()클래스의PauliExpectation클래스에서 호출하면 잘못된 결과가 반환되는 문제를 수정했습니다. 수정 #6307 -
함수 관련 문제를 수정했습니다
qiskit.pulse.transforms.inline_subroutines()함수가 중첩된 일정에서 호출될 때 중첩된 구성 요소를 모두 제거하지 않던 문제를 수정했습니다. 수정 #6321 -
Python 표준 라이브러리의
functools.partial()함수로 생성된 부분적으로 바인딩된 콜러블을schedulekwarg로 전달할 때 발생하는 문제를 수정했습니다add()메서드에InstructionScheduleMap클래스의 메서드로 전달할 때 이전에는 오류가 발생하던 문제를 수정했습니다. 수정 #6278 -
문제를 수정했습니다
PiecewiseChebyshev를 설정할 때breakpoints을None으로 설정할 때 중단점으로 잘못 처리되던 문제를 수정했습니다.None으로 설정하면 전체 간격에 걸쳐 근사치를 구하는 기본 동작으로 다시 전환되도록 수정되었습니다. 수정 #6198 -
문제를 수정했습니다
num_connected_components()메서드QuantumCircuit메서드가 기존 레지스터에 조건부 게이트가 두 개 이상 포함된 경우 잘못된 구성 요소 수를 반환하던 문제를 수정했습니다. 수정 #6477 -
상태 함수의 계수가 올바르게 곱해지지 않던
qiskit.opflow.expectations모듈에서 상태함수의 계수가 올바르게 곱해지지 않던 문제를 수정했습니다. 또한 그라디언트 및 QFI 계산 시PauliExpectation또는AerPauliExpectation클래스를 사용할 때의 계산도 수정했습니다. 예를 들어, 이전에는from qiskit.opflow import StateFn, I, One exp = ~StateFn(I) @ (2 * One)평가된 경우
2AerPauliExpectation로, 다른 기대치 변환기의 경우4로 보내주세요.~StateFn(I) @ (2 * One)은~(2 * One) @ I @ (2 * One)의 축약 표기이므로 이제 모든 기대치 변환기에 대해 올바른 계수4가 반환됩니다. 수정 #6497 -
PauliOp에 페이즈가 있을 때to_circuit()이 실패하는 버그를 수정했습니다. 동시에PauliGate을 사용하는 것이 더 효율적이었습니다. -
메서드에 의해 생성된 QASM 출력이
qasm()메서드에 의해 생성된QuantumCircuit와 같은 복합 게이트의 경우MCXGate및 그 변형(MCXGrayCode,MCXRecursive및MCXVChain)는 올바르지 않습니다. 이제 회로의 aGate에 없는 경우qelib1.inc, 해당 정의가 출력 QASM 문자열에 추가됩니다. 4943 및 3945 수정 -
함수 관련 문제를 수정했습니다
circuit_drawer()함수 및draw()메서드의QuantumCircuit.mpl또는latex출력 모드를 사용할 때cregbundlekwarg를False으로 설정하고reverse_bitskwarg를True으로 설정하면reverse_bits을False으로 설정했을 때와 동일한 순서로 클래식 레지스터의 비트가 표시됩니다. -
qiskit.extensions.Initialize명령어를 사용할 때 합성된 정의의 전역 위상이 올바르게 설정되지 않던 문제를 수정했습니다. 수정 #5320 -
의 비트 순서가 측정된 비트 문자열의 순서와 일치하지 않는 문제를 수정했습니다
qiskit.circuit.library.PhaseOracle.evaluate_bitstring()의 비트 순서가 측정된 비트 문자열의 순서와 일치하지 않는 문제를 수정했습니다. 이 수정은 또한 오라클이 지정된 경우Grover알고리즘 클래스의 실행에도 영향을 미칩니다PhaseOracle로 지정된 경우에도 이제 올바른 비트 문자열을 올바르게 식별합니다. 수정 #6314 -
버그 수정
Optimize1qGatesDecomposition()에서 특정 짧은 시퀀스의 게이트가 잘못 재작성되지 않던 버그를 수정했습니다. -
qiskit.opflow.gradients.Gradient.gradient_wrapper()메서드에서 그라데이션 계산 관련 문제를 수정했습니다. 이전에는 연산자가 대각선이 아닌 경우 일부 상황에서 잘못된 결과가 반환되었습니다. 기대치 변환기를 사용하여 결과가 항상 정확한지 확인하여 이 문제를 해결했습니다. -
함수 관련 문제를 수정했습니다
circuit_drawer()함수 및draw()메서드QuantumCircuit의 함수와 메서드가 일부 상황에서 클래식 비트가 포함된 사용자 지정 명령어를 잘못 렌더링하는 문제를 수정했습니다. 3201, 3202 및 #6178 수정 -
의 문제를 수정했습니다
circuit_drawer()및draw()클래스의QuantumCircuit클래스의 메서드와mpl출력 모드를 사용할 때 제어된 Z 게이트가 비대칭으로 잘못 그려지는 문제를 수정했습니다. 수정 #5981 -
OptimizeSwapBeforeMeasure트랜스파일러 패스의 일부 상황에서 기존 조건이 포함된SwapGate가 제거되는 문제를 수정했습니다. 수정 #6192 -
클래스의 단계와 관련된 문제를 수정했습니다
qiskit.opflow.gradients.QFI클래스의 위상 문제를 수정했습니다.qfi_method이lin_comb_full으로 설정되어 잘못된 옵저버블이 평가되는 문제를 수정했습니다. -
문제를 수정했습니다
VQE알고리즘 클래스와 함께 실행될 때L_BFGS_B또는P_BFGS옵티마이저 클래스와 그라데이션이 사용될 때 그라데이션이 예상되는 플로트 목록이 아닌 널 배열로 잘못 전달되어 오류가 발생하는 문제를 수정했습니다. 이 문제가 해결되어 그라데이션과 함께VQE및L_BFGS_B또는P_BFGS옵티마이저를 사용할 수 있습니다.
기타 참고사항
Instruction클래스에 대한parameters()메서드의 사용 중단이 취소되었습니다. 이 방법은 원래 0.17.0 에서 더 이상 사용되지 않지만 보정 실험을 실행할 때를 포함하여 여러 애플리케이션에서 여전히 필요합니다. 이 방법은 계속 지원되며 제거되지 않습니다.
에어 0.8.2
변경 없음
이그니스 0.6.0
변경 없음
아쿠아 0.9.4
변경 없음
IBM Q 제공자 0.15.0
새 기능
-
작업이 실패한 경우 이유를 나타내는 문자열을 반환하는 새로운 메서드
qiskit.providers.ibmq.runtime.RuntimeJob.error_message()에 대한 지원을 추가합니다. -
이제
qiskit.providers.ibmq.runtime.IBMRuntimeService.run()메서드의 입력 매개변수를 자동 완성 기능을 지원하는qiskit.providers.ibmq.runtime.ParameterNamespace인스턴스로 지정할 수 있습니다.qiskit.providers.ibmq.runtime.RuntimeProgram.parameters()을 사용하여ParameterNamespace인스턴스를 검색할 수 있습니다.예를 들어,
from qiskit import IBMQ provider = IBMQ.load_account() # Set the "sample-program" program parameters. params = provider.runtime.program(program_id="sample-program").parameters() params.iterations = 2 # Configure backend options options = {'backend_name': 'ibmq_qasm_simulator'} # Execute the circuit using the "circuit-runner" program. job = provider.runtime.run(program_id="sample-program", options=options, inputs=params) -
이제 사용자는
qiskit.providers.ibmq.runtime.IBMRuntimeService.set_program_visibility()을 사용하여 Qiskit Runtime 프로그램의 공개 여부(비공개/공개)를 설정할 수 있습니다. -
qiskit.providers.ibmq.runtime.IBMRuntimeService.jobs()에 선택적 부울 매개변수 pending이 추가되어 상태별로 작업을 필터링할 수 있습니다. 보류 중을 지정하지 않으면 모든 작업이 반환됩니다. 보류 중이 True로 설정되어 있으면 '대기 중' 및 '실행 중' 작업이 반환됩니다. 보류 중이 False로 설정되어 있으면 '완료', '오류', '취소됨' 작업이 반환됩니다. -
qiskit.providers.ibmq.IBMQBackend.run()메서드에서use_measure_esp플래그에 대한 지원을 추가합니다.True이면 백엔드는 해당 큐비트에 대한 터미널 명령어인 모든 측정에 ESP 판독값을 사용합니다. 백엔드에서 ESP 판독을 지원하지 않는 경우 오류가 발생합니다.
업그레이드 주의사항
qiskit.providers.ibmq.runtime.RuntimeProgram.parameters()는 이제qiskit.providers.ibmq.runtime.ParameterNamespace인스턴스를 반환하는 메서드로, 이를 사용하여 런타임 프로그램 파라미터 값을 채우고qiskit.providers.ibmq.runtime.IBMRuntimeService.run()으로 전달할 수 있습니다.- 백엔드 구성의
open_pulse플래그는 더 이상 백엔드가 펄스 수준 제어를 지원하는지 여부를 나타내지 않습니다. 결과적으로qiskit.providers.ibmq.IBMQBackend.configuration()는PulseBackendConfiguration인스턴스를 반환할 수 있습니다.open_pulse플래그가False인 경우에도 마찬가지입니다. - 작업 공유 수준은 채택률이 낮아 더 이상 지원되지 않으며, 해당 인터페이스는 향후 릴리스에서 제거될 예정입니다. 즉, 더 이상 작업을 만들 때 share_level을 전달하거나
qiskit.providers.ibmq.job.IBMQJob.share_level()메서드를 사용하여 작업의 공유 수준을 가져오지 않아야 합니다.
지원 중단 노트
- IBM 하드웨어 백엔드에서
id인스트럭션은 더 이상 사용되지 않습니다. 대신dt단위로 지정된 가변 길이 지연을 구현하는delay명령어를 사용하세요.id명령어가 포함된 회로를 실행하면 작업 제출 시 경고가 표시되고 작업의 모든id명령어는 자동으로 해당되는delay명령어로 대체됩니다.