키스킷 0.14 릴리즈 노트
0.14.0
테라 0.11.0
Prelude
0.11.0 릴리스에는 몇 가지 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 가장 큰 변화는 펄스 스케줄러가 추가되었다는 점입니다. 이를 통해 사용자는 자신의 양자 프로그램을 QuantumCircuit 로 정의한 다음 양자 하드웨어를 제어하여 회로를 구현할 기본 펄스 명령어에 매핑할 수 있습니다.
새 기능
-
BackendProperties에서 사용자별 데이터를 쉽게 검색할 수 있는 5개의 새로운 명령어를 추가했습니다:gate_property,gate_error,gate_length,qubit_property,t1,t2,readout_error및frequency. 백엔드 속성의 특정 값을 반환합니다. 예를 들어,from qiskit.test.mock import FakeOurense backend = FakeOurense() properties = backend.properties() gate_property = properties.gate_property('u1') gate_error = properties.gate_error('u1', 0) gate_length = properties.gate_length('u1', 0) qubit_0_property = properties.qubit_property(0) t1_time_0 = properties.t1(0) t2_time_0 = properties.t2(0) readout_error_0 = properties.readout_error(0) frequency_0 = properties.frequency(0) -
인스트럭션 객체가 매개변수화되었는지 확인하는 메서드
Instruction.is_parameterized()를 추가했습니다. 이 메서드는 인스트럭션에 매개변수 중 하나에ParameterExpression또는Parameter객체가 있는 경우에만True을 반환합니다. -
새 분석 패스를 추가했습니다
Layout2qDistance. 이 패스를 사용하면property_set['layout']이 설정되면 레이아웃 선택 항목에 '점수'를 부여할 수 있습니다. 점수는 회로의 각 2큐비트 게이트가 직접 연결되지 않은 경우 거리의 합이 됩니다. 이 점수는 커플링 맵의 방향을 고려하지 않습니다. 숫자가 낮을수록 더 나은 레이아웃을 선택할 수 있습니다.예를 들어, 선형 커플링 맵
[0]--[2]--[1]과 다음 회로를 생각해 보겠습니다:qr = QuantumRegister(2, 'qr') circuit = QuantumCircuit(qr) circuit.cx(qr[0], qr[1])레이아웃이
{qr[0]:0, qr[1]:1}인 경우Layout2qDistance은property_set['layout_score'] = 1으로 설정됩니다. 레이아웃이{qr[0]:0, qr[1]:2}인 경우 결과는property_set['layout_score'] = 0입니다. 점수가 낮을수록 좋습니다. -
QuantumCircuit의cx메서드에 대한 별칭으로qiskit.QuantumCircuit.cnot을 추가했습니다.cnot및cx이라는 이름은 종종 혼용되어 사용되며, 이제 cx 메서드는 두 이름 중 하나로 호출할 수 있습니다. -
QuantumCircuit의ccx메서드에 대한 별칭으로qiskit.QuantumCircuit.toffoli을 추가했습니다.toffoli및ccx이라는 이름은 종종 같은 의미로 사용되며, 이제 ccx 메서드는 두 이름 중 하나로 호출할 수 있습니다. -
QuantumCircuit의cswap메서드에 대한 별칭으로qiskit.QuantumCircuit.fredkin을 추가했습니다.fredkin및cswap이라는 이름은 종종 같은 의미로 사용되며, 이제 cswap 메서드는 두 이름 중 하나로 호출할 수 있습니다. -
qiskit.visualization.circuit_drawer()및qiskit.circuit.QuantumCircuit.draw()메서드의latex출력 모드에 이제 게이트 레이블 및 매개변수에서 원시 라텍스를 통과하는 모드가 추가되었습니다. 이 작업을 수행하는 구문은 matplotlib의 수학 텍스트 모드 구문을 반영합니다. '$' 문자 쌍 사이의 레이블 문자열 부분은 원시 라텍스로 처리되어 생성된 출력 라텍스로 바로 전달됩니다. 이 기능을 활용하여 라텍스 서랍으로 생성한 회로도에 고급 서식을 추가할 수 있습니다.이 릴리스 이전에는 모든 게이트 레이블이 utf8 -> 라텍스 변환을 통해 실행되어 출력 라텍스가 예상대로 문자열을 컴파일하는지 확인했습니다. 이는 '$' 쌍 외부의 모든 레이블 부분에 대해서도 마찬가지입니다. 또한 레이블에 달러 기호를 사용하려면 레이블 문자열에서 이스케이프 기호를 사용해야 합니다(예:
'\$').예를 들어, 이 패스스루를 utf8 -> 라텍스 변환과 혼합하여 원하는 정확한 라벨을 만들 수 있습니다:
from qiskit import circuit circ = circuit.QuantumCircuit(2) circ.h([0, 1]) circ.append(circuit.Gate(name='α_gate', num_qubits=1, params=[0]), [0]) circ.append(circuit.Gate(name='α_gate$_2$', num_qubits=1, params=[0]), [1]) circ.append(circuit.Gate(name='\$α\$_gate', num_qubits=1, params=[0]), [1]) circ.draw(output='latex')는 이제 첫 번째 사용자 정의 게이트의 레이블을
α_gate로 렌더링하고, 두 번째는α_gate에 2를 붙이고, 마지막 사용자 정의 게이트의 레이블은$α$_gate로 렌더링합니다. -
제어 게이트를 나타내는
ControlledGate클래스를 추가합니다. 제어된 게이트 인스턴스는Gate객체의control(n)메서드를 사용하여 생성되며, 여기서n는 제어 수를 나타냅니다. 제어 큐비트는 새 게이트의 제어 큐비트보다 먼저 나옵니다. 예를 들어,from qiskit import QuantumCircuit from qiskit.extensions import HGate hgate = HGate() circ = QuantumCircuit(4) circ.append(hgate.control(3), [0, 1, 2, 3]) print(circ)다음을 생성:
q_0: |0>──■── │ q_1: |0>──■── │ q_2: |0>──■── ┌─┴─┐ q_3: |0>┤ H ├ └───┘ -
이제
meas_level매개변수 및 필드의 허용된 값은 IntEnum 클래스qiskit.qobj.utils.MeasLevel의 멤버가 될 수 있습니다. 펄스 실험으로execute(또는meas_level지정)을 호출할 때 사용할 수 있습니다. 예를 들어,from qiskit import QuantumCircuit, transpile, schedule, execute from qiskit.test.mock import FakeOpenPulse2Q from qiskit.qobj.utils import MeasLevel, MeasReturnType backend = FakeOpenPulse2Q() qc = QuantumCircuit(2, 2) qc.h(0) qc.cx(0,1) qc_transpiled = transpile(qc, backend) sched = schedule(qc_transpiled, backend) execute(sched, backend, meas_level=MeasLevel.CLASSIFIED)위의 예에서
meas_level=MeasLevel.CLASSIFIED와meas_level=2은 이제 서로 바꿔서 사용할 수 있습니다. -
제약 조건 해결에 기반한 새로운 레이아웃 선택기가 포함되어 있습니다. CSPLayout은 레이아웃을 찾는 문제를 제약 조건 문제로 모델링하고 재귀적 역추적을 사용하여 이를 해결합니다.
cmap16 = CouplingMap(FakeRueschlikon().configuration().coupling_map) qr = QuantumRegister(5, 'q') circuit = QuantumCircuit(qr) circuit.cx(qr[0], qr[1]) circuit.cx(qr[0], qr[2]) circuit.cx(qr[0], qr[3]) pm = PassManager(CSPLayout(cmap16)) circuit_after = pm.run(circuit) print(pm.property_set['layout'])Layout({ 1: Qubit(QuantumRegister(5, 'q'), 1), 2: Qubit(QuantumRegister(5, 'q'), 0), 3: Qubit(QuantumRegister(5, 'q'), 3), 4: Qubit(QuantumRegister(5, 'q'), 4), 15: Qubit(QuantumRegister(5, 'q'), 2) })CSPLayout(...,strict_direction=True)매개 변수는 더 제한적이지만CXDirection이후에는 실행할 필요가 없습니다.pm = PassManager(CSPLayout(cmap16, strict_direction=True)) circuit_after = pm.run(circuit) print(pm.property_set['layout'])Layout({ 8: Qubit(QuantumRegister(5, 'q'), 4), 11: Qubit(QuantumRegister(5, 'q'), 3), 5: Qubit(QuantumRegister(5, 'q'), 1), 6: Qubit(QuantumRegister(5, 'q'), 0), 7: Qubit(QuantumRegister(5, 'q'), 2) })제약 조건 시스템을 해결할 수 없는 경우 레이아웃 속성이 설정되지 않습니다.
circuit.cx(qr[0], qr[4]) pm = PassManager(CSPLayout(cmap16)) circuit_after = pm.run(circuit) print(pm.property_set['layout'])None -
PulseBackendConfiguration (일반적으로 backend.configuration () 로 액세스)는 데이터를 탐색하는 유용한 방법과 PulseChannelSpec 에 존재하는 기능으로 확장되었습니다. PulseChannelSpec 은 향후 더 이상 사용되지 않습니다. 예를 들어,
backend = provider.get_backend(backend_name) config = backend.configuration() q0_drive = config.drive(0) # or, DriveChannel(0) q0_meas = config.measure(0) # MeasureChannel(0) q0_acquire = config.acquire(0) # AcquireChannel(0) config.hamiltonian # Returns a dictionary with hamiltonian info config.sample_rate() # New method which returns 1 / dt -
PulseDefaults(일반적으로backend.defaults()로 액세스)에는circuit_instruction_map속성이 있고 CmdDef 메서드가 있습니다. 새로운 회로_명령_맵은InstructionScheduleMap객체로, CmdDef 에 있던 기능 외에 세 가지 새로운 기능이 추가되었습니다:- 쿼비트_인스트럭션(쿼비트)은 쿼비트에 대해 정의된 연산을 반환합니다
- 연산이 정의되지 않은 경우 assert_has(명령어, 큐비트)는 에러를 발생시킵니다
- 제거(명령어, 큐비트)는 팝과 비슷하지만 매개 변수가 필요하지 않습니다
다음과 몇 가지 차이점이 있습니다 CmdDef:
__init__인수를 받지 않습니다cmds및cmd_qubits은 더 이상 사용되지 않으며instructions및qubits_with_instruction
예:
backend = provider.get_backend(backend_name) inst_map = backend.defaults().circuit_instruction_map qubit = inst_map.qubits_with_instruction('u3')[0] x_gate = inst_map.get('u3', qubit, P0=np.pi, P1=0, P2=np.pi) pulse_schedule = x_gate(DriveChannel(qubit)) -
펄스 시각화에서 프레임 변경 명령만 있는 채널 표시를 선택적으로 비활성화하는 새로운 kwarg 매개변수(
show_framechange_channels)가qiskit.visualization.pulse_drawer()함수 및qiskit.pulse.Schedule.draw()메서드에 추가되었습니다. 이 새 kwarg를False으로 설정하면 출력 펄스 스케줄 시각화에는 프레임 변경만 포함된 채널이 포함되지 않습니다.예를 들어,
from qiskit.pulse import * from qiskit.pulse import library as pulse_lib gp0 = pulse_lib.gaussian(duration=20, amp=1.0, sigma=1.0) sched = Schedule() channel_a = DriveChannel(0) channel_b = DriveChannel(1) sched += Play(gp0, channel_a) sched = sched.insert(60, ShiftPhase(-1.57, channel_a)) sched = sched.insert(30, ShiftPhase(-1.50, channel_b)) sched = sched.insert(70, ShiftPhase(1.50, channel_b)) sched.draw(show_framechange_channels=False) -
새로운 유틸리티 함수
qiskit.result.marginal_counts()가 추가되어 일부 관심 지수에 대한 카운트를 한계화할 수 있습니다. 이 기능은 필요한 것보다 많은 큐비트를 측정하고 그 중 일부 하위 집합에 대해서만 관측 횟수를 얻고자 할 때 유용합니다. -
passmanager.run(...)이 두 개 이상의 회로와 함께 호출되면 이러한 회로의 번역이 병렬로 실행됩니다. -
PassManagers 를 슬라이스하여 대괄호 연산자를 사용하여 패스의 하위 집합을 포함하는 새로운 PassManager 을 만들 수 있습니다. 이를 통해 PassManager 의 일부를 실행하거나 그려서 쉽게 테스트하고 시각화할 수 있습니다. 예를 들어 PassManager 오후의 처음 3번의 패스를 그리거나 서킷에서 두 번째 패스만 실행해 보겠습니다:
pm[0:4].draw() circuit2 = pm[1].run(circuit)또한 이제 PassManagers 을 두 개 추가하여 PassManagers 을 만들거나 PassManager 에 패스/패스 목록을 직접 추가하여 만들 수 있습니다.
pm = pm1[0] + pm2[1:3] pm += [setLayout, unroller] -
이제 키스킷에 기본
scheduler모듈이 추가되었습니다. 스케줄러는 입력QuantumCircuit을 펄스Schedule로 스케줄링합니다. 스케줄러는 입력으로Schedule와 펄스Backend또는 특정 큐비트의 회로Instruction객체를 펄스 스케줄과 연관시키는CmdDef와 어떤 측정이 함께 발생해야 하는지 결정하는meas_map를 받습니다.스케줄링 예시:
from qiskit import QuantumCircuit, transpile, schedule from qiskit.test.mock import FakeOpenPulse2Q backend = FakeOpenPulse2Q() qc = QuantumCircuit(2, 2) qc.h(0) qc.cx(0,1) qc_transpiled = transpile(qc, backend) schedule(qc_transpiled, backend)스케줄러는 현재 회로 내 큐비트에서 펄스 명령이 가능한 한 늦게 또는 가능한 한 빨리 발생하도록 각각 예약하는 as_late_as_가능(
alap) 및 as_soon_as_가능(asap)의 두 가지 스케줄링 정책을 지원합니다. 예를 들어 입력 인수method를 사용하여 스케줄링 정책을 선택할 수 있습니다:schedule(qc_transpiled, backend, method='alap')QuantumCircuit내에서 펄스Schedule를QuantumCircuit에서 사용할 수 있는 게이트와 같은 사용자 지정 회로 명령어에 매핑하여 쉽게 사용할 수 있습니다. 이렇게 하려면 먼저 사용자 정의 게이트를 정의한 다음, 게이트가 적용될 각 큐비트에 대해 게이트에 대한CmdDef항목을 추가합니다. 그런 다음 게이트는QuantumCircuit에서 사용할 수 있습니다. 스케줄링 시간에 게이트가 기본 펄스 스케줄에 매핑됩니다. 이 기술을 사용하면 Ignis와 같은 기존 키스킷 모듈과 쉽게 통합할 수 있습니다.예를 들어,
from qiskit import pulse, circuit, schedule from qiskit.pulse import pulse_lib custom_cmd_def = pulse.CmdDef() # create custom gate custom_gate = circuit.Gate(name='custom_gate', num_qubits=1, params=[]) # define schedule for custom gate custom_schedule = pulse.Schedule() custom_schedule += pulse_lib.gaussian(20, 1.0, 10)(pulse.DriveChannel) # add schedule to custom gate with same name custom_cmd_def.add('custom_gate', (0,), custom_schedule) # use custom gate in a circuit custom_qc = circuit.QuantumCircuit(1) custom_qc.append(custom_gate, qargs=[0]) # schedule the custom gate schedule(custom_qc, cmd_def=custom_cmd_def, meas_map=[[0]])
알려진 문제점
passmanager.run(...)을 두 개 이상의 회로로 호출할 때 병렬로 트랜스파일링하는 기능은 Windows에서 지원되지 않습니다. 자세한 내용은 #2988을 참조하세요.
업그레이드 주의사항
qiskit.pulse.channels.SystemTopology클래스는PulseChannelSpec의 헬퍼 클래스로 사용되었습니다.PulseChannelSpec의 사용 중단과BackendConfiguration로의 변경으로 인해 제거되었으므로 더 이상 사용할 필요가 없습니다.- 0.9 릴리스에서 사용되지 않던 큐비트와 클래식 비트의 튜플 표현이 제거되었습니다.
Qubit및Clbit객체를 사용하는 것은 큐비트와 기존 비트를 표현하는 새로운 방식입니다. - 이전에 사용되지 않던 기준 집합을 단일 문자열로 표현하는 기능이 제거되었습니다. 문자열 목록이 새로운 기본 설정 방식입니다.
- 0.9 릴리스에서 사용되지 않는 메서드
BaseModel.as_dict는BaseModel.to_dict메서드를 위해 제거되었습니다. - PulseDefaults (일반적으로 backend.defaults ()로 접속)에서
qubit_freq_est및meas_freq_est은 이제 GHz가 아닌 Hz로 반환됩니다. 즉, 새 반환 값은 1e9 * 이전 값입니다. - 딜이 요구 사항으로 추가되었습니다. 이는
passmanager.run()을 두 개 이상의 회로에서 병렬로 실행하는 데 필요합니다. - 0.9 릴리스에서 더 이상 사용되지 않는 게이트
UBase가 제거되었습니다. 대신U3Gate게이트를 사용해야 합니다. - 0.9 릴리스에서 더 이상 사용되지 않는 게이트
CXBase가 제거되었습니다. 대신CnotGate게이트를 사용해야 합니다. snapshot명령은label매개 변수를 문자열로 암시적으로 변환하는 데 사용됩니다. 해당 변환이 제거되었으며 문자열이 제공되지 않으면 오류가 발생합니다.- 0.9 릴리스에서 더 이상 사용되지 않는 게이트
U0Gate가 제거되었습니다. 지연을 삽입하려면IdGate게이트를 대신 사용해야 합니다.
지원 중단 노트
-
qiskit.pulse.CmdDef클래스는 더 이상 사용되지 않습니다. 대신qiskit.pulse.InstructionScheduleMap을 사용해야 합니다. 펄스 지원 시스템의InstructionScheduleMap개체는backend.defaults().instruction_schedules에서 액세스할 수 있습니다. -
PulseChannelSpec가 더 이상 사용되지 않습니다. 대신BackendConfiguration을 사용하세요. 백엔드 구성은 일반적으로backend.configuration()로 액세스됩니다. 이 구성은 PulseChannelSpec, 의 대부분의 기능에 다음과 같이 일부 수정을 가하여 확장되었습니다. 여기서 0은 예시적인 큐비트 인덱스입니다:pulse_spec.drives[0] -> config.drive(0) pulse_spec.measures[0] -> config.measure(0) pulse_spec.acquires[0] -> config.acquire(0) pulse_spec.controls[0] -> config.control(0)이제 장치에 존재하지 않는 큐비트에 대한 채널을 얻으려고 시도하는 경우 유용한 설명과 함께
BackendConfigurationError메시지가 표시됩니다.PulseChannelSpec 의
memoryslots및registerslots메서드는 백엔드 구성으로 마이그레이션되지 않았습니다. 이러한 기존 리소스는 백엔드 시스템의 물리적 구성에 제약을 받지 않습니다. 직접 인스턴스화하세요:pulse_spec.memoryslots[0] -> MemorySlot(0) pulse_spec.registerslots[0] -> RegisterSlot(0)qubits메서드는 백엔드 구성으로 마이그레이션되지 않습니다.qubits의 결과는 이렇게 구축할 수 있습니다:[q for q in range(backend.configuration().n_qubits)] -
Qubit내의pulse.channels는 더 이상 사용되지 않습니다. 사용해서는 안 됩니다. BackendConfiguration (또는 backend.configuration ())을 통해 채널 <=> 큐비트 매핑을 얻을 수 있습니다. -
qiskit.visualization.circuit_drawer.qx_color_scheme()함수는 더 이상 사용되지 않습니다. 이 기능은 더 이상 내부적으로 사용되지 않으며 현재 IBM QX 스타일을 반영하지 않습니다. 이 함수를 사용하여 로컬에서 스타일 딕셔너리를 생성하는 경우 이 함수의 출력을 저장하고 해당 딕셔너리를 직접 사용해야 합니다. -
TranspilerAccessError예외는 더 이상 사용되지 않습니다. 대신 대체 기능TranspilerError을 사용하여 동일한 기능을 제공할 수 있습니다. 이 대체 기능은 완전히 동일한 기능을 제공하지만 범용성이 더 높습니다. -
펄스의 버퍼는 더 이상 사용되지 않습니다. 0이 아닌 버퍼가 제공되면 대신 지연을 사용하라는 경고와 함께 알림이 표시됩니다. 다른 옵션으로는 펄스 명령어에 샘플을 추가하거나 ( 0.+0.j ) 또는 다음 펄스의 시작 시간을
schedule.duration + buffer으로 설정하는 것이 있습니다. -
sympy.Basic,sympy.Expr및sympy.Matrix유형을 인스트럭션 파라미터로 전달하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 입력을 지원되는 유형 중 하나로 변환해야 합니다:intfloatcomplexstrnp.ndarray
버그 수정
- 트랜스파일러의 Collect2qBlocks 및 CommutationAnalysis 패스가 파라미터화된 게이트가 포함된 회로를 처리할 수 없어 파라미터화된 회로가 최적화_레벨 2 이상에서 트랜스파일되지 못했습니다. 이 패스는 파라미터화된 게이트를 불투명하게 처리하도록 수정되었습니다.
- Align_measures 함수에서 측정 자극 펄스가 획득 펄스와 제대로 정렬되지 않아 오류가 발생하는 문제가 있었습니다. 이 문제점이 수정되었습니다.
numpy.random.seed의 사용은 제거되어 향후에 qiskit 함수를 호출할 때 결과에 영향을 미치지 않습니다numpy.randomjob.queue_position()이None을 반환할 때 작업 모니터에서 발생하는 경쟁 조건을 수정했습니다.None는job.queue_position()에서 유효한 반환입니다.- 이제
memory=True에 대한 백엔드 지원은 해당 kwarg가 전달될 때 확인됩니다.QiskitError지원하지 않는 경우 결과를 표시합니다. - 커플링 맵 없이 트랜스파일링할 때, 트랜스파일링할 회로의 큐비트 양을 확인할 수 없었습니다. 이제 트랜스파일 프로세스는 백엔드에 회로를 할당할 수 있는 충분한 큐비트가 있는지 확인합니다.
기타 참고사항
qiskit.result.marginal_counts()함수는 qiskit-ignisqiskit.ignis.verification.tomography.marginal_counts()의 유사한 유틸리티 함수를 대체하며, 이는 향후 qiskit-ignis 릴리스에서 더 이상 사용되지 않을 것이다.- 모든 심파이 매개변수 출력 유형 지원이 qiskit-terra에서 제거(또는 언급된 대로 더 이상 사용되지 않음)되었습니다. 여기에는
QuantumCircuit객체, qasm ast 노드 또는Qobj객체의 sympy 유형 매개 변수가 포함됩니다.
에어 0.3
변경 없음
이그니스 0.2
변경 없음
아쿠아 0.6
변경 없음
IBM Q 제공자 0.4
Prelude
0.4.0 릴리스는 새로운 IBM Q API의 모든 기능을 사용하는 첫 번째 릴리스입니다. 특히 IBM Q에서 더 많은 정보를 검색할 수 있도록 IBMQJob 클래스가 개편되었으며, 규모가 크거나 복잡한 작업을 보다 수준 높고 원활하게 사용할 수 있도록 작업 관리자 클래스가 추가되었습니다. 아직 레거시 IBM Q Experience 또는 QConsole에서 업그레이드하지 않은 경우, 전환 방법에 대한 자세한 내용은 IBM Q Provider 0.3 (키스킷 0.11 )의 릴리즈 노트를 참조하세요. 레거시 계정은 이번 릴리스부터 더 이상 지원되지 않습니다.
새 기능
업무 조정
IBMQJob 클래스가 수정되어 이제 새로운 기능과 함께 원격 작업의 내용을 더 가깝게 모방합니다:
- 이제 작업을 제출할 때
IBMQBackend.run(..., job_name='...')을 지정하여 작업에 이름을 지정할 수 있습니다. 이 이름은IBMQJob.name()을 통해 검색할 수 있으며 필터링에 사용할 수 있습니다. - 이제 작업을 제출할 때
job_share_level매개변수(선택 사항)를 통해 다양한 수준(전역, 허브별, 그룹 또는 프로젝트별)의 다른 사용자와 작업을 공유할 수 있습니다. IBMQJob인스턴스에는 이제 원격 IBM Q 작업의 내용을 반영하는 더 많은 속성이 있습니다. 즉, IBM Q API에 의해 도입된 새로운 속성은 자동으로 즉시 사용할 수 있습니다(예:job.new_api_attribute). 새 속성은 안정적으로 간주되면 메서드로 승격됩니다(예:job.name())..error_message()는 작업이 실패한 이유에 대한 자세한 정보를 반환합니다..queue_position()는 업데이트를 강제하기 위해refresh매개 변수를 허용합니다..result()는 실패한 작업의 부분적인 결과(있는 경우)를 반환하기 위해partial매개변수(선택 사항)를 허용합니다.Result메서드(예:get_counts())를 실패한 실험에 적용하면 예외가 발생한다는 점에 유의하세요.
변경 사항에는 클래스의 일부 낮은 수준의 수정이 포함되어 있습니다. 수동으로 인스턴스를 생성하는 경우 이 점에 유의하세요:
- 생성자의 서명이 새로운 기능에 맞게 변경되었습니다.
.submit()메서드는 더 이상 직접 호출할 수 없으며, 작업은 동기식IBMQBackend.run()또는 작업 관리자를 통해 제출해야 합니다.
작업 관리자
여러 회로 또는 펄스 스케줄로 구성된 작업을 처리하기 위한 상위 수준의 메커니즘으로 새로운 작업 관리자(IBMQJobManager)가 도입되었습니다. 작업 관리자는 투명한 인터페이스를 제공하여 입력을 효율적인 작업 단위로 지능적으로 분할하고 다양한 구성 요소를 최대한 활용하는 것을 목표로 합니다. 이 기능은 향후 버전에서 확대될 예정이며, 작업 제출을 위한 권장 항목이 될 것입니다.
.run() 메서드는 회로 또는 펄스 스케줄 목록을 수신하고 ManagedJobSet instance 을 반환하여 이러한 작업의 상태와 결과를 추적하는 데 사용할 수 있습니다. 예를 들어,
from qiskit.providers.ibmq.managed import IBMQJobManager
from qiskit.circuit.random import random_circuit
from qiskit import IBMQ
from qiskit.compiler import transpile
provider = IBMQ.load_account()
backend = provider.backends.ibmq_ourense
circs = []
for _ in range(1000000):
circs.append(random_circuit(2, 2))
transpile(circs, backend=backend)
# Farm out the jobs.
jm = IBMQJobManager()
job_set = jm.run(circs, backend=backend, name='foo')
job_set.statuses() # Gives a list of job statuses
job_set.report() # Prints detailed job information
results = job_set.results()
counts = results.get_counts(5) # Returns data for experiment 5provider.backends 수정 사항
이전에 백엔드 목록을 반환하는 함수였던 provider.backends 멤버가 서비스로 승격되었습니다. 즉, 이전 방식인 .backends() 방식과 확장된 기능을 갖춘 .backends 어트리뷰트로 모두 사용할 수 있습니다:
-
를 사용하면 해당 공급자의 기존 백엔드가 속성으로 포함되어 자동 완성에 사용할 수 있습니다. 예를 들어,
my_backend = provider.get_backend('ibmq_qasm_simulator')은 다음과 같습니다.
my_backend = provider.backends.ibmq_qasm_simulator -
provider.backends.jobs()및provider.backends.retrieve_job()메서드는 공급자 전체 작업을 검색하는 데 사용할 수 있습니다.
기타 변경사항
backend.properties()함수는 이제 선택 사항인datetime매개 변수를 허용합니다. 지정한 경우 이 함수는 지정된 날짜/시간 필터에 가장 가깝지만 이보다 오래된 백엔드 속성을 반환합니다.- 일부
warnings메시지가logger.warning메시지로 톤 다운되었습니다.