키스킷 0.15 릴리즈 노트
0.15.0
테라 0.12.0
Prelude
0.12.0 릴리스에는 몇 가지 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 가장 큰 변화는 OpenPulse 에 파라메트릭 펄스 지원이 추가된 것입니다. 펄스를 설명하기 위해 샘플 포인트가 아닌 매개변수를 사용하는 펄스 명령입니다. 0.12.0 Python 에 대한 지원을 포함하는 첫 번째 릴리스입니다 3.8. 또한 업스트림 커뮤니티에서 지원을 중단하면 제거될 Python 3.5 지원 중단의 시작을 알립니다.
새 기능
-
패스
qiskit.transpiler.passes.CSPLayout는call_limit와time_limit라는 두 개의 새로운 매개 변수로 확장되었습니다. 이 옵션을 사용하면 패스의 실행 기간을 제한할 수 있습니다.call_limit옵션은 역추적 솔버의 재귀 함수가 호출될 수 있는 횟수를 제한합니다. 마찬가지로time_limit은 솔버를 실행할 수 있는 시간(초)을 제한합니다. 기본값은 각각1000호출 및10초입니다. -
qiskit.pulse.Acquire이제 단일 큐비트에 적용할 수 있습니다. 이제 모든 작업이 단일 채널에 적용되므로 펄스 프로그래밍이 더욱 일관되고 추론하기 쉬워집니다. 예를 들어,acquire = Acquire(duration=10) schedule = Schedule() schedule.insert(60, acquire(AcquireChannel(0), MemorySlot(0), RegisterSlot(0))) schedule.insert(60, acquire(AcquireChannel(1), MemorySlot(1), RegisterSlot(1))) -
새로운 메서드
qiskit.transpiler.CouplingMap.draw()에 새로운 메서드qiskit.transpiler.CouplingMap에 새로운 메서드가 추가되어 커플링 맵 그래프에서 그래프 시각화 이미지를 생성할 수 있습니다. 예를 들어,from qiskit.transpiler import CouplingMap coupling_map = CouplingMap( [[0, 1], [1, 0], [1, 2], [1, 3], [2, 1], [3, 1], [3, 4], [4, 3]]) coupling_map.draw() -
파라메트릭 펄스가 OpenPulse 에 추가되었습니다. 이는 백엔드에서 매개변수화되고 이해되는 펄스 명령입니다. 임의의 펄스 모양은 SamplePulse 명령으로 계속 지원됩니다. 새로 지원되는 펄스 클래스는 다음과 같습니다:
qiskit.pulse.ConstantPulseqiskit.pulse.Dragqiskit.pulse.Gaussianqiskit.pulse.GaussianSquare
다른 펄스 명령과 마찬가지로 사용할 수 있습니다. 예:
from qiskit.pulse import (Schedule, Gaussian, Drag, ConstantPulse, GaussianSquare) sched = Schedule(name='parametric_demo') sched += Gaussian(duration=25, sigma=4, amp=0.5j)(DriveChannel(0)) sched += Drag(duration=25, amp=0.1, sigma=5, beta=4)(DriveChannel(1)) sched += ConstantPulse(duration=25, amp=0.3+0.1j)(DriveChannel(1)) sched += GaussianSquare(duration=1500, amp=0.2, sigma=8, width=140)(MeasureChannel(0)) << sched.duration결과 일정은
qiskit.pulse.pulse_lib을 사용하여 구축한 SamplePulse 일정과 유사하지만 파형 샘플링은 백엔드에서 수행됩니다. 메서드qiskit.pulse.Schedule.draw()를 평소처럼 사용할 수 있습니다. 그러나 명령은qiskit.pulse.ParametricPulse.get_sample_pulse()메서드를 사용하여SamplePulse로 변환되므로 표시되는 펄스가 백엔드에서와 같은 방식으로 연속 함수를 샘플링하지 않을 수 있습니다.이 기능은 모든 백엔드에 대한 펄스 프로그램을 구성하는 데 사용할 수 있지만, 백엔드가 파라메트릭 펄스를 지원하지 않는 경우 펄스는
SamplePulse개체로 변환됩니다. 이를 지원하는 백엔드에는 다음과 같은 새로운 속성이 추가됩니다:backend.configuration().parametric_pulses: List[str] # e.g. ['gaussian', 'drag', 'constant']백엔드가 키스킷에 정의된 모든 파라메트릭 펄스를 지원할 필요는 없다는 점에 유의하세요.
백엔드가 파라메트릭 펄스를 지원하고 펄스 스케줄이 이를 통해 빌드되면 조립된 Qobj의 크기가 훨씬 작아집니다. 파라메트릭 펄스로만 빌드된 PulseQobj 의 크기는 명령어 수에만 의존하는 반면, 그렇지 않고 빌드된 PulseQobj 의 크기는 명령어 지속 시간에 따라 커집니다(모든 샘플에 값을 지정해야 하므로).
-
qiskit.scheduler 모듈에 유틸리티 기능(
qiskit.scheduler.measure()및qiskit.scheduler.measure_all())을 추가했습니다. 이 함수는 큐비트를 측정하는qiskit.pulse.Schedule객체를 반환하며, OpenPulse 을 사용하여 큐비트를 측정합니다. 예를 들어,from qiskit.scheduler import measure, measure_all measure_q0_schedule = measure(qubits=[0], backend=backend) measure_all_schedule = measure_all(backend) measure_custom_schedule = measure(qubits=[0], inst_map=backend.defaults().instruction_schedule_map, meas_map=[[0]], qubit_mem_slots={0: 1}) -
Pulse
qiskit.pulse.Schedule객체는 이제 간단한 일정의 경우 유효한 Python 표현식으로 더 잘 표현됩니다. -
메서드의
qiskit.circuit.QuantumCircuit메서드qiskit.circuit.QuantumCircuit.measure_active(),qiskit.circuit.QuantumCircuit.measure_all()와qiskit.circuit.QuantumCircuit.remove_final_measurements()메서드가 추가되었습니다inplace.inplace을False으로 설정하면 이 함수는 회로의 수정된 사본을 반환합니다. 이는 회로 객체를 제자리에서 수정하고 아무것도 반환하지 않는 기본 동작과 다릅니다. -
클래스에 몇 가지 새로운 생성자 메서드가 추가되었습니다
qiskit.transpiler.CouplingMap클래스에 기본 큐비트 커플링 그래프로 오브젝트를 빌드하기 위한 몇 가지 새로운 생성자 메서드가 추가되었습니다. 새로운 생성자 메서드는 다음과 같습니다:예를 들어, 새로운 생성자를 사용하여 선형 체인으로 연결된 5개의 큐비트로 구성된 커플링 맵을 얻으려면 이제 실행할 수 있습니다:
from qiskit.transpiler import CouplingMap coupling_map = CouplingMap.from_line(5) coupling_map.draw() -
새로운 패스 소개
qiskit.transpiler.passes.CrosstalkAdaptiveSchedule. 이 패스는 크로스토크 노이즈가 프로그램에 미치는 영향을 줄이는 것을 목표로 합니다. 백엔드의 크로스토크 특성화 데이터를 사용하여 게이트를 예약합니다. 한 쌍의 게이트에 높은 누화가 있는 경우 배리어를 사용하여 직렬화합니다. 순진한 직렬화는 비일관성 오류가 발생하기 때문에 해롭습니다. 따라서 이 패스는 SMT 최적화 접근 방식을 사용하여 크로스토크와 디코히어런스 오류의 영향을 최소화하는 스케줄을 계산합니다.패스는 이미 백엔드에 트랜스파일된 회로, 즉 회로를 물리적 큐비트로 표현하고 필요한 경우 스왑 게이트를 삽입하여 CNOT로 분해한 회로를 입력으로 받습니다. 이 회로 및 누화 특성화 데이터를 사용하여 Z3 최적화를 통해 새로운 예약 회로를 출력으로 구성합니다.
서킷에서 패스를 사용하려면
dag = circuit_to_dag(circ) pass_ = CrosstalkAdaptiveSchedule(backend_prop, crosstalk_prop) scheduled_dag = pass_.run(dag) scheduled_circ = dag_to_circuit(scheduled_dag)backend_prop는 대상 백엔드의qiskit.providers.models.BackendProperties객체입니다.crosstalk_prop는 조건부 오류율을 지정하는 딕셔너리입니다. 두 개의 게이트g1와g2의 경우crosstalk_prop[g1][g2]는g1와g2가 동시에 실행될 때g1의 조건부 오류율을 지정합니다.crosstalk_prop를 생성하는 메서드는 향후 qiskit-ignis 릴리스에 추가될 예정입니다. 그때까지는 디바이스의 크로스토크 속성을 이미 알고 있거나 직접 디바이스 특성화 실험을 직접 작성해야 합니다. -
최적화 레벨 1에 대한 사전 설정 패스 관리자에서,
qiskit.transpiler.preset_passmanagers.level_1_pass_manager()만약qiskit.transpiler.passes.TrivialLayout레이아웃 패스가 특정 회로와 완벽하게 일치하지 않으면qiskit.transpiler.passes.DenseLayout레이아웃 패스가 대신 사용됩니다. -
새로운 추상 메서드
qiskit.quantum_info.Operator.dot()를 추상BaseOperator클래스에 추가하여 해당 추상 클래스의 모든 구현에 포함되도록 했습니다qiskit.quantum_info.Operator및QuantumChannel(예qiskit.quantum_info.Choi) 객체를 포함합니다. 이 메서드는 올바른 연산자 곱셈a.dot(b)을 반환합니다. 이것은 연산자qiskit.quantum_info.Operator.compose()front메서드를True으로 설정하여 호출하는 것과 같습니다. -
추가
qiskit.quantum_info.average_gate_fidelity()및qiskit.quantum_info.gate_error()함수를 추가하고qiskit.quantum_info모듈에 추가 및 기능qiskit.quantum_info.Operator및QuantumChannel(예:,qiskit.quantum_info.Choi) 객체를 지원합니다. -
함수를 추가했습니다
qiskit.quantum_info.partial_trace()함수를qiskit.quantum_info와 함께 작동하는qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix양자 상태 클래스. 예를 들어,from qiskit.quantum_info.states import Statevector from qiskit.quantum_info.states import DensityMatrix from qiskit.quantum_info.states import partial_trace psi = Statevector.from_label('10+') partial_trace(psi, [0, 1]) rho = DensityMatrix.from_label('10+') partial_trace(rho, [0, 1]) -
언제
qiskit.circuit.QuantumCircuit.draw()또는qiskit.visualization.circuit_drawer()를 True(기본값)로 설정한with_layoutkwarg와 함께 호출하면 출력 시각화는 이제 물리적 큐비트를 정수로 표시하여 가상 큐비트와 명확하게 구분합니다.예를 들면 다음과 같습니다.
from qiskit import QuantumCircuit from qiskit import transpile from qiskit.test.mock import FakeVigo qc = QuantumCircuit(3) qc.h(0) qc.cx(0, 1) qc.cx(0, 2) transpiled_qc = transpile(qc, FakeVigo()) transpiled_qc.draw(output='mpl') -
모듈에 새로운 상태 측정 함수를 추가했습니다
qiskit.quantum_info모듈에 새로운 상태 측정 함수를 추가했습니다:qiskit.quantum_info.entropy(),qiskit.quantum_info.mutual_information(),qiskit.quantum_info.concurrence()및qiskit.quantum_info.entanglement_of_formation(). 이러한 기능은qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix클래스와 함께 작동합니다. -
단일 큐비트 게이트의 분해 방법은
qiskit.quantum_info.synthesis.one_qubit_decompose.OneQubitEulerDecomposer의 단일 비트 게이트 분해 방법은 이제 Z,X,Z 축을 중심으로 세 번의 회전이 특징인'ZXZ'기반도 포함하도록 확장되었습니다. 이제 일반 2x2 연산자를 다음과 같은 기수로 분해할 수 있습니다:U3,U1X,ZYZ,ZXZ,XYX,ZXZ.
알려진 문제점
-
를 사용하는 함수 실행
qiskit.tools.parallel_map()(예:qiskit.execute.execute(),qiskit.compiler.transpile()및qiskit.transpiler.PassManager.run()if __name__ == '__main__':)를 사용하는 함수는 Python 3.8 에서 MacOS 블록 외부에서 실행되는 스크립트에서 호출할 때 작동하지 않을 수 있습니다. 다른 환경은 이 문제의 영향을 받지 않습니다. 이는 병렬 프로세스가 Python 3.8 에서 MacOS 로 시작되는 방식이 변경되었기 때문입니다.parallel_map()를 직접 호출하는 스크립트에서RuntimeError또는AttributeError이 발생하거나 Python 3.8 에서 내부적으로 이를 사용하는 함수를 호출할 때 MacOS 안에 스크립트 호출을 포함하면if __name__ == '__main__':이 문제를 해결할 수 있습니다. 예를 들어,from qiskit import QuantumCircuit, QiskitError from qiskit import execute, BasicAer 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], BasicAer.get_backend('qasm_simulator'))는 다음과 같이 변경되어야 합니다.
from qiskit import QuantumCircuit, QiskitError from qiskit import execute, BasicAer 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], BasicAer.get_backend('qasm_simulator')) if __name__ == '__main__': main()Python 3.8 에서 오류가 발생하면 MacOS.
업그레이드 주의사항
-
Pulse 백엔드의 구성 개체에 대한
rep_time매개변수 값은 이제 마이크로초가 아닌 초 단위로 표시됩니다.PulseBackendConfiguration객체가 처음 초기화될 때 사용자에게 이를 알리는 경고가 한 번 발생합니다. -
의
rep_time인수는qiskit.compiler.assemble()의 인수는 이제 마이크로초가 아닌 초 단위의 값을 받습니다. 이것은 다른 모든 것을 펄스 단위로 만들기 위해 수행되었습니다.rep_time값을 전달한 경우 이 변경 사항을 고려하여 값을 업데이트해야 합니다. -
객체의
base_gate속성 값이qiskit.circuit.ControlledGate객체의 속성 값이 베이스 게이트의 클래스에서 베이스 게이트 클래스의 인스턴스로 변경되었습니다. -
의
base_gate_name속성이 제거되었습니다qiskit.circuit.ControlledGate가 제거되었으므로 객체에서base_gate.name에 액세스하여 기본 게이트의 이름을 가져올 수 있습니다. 예를 들어,from qiskit import QuantumCircuit from qiskit.extensions import HGate qc = QuantumCircuit(3) cch_gate = HGate().control(2) base_gate_name = cch_gate.base_gate.name -
변경
qiskit.quantum_info.Operator매직 메서드를 변경하여__mul__(연산 왼쪽에 정의된 경우 파이썬의 곱셈 연산에 의해 실행됨)이 오른쪽 행렬 곱셈을 구현하도록 했습니다(즉.qiskit.quantum_info.Operator.dot()), 와__rmul__(왼쪽에__mul__이 정의되어 있지 않으면 오른쪽에서 파이썬의 곱셈 연산이 실행됨)은 스칼라 곱셈을 구현합니다(예:qiskit.quantum_info.Operator.multiply()). 이전에는 두 가지 방법 모두 스칼라 곱셈을 구현했습니다. -
함수의 두 번째 인수인
qiskit.quantum_info.process_fidelity()함수의 두 번째 인수인target는 이제 선택 사항입니다. 대상 유니티를 지정하지 않으면 ID 연산자가 있는 입력 채널의 프로세스 충실도가 반환됩니다. -
qiskit.compiler.assemble()는 이제 백엔드에 대해 구성된max_shots값을 존중합니다. 백엔드 구성에 설정된 최대 촬영 횟수를 초과하는shotskwarg 값이 지정되면 이제 함수는QiskitError예외를 발생시킵니다. 또한 샷 인수가 제공되지 않으면 기본값은 1024(이전 동작) 또는 백엔드의max_shots중 낮은 값으로 설정됩니다.
지원 중단 노트
-
에 게이트를 추가하는 방법
qiskit.circuit.QuantumCircuit에 축약된 키워드 인수를 사용하는 방법(예:ctl,tgt)은 키워드 인수가 더 설명하기 쉽도록 이름이 변경되었습니다(예:control_qubit,target_qubit). 이전 이름은 더 이상 사용되지 않습니다.QuantumCircuit메소드의 이전 및 새 호출 서명이 포함된 표가 아래에 포함되어 있습니다.지시사항 유형이전 서명새 서명qiskit.extensions.HGateqc.h(q)qc.h(qubit)qiskit.extensions.CHGateqc.ch(ctl, tgt)qc.ch((control_qubit, target_qubit))qiskit.extensions.IdGateqc.iden(q)qc.iden(qubit)qiskit.extensions.RGateqc.iden(q)qc.iden(qubit)qiskit.extensions.RGateqc.r(theta, phi, q)qc.r(theta, phi, qubit)qiskit.extensions.RXGateqc.rx(theta, q)qc.rx(theta, qubit)qiskit.extensions.CrxGateqc.crx(theta, ctl, tgt)qc.crx(theta, control_qubit, target_qubit)qiskit.extensions.RYGateqc.ry(theta, q)qc.ry(theta, qubit)qiskit.extensions.CryGateqc.cry(theta, ctl, tgt)qc.cry(theta, control_qubit, target_qubit)qiskit.extensions.RZGateqc.rz(phi, q)qc.rz(phi, qubit)qiskit.extensions.CrzGateqc.crz(theta, ctl, tgt)qc.crz(theta, control_qubit, target_qubit)qiskit.extensions.SGateqc.s(q)qc.s(qubit)qiskit.extensions.SdgGateqc.sdg(q)qc.sdg(qubit)qiskit.extensions.FredkinGateqc.cswap(ctl, tgt1, tgt2)qc.cswap(control_qubit, target_qubit1, target_qubit2)qiskit.extensions.TGateqc.t(q)qc.t(qubit)qiskit.extensions.TdgGateqc.tdg(q)qc.tdg(qubit)qiskit.extensions.U1Gateqc.u1(theta, q)qc.u1(theta, qubit)qiskit.extensions.Cu1Gateqc.cu1(theta, ctl, tgt)qc.cu1(theta, control_qubit, target_qubit)qiskit.extensions.U2Gateqc.u2(phi, lam, q)qc.u2(phi, lam, qubit)qiskit.extensions.U3Gateqc.u3(theta, phi, lam, q)qc.u3(theta, phi, lam, qubit)qiskit.extensions.Cu3Gateqc.cu3(theta, phi, lam, ctl, tgt)qc.cu3(theta, phi, lam, control_qubit, target_qubit)qiskit.extensions.XGateqc.x(q)qc.x(qubit)qiskit.extensions.CnotGateqc.cx(ctl, tgt)qc.cx(control_qubit, target_qubit)qiskit.extensions.ToffoliGateqc.ccx(ctl1, ctl2, tgt)qc.ccx(control_qubit1, control_qubit2, target_qubit)qiskit.extensions.YGateqc.y(q)qc.y(qubit)qiskit.extensions.CyGateqc.cy(ctl, tgt)qc.cy(control_qubit, target_qubit)qiskit.extensions.ZGateqc.z(q)qc.z(qubit)qiskit.extensions.CzGateqc.cz(ctl, tgt)qc.cz(control_qubit, target_qubit) -
다중 쿼비트에서
qiskit.pulse.Acquire실행은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 또한qiskit.pulse.AcquireInstruction매개변수mem_slots및reg_slots는 더 이상 사용되지 않습니다. 대신reg_slot및mem_slot을 사용해야 합니다. -
속성의
qiskit.providers.models.PulseDefaults클래스circuit_instruction_map의 속성은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 새 속성instruction_schedule_map을 사용해야 합니다. 이는 속성 값의 유형인InstructionScheduleMap과 일치시키기 위해 수행되었습니다. -
qiskit.pulse.PersistentValue명령은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.qiskit.pulse.ConstantPulse명령(새로운 파라메트릭 펄스 중 하나)으로도 비슷한 기능을 수행할 수 있습니다. 다음을 비교하세요:from qiskit.pulse import Schedule, PersistentValue, ConstantPulse, \ DriveChannel # deprecated implementation sched_w_pv = Schedule() sched_w_pv += PersistentValue(value=0.5)(DriveChannel(0)) sched_w_pv += PersistentValue(value=0)(DriveChannel(0)) << 10 # preferred implementation sched_w_const = Schedule() sched_w_const += ConstantPulse(duration=10, amp=0.5)(DriveChannel(0)) -
Python 3.5 지원은 더 이상 사용되지 않습니다. 업스트림 Python 커뮤니티의 해당 버전에 대한 수명 종료일인 2020년 9월 13일 이후 첫 번째 릴리스에서 지원이 제거됩니다.
-
require_cptpkwarg의qiskit.quantum_info.process_fidelity()함수는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.require_cp와require_tp두 개의 별도 kwarg로 대체됩니다. -
scale파라미터 설정qiskit.circuit.QuantumCircuit.draw()및qiskit.visualization.circuit_drawer()를 첫 번째 위치 인수로 설정하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신scale을 키워드 인수로 사용해야 합니다. -
qiskit.tools.qi.qi모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 모듈의 레거시 함수는 모두 모듈의 함수 및 클래스로 대체되었습니다qiskit.quantum_info모듈의 함수와 클래스로 대체되었습니다. 더 이상 사용되지 않는 기능과 대체 기능에 대한 표는 다음과 같습니다:더 이상 사용되지 않음대체qiskit.tools.partial_trace()qiskit.quantum_info.partial_trace()qiskit.tools.choi_to_pauli()qiskit.quantum_info.Choi그리고quantum_info.PTMqiskit.tools.chop()numpy.roundqiskit.tools.qi.qi.outernumpy.outerqiskit.tools.concurrence()qiskit.quantum_info.concurrence()qiskit.tools.shannon_entropy()qiskit.quantum_info.shannon_entropy()qiskit.tools.entropy()qiskit.quantum_info.entropy()qiskit.tools.mutual_information()qiskit.quantum_info.mutual_information()qiskit.tools.entanglement_of_formation()qiskit.quantum_info.entanglement_of_formation()qiskit.tools.is_pos_def()quantum_info.operators.predicates.is_positive_semidefinite_matrix -
qiskit.quantum_info.states.states모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 모듈의 레거시 함수는 모두 모듈의 함수 및 클래스로 대체되었습니다qiskit.quantum_info모듈의 함수와 클래스로 대체되었습니다.더 이상 사용되지 않음대체qiskit.quantum_info.states.states.basis_stateqiskit.quantum_info.Statevector.from_label()qiskit.quantum_info.states.states.projectorqiskit.quantum_info.DensityMatrix -
Schedule및Pulse객체에 대한draw()메서드의scaling매개 변수는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 새로운scale매개 변수를 사용해야 합니다. 이는 펄스 도면과 회로 도면 간의 일관된 논증을 위해 수행되었습니다. 예를 들어,#The consistency in parameters is seen below #For circuits circuit = QuantumCircuit() circuit.draw(scale=0.2) #For pulses pulse = SamplePulse() pulse.draw(scale=0.2) #For schedules schedule = Schedule() schedule.draw(scale=0.2)
버그 수정
- 이전에는 회로를 분해하기 전에
qiskit.circuit.QuantumCircuit.bind_parameters()을 호출하면 바운드 값이 분해된 게이트에 올바르게 치환되지 않는 문제가 발생했습니다. 바인딩과 분해가 어떤 순서로든 발생할 수 있도록 이 문제가 해결되었습니다. 문제 #2482 및 문제 #3509 수정 Collect2qBlocks패스는 기존 블록에 게이트를 포함할지 여부를 결정할 때 기존 조건을 고려하지 않았습니다. 경우에 따라optimization_level=3로 번역할 때 클래식 조건이 손실되는 경우도 있습니다. 이 문제가 해결되어 클래식 조건부 게이트가 블록에 포함되지 않습니다. 문제 #3215 수정- 의 회로 서랍에 대한 모든 출력 유형
qiskit.circuit.QuantumCircuit.draw()및qiskit.visualization.circuit_drawer()의 모든 출력 유형은 드로잉 제어 사용자 지정 게이트에 대한 지원을 수정 및/또는 개선했습니다. 문제 #3546, 문제 #3763 및 문제 #3764 수정 - 다음에 대한 설명과 예제가 문서에 추가되었습니다
qiskit.circuit.QuantumCircuit메서드에 대한 설명과 예제가 문서에 추가되었습니다:qiskit.circuit.QuantumCircuit.ccx(),qiskit.circuit.QuantumCircuit.ch(),qiskit.circuit.QuantumCircuit.crz(),qiskit.circuit.QuantumCircuit.cswap(),qiskit.circuit.QuantumCircuit.cu1(),qiskit.circuit.QuantumCircuit.cu3(),qiskit.circuit.QuantumCircuit.cx(),qiskit.circuit.QuantumCircuit.cy(),qiskit.circuit.QuantumCircuit.cz(),qiskit.circuit.QuantumCircuit.h(),qiskit.circuit.QuantumCircuit.iden(),qiskit.circuit.QuantumCircuit.rx(),qiskit.circuit.QuantumCircuit.ry(),qiskit.circuit.QuantumCircuit.rz(),qiskit.circuit.QuantumCircuit.s(),qiskit.circuit.QuantumCircuit.sdg(),qiskit.circuit.QuantumCircuit.swap(),qiskit.circuit.QuantumCircuit.t(),qiskit.circuit.QuantumCircuit.tdg(),qiskit.circuit.QuantumCircuit.u1(),qiskit.circuit.QuantumCircuit.u2(),qiskit.circuit.QuantumCircuit.u3(),qiskit.circuit.QuantumCircuit.x(),qiskit.circuit.QuantumCircuit.y(),qiskit.circuit.QuantumCircuit.z(). 문제 #3400 수정 - 회로 시각화에서 복소수 매개변수 처리를 수정했습니다. 문제 #3640 수정
기타 참고사항
- 트랜스파일러 패스는
qiskit.transpiler.passes디렉터리에 있는 트랜스파일러 패스를 기능별로 더 잘 분류하기 위해 하위 디렉터리로 정리했습니다. 여전히qiskit.transpiler.passes네임스페이스에서 모두 액세스할 수 있습니다.
에어 0.4.0
추가됨
- IBMQ 백엔드용 기본 디바이스 노이즈 모델 구축을 위한
NoiseModel.from_backend추가(#569)QasmSimulator,StatevectorSimulator,UnitarySimulator에 멀티 GPU 지원 시뮬레이션 메서드를 추가했습니다. Qasm 시뮬레이터에는 밀도 행렬 및 상태 벡터 메서드의 GPU 버전이 있으며backend_options에서"method": "density_matrix_gpu"또는"method": "statevector_gpu"을 사용하여 액세스할 수 있습니다. 상태 벡터 시뮬레이터 GPU 메서드는"method": "statevector_gpu"를 사용하여 액세스할 수 있습니다. 단일 시뮬레이터 GPU 방식은"method": "unitary_gpu"을 사용하여 액세스할 수 있습니다. 이러한 백엔드는 CUDA를 사용하며 NVidia GPU가 필요합니다(#544)PulseSimulator백엔드 추가(#542)PulseSimulator(#496, #493)에서 사용할 모델을 나타내는PulseSystemModel및HamiltonianModel클래스를 추가했습니다- 매개변수 목록에서
PulseSystemModel객체를 생성하는duffing_model_generators추가(#516)- ODE 함수 솔버를 C++로 마이그레이션(#442, #350)
- 높은 수준의 펄스 시뮬레이터 테스트 추가(#379)
- CMake BLAS_LIB_PATH 플래그를 사용하여 BLAS 라이브러리를 찾을 경로를 설정합니다(#543)
변경됨
- 시뮬레이터 소스 코드를 정리하기 위해
src디렉터리의 구조를 변경했습니다. 시뮬레이터 컨트롤러 헤더는src/controllers로 이동했으며 시뮬레이터 메서드 상태 헤더는src/simulators(#544)에 있습니다- 여러 함수의 위치를 이동했습니다(#568): *
qiskit.provider.aer.noise.errors의 콘텐츠를qiskit.providers.noise모듈로 이동 *qiskit.provider.aer.noise.utils의 콘텐츠를qiskit.provider.aer.utils모듈로 이동했습니다.- 기본적으로 회로(퓨전)에서 연속된 게이트를 집계하는 최적화를 활성화했습니다(#579).
더 이상 사용되지 않음
- 사용되지 않는
utils.qobj_utils함수(#568)- 사용 중단됨
qiskit.providers.aer.noise.device.basic_device_noise_model.NoiseModel.from_backend메서드(#569)로 대체되었습니다
제거됨
- 0.3 (#568)에서 사용되지 않는
NoiseModel.as_dict,QuantumError.as_dict,ReadoutError.as_dict,QuantumError.kron메서드를 제거했습니다.
이그니스 0.2
변경 없음
아쿠아 0.6
변경 없음
IBM Q 제공자 0.4.6
추가됨
-
IBMQBackend에 몇 가지 새로운 메서드가 추가되었습니다:wait_for_final_state()블록을 차단합니다. 피드백을 제공하기 위해 모든 쿼리 후에 호출하는 콜백 함수를 사용합니다.active_jobs()는 백엔드에 제출된 작업 중 현재 미완료 상태인 작업을 반환합니다.job_limit()는 백엔드의 작업 한도를 반환합니다.remaining_jobs_count()는 작업 제한에 도달하기 전에 백엔드에 제출할 수 있는 작업 수를 반환합니다.
-
QueueInfo에는 이제 대기열 정보의 형식이 지정된 문자열을 반환하는 새로운format()메서드가 추가되었습니다. -
IBMQJob에는 이제 세 가지 새로운 메서드가 추가되었습니다:done(),running(),cancelled()으로 작업 상태를 표시하는 데 사용됩니다. -
qiskit.providers.ibmq.ibmqbackend.IBMQBackend.run()이제 선택적 job_tags 매개변수를 허용합니다. 지정하면 job_tag가 작업에 할당되며, 나중에qiskit.providers.ibmq.ibmqbackend.IBMQBackend.jobs()에서 필터로 사용할 수 있습니다. -
IBMQJobManager에는 이제 작업 세트 ID를 사용하여 이전에 제출한 작업 세트를 검색할 수 있는 새로운 메서드retrieve_job_set()가 추가되었습니다.
변경됨
Exception계층 구조가 보다 전문화된 클래스로 세분화되었습니다. 그러나 상위 예외(예:IBMQAccountError)는 계속 잡을 수 있습니다. 또한 예외 클래스IBMQApiUrlError는IBMQAccountCredentialsInvalidUrl및IBMQAccountCredentialsInvalidToken로 대체되었습니다.
더 이상 사용되지 않음
- 프로토콜이 없는 프록시 URL 사용(예:
http://) 은 최근 Python 변경으로 인해 더 이상 사용되지 않습니다.