키스킷 0.12 릴리즈 노트
0.12.0
테라 0.9
Prelude
0.9 릴리스에는 많은 새로운 기능과 버그 수정 사항이 포함되어 있습니다. 이번 릴리스의 가장 큰 변경 사항은 PassManagers 에 대한 새로운 디버깅 기능입니다. 여기에는 PassManager, 에 콜백 함수를 추가하는 기능( PassManager, ) 및 PassManager 에서 실행되는 패스의 로깅을 시각화하는 기능이 포함됩니다. 또한 이번 릴리스에서는 회로의 초기 레이아웃을 설정하는 방법을 표준화했습니다. 이제 qiskit.compiler.transpile() 및 qiskit.execute() 에서 kwarg 매개변수를 initial_layout 활용하면 회로의 큐비트가 디바이스의 원하는 큐비트에 배치됩니다. 이제 레이아웃으로 트랜스파일된 회로를 시각화할 때에도 이를 명확하게 표시합니다.
새 기능
-
이제
.draw()메서드를 사용하여DAGCircuit개체(즉, 연산 종속성이 명시된 QuantumCircuit 의 그래프 표현)를 시각화할 수 있습니다. 이는 쉬운 시각화라는 키스킷의 철학에 부합하는 것입니다..draw()메서드를 지원하는 다른 객체는QuantumCircuit,PassManager,Schedule입니다. -
주어진 백엔드에 대한 오류 맵을 표시하는 새로운 시각화 함수
qiskit.visualization.plot_error_map()를 추가했습니다. Qiskit-ibmq-provider에서 백엔드 오브젝트를 받아 해당 디바이스에 대한 현재 에러 맵을 플롯합니다. -
이제
qiskit.QuantumCircuit.draw()및qiskit.visualization.circuit_drawer()모두 시각화에서 레이아웃 정보로 큐비트에 주석을 달 수 있습니다. 그려지는QuantumCircuit객체에 레이아웃 메타데이터(일반적으로transpile()호출의 회로 출력에만 설정됨)가 포함되어 있는 경우 기본적으로 해당 레이아웃이 다이어그램에 표시됩니다. 이는 모든 회로 서랍 백엔드에 대해 수행됩니다. 예를 들어,from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister from qiskit.compiler import transpile qr = QuantumRegister(2, 'userqr') cr = ClassicalRegister(2, 'c0') qc = QuantumCircuit(qr, cr) qc.h(qr[0]) qc.cx(qr[0], qr[1]) qc.y(qr[0]) qc.x(qr[1]) qc.measure(qr, cr) # Melbourne coupling map coupling_map = [[1, 0], [1, 2], [2, 3], [4, 3], [4, 10], [5, 4], [5, 6], [5, 9], [6, 8], [7, 8], [9, 8], [9, 10], [11, 3], [11, 10], [11, 12], [12, 2], [13, 1], [13, 12]] qc_result = transpile(qc, basis_gates=['u1', 'u2', 'u3', 'cx', 'id'], coupling_map=coupling_map, optimization_level=0) qc.draw(output='text')와 같은 다이어그램이 생성됩니다:
┌──────────┐┌──────────┐┌───┐┌──────────┐┌──────────────────┐┌─┐ (userqr0) q0|0>┤ U2(0,pi) ├┤ U2(0,pi) ├┤ X ├┤ U2(0,pi) ├┤ U3(pi,pi/2,pi/2) ├┤M├─── ├──────────┤└──────────┘└─┬─┘├──────────┤└─┬─────────────┬──┘└╥┘┌─┐ (userqr1) q1|0>┤ U2(0,pi) ├──────────────■──┤ U2(0,pi) ├──┤ U3(pi,0,pi) ├────╫─┤M├ └──────────┘ └──────────┘ └─────────────┘ ║ └╥┘ (ancilla0) q2|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla1) q3|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla2) q4|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla3) q5|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla4) q6|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla5) q7|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla6) q8|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla7) q9|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla8) q10|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla9) q11|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla10) q12|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ (ancilla11) q13|0>──────────────────────────────────────────────────────────────╫──╫─ ║ ║ c0_0: 0 ══════════════════════════════════════════════════════════════╩══╬═ ║ c0_1: 0 ═════════════════════════════════════════════════════════════════╩═트랜스파일된 회로(또는 레이아웃이 설정된 다른 회로)에 레이아웃을 표시하지 않으려면 두 함수에 대한 새로운 부울 kwarg(
with_layout(기본값은True)이며,False설정 시 출력 회로에서 레이아웃 주석을 비활성화합니다)가 있습니다. -
새로운 분석 패스
CountOpsLongest가 추가되어 DAGCircuit의 최장 경로에서 연산 수를 검색할 수 있습니다. 사용하면 속성 세트 사전에count_ops_longest_path키가 추가됩니다. 다음과 같이 패스매니저에 추가할 수 있습니다:from qiskit.transpiler.passes import CountOpsLongestPath from qiskit.transpiler.passes import CxCancellation from qiskit.transpiler import PassManager pm = PassManager() pm.append(CountOpsLongestPath())와 같은 프로퍼티 집합 값을 통해 가장 긴 경로에 액세스합니다:
pm.append( CxCancellation(), condition=lambda property_set: property_set[ 'count_ops_longest_path'] < 5)를 사용하면 가장 긴 경로를 기준으로 해당 패스에 조건을 설정합니다.
-
펄스 라이브러리 모듈
qiskit.pulse.pulse_lib에 정규화되지 않은 쌍곡선 세컨트SamplePulse객체와 정규화되지 않은 쌍곡선 세컨트 데르비안SamplePulse객체를 생성하기 위한 두 가지 새로운 함수sech()와sech_deriv()가 각각 추가되었습니다. -
QuantumCircuit.draw()메서드와qiskit.visualization.circuit_drawer()함수에 새로운 kwarg 옵션vertical_compression이 추가되었습니다. 이 옵션은text백엔드에서만 작동합니다. 이 옵션은high,medium(기본값) 또는low로 설정하여 출력 시각화에서 세로 공간을 얼마나 사용할지 조정할 수 있습니다. -
QuantumCircuit.draw()메서드와qiskit.visualization.circuit_drawer()함수에 새로운 kwarg 부울 옵션idle_wires이 추가되었습니다. 모든 서랍 백엔드에서 작동합니다. 드로어 호출에서idle_wires을 False로 설정하면 출력 양자 회로 시각화에서 회로 요소가 없는 비트는 드로어에 그려지지 않습니다. -
새로운 PassManager 시각화 기능
qiskit.visualization.pass_mamanger_drawer()이 추가되었습니다. 이 함수는 PassManager 객체를 받아 PassManager 에서 실행되는 모든 패스의 흐름 제어 다이어그램을 생성합니다. -
이제 PassManager 을 만들 때 지정하면 각 패스가 실행된 후 실행되는 콜백 함수를 지정할 수 있습니다. 이 함수는 각 패스 실행 후 패스 매니저의 상태와 함께 호출할 때마다 kwarg 집합을 전달받습니다. 현재 이 콰그는 다음과 같습니다:
pass_(Pass): 실행 중인 패스dag(DAGCircuit): 패스의 DAG 출력입니다time(float): 패스 실행 시간property_set(PropertySet): 속성 세트count(int): 패스 실행을 위한 인덱스입니다
그러나 이러한 인수는 0.9 릴리스용으로 설정되었지만 패스 관리자의 내부를 노출하므로 향후 릴리스에서 변경될 수 있다는 점에 유의하세요.
예를 들어 이를 사용하여 각 패스가 실행된 후 회로 출력을 시각화하는 콜백 함수를 만들 수 있습니다:
from qiskit.transpiler import PassManager def my_callback(**kwargs): print(kwargs['dag']) pm = PassManager(callback=my_callback)또한
qiskit.compiler.transpile()을 사용할 때 콜백 함수를 지정할 수 있습니다:from qiskit.compiler import transpile def my_callback(**kwargs): print(kwargs['pass']) transpile(circ, callback=my_callback) -
qiskit.pulse.Schedule클래스에 새로운 메서드filter()가 추가되었습니다. 이렇게 하면 일정에서 지침을 필터링할 수 있습니다. 예를 들어, 인스트럭션 유형별로 필터링합니다:from qiskit.pulse import Schedule from qiskit.pulse.commands import Acquire from qiskit.pulse.commands import AcquireInstruction from qiskit.pulse.commands import FrameChange sched = Schedule(name='MyExperiment') sched.insert(0, FrameChange(phase=-1.57)(device)) sched.insert(60, Acquire(5)) acquire_sched = sched.filter(instruction_types=[AcquireInstruction]) -
여러 유형의 게이트에 대한 추가 분해 방법. 이러한 방법은 서로 다른 분해 기술을 사용하여 게이트를 일련의 CNOT와 단일 큐비트 게이트로 분해합니다. 다음과 같은 메소드가 추가되었습니다.
방법설명QuantumCircuit.iso()회로에 m 큐비트에서 n 큐비트까지 임의의 아이소메트리를 추가합니다. 이를 통해 n 큐비트에 임의의 단위를 붙이거나(m=n) n 큐비트의 모든 상태를 준비할 수 있습니다( m=0 ) QuantumCircuit.diag_gate()회로에 대각선 게이트 추가하기 QuantumCircuit.squ()임의의 2x2 유니티를 3개의 회전 게이트로 분해하고 회로에 추가합니다 QuantumCircuit.ucg()균일하게 제어되는 게이트(멀티플렉싱 게이트라고도 함)를 회로에 연결합니다 QuantumCircuit.ucx()균일하게 제어되는(멀티플렉스라고도 하는) Rx 회전 게이트를 회로에 연결합니다 QuantumCircuit.ucy()균일하게 제어되는(멀티플렉스라고도 하는) Ry 회전 게이트를 회로에 연결합니다 QuantumCircuit.ucz()균일하게 제어되는(멀티플렉스라고도 하는) Rz 회전 게이트를 회로에 연결합니다 -
CNOT 위상 및 CNOT 전용 선형 회로 합성을 위한 그레이-신스 및 파텔-마코프-헤이스 알고리즘이 추가되었습니다. 이 함수를 사용하면 선형 함수가 주어지면 CNOT 게이트로만 구성된 회로 또는 행렬 설명이 주어지면 CNOT와 위상 게이트로만 구성된 회로를 합성할 수 있습니다.
-
qiskit.circuit.random모듈에 새로운 함수random_circuit가 추가되었습니다. 이 함수는 다른 게이트를 무작위로 선택하고 회로에 추가하여 지정된 크기의 무작위 회로를 생성합니다. 예를 들어, 이를 사용하여 깊이가 10인 5큐비트 회로를 생성할 수 있습니다:from qiskit.circuit.random import random_circuit circ = random_circuit(5, 10) -
qiskit.compiler.transpile()함수에 새로운 kwargoutput_names이 추가되었습니다. 이 kwarg는 문자열 또는 문자열 목록을 받아transpile()호출에 의해 반환되는 출력 회로의 회로 이름 값으로 사용합니다. 예를 들어,from qiskit.compiler import transpile my_circs = [circ_a, circ_b] tcirc_a, tcirc_b = transpile(my_circs, output_names=['Circuit A', 'Circuit B'])tcirc_a 및 tcirc_b의
name속성은 각각'Circuit A'및'Circuit B'가 됩니다. -
qiskit.quantum_info.Operator및qiskit.quantum_info.Statevector클래스에 새로운 메서드equiv()가 추가되었습니다. 이 메서드는 두 번째Operator객체 또는Statevector객체가 전역 단계까지 동등한지 확인하는 데 사용됩니다. -
사용자 구성 파일에는 몇 가지 새로운 옵션이 있습니다:
- 이제
circuit_drawer필드에 자동 값을 사용할 수 있습니다.circuit_drawer필드의 값으로 설정하면 기본 서랍 백엔드를 사용할 수 있는 경우 mpl이 사용되며, 그렇지 않으면 텍스트 백엔드가 사용됩니다. - 새 필드
circuit_mpl_style를 사용하여 matplotlib 회로 드로어에서 사용하는 기본 스타일을 설정할 수 있습니다. 이 필드의 유효한 값은bw및default으로 각각 기본값을 흑백 또는 기본 색상 스타일로 설정할 수 있습니다. - 새 필드
transpile_optimization_level를 사용하여qiskit.compiler.transpile()로의 호출에 사용할 기본 트랜스파일러 최적화 수준을 설정할 수 있습니다. 이 값은 0, 1, 2 또는 3으로 설정할 수 있습니다.
- 이제
-
펄스에 삽입할 수 있는 새로운 펄스 명령
Delay을 도입했습니다Schedule. 이 명령은duration를 허용하며Channel에 추가할 수 있습니다. 지연 중에는 다른 명령이 채널에서 예약되지 않을 수 있습니다.지연은 다른 펄스 명령과 마찬가지로 추가할 수 있습니다. 예를 들어,
from qiskit import pulse drive_channel = pulse.DriveChannel(0) delay = pulse.Delay(20) sched = pulse.Schedule() sched += delay(drive_channel)
업그레이드 주의사항
-
이전에 사용되지 않는
qiskit._util모듈이 제거되었습니다.qiskit.util를 대신 사용해야 합니다. -
QuantumCircuit.count_ops()메서드는 이제dict대신OrderedDict객체를 반환합니다.OrderedDict은dict하위 클래스이므로 대부분의 사용 사례에서 호환됩니다. 그러나 유형 검사 및 기타 클래스 검사는 업데이트해야 할 수 있습니다. -
DAGCircuit.width()메서드는 이제 총 양자 비트 수와 클래식 비트를 반환합니다. 이전에는 양자 비트 수만 반환했습니다. 양자 비트 수만 필요한 경우DAGCircuit.num_qubits()을 대신 사용할 수 있습니다. -
DAGCircuit.num_cbits()기능이 제거되었습니다. 대신DAGCircuit.num_clbits()을 사용할 수 있습니다. -
개별 양자 비트와 기존 비트는 더 이상
(register, index)튜플로 표현되지 않습니다. 이제 이들은 큐비트와 클레빗 클래스의 인스턴스입니다. 개별 비트를 다루는 경우 튜플 대신 새로운 클래스를 찾도록 사용 방법이나 유형 검사를 업데이트해야 합니다. -
qiskit.compiler.transpile()호출의 이전 기본 패스 매니저였던qiskit.transpiler.preset_passmanagers.default_pass_manager및qiskit.transpiler.preset_passmanagers.default_pass_manager_simulator사전 설정 패스 매니저 클래스가 제거되었습니다. 이 패스 관리자를 수동으로 사용하던 경우 새 기본값인qiskit.transpile.preset_passmanagers.level1_pass_manager으로 전환합니다. -
LegacySwap패스가 제거되었습니다. 사용자 지정 패스 관리자에서 사용 중이었다면 더 빠르고 안정적인 버전인StochasticSwap패스로 대체할 수 있습니다. 모든 사전 설정 패스 관리자가LegacySwap대신StochasticSwap패스를 사용하도록 업데이트되었습니다. -
더 이상 사용되지 않는 다음
qiskit.dagcircuit.DAGCircuit메서드가 제거되었습니다:-
DAGCircuit.get_qubits()- 대신DAGCircuit.qubits()사용 -
DAGCircuit.get_bits()- 대신DAGCircuit.clbits()사용 -
DAGCircuit.qasm()-qiskit.converters.dag_to_circuit()와QuantumCircuit.qasm()을 조합하여 사용합니다. 예를 들어,from qiskit.dagcircuit import DAGCircuit from qiskit.converters import dag_to_circuit my_dag = DAGCircuit() qasm = dag_to_circuit(my_dag).qasm() -
DAGCircuit.get_op_nodes()- 대신DAGCircuit.op_nodes()을 사용하세요. 반환 유형은 이전에get_op_nodes()에서 반환한 튜플 목록이 아닌op_nodes()에 대한DAGNode객체 목록입니다. -
DAGCircuit.get_gate_nodes()- 대신DAGCircuit.gate_nodes()을 사용하세요. 반환 유형은 이전에get_gate_nodes()에서 반환한 튜플 목록이 아닌gate_nodes()에 대한DAGNode객체 목록입니다. -
DAGCircuit.get_named_nodes()- 대신DAGCircuit.named_nodes()을 사용하세요. 반환 유형은 이전에get_named_nodes()에서 반환한 node_ids 목록이 아닌named_nodes()에 대한DAGNode객체 목록이라는 점에 유의하세요. -
DAGCircuit.get_2q_nodes()- 대신DAGCircuit.twoQ_gates()을 사용하세요. 반환 유형은 이전에get_2q_nodes()에서 반환한 데이터_dicts 목록이 아닌twoQ_gates()에 대한DAGNode객체 목록입니다. -
DAGCircuit.get_3q_or_more_nodes()- 대신DAGCircuit.threeQ_or_more_gates()을 사용하세요. 반환 유형은 이전에get_3q_or_more_nodes()에서 반환한 튜플 목록이 아닌threeQ_or_more_gates()에 대한DAGNode객체 목록입니다.
-
-
다음
qiskit.dagcircuit.DAGCircuit메서드는node_id을 매개변수로 받는 것을 더 이상 지원하지 않습니다. 이 기능이 제거되어 이제DAGNode객체만 입력으로 허용됩니다:successors()predecessors()ancestors()descendants()bfs_successors()quantum_successors()remove_op_node()remove_ancestors_of()remove_descendants_of()remove_nonancestors_of()remove_nondescendants_of()substitute_node_with_dag()
-
qiskit.dagcircuit.DAGCircuit방법rename_register()이 제거되었습니다. 이것은 모든 키스킷 코드에서 사용되지 않았습니다. 외부에 의존하는 경우 외부 기능을 다시 구현해야 합니다. -
qiskit.dagcircuit.DAGCircuit속성multi_graph이 제거되었습니다. 기본networkxmulti_graph개체에 대한 직접 액세스는 더 이상 지원되지 않습니다. 대신DAGCircuit클래스에서 제공하는 API를 사용해야 합니다. -
더 이상 사용되지 않는 예외 클래스
qiskit.qiskiterror.QiskitError가 제거되었습니다. 대신qiskit.exceptions.QiskitError을 사용해야 합니다. -
qiskit.transpiler.PassManager생성자에서 부울 kwarg,ignore_requires및ignore_preserves이 제거되었습니다. 이 옵션은 더 이상 유효하지 않습니다. -
qiskit.tools.logging모듈이 제거되었습니다. 이 모듈은 Python 의 표준 라이브러리logging모듈이 제공하는 인터페이스에 아무것도 추가하지 않았습니다. 로깅을 위한 사용자 정의 포맷터를 설정하려면 표준 라이브러리logging모듈을 대신 사용하세요. -
CompositeGate클래스가 제거되었습니다. 대신 회로에서 명령어 객체를 직접 생성하고 이를 회로에 추가해야 합니다. 예를 들어 다음과 같이 실행할 수 있습니다:custom_gate_circ = qiskit.QuantumCircuit(2) custom_gate_circ.x(1) custom_gate_circ.h(0) custom_gate_circ.cx(0, 1) custom_gate = custom_gate_circ.to_instruction() -
이전에 사용되지 않던
seed및config(qiskit.compiler.assemble())은 제거되었으며, 대신seed_simulator및run_config을 사용합니다. -
이전에 더 이상 사용되지 않는 변환기
qiskit.converters.qobj_to_circuits()및qiskit.converters.circuits_to_qobj()가 제거되었습니다. 대신 각각qiskit.assembler.disassemble()및qiskit.compiler.assemble()을 사용하세요. -
이전에 사용되지 않던 kwarg
seed_mapper(qiskit.compiler.transpile())가 제거되었습니다. 대신 다음을 사용해야 합니다seed_transpiler -
이전에 더 이상 사용되지 않는 kwargs
seed,seed_mapper,config,circuits는qiskit.execute()함수에 대해 제거되었습니다. 대신 각각seed_simulator,seed_transpiler,run_config,experiments인수를 사용합니다. -
이전에 더 이상 사용되지 않는
qiskit.tools.qcvv모듈이 제거되었으므로 대신 qiskit-ignis를 사용한다. -
이전에 사용되지 않던
qiskit.transpiler.transpile()및qiskit.transpiler.transpile_dag()함수가 제거되었습니다. 대신qiskit.compiler.transpile을 사용해야 합니다.transpile_dag()을 사용 중이라면 실행으로 대체할 수 있습니다:circ = qiskit.converters.dag_to_circuit(dag) out_circ = qiskit.compiler.transpile(circ) qiskit.converters.circuit_to_dag(out_circ) -
이전에 사용되지 않던
qiskit.compile()함수가 제거되었으므로 대신qiskit.compiler.transpile()및qiskit.compiler.assemble()을 사용해야 합니다. -
qiskit.tools.jupyter의 주피터 셀 매직(%%qiskit_progress_bar)이 라인 매직으로 변경되었습니다. 이는 마법의 사용 방법과 작동 방식을 더 잘 반영하기 위한 것입니다. 기존 노트북에서%%qiskit_progress_bar셀 매직을 사용 중이었다면 대신%qiskit_progress_bar으로 변경하여 라인 매직으로 업데이트해야 합니다. 다른 모든 항목은 동일하게 작동해야 합니다. -
더 이상 사용되지 않는 함수
qiskit.tools.qi.qi.random_unitary_matrix()가 제거되었습니다. 대신qiskit.quantum_info.random.random_unitary()함수를 사용해야 합니다. -
더 이상 사용되지 않는 함수
qiskit.tools.qi.qi.random_density_matrix()가 제거되었습니다. 대신qiskit.quantum_info.random.random_density_matrix()함수를 사용해야 합니다. -
더 이상 사용되지 않는 함수
qiskit.tools.qi.qi.purity()가 제거되었습니다. 대신qiskit.quantum_info.purity()함수를 사용해야 합니다. -
더 이상 사용되지 않는
QuantumCircuit._attach()메서드가 제거되었습니다. 대신QuantumCircuit.append()을 사용해야 합니다. -
qiskit.qasm.Qasm방법get_filename()이 제거되었습니다. 대신return_filename()방법을 사용할 수 있습니다. -
더 이상 사용되지 않는
qiskit.mapper모듈이 제거되었습니다. 대체 함수와 클래스 목록은 다음과 같습니다:qiskit.mapper.CouplingMapqiskit.transpiler.CouplingMap대신 사용해야 합니다.qiskit.mapper.Layoutqiskit.transpiler.Layout대신 사용해야 합니다qiskit.mapper.compiling.euler_angles_1q()qiskit.quantum_info.synthesis.euler_angles_1q()대신 사용해야 합니다qiskit.mapper.compiling.two_qubit_kak()qiskit.quantum_info.synthesis.two_qubit_cnot_decompose()대신 사용해야 합니다.
더 이상 사용되지 않는 예외 클래스
qiskit.mapper.exceptions.CouplingError와qiskit.mapper.exceptions.LayoutError는qiskit.mapper모듈 없이는 아무런 용도가 없으므로 대체할 수 없습니다. -
qiskit.pulse.samplers모듈이qiskit.pulse.pulse_lib.samplers으로 이전되었습니다.qiskit.pulse.samplers에서qiskit.pulse.pulse_lib.samplers으로 가져오기를 업데이트해야 합니다. -
seaborn은 이제
qiskit.visualization.plot_state_qsphere()함수에 대한 종속성이 되었습니다. 시각화를 위한 적절한 각도 색상 맵을 생성하는 데 필요합니다.qiskit-terra[visualization]추가 설치 대상이seaborn>=0.9.0설치하도록 업데이트되었습니다. 시각화, 특히plot_state_qsphere()기능을 사용하는 경우 이를 사용하여seaborn설치하거나 수동으로 실행할 수 있습니다pip install seaborn>=0.9.0 -
이전에 사용되지 않던
qiksit.visualization.plot_state및qiskit.visualization.iplot_state함수가 제거되었습니다. 대신 각 플롯 유형에 맞는 특정 함수를 사용해야 합니다. 다음 표를 참조하여 더 이상 사용되지 않는 기능을 그에 상응하는 새로운 기능으로 매핑할 수 있습니다:키스킷 테라 0.6키스킷 테라 0.7 +플롯_상태(RHO) 플롯_주_도시(RHO) plot_state(rho, method='city') 플롯_주_도시(RHO) plot_state(rho, method='paulivec') 플롯_스테이트_폴리벡(RHO) plot_state(rho, method='qsphere') 플롯_스테이트_큐스피어(RHO) plot_state(rho, method='bloch') 플롯_블로흐_멀티벡터(RHO) plot_state(rho, method='hinton') 플롯_상태_힌튼(RHO) -
latex및latex_source회로 드로어 백엔드에 대한pylatexenc및pillow종속성은 더 이상 요구 사항으로 나열되지 않습니다. 라텍스 회로 서랍을 사용하려는 경우 두 패키지가 모두 설치되어 있는지 확인하거나 설치 도구 추가 기능을 사용하여 키스킷 테라와 함께 설치하세요:pip install qiskit-terra[visualization] -
이제
qiskit네임스페이스의 루트는qiskit.IBMQ또는qiskit.Aer중 하나를 설정할 수 없는 경우 가져오기 시 경고를 표시합니다.qiskit네임스페이스의 모든 항목을 가져올 때마다 발생합니다. 이러한 경고는 사용자가 키스킷을 실행 중이고 키스킷-aer 및 키스킷-ibmq-공급자 패키지를 찾을 수 없는 경우 사용자에게 미리 알리기 위해 추가되었습니다. 패키지가 누락되었거나 파이썬 패키징/핍이 요소를 잘못 설치했는지 사용하려고 하면 빈ImportError이 나올 때까지는 항상 명확하지 않습니다. 이러한 경고는 일반적으로 사용되는 별칭이 누락된 경우 이를 미리 명확하게 알려줍니다.그러나 qiskit-aer 또는 qiskit-ibmq-provider를 사용하지 않기로 선택한 사용자의 경우 추가 노이즈가 발생할 수 있습니다. 이러한 사용자의 경우 Python 의 표준 라이브러리
warnings를 사용하여 이러한 경고를 쉽게 억제할 수 있습니다. 사용자는 키스킷에서 가져오기 전에 이 두 줄을 넣으면 경고를 표시하지 않을 수 있습니다:import warnings warnings.filterwarnings('ignore', category=RuntimeWarning, module='qiskit')이렇게 하면 qiskit-aer 또는 qiskit-ibmq-provider를 설치하지 않아서 발생하는 경고는 억제되지만, qiskit 또는 다른 패키지에서 발생하는 다른 경고는 그대로 유지된다.
지원 중단 노트
-
U및CX게이트는 더 이상 사용되지 않습니다. 코드에서 이러한 게이트를 사용하는 경우u3및cx대신 및 을 사용하도록 업데이트해야 합니다. 예를 들어 회로 게이트 기능circuit.u_base()및circuit.cx_base()을 사용하는 경우 각각circuit.u3()및circuit.cx()으로 업데이트해야 합니다. -
u0게이트는 여러 개의iden게이트를 사용하기 위해 더 이상 사용되지 않으며 향후 제거될 예정입니다. 서킷에서u0게이트를 사용하는 경우iden을 사용하도록 호출을 업데이트해야 합니다. 예를 들어, 이전에circuit.u0(2)을 사용했다면 다음과 같이 업데이트해야 합니다:circuit.iden() circuit.iden()대신.
-
qiskit.pulse.DeviceSpecification클래스는 이제 더 이상 사용되지 않습니다. 대신qiskit.pulse.PulseChannelSpec을 사용해야 합니다. -
인덱스로
qiskit.circuit.Qubit,qiskit.circuit.Clbit,qiskit.circuit.Bit클래스에 액세스하는 것은 더 이상 사용되지 않습니다(이러한 클래스가 대체한(register, index)튜플과의 호환성을 위해). 대신register및index속성을 사용해야 합니다. -
qiskit.QuantumCircuit메서드append에 튜플(register, index)로 비트를 전달하는 것은 더 이상 사용되지 않습니다. 대신 비트 객체를 직접 사용해야 합니다. -
(register, index)튜플로qiskit.transpiler.Layout객체의 요소에 액세스하는 것은 더 이상 사용되지 않습니다. 대신 비트 객체를 직접 사용해야 합니다. -
qiskit.transpiler.Layout생성자 메서드qiskit.transpiler.Layout.from_tuplelist()는 더 이상 사용되지 않습니다. 대신 생성자qiskit.transpiler.Layout.from_qubit_list()를 사용해야 합니다. -
qiskit.pulse.ops모듈은 더 이상 사용되지 않습니다. 제공하는 모든 기능:unionflattenshiftinsertappend
qiskit.pulse.Schedule및qiskit.pulse.Instruction클래스에서 직접 동일한 방법을 사용할 수 있습니다. 대신 이러한 방법을 사용해야 합니다. -
qiskit.qasm.Qasm방법get_tokens()은 더 이상 사용되지 않습니다. 대신generate_tokens()방법을 사용해야 합니다. -
qiskit.qasm.qasmparser.QasmParser방법get_tokens()은 더 이상 사용되지 않습니다. 대신read_tokens()방법을 사용해야 합니다. -
Qobj 클래스에 대한
as_dict()메서드는 더 이상 사용되지 않으며 향후 제거될 예정입니다. 대신to_dict()으로 호출을 대체해야 합니다.
버그 수정
-
CU3Gate의 정의가 통제된U3Gate의 정식 정의와 동일하도록 변경되었습니다. -
패스 관리자에서 레이아웃을 처리하는 방식이 표준화되었습니다. 이렇게 하면 레이아웃 처리와 관련하여 보고된 몇 가지 문제가 해결됩니다.
qiskit.compiler.transpile()및qiskit.execute()의initial_layoutkwarg 매개변수는 이제 회로를 트랜스파일링할 때 회로의 큐비트를 디바이스의 원하는 큐비트에 배치합니다. -
N-큐비트 유니타리 지원이 BasicAer 시뮬레이터에 추가되었고,
unitary(임의 유니타리 게이트)가 시뮬레이터의 베이시스 게이트 세트에 추가되었습니다 -
qiskit.visualization.plost_state_qsphere()이 몇 가지 문제를 해결하기 위해 업데이트되었습니다. 이제 출력 Q 구 시각화가 올바르게 생성되고 다음과 같은 측면이 업데이트되었습니다:
기타 참고사항
-
qiskit.compiler.transpile()및qiskit.execute()의 기본값 PassManager 이qiskit.transpile.preset_passmanagers.level1_pass_manager에 정의된 최적화 레벨 1 패스 관리자로 변경되었습니다. -
이제 모든 회로 드로어 백엔드는 회로의 게이트 파라미터를 출력 시각화에서 파이의 공통 분수로 표현합니다. 매개변수의 값을 숫자 대신 파이의 분수로 표현할 수 있는 경우 해당 값을 사용합니다.
-
qiskit.assembler.assemble_schedules()을 사용할 때 사용할 메모리_슬롯 수를 제공하지 않으면 입력 스케줄의 촬영 횟수에 따라 그 수가 추론됩니다. -
qiskit.dagcircuit.DAGCircuit속성node_counter의 사용 중단 경고가 제거되었습니다. 경고 대상 동작 변경은 경고가 추가될 때 이미 적용되었으므로 변경되었다는 경고는 아무런 소용이 없습니다. -
이제
PassManager.run()으로 호출하면 각 패스 실행에 대해 INFO 수준에서 파이썬 로깅 메시지가 출력됩니다. 이러한 메시지에는 패스 이름과 패스의 총 실행 시간이 포함됩니다. Python 의 표준 로깅을 사용한 이유는 키스킷-테라 로깅이 다른 애플리케이션 및 라이브러리와 표준 방식으로 통합될 수 있기 때문입니다. 트랜스파일러에 대한 모든 로깅은logging.getLogger('qiskit.transpiler)에서 사용하는qiskit.transpiler네임스페이스에서 이루어집니다. 예를 들어 트랜스파일러에 대한 DEBUG 수준 로깅을 켜려면 실행할 수 있습니다:import logging logging.basicConfig() logging.getLogger('qiskit.transpiler').setLevel(logging.DEBUG)를 호출하면 트랜스파일러의 로그 레벨이 DEBUG로 설정되고 해당 메시지가 stderr로 출력되도록 구성됩니다.
에어 0.3
- 노이즈 모델과 함께 사용할 수 있는 새로운 고성능 밀도 매트릭스 시뮬레이터를 통해 실제 시나리오를 더 잘 시뮬레이션할 수 있습니다.
- 매트릭스 제품 상태(MPS) 시뮬레이터를 추가했습니다. MPS를 사용하면 강한 상관관계와 고도로 얽힌 상태가 존재하는 경우에도 여러 종류의 양자 회로를 효율적으로 시뮬레이션할 수 있습니다. MPS를 사용할 수 있는 경우, 수백 큐비트 이상의 회로를 정확하게 시뮬레이션할 수 있습니다(예: 관측값의 기대값을 구하기 위한 목적).
- 모든 시뮬레이터에서 스냅샷을 수행할 수 있습니다.
- 이제 이상적인 회로뿐만 아니라 판독 오류가 있는 샘플링 회로도 측정할 수 있습니다.
- 노이즈가 존재하는 일부 회로 최적화를 개선했습니다.
- 더 나은 2쿼비트 오류 근사치가 포함되었습니다.
- 특정 노이즈 시뮬레이션을 더 쉽게 제작하고 더 빠르게 시뮬레이션할 수 있는 몇 가지 도구가 포함되어 있습니다.
- 부동 소수점 수치 정밀도가 덜 필요한 시뮬레이션의 성능이 향상되었습니다.
이그니스 0.2
새 기능
- 로깅 모듈
- 퓨리티 RB
- 인터리브 RB
- 인증용 반복 코드
- 이제 시드 값을 RB에 임의로 추가할 수 있습니다(순서가 아닌)
- 측정 완화에 여러 결과 추가 지원
- 이제 RB 피터가 추측 값 제공을 지원합니다
버그 수정
- RB 맞춤 오류 버그 수정
- 맞출 큐비트 인덱스를 선택할 때 특성화 피터에서 버그가 수정되었습니다
기타 참고사항
- 이제 측정 완화는 여러 결과에 적용할 때 병렬로 작동합니다
- RB 피터의 추측 값이 개선되었습니다
아쿠아 0.6
추가됨
-
상대 위상 토폴리 게이트
rccx(컨트롤 2개 포함) 및rcccx(컨트롤 3개 포함). -
변형 양식
RYCRX -
새로운
'basic-no-ancilla'모드가mct으로 변경되었습니다. -
다중 제어 회전 게이트
mcrx,mcry,mcrz일반u3게이트는 그레이코드 구현에서 지원되지 않습니다 -
화학: ROHF 오픈 셸 지원
- 모든 드라이버에서 지원됩니다: Gaussian16, PyQuante, PySCF 및 PSI4
- HartreeFock 초기 상태, UCCSD 변형 형태 및 패리티 매핑을 위한 2 큐비트 감소는 이제 오픈 셸 지원을 위해 다양한 알파 및 베타 입자 번호를 지원합니다
-
화학: UHF 오픈 셸 지원
- 모든 드라이버에서 지원됩니다: Gaussian16, PyQuante, PySCF 및 PSI4
- 별도의 베타를 위해 적분, 계수 등을 포함하도록 확장된 QMolecule
-
화학: 실험을 위한 일반적인 접근을 용이하게 하기 위해 원자 궤도 단위의 적분으로 확장된 Q분자
- 모든 드라이버에서 지원됩니다: Gaussian16, PyQuante, PySCF 및 PSI4
-
화학: 추가 PyQuante 및 PySCF 드라이버 구성
- 수렴 허용 오차 및 최대 수렴 반복 제어.
- PySCF 초기 추측 선택
-
화학: PyQuante 및 PySCF 계산의 처리 출력이 디버그 로그에 추가되었습니다( Gaussian16 및 PSI4 출력은 이미 디버그 로그에 추가되었습니다)
-
화학: 키스킷-화학이 키스킷-아쿠아로 통합되었습니다
-
MatrixOperator,WeightedPauliOperator및TPBGroupedPauliOperator클래스를 추가합니다. -
evolution_instruction함수를 추가하여 등록되지 않은 시간 진화 지시를 받습니다. -
op_converter모듈을 추가하여 다양한 유형의 운영자 전환을 담당하는 장소를 통합합니다. -
Z2Symmetries클래스를 추가하여 Z2 대칭 정보를 캡슐화하고 연산자 테이퍼링에 대한 헬퍼 메서드를 추가합니다. -
진폭 추정: 최대 가능성 후처리 및 신뢰 구간 계산이 추가되었습니다.
-
최대 가능성 진폭 추정(MLAE): 최대 가능성 추정에 기반한 진폭 추정을 위한 새로운 알고리즘을 구현하여 필요한 큐비트 수와 회로 깊이를 줄였습니다.
-
선형 및 다항식으로 제어되는 폴리 회전 회로가 (부분적으로) 추가되었습니다.
-
q_equation_of_motion을 추가하여 분자의 여기 상태를 연구하고 두 개의 알고리즘을 추가하여 기준 상태를 준비합니다.
변경됨
- 상대 위상 토폴리 게이트를 사용하여 중간 결과를 구축함으로써
mct의'basic'모드를 개선합니다. - 새로 도입된 키스킷 테라의
Qubit클래스에 적응하세요. QPE/IQPE입력Operator개체를 수정하지 못하도록 합니다.- PyEDA 종속성이 제거되었으며 해당 오라클의 기본 로직 연산은 이제 SymPy 에서 처리됩니다.
Operator클래스를 리팩터링하면 각 표현에는 자체 클래스MatrixOperator,WeightedPauliOperator및TPBGroupedPauliOperator이 있습니다.evolution_instruction의power은 CRZ 게이트의 세타에 직접 적용되었지만, 새 버전은 회로를 반복하여 전력을 구현합니다.- CircuitCache 는 기본적으로 꺼져 있으며, 이제 환경 변수를 통해 설정할 수 있습니다
QISKIT_AQUA_CIRCUIT_CACHE.
버그 수정
1값이 하나만 있는 진리 테이블에 대해TruthTableOracle가 잘못된 회로를 생성하는 버그입니다.PyEDA의 불확정성으로 인해 발생한 버그입니다.QPE/IQPE의 번역 및 스트레치 계산 관련 버그입니다.- 화학: 큐비트 수가 2의 거듭제곱이 아닐 때 브라비-키타에프 매핑이 수정되었습니다
- 목록을 통해
QuantumInstance에서initial_layout을 설정합니다.
제거됨
- 일반 다중 제어 회전 게이트
mcu3가 제거되고 다중 제어 회전 게이트mcrx,mcry로 대체됩니다mcrz
더 이상 사용되지 않음
Operator클래스는 더 이상 사용되지 않으며MatrixOperator,WeightedPauliOperator및TPBGroupedPauliOperator을 사용하는 것이 좋습니다.
IBM Q 제공자 0.3
변경 없음