키스킷 0.13 릴리즈 노트
0.13.0
테라 0.10.0
Prelude
0.10.0 릴리스에는 몇 가지 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 가장 큰 변화는 트래핑된 이온 트랩 백엔드에서 키스킷을 사용하기 위한 초기 지원이 추가되었다는 것입니다.
새 기능
-
회로의 끝에서 측정값을 원활하게 추가하거나 제거할 수 있는 새로운 방법을
QuantumCircuit에 도입했습니다.measure_all()회로의 모든 큐비트에
barrier연산과measure연산을 추가합니다. 회로의 큐비트 수와 동일한 크기의ClassicalRegister을 생성하여 측정값을 저장합니다.measure_active()회로의 모든 활성 큐비트에
barrier연산과measure연산을 추가합니다. 큐비트에 하나 이상의 다른 연산이 작동 중이면 큐비트는 활성 상태입니다. 회로의 활성 큐비트 수와 같은 크기의ClassicalRegister을 생성하여 측정값을 저장합니다.remove_final_measurements()회로에서 모든 최종 측정값과 앞의
barrier을 제거합니다. 장벽 및 기타 측정을 제외한 다른 작업이 뒤따르지 않으면 측정이 "최종"으로 간주됩니다. 측정값이 제거된 후ClassicalRegister의 모든 클래식 비트가 유휴 상태(연결된 작업이 없는 상태)이면ClassicalRegister이 제거됩니다.예:
# Using measure_all() circuit = QuantumCircuit(2) circuit.h(0) circuit.measure_all() circuit.draw() # A ClassicalRegister with prefix measure was created. # It has 2 clbits because there are 2 qubits to measure ┌───┐ ░ ┌─┐ q_0: |0>┤ H ├─░─┤M├─── └───┘ ░ └╥┘┌─┐ q_1: |0>──────░──╫─┤M├ ░ ║ └╥┘ measure_0: 0 ═════════╩══╬═ ║ measure_1: 0 ════════════╩═ # Using measure_active() circuit = QuantumCircuit(2) circuit.h(0) circuit.measure_active() circuit.draw() # This ClassicalRegister only has 1 clbit because only 1 qubit is active ┌───┐ ░ ┌─┐ q_0: |0>┤ H ├─░─┤M├ └───┘ ░ └╥┘ q_1: |0>──────░──╫─ ░ ║ measure_0: 0 ═════════╩═ # Using remove_final_measurements() # Assuming circuit_all and circuit_active are the circuits from the measure_all and # measure_active examples above respectively circuit_all.remove_final_measurements() circuit_all.draw() # The ClassicalRegister is removed because, after the measurements were removed, # all of its clbits were idle ┌───┐ q_0: |0>┤ H ├ └───┘ q_1: |0>───── circuit_active.remove_final_measurements() circuit_active.draw() # This will result in the same circuit ┌───┐ q_0: |0>┤ H ├ └───┘ q_1: |0>───── -
이온 트랩 백엔드에서 실험을 실행할 수 있는 초기 지원이 추가되었습니다.
-
표준 게이트 세트에 Rxx 게이트(rxx)와 글로벌 몰머-소렌슨 게이트(ms)가 추가되었습니다.
-
quantum_info.synthesis모듈에 Cnot-Rxx/Rx/Ry 분해기cnot_rxx_decompose및 단일 큐비트 오일러 각도 분해기OneQubitEulerDecomposer가 추가되었습니다. -
트랜스파일러 패스
MSBasisDecomposer가 추가되어 U3 및 Cnot 게이트에 정의된 회로를 Rxx,Ry 및 Rx에 정의된 회로로 언롤링할 수 있습니다. 이 패스는 지원되는 기본 게이트에 'rxx' 게이트가 포함된 백엔드용 사전 설정 패스 매니저에 포함됩니다. -
이제
qiskit.test.mock의 백엔드에 실제 디바이스 보정 데이터의 스냅샷이 포함되어 있습니다. 각 백엔드에 대해properties()메서드를 통해 액세스할 수 있습니다. 노이즈 적응형 트랜스파일러 패스나 시뮬레이션을 위한 디바이스 노이즈 모델 등 백엔드 속성에 의존하는 모든 코드를 테스트하는 데 사용할 수 있습니다. 이렇게 하면 라이브 백엔드로 이동할 필요 없이 테스트 및 개발 주기를 단축할 수 있습니다. -
결과 클래스가 부분 결과를 반환하도록 허용합니다. 성공한 실험과 실패한 실험이 포함된 유효한 결과 스키마가 로드되면 성공한 실험의 데이터에 액세스하는 동시에 실패한 실험에 대한 예외를 발생시키고 실패한 결과에 대한 적절한 오류 메시지를 표시할 수 있습니다.
-
다음 시각화 기능에
axkwarg가 추가되었습니다:qiskit.visualization.plot_histogramqiskit.visualization.plot_state_paulivecqiskit.visualization.plot_state_qsphereqiskit.visualization.circuit_drawer(mpl백엔드만 해당)qiskit.QuantumCircuit.draw(mpl백엔드만 해당)
이 kwarg는 시각화 함수에
matplotlib.axes.Axes객체를 전달하는 데 사용됩니다. 이를 통해 이러한 시각화 기능을 더 큰 시각화 워크플로우에 통합할 수 있습니다. 또한 ax kwarg를 지정하면 시각화 함수에서 반환되지 않습니다. -
다음 시각화 기능에
ax_real및ax_imagkwarg가 추가되었습니다:qiskit.visualization.plot_state_hintonqiskit.visualization.plot_state_city
이 새로운 karg는 다른 시각화 기능에 새로 추가된
axkwarg와 동일하게 작동합니다. 그러나 이 플롯은 두 개의 축(하나는 실제 컴포넌트, 다른 하나는 가상 컴포넌트)을 사용하기 때문입니다. 두 개의 kwarg를 사용하면 항상 두 가지를 모두 수행하는 대신 구성 요소 중 하나에 대해서만 시각화를 생성할 수 있는 유연성도 제공합니다. 예를 들어,from matplotlib import pyplot as plt from qiskit.visualization import plot_state_hinton ax = plt.gca() plot_state_hinton(psi, ax_real=ax)는 실제 컴포넌트의 플롯만 생성합니다.
-
이제 새로운 메서드 대체를 사용하여 지정된 패스 관리자를 편집할 수 있습니다. 이 방법을 사용하면 패스 관리자에서 특정 단계를 교체할 수 있으므로 사전 설정된 패스 관리자를 다룰 때 유용하게 사용할 수 있습니다. 예를 들어 최적화 수준 0에서 사용되는 패스 관리자의 레이아웃 선택기를 편집해 보겠습니다:
from qiskit.transpiler.preset_passmanagers.level0 import level_0_pass_manager from qiskit.transpiler.transpile_config import TranspileConfig pass_manager = level_0_pass_manager(TranspileConfig(coupling_map=CouplingMap([[0,1]]))) pass_manager.draw()[0] FlowLinear: SetLayout [1] Conditional: TrivialLayout [2] FlowLinear: FullAncillaAllocation, EnlargeWithAncilla, ApplyLayout [3] FlowLinear: Unroller레이아웃 선택은 [1단계에서] 설정합니다. 이를 다음과 같이 대체해 보겠습니다 DenseLayout:
from qiskit.transpiler.passes import DenseLayout pass_manager.replace(1, DenseLayout(coupling_map), condition=lambda property_set: not property_set['layout']) pass_manager.draw()[0] FlowLinear: SetLayout [1] Conditional: DenseLayout [2] FlowLinear: FullAncillaAllocation, EnlargeWithAncilla, ApplyLayout [3] FlowLinear: Unroller아무 조건 없이 교체하려면 설정 항목 바로 가기를 사용하면 됩니다:
pass_manager[1] = DenseLayout(coupling_map) pass_manager.draw()[0] FlowLinear: SetLayout [1] FlowLinear: DenseLayout [2] FlowLinear: FullAncillaAllocation, EnlargeWithAncilla, ApplyLayout [3] FlowLinear: Unroller -
펄스에 삽입할 수 있는 새로운 펄스 명령
Delay을 도입했습니다Schedule. 이 명령은duration를 허용하며Channel에 추가할 수 있습니다. 지연 중에는 다른 명령이 채널에서 예약되지 않을 수 있습니다.지연은 다른 펄스 명령과 마찬가지로 추가할 수 있습니다. 예를 들어,
from qiskit import pulse from qiskit.pulse.utils import pad dc0 = pulse.DriveChannel(0) delay = pulse.Delay(1) test_pulse = pulse.SamplePulse([1.0]) sched = pulse.Schedule() sched += test_pulse(dc0).shift(1) # build padded schedule by hand ref_sched = delay(dc0) | sched # pad schedule padded_sched = pad(sched) assert padded_sched == ref_sched예를 들어 패딩할 추가 채널과 패딩할 시간을 전달할 수도 있습니다:
from qiskit import pulse from qiskit.pulse.utils import pad dc0 = pulse.DriveChannel(0) dc1 = pulse.DriveChannel(1) delay = pulse.Delay(1) test_pulse = pulse.SamplePulse([1.0]) sched = pulse.Schedule() sched += test_pulse(dc0).shift(1) # build padded schedule by hand ref_sched = delay(dc0) | delay(dc1) | sched # pad schedule across both channels until up until the first time step padded_sched = pad(sched, channels=[dc0, dc1], until=1) assert padded_sched == ref_sched
업그레이드 주의사항
-
qiskit.QuantumCircuit객체의data속성에 대한 할당 및 수정은 이제QuantumCircuitAPI 전체에서 사용되는 것과 동일한 규칙에 따라 유효성이 검사됩니다. 이는 이제data속성이 알려진 형식이라고 가정할 수 있기 때문에 회로 API의 성능을 개선하기 위해 수행되었습니다. 이전에 회로 개체의data속성을 수동으로 수정한 경우 수정으로 인해 컨텍스트 형식의 명령어 목록이 아닌 다른 데이터 구조가 생성된 경우 더 이상 작동하지 않을 수 있습니다[(instruction, qargs, cargs)] -
이제 최적화 레벨 2에 대한 트랜스파일러 기본 패스매니저는
NoiseAdaptiveLayout대신DenseLayout레이아웃 선택 메커니즘을 기본으로 사용합니다.Denselayout패스도 소음을 인식하도록 수정되었습니다. -
더 이상 사용되지 않는
DeviceSpecification클래스가 제거되었습니다. 대신PulseChannelSpec을 사용해야 합니다. 예를 들어 다음과 같이 실행할 수 있습니다:device = pulse.PulseChannelSpec.from_backend(backend) device.drives[0] # for DeviceSpecification, this was device.q[0].drive device.memoryslots # this was device.mem -
더 이상 사용되지 않는 모듈
qiskit.pulse.ops이 제거되었습니다.Schedule및Instruction방법을 직접 사용하세요. 예를 들어ops.union(schedule_0, schedule_1) ops.union(instruction, schedule) # etc대신 사용하세요:
schedule_0.union(schedule_1) instruction.union(schedule)이 패턴은 다른
ops함수에도 동일하게 적용됩니다:insert,shift,append,flatten등에도 동일하게 적용됩니다.
지원 중단 노트
qiskit.circuit.Instruction의control속성을 클래식 제어에 사용하는 것은 이제 더 이상 사용되지 않습니다. 앞으로 이 속성은 양자 제어에 사용될 것입니다. 클래식 조건부 연산은 대신qiskit.circuit.Instruction의condition속성에 의해 처리됩니다.qiskit.qasm.node.Node유형의 객체로qiskit.circuit.Instruction매개변수 설정에 대한 지원은 더 이상 사용되지 않습니다.Node새Instruction객체를 초기화하거나Instruction.params설정자를 호출하기 전에 이전에 매개 변수로 사용되었던 객체를 지원되는 유형으로 변환해야 합니다. 지원되는 유형은int,float,complex,str,qiskit.circuit.ParameterExpression또는numpy.ndarray입니다.- 키스킷 0.9.0 릴리스에서는 비트(큐비트와 클래식 비트 모두)의 표현이
(register, index)형식의 튜플에서qiskit.circuit.Qubit및qiskit.circuit.Clbit클래스의 인스턴스로 변경되었습니다. 모든 것이 튜플에서 객체로 전환됨에 따라 레거시 튜플과 비트 클래스 간의 동등성을 비교하는 이전 버전과의 호환성이 지원되었습니다. 이 지원은 현재 더 이상 사용되지 않으며 향후 제거될 예정입니다. 앞으로는 모든 것이 튜플 대신 비트 클래스를 사용해야 합니다. qiskit.QuantumCircuit.draw()또는qiskit.visualization.circuit_drawer()에mpl출력을 사용하고stylekwarg를 사용하는 경우, 지원되지 않는 사전 키를style`사전의 일부로 전달하는 것은 이제 더 이상 사용되지 않습니다. 이전에는 이러한 알 수 없는 인수가 조용히 무시되었지만, 앞으로는 지원되지 않는 키는 예외를 발생시킵니다.qiskit.QuantumCircuit.draw()메서드의line lengthkwarg와 텍스트 출력 모드의qiskit.visualization.circuit_drawer()함수는 더 이상 사용되지 않습니다. 텍스트 출력 모드에서 동일하게 작동하는foldkwarg로 대체되었습니다(하지만 이제 mpl 출력 모드도 지원합니다).line_length은 향후 릴리스에서 제거될 예정이므로 대신fold을 사용하도록 호출을 업데이트해야 합니다.qiskit.QuantumCircuit.draw()메서드 및qiskit.visualization.circuit_drawer()함수에 대한style딕 콰그의fold필드는 더 이상 사용되지 않습니다. 두 함수 모두foldkwarg로 대체되었습니다. 이 kwarg는 스타일 딕셔너리의 필드와 동일하게 작동합니다.
버그 수정
- 모든 유형의 회로 도면의 기본이 되는 명령어 레이어링이 오른쪽/왼쪽 정당화를 처리하도록 변경되었습니다. 이로 인해 토폴로지적으로는 이전 버전의 렌더링과 동일하지만 시각적으로는 이전 버전과 다른 결과물이 출력되는 경우가 있습니다. 문제 #2802 수정
- 펄스 Qobj의
QobjExperimentHeader에memory_slots를 추가합니다. 펄스 실험 결과의meas_level=2데이터 형식의 버그가 수정되었습니다. 측정된 양자 상태는memory_slots에 설정된 숫자에 따라 패딩이 0인 비트 문자열로 반환됩니다. - 라텍스 회로 서랍의 rzz 게이트 시각화를 cu1 게이트와 일치하도록 수정하여 rzz 게이트의 대칭을 반영하도록 수정했습니다. 이 수정은 qcircuit 라텍스 패키지의 cds 명령을 기반으로 합니다. 문제 #1957 수정
기타 참고사항
matplotlib.figure.Figure시각화 함수가 반환하는 객체는 더 이상 기본적으로 항상 닫히지 않습니다. 대신 반환된 그림 객체는 구성된 matplotlib 백엔드가 인라인 주피터 백엔드(%matplotlib inline또는%matplotlib notebook로 설정된 경우)인 경우에만 닫힙니다. 출력 그림 객체는 여전히 이러한 백엔드로 닫혀 있어 jupyter 노트북에서 중복 출력을 방지합니다(Figure.close()이 원래 추가된 이유입니다).
에어 0.3
변경 없음
이그니스 0.2
변경 없음
아쿠아 0.6
변경 없음
IBM Q 제공자 0.3
변경 없음