키스킷 0.18 릴리즈 노트
0.18.3
테라 0.13.0
변경 없음
에어 0.5.1
업그레이드 주의사항
- C++ 컨트롤러 클래스에서 트랜스퓔레이션 패스가 처리되는 방식을 변경하여 각 패스를 명시적으로 호출해야 합니다. 이를 통해 각 패스가 언제 호출되어야 하는지, 어떤 매개변수를 사용해야 하는지에 대해 더 많은 사용자 지정이 가능합니다. 특히 QasmController 시뮬레이션 방법에 따라 게이트 퓨전 최적화 패스에 대한 다양한 파라미터를 설정할 수 있습니다.
- 내부 코드의 단위 변환을 처리하기 위해 디바이스 노이즈 모델 함수에서 사용자 지정
gate_lengths을 지정하려면qiskit.providers.aer.noise.NoiseModel.from_device()에gate_length_unitskwarg를 추가하세요. - 안정화 시뮬레이터 메서드 지원 게이트셋에 제어-Y("cy") 게이트를 추가합니다.
- Aer의 백엔드에서는 이제 기본적으로 활성화되는 대신 테라의 입력 qobj 객체에 대한 jsonschema 유효성 검사가 선택 사항으로 설정됩니다. 백엔드 오브젝트에 대한
qiskit.providers.aer.QasmSimualtor.run()메서드의validatekwarg를True로 설정하여 qobj의 jsonschema 유효성 검사를 활성화하려면.
버그 수정
-
자동으로 선택된 시뮬레이션 방법에서 "확장_안정화"를 제거합니다. 확장 안정기 방법은 정확하지 않으며 사용자가 구성 매개변수를 최적화하는 방법을 알지 못하면 특정 회로에 대해 잘못된 결과를 제공할 수 있으므로 이 방법이 필요합니다.
이제 자동 메서드는 "stabilizer", "density_matrix", "statevector" 메서드 중에서만 선택합니다. 상태 벡터 메서드에 비해 너무 큰 비클리포드 회로가 실행되면 예외가 발생하여 대신 "확장_안정기" 또는 "매트릭스_제품_상태" 메서드를 명시적으로 사용해 볼 수 있음을 제안하는 예외가 발생합니다.
-
ReduceBarrier 트랜스필레이션 패스가 먼저 적용되도록 컨트롤러 클래스를 수정했습니다. 이렇게 하면 배리어 명령어에 정의된 유일한 명령어가 배리어인 경우 사용하지 않는 큐비트가 잘리지 않도록 방지할 수 있습니다.
-
경우에 따라 잘못된 결과가 반환되는 문제가 발생했기 때문에 행렬 제품 상태 시뮬레이션 방법에 대한 게이트 융합을 비활성화합니다.
-
열 완화 오류 및 게이트 오류가 있는 디바이스 노이즈 모델의 게이트 시간 단위 변환 오류를 수정합니다. 오류 확률은 탈분극 오류의 경우 게이트 시간을 마이크로초 단위로 계산하는 반면, 열 이완의 경우 나노초 단위로 계산하고 있었습니다. 그 결과 잘못된 단위로 인해 장치의 일관성이 제한되는 것처럼 보이기 때문에 탈분극 오류가 적용되지 않았습니다.
-
구성된 명령어의 큐비트가 다를 때 QuantumErrors 의 잘못된 구성 버그 수정.
-
'대각선' 게이트가 허용 오차가 너무 높은 단일 게이트로 확인되는 문제를 수정했습니다. 이로 인해 Numpy 함수에서 생성된 대각선이 종종 테스트에 실패했습니다.
-
배리어 제거 회로 최적화 패스가 큐비트 트루메이션 전에 적용되도록 수정했습니다. 이는 테라 트랜스파일러가 비활성 큐비트에 삽입한 장벽으로 인해 큐비트가 잘리지 않던 문제를 해결합니다.
이그니스 0.3.0
변경 없음
아쿠아 0.6.6
변경 없음
IBM Q 제공자 0.6.1
변경 없음
0.18.0
테라 0.13.0
Prelude
0.13.0 릴리스에는 많은 큰 변경 사항이 포함되어 있습니다. 이번 릴리스의 주요 내용은 다음과 같습니다:
트랜스파일러의 경우 트랜스파일러를 빌드하는 데 사용되는 그래프 라이브러리를 qiskit.dagcircuit.DAGCircuit 클래스의 기본 데이터 구조인 그래프 라이브러리를 retworkx 기반으로 전환하여 성능을 크게 향상시켰습니다. 0.13.0 릴리스의 회로 변환 속도는 이전 릴리스보다 훨씬 빨라질 것입니다.
펄스 명령어 작성 스타일이 크게 간소화되었습니다. 이제 Command 는 더 이상 사용되지 않으며 통합된 Instruction 가 지원됩니다.
모듈에는 qiskit.quantum_info 모듈에는 랜덤 연산자(클리포드 및 양자 채널 등)를 생성하고 양자 채널의 다이아몬드 규범을 계산하기 위한 몇 가지 새로운 함수가 포함되어 있으며, 업그레이드된 Statevector 과 DensityMatrix 클래스의 업그레이드, 측정 확률 계산과 샘플링 측정을 지원하는 클래스, 폴리 행렬의 심플렉틱 표현을 기반으로 하는 몇 가지 새로운 클래스가 포함되어 있습니다. 이러한 새로운 클래스에는 클리포드 연산자(Clifford), 폴리 기저에서 희박한 N 큐비트 행렬(SparsePauliOp), 폴리의 목록(PauliTable), 안정화기 목록(StabilizerTable) 등이 포함됩니다.
이번 릴리스에는 또한 키스킷 전반에 걸쳐 문서가 크게 개선되었으며, 여기에는 개선된 qiskit.circuit, qiskit.pulse 및 qiskit.quantum_info 모듈에 대한 개선된 문서를 포함합니다.
또한 게이트 객체의 이름과 QuantumCircuit 메서드의 이름이 보다 일관성 있게 업데이트되었습니다. 이로 인해 보다 일관된 명명 체계로 전환하면서 여러 클래스와 메서드가 더 이상 사용되지 않게 되었습니다.
이번 릴리스의 모든 변경 사항에 대한 자세한 내용은 아래의 자세한 릴리스 노트를 참조하세요.
새 기능
-
새로운 회로 라이브러리 모듈 추가
qiskit.circuit.library. 더 큰 회로나 애플리케이션의 빌딩 블록으로 사용할 수 있는 일반적으로 사용되는 회로의 생성자를 위한 공간입니다. -
qiskit.providers.BaseJob클래스에는 네 가지 새로운 메서드가 있습니다:done()running()cancelled()in_final_state()
이러한 방법은 작업이 주어진 작업 상태인지 확인하는 데 사용됩니다.
-
큐비트가 접지 상태에 있는 것을 조건으로 제어를 지정하는 기능을 추가합니다. 제어 큐비트의 상태는 정수로 표현됩니다. 예를 들어,
from qiskit import QuantumCircuit from qiskit.extensions.standard import XGate qc = QuantumCircuit(4) cgate = XGate().control(3, ctrl_state=6) qc.append(cgate, [0, 1, 2, 3])첫 번째 큐비트가 기저 상태이고 두 번째와 세 번째 큐비트가 여기 상태인 경우 네 번째 큐비트가 플립되는 4큐비트 게이트를 생성합니다.
ctrl_state이None인 경우 기본값은 모든 제어 큐비트가 여기되는 것을 조건으로 제어합니다. -
새로운 주피터 위젯인
%circuit_library_info이qiskit.tools.jupyter. 이 위젯은 회로 라이브러리에서 구축한 회로에 대한 세부 정보를 시각화하는 데 사용됩니다. 예를 들면 다음과 같습니다from qiskit.circuit.library import XOR import qiskit.tools.jupyter circuit = XOR(5, seed=42) %circuit_library_info circuit -
에 새로운 kwarg 옵션인
formatted이 추가되었습니다qiskit.circuit.QuantumCircuit.qasm().True로 설정하면 이 메서드는 구문 강조 버전(파이그먼트 사용)을 stdout에 출력하고None을 반환합니다(이는 QASM 코드를 문자열로 반환하는 일반적인 동작과 다릅니다). -
에 새로운 kwarg 옵션인
filename이 추가되었습니다qiskit.circuit.QuantumCircuit.qasm(). 경로로 설정하면 메서드가 해당 파일에 QASM 코드를 작성합니다. 그러면 정상적으로 계속 출력됩니다. -
사용자가
PulseChannel의 빈도를 변경할 수 있는 새로운 명령SetFrequency. 이 작업은 다음과 같은 방법으로 수행됩니다:from qiskit.pulse import Schedule from qiskit.pulse import SetFrequency sched = pulse.Schedule() sched += SetFrequency(5.5e9, DriveChannel(0))이 예제에서는
SetFrequency명령 이전의 모든 펄스의 주파수가 기본 주파수가 되고SetFrequency명령 이후의 드라이브 채널 0에 적용되는 모든 펄스는 5.5 GHz가 됩니다.SetFrequency사용자는 하드웨어 제한 사항을 염두에 두어야 합니다. -
새로운 방법
assign_parameters()메서드가qiskit.circuit.QuantumCircuit클래스에 새로운 메서드가 추가되었습니다. 이 메서드는 단일 딕셔너리에 float와 Parameters 객체가 모두 포함된 매개변수 딕셔너리를 허용합니다. 즉, 이 새로운 메서드를 사용하면 하나의 사전에서 플로트, 매개변수 또는 둘 다를 바인딩할 수 있습니다.또한
inplacekwarg를 사용하여 원래 회로를 선택적으로 수정하도록 지정할 수 있습니다. 기본적으로 이 값은False으로 설정되어 있으며 메서드에서 원본 회로의 복사본이 반환됩니다. -
새로운 메서드
num_nonlocal_gates()메서드가qiskit.circuit.QuantumCircuit클래스에 새로운 메서드가 추가되었습니다. 이 메서드는 회로에서 2개 이상의 큐비트를 포함하는 게이트의 수를 반환합니다. 이러한 게이트는 구현하는 데 시간과 오류 측면에서 비용이 더 많이 듭니다. -
메서드의
qiskit.circuit.QuantumCircuit메서드iso()에Isometry게이트 추가를 위한 새로운 별칭이 생겼습니다. 이제 전화할 수 있습니다qiskit.circuit.QuantumCircuit.isometry()으로 전화하는 것 외에도iso으로 전화할 수 있습니다. -
description어트리뷰트가CouplingMap클래스에 다양한 커플링 맵(예: 전체, 그리드, 선 등)에 대한 간단한 설명을 저장할 수 있는 속성이 추가되었습니다. -
새로운 메서드
compose()메서드가DAGCircuit클래스에 DAG를 통해 두 개의 회로를 구성하는 새로운 메서드가 추가되었습니다.dag_left.compose(dag_right, edge_map={right_qubit0: self.left_qubit1, right_qubit1: self.left_qubit4, right_clbit0: self.left_clbit1, right_clbit1: self.left_clbit0})┌───┐ ┌─────┐┌─┐ lqr_1_0: ───┤ H ├─── rqr_0: ──■──┤ Tdg ├┤M├ ├───┤ ┌─┴─┐└─┬─┬─┘└╥┘ lqr_1_1: ───┤ X ├─── rqr_1: ┤ X ├──┤M├───╫─ ┌──┴───┴──┐ └───┘ └╥┘ ║ lqr_1_2: ┤ U1(0.1) ├ + rcr_0: ════════╬════╩═ = └─────────┘ ║ lqr_2_0: ─────■───── rcr_1: ════════╩══════ ┌─┴─┐ lqr_2_1: ───┤ X ├─── └───┘ lcr_0: ═══════════ lcr_1: ═══════════ ┌───┐ lqr_1_0: ───┤ H ├────────────────── ├───┤ ┌─────┐┌─┐ lqr_1_1: ───┤ X ├─────■──┤ Tdg ├┤M├ ┌──┴───┴──┐ │ └─────┘└╥┘ lqr_1_2: ┤ U1(0.1) ├──┼──────────╫─ └─────────┘ │ ║ lqr_2_0: ─────■───────┼──────────╫─ ┌─┴─┐ ┌─┴─┐ ┌─┐ ║ lqr_2_1: ───┤ X ├───┤ X ├──┤M├───╫─ └───┘ └───┘ └╥┘ ║ lcr_0: ═══════════════════╩════╬═ ║ lcr_1: ════════════════════════╩═ -
qiskit.test.mock의 모의 백엔드에는 이제 실제 장치와 유사한 결과를 반환하는run()메서드가 작동합니다.qiskit-aer을 설치하면 가짜 백엔드의 디바이스 스냅샷에서 빌드한 노이즈 모델로 시뮬레이션이 실행됩니다. 그렇지 않으면qiskit.providers.basicaer.QasmSimulatorPy를 사용하여 이상적인 시뮬레이션을 실행합니다. 또한 펄스 실험을run으로 전달하고 qiskit-aer를 설치하면PulseSimulator을 사용하여 펄스 스케줄을 시뮬레이션할 수 있습니다. -
메서드의
qiskit.result.Result()메서드get_counts()는 이제 작업에 여러 개의 회로가 있을 때 사용 가능한 모든 카운트 목록을 반환합니다. 인자 없이get_counts()을 호출할 때 작동합니다.이 기능의 주요 고려 사항은 여러 회로의 모든 결과를 동일한 히스토그램에 그리는 것이었습니다. 예를 들어 이제 다음과 같은 작업을 수행할 수 있습니다:
from qiskit import execute from qiskit import QuantumCircuit from qiskit.providers.basicaer import BasicAer from qiskit.visualization import plot_histogram sim = BasicAer.get_backend('qasm_simulator') qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() result = execute([qc, qc, qc], sim).result() plot_histogram(result.get_counts()) -
새로운 kwarg,
initial_state가 추가되었습니다qiskit.visualization.circuit_drawer()함수와QuantumCircuit메서드draw().True로 설정하면 초기 상태가 모든 백엔드의 회로 시각화에 포함됩니다. 예를 들어,from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='mpl', initial_state=True) -
이제 콜러블을 삽입할 수 있습니다
qiskit.pulse.InstructionScheduleMap에 콜러블을 삽입할 수 있습니다qiskit.pulse.Schedule를 반환하는 콜러블을 삽입할 수 있습니다. 예를 들어,def test_func(x): sched = Schedule() sched += pulse_lib.constant(int(x), amp_test)(DriveChannel(0)) return sched inst_map = InstructionScheduleMap() inst_map.add('f', (0,), test_func) output_sched = inst_map.get('f', (0,), 10) assert output_sched.duration == 10 -
두 개의 새로운 게이트 클래스(
qiskit.extensions.iSwapGate및qiskit.extensions.DCXGate)와 해당 클래스들의QuantumCircuit메서드iswap()와dcx()가 표준 확장에 추가되었습니다. 로컬로 서로 동등한 이러한 게이트는 특정 XY 상호작용을 구현하는 데 사용할 수 있습니다. 이러한 게이트에 대한 간략한 동기는 다음에서 확인할 수 있습니다: arxiv.org/abs/quant-ph/0209035 -
qiskit.providers.BaseJob클래스에는 이제 작업이 최종 상태(예:DONE또는ERROR)에 도달할 때까지 작업 상태를 폴링하는 새로운 메서드wait_for_final_state()가 있습니다. 이 메서드는 또한 폴링 루프의 각 반복 중에 호출될 Python 콜러블을 받는callbackkwarg를 선택적으로 받습니다. -
패스의
search_width및search_depth속성은qiskit.transpiler.passes.LookaheadSwap속성을 이제 패스를 초기화할 때 설정할 수 있습니다. 검색 공간이 넓어지면 실행 시간이 길어지는 대신 회로가 더 최적화되는 경우가 많습니다. -
의 큐비트 수를
BackendConfiguration의 큐비트 수는 이제 속성num_qubits. 이전에는n_qubits어트리뷰트를 통해서만 액세스할 수 있었습니다. -
두 가지 새로운 방법,
angles()과angles_and_phase()메서드 두 개가qiskit.quantum_info.OneQubitEulerDecomposer클래스에 추가되었습니다. 이러한 메서드는 유효성 검사 없이 관련 매개변수를 반환하며,OneQubitEulerDecomposer객체를 호출하면 유효성 검사를 통해 전체 합성을 수행합니다. -
RR분해 기준이 추가되었습니다qiskit.quantum_info.OneQubitEulerDecomposer에 임의의 2x2 유니티를 두 개의RGate회로로 분해하는 기준이 추가되었습니다. -
추상
BaseOperator클래스의 서브클래스인 객체에qargs을 설정하는 기능을 추가합니다. 이는op(qargs)(여기서op은 연산자 클래스)를 호출하여 수행되며, qargs 속성이 설정된 원본 객체의 얕은 복사본을 반환합니다. 이러한 객체를compose()또는dot()메서드와 함께 사용하면qargs메서드 kwarg가 사용되지 않을 때 qargs의 내부 값이 사용됩니다. 이를 통해 예를 들어 이진 연산자를 사용하여 하위 시스템을 구성할 수 있습니다:from qiskit.quantum_info import Operator init = Operator.from_label('III') x = Operator.from_label('X') h = Operator.from_label('H') init @ x([0]) @ h([1]) -
추가
qiskit.quantum_info.Clifford연산자 클래스를 양자_info 모듈에 추가합니다. 이 연산자는 클리포드 그룹의 N-큐비트 단일 연산자를 효율적으로 심플렉틱으로 표현한 것입니다. 이 클래스에는to_circuit()메서드를 포함하며, 최대 3큐비트에 대해 최소한의 CX 게이트로 클리포드 게이트의QuantumCircuit로 컴파일할 수 있습니다. 또한 N > 3 큐비트에 대한 일반적인 컴파일을 제공하지만 이 방법은 2 큐비트 게이트 수에서는 최적이 아닙니다. -
추가
qiskit.quantum_info.SparsePauliOp연산자 클래스를 추가합니다. 이것은 폴리 기저에서 희소하고 데이터 구조에qiskit.quantum_info.PauliTable및 복소수 계수의 벡터를 사용하는 N-큐비트 행렬을 효율적으로 표현한 것입니다.이 클래스는 다음과 같은 기능을 지원합니다
qiskit.quantum_info.Operator클래스와 거의 동일한 기능을 지원하므로SparsePauliOp객체를 텐서링, 구성, 스칼라 곱하기, 더하기, 빼기할 수 있습니다.널파이 배열이나
Operator객체는SparsePauliOp로 변환할 수 있습니다( :class:`~qiskit.quantum_info.SparsePauliOp.from_operator 메서드 사용).SparsePauliOp메서드를 사용하여 스파스 csr_matrix 또는 고밀도 Numpy 배열로 변환할 수 있습니다to_matrix메서드를 사용하거나Operator객체로 변환할 수 있습니다to_operator메서드를 사용하여 객체로 변환할 수 있습니다.A
SparsePauliOp는PauliTable구성 요소와 계수, 계수 및 폴리 문자열 레이블을 사용하여 반복할 수 있습니다label_iter()메서드, (밀도 또는 희소) 행렬 컴포넌트, (밀도 또는 희소) 행렬 컴포넌트는matrix_iter()메서드를 사용합니다. -
추가
qiskit.quantum_info.diamond_norm()함수를 추가하여 양자 채널의 다이아몬드 노름(완전 경계 트레이스 노름)을 계산할 수 있습니다.diamond_norm(chan1 - chan2)을 사용하여 두 양자 채널 사이의 거리를 계산하는 데 사용할 수 있습니다. -
새 클래스
qiskit.quantum_info.PauliTable가 추가되었습니다. 이것은 N-큐비트 폴리 연산자 목록의 효율적인 심플렉티브 표현입니다. 이 클래스의 몇 가지 기능은 다음과 같습니다:PauliTable객체를 구성할 수 있으며, 첫 번째 테이블의 각 요소와 두 번째 테이블의 각 요소 사이에 연산 (compose(),dot(),expand(),tensor())을 조합한PauliTable객체를 반환하는 텐서드(tensored) 객체를 반환할 수 있습니다.- 두 테이블을 추가하면 각 테이블의 용어가 목록으로 연결되는 역할을 합니다(
+). - 폴리 테이블은 사전적(텐서 곱) 순서 또는 폴리 가중치(
sort())로 정렬할 수 있습니다. - 중복 요소를 계산하고 삭제할 수 있습니다(
unique()). - PauliTable 은 기본 심플렉틱 부울 배열 표현, 폴리 문자열 레이블(
label_iter()) 또는 고밀도 Numpy 배열 또는 희소 CSR 행렬(matrix_iter())로 반복될 수 있습니다. - 폴리 테이블의 요소와 다른 폴리 (
commutes()) 또는 폴리 테이블 (commutes_with_all()) 간의 정류 확인
자세한 내용은
qiskit.quantum_info.PauliTable클래스 API 설명서를 참조하세요. -
qiskit.quantum_info.StabilizerTable클래스를 추가합니다. 이것은 폴리 테이블 배열과 함께 부울 위상 벡터를 포함하는qiskit.quantum_info.PauliTable클래스의 서브클래스입니다. 이것은 +1 또는 -1 계수가 있는 실제 폴리 연산자인 안정화 연산자 목록을 나타냅니다. 안정화 행렬은 실제 행렬이므로"Y"레이블 행렬은[[0, 1], [-1, 0]]으로 정의됩니다. 자세한 내용은 API 설명서를 참조하세요. -
추가
qiskit.quantum_info.pauli_basis()함수는 N-큐비트 폴리 베이스를qiskit.quantum_info.PauliTable객체로 반환합니다. 이 기준의 순서는 표준 사전적(텐서 곱) 순서 또는 비아이디 파울리 용어의 수(가중치)에 따라 지정할 수 있습니다. -
추가
qiskit.quantum_info.ScalarOp연산자 클래스를 추가하여 ID 연산자의 스칼라 배수를 나타냅니다. 이것은 임의의 차원 서브시스템에서 ID를 초기화하는 데 사용할 수 있으며, 암시적으로 다른BaseOperator서브클래스(예qiskit.quantum_info.Operator또는qiskit.quantum_info.SuperOp)로 구성되거나 추가될 때 암시적으로 변환됩니다.예시: ID 연산자
from qiskit.quantum_info import ScalarOp, Operator X = Operator.from_label('X') Z = Operator.from_label('Z') init = ScalarOp(2 ** 3) # 3-qubit identity op = init @ X([0]) @ Z([1]) @ X([2]) # Op XZX -
새로운 메서드
reshape()메서드가qiskit.quantum_innfo.Operator클래스에 추가되어, 재형성된 서브시스템 입력 또는 출력 치수를 가진 연산자 서브클래스의 얕은 복사본을 반환합니다. 모든 하위 시스템의 결합된 치수는 원래 연산자와 동일해야 하며, 그렇지 않으면 예외가 발생합니다. -
추가
qiskit.quantum_info.random_clifford()를 추가하여 임의의qiskit.quantum_info.Clifford연산자를 생성하는 기능을 추가합니다. -
추가
qiskit.quantum_info.random_quantum_channel()함수를 사용하여 고정 랭크의 무작위 양자 채널을 생성하는Choi-랭크가 고정된Stinespring표현에 고정된 순위를 가진 무작위 양자 채널을 생성하는 함수를 추가합니다. -
추가
qiskit.quantum_info.random_hermitian()를 사용하여 임의의 헤르미티안Operator. -
추가
qiskit.quantum_info.random_statevector()를 사용하여 무작위Statevector. -
무작위
qiskit.quantum_info.PauliTable생성을 위해qiskit.quantum_info.random_pauli_table()을 추가합니다. -
무작위
qiskit.quantum_info.StabilizerTable생성을 위해qiskit.quantum_info.random_stabilizer_table()을 추가합니다. -
num_qubitsqiskit.quantum_info.StateVector및qiskit.quantum_info.DensityMatrix클래스에 추가합니다. N-큐비트 상태의 경우 큐비트 수를 반환하고 비큐비트 상태의 경우None을 반환합니다. -
추가
to_dict()및to_dict()메서드를 변환하는qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix객체를 브라켓 표기법 사전으로 변환하는 메서드를 추가합니다.예
from qiskit.quantum_info import Statevector state = Statevector.from_label('+0') print(state.to_dict())from qiskit.quantum_info import DensityMatrix state = DensityMatrix.from_label('+0') print(state.to_dict()) -
추가
probabilities()및probabilities()에qiskit.quantum_info.Statevector와qiskit.quantum_info.DensityMatrix클래스를 추가하여 지정된 하위 시스템에 대한 계산 기준으로 측정 결과 확률 배열을 반환합니다.예
from qiskit.quantum_info import Statevector state = Statevector.from_label('+0') print(state.probabilities())from qiskit.quantum_info import DensityMatrix state = DensityMatrix.from_label('+0') print(state.probabilities()) -
추가
probabilities_dict()및probabilities_dict()에qiskit.quantum_info.Statevector와qiskit.quantum_info.DensityMatrix클래스는 지정된 하위 시스템에 대한 계산 기준으로 측정 결과 확률의 카운트 스타일 딕셔너리 배열을 반환합니다.from qiskit.quantum_info import Statevector state = Statevector.from_label('+0') print(state.probabilities_dict())from qiskit.quantum_info import DensityMatrix state = DensityMatrix.from_label('+0') print(state.probabilities_dict()) -
추가
sample_counts()및sample_memory()메서드에Statevector및DensityMatrix클래스를 추가하여 하위 시스템에서 측정 결과를 샘플링할 수 있습니다.예:
상태 벡터에서 샘플링하여 카운트 사전을 생성합니다
from qiskit.quantum_info import Statevector psi = Statevector.from_label('+0') shots = 1024 # Sample counts dictionary counts = psi.sample_counts(shots) print('Measure both:', counts) # Qubit-0 counts0 = psi.sample_counts(shots, [0]) print('Measure Qubit-0:', counts0) # Qubit-1 counts1 = psi.sample_counts(shots, [1]) print('Measure Qubit-1:', counts1)각 샘플에 대한 측정 결과 배열을 반환합니다
from qiskit.quantum_info import Statevector psi = Statevector.from_label('-1') shots = 10 # Sample memory mem = psi.sample_memory(shots) print('Measure both:', mem) # Qubit-0 mem0 = psi.sample_memory(shots, [0]) print('Measure Qubit-0:', mem0) # Qubit-1 mem1 = psi.sample_memory(shots, [1]) print('Measure Qubit-1:', mem1) -
메서드를 추가합니다
measure()메서드에qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix양자 상태 클래스에 메서드를 추가합니다. 이를 통해 지정된 하위 시스템에서 단일 측정 결과를 샘플링하고 상태 벡터를 측정 후 계산 기준 상태로 축소할 수 있습니다. 예를 들면 다음과 같습니다from qiskit.quantum_info import Statevector psi = Statevector.from_label('+1') # Measure both qubits outcome, psi_meas = psi.measure() print("measure([0, 1]) outcome:", outcome, "Post-measurement state:") print(psi_meas) # Measure qubit-1 only outcome, psi_meas = psi.measure([1]) print("measure([1]) outcome:", outcome, "Post-measurement state:") print(psi_meas) -
메서드를 추가합니다
reset()메서드에qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix양자 상태 클래스에 메서드를 추가합니다. 이렇게 하면 일부 또는 모든 하위 시스템을 상태로 재설정할 수 있습니다. 예를 들면 다음과 같습니다from qiskit.quantum_info import Statevector psi = Statevector.from_label('+1') # Reset both qubits psi_reset = psi.reset() print("Post reset state: ") print(psi_reset) # Reset qubit-1 only psi_reset = psi.reset([1]) print("Post reset([1]) state: ") print(psi_reset) -
단일 큐비트 게이트 전이를 시각화하는 새로운 시각화 기능
qiskit.visualization.visualize_transition()단일 큐비트 게이트 전환을 시각화할 수 있는 새로운 시각화 기능이 추가되었습니다. 단일 큐비트 회로를 받아 블로흐 구체에서 큐비트 상태 전환의 애니메이션을 반환합니다. 이 함수를 사용하려면 matplotlib 애니메이션 작성기에 대한 종속성을 설치하고 전역적으로 구성해야 합니다. 이에 대한 자세한 내용은 matplotlib 문서를 참조하세요. 그러나 기본값의 경우 FFmpeg가 설치되어 있는지 확인하는 것만으로도 이 기능을 사용할 수 있습니다.다음 게이트가 있는 회로를 지원합니다:
HGateXGateYGateZGateRXGateRYGateRZGateSGateSdgGateTGateTdgGateU1Gate
예를 들어,
from qiskit.visualization import visualize_transition from qiskit import * qc = QuantumCircuit(1) qc.h(0) qc.ry(70,0) qc.rx(90,0) qc.rz(120,0) visualize_transition(qc, fpg=20, spg=1, trace=True) -
execute()에 새로운 kwargschedule_circuit이 있습니다.schedule_circuit=True을 설정하면 회로의 스케줄을Schedule. 이를 통해 객체를 빌드하는 사용자는qiskit.circuit.QuantumCircuit객체를 빌드하는 사용자는as_late_as_possible및as_soon_as_possible메서드와 같은 사용자 정의 스케줄러 메서드를 사용할 수 있습니다. 예를 들어,job = execute(qc, backend, schedule_circuit=True, scheduling_method="as_late_as_possible") -
새로운 환경 변수
QISKIT_SUPPRESS_PACKAGING_WARNINGS를Y또는y로 설정하면qiskit-aer및qiskit-ibmq-provider가 임포트 시 설치되지 않았다는 경고가 표시되지 않습니다. 이 경고는 키스킷-테라만 실행하는 사용자(또는 키스킷-에어나 키스킷-ibmq-프로바이더가 아닌)에게 유용하며, 잠재적인 패키징 문제를 나타내는 것은 아니다. 사용자 설정 파일에서 경고를 비활성화하도록 설정한 경우에도 환경 변수를N또는n으로 설정하여 항상 경고가 활성화되도록 할 수 있습니다. -
새로운 사용자 설정 파일 옵션(
suppress_packaging_warnings)이 추가되었습니다. 사용자 설정 파일에서true으로 설정하면 다음과 같습니다:[default] suppress_packaging_warnings = true를 사용하면 가져오기 시점에
qiskit-aer및qiskit-ibmq-provider설치되지 않았다는 경고가 표시되지 않습니다. 이 경고는 키스킷-테라만 실행하는 사용자(또는 키스킷-에어나 키스킷-ibmq-프로바이더가 아닌)에게 유용하며, 잠재적인 패키징 문제를 나타내는 것은 아니다. 사용자 구성 파일이 경고를 비활성화하도록 설정되어 있는 경우QISKIT_SUPPRESS_PACKAGING_WARNINGS을N으로 설정하여 재정의할 수 있습니다n -
qiskit.compiler.transpile()에는layout_method와routing_method두 개의 새로운 kwarg가 있습니다. 이를 통해 제한된 아키텍처에서 회로의 배치 및 라우팅을 위한 특정 방법을 선택할 수 있습니다. 예를 들어transpile(circ, backend, layout_method='dense', routing_method='lookahead')가 실행됩니다
DenseLayout레이아웃 패스 및LookaheadSwap라우팅 패스를 실행합니다. -
펄스 명령어 작성 스타일이 크게 간소화되었습니다.
이전 스타일에서는
Command를 채널로 호출하여Instruction. 명령어와 명령어 모두 혼동할 수 있는 부분이 있었습니다. 이것이 이전 스타일이었습니다:sched += Delay(5)(DriveChannel(0)) sched += ShiftPhase(np.pi)(DriveChannel(0)) sched += SamplePulse([1.0, ...])(DriveChannel(0)) sched += Acquire(100)(AcquireChannel(0), MemorySlot(0))또는 이와 동등하게(덜 사용되지만):
sched += DelayInstruction(Delay(5), DriveChannel(0)) sched += ShiftPhaseInstruction(ShiftPhase(np.pi), DriveChannel(0)) sched += PulseInstruction(SamplePulse([1.0, ...]), DriveChannel(0)) sched += AcquireInstruction(Acquire(100), AcquireChannel(0), MemorySlot(0))이제 명령과 인스트럭션을 빌드하는 대신 각 명령이 인스트럭션으로 마이그레이션되었습니다:
sched += Delay(5, DriveChannel(0)) sched += ShiftPhase(np.pi, DriveChannel(0)) sched += Play(SamplePulse([1.0, ...]), DriveChannel(0)) sched += SetFrequency(5.5, DriveChannel(0)) # New instruction! sched += Acquire(100, AcquireChannel(0), MemorySlot(0)) -
이제 펄스 봉투와 채널을 설명하는
Play인스트럭션은 펄스 엔벨로프와 채널에 대한 설명을 받습니다.pulse_lib에 펄스 엔벨로프 설명이 하위 클래스화되어야 하는 새로운Pulse클래스가 있습니다.예를 들어,
Play(SamplePulse([0.1]*10), DriveChannel(0)) Play(ConstantPulse(duration=10, amp=0.1), DriveChannel(0))
업그레이드 주의사항
-
메서드
qiskit.dagcircuit.DAGNode메서드pop는 0.9.0 릴리스에서 더 이상 사용되지 않습니다. 이 방법을 사용하는 경우 Python 의del문 또는delattr()함수를 활용하여 동일한 작업을 수행할 수 있습니다. -
새로운 선택적 시각화 요구 사항인 파이그먼트가 추가되었습니다. Jupyter 위젯에서 OpenQASM 2.0 코드의 구문 강조를 제공하는 데 사용되며 선택적으로
qiskit.circuit.QuantumCircuit.qasm()메서드에 사용됩니다.%circuit_library_info위젯을 사용하기 전에pip install pygments또는pip install qiskit-terra[visualization]위젯을 설치해야 합니다qiskit.tools.jupyter또는formattedqasm()메서드를 사용해야 합니다. -
펄스
buffer옵션은qiskit.pulse.Channel및qiskit.pulse.Schedule은 Terra 0.11.0 에서 더 이상 사용되지 않으며 현재 제거되었습니다. 채널이나 스케줄에 지연을 추가하려면 지연이 있는 스케줄에 명시적으로 지정하세요:sched = Schedule() sched += Delay(5)(DriveChannel(0)) -
PulseChannelSpecterra 0.11.0 에서 더 이상 사용되지 않는 기능이 제거되었습니다. 대신 BackendConfiguration 을 사용하세요:config = backend.configuration() drive_chan_0 = config.drives(0) acq_chan_0 = config.acquires(0)또는
DriveChannel(index)와 같이 채널을 직접 참조할 수 있습니다. -
0.10.0
PulseChannel,,, 의 경우 대신 을 사용하세요.DriveChannelMeasureChannelControlChannelfrom qiskit.pulse.channels.pulse_channels import Xfrom qiskit.pulse.channels import X -
패스
qiskit.transpiler.passes.CSPLayout( 0.11.0 릴리스에서 도입됨)가 최적화 레벨 2 및 3을 위한 사전 설정 패스 관리자에 추가되었습니다. 레벨 2의 경우 통화 제한은 1,000회, 제한 시간은 10초입니다. 레벨 3의 경우, 통화 한도는 10,000건이며 제한 시간은 1분입니다.이제 패스가 사전 설정된 패스 관리자에 포함되었으므로 파이썬 제약 조건 패키지는 더 이상 선택적 종속성이 아니며 요구 사항 목록에 추가되었습니다.
-
이전에 런타임 구성을 설정하는 데 사용되었던
TranspileConfig클래스가qiskit.transpiler.PassManager의 런타임 구성을 설정하는 데 사용되었던qiskit.transpile.PassManagerConfig클래스가 제거되고 새로운 클래스로 대체되었습니다. 이 새로운 클래스는 구성에 필요한 정보만 포함하도록 구조화되었습니다PassManager. 이 클래스의 속성은 다음과 같습니다:initial_layoutbasis_gatescoupling_mapbackend_propertiesseed_transpiler
-
의
transpile_circuit기능이qiskit.transpiler함수가 제거되었습니다. 커스텀으로 회로를 트랜스파일하려면PassManager를 사용하여 회로를 변환하려면 이제run():class:~qiskit.transpiler.PassManager` 메서드를 사용해야 합니다. -
메서드의
QuantumCircuit메서드draw()및qiskit.visualization.circuit_drawer()함수는 더 이상 기본적으로 비주얼리제이션에 포함된 초기 상태를 포함하지 않습니다. 출력 시각화에서 초기 상태를 유지하려면initial_statekwarg를True으로 설정해야 합니다. 예를 들어, 달리기:from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='text')여기에는 더 이상 초기 상태가 포함되지 않습니다. 계속 유지하려면 실행하면 됩니다:
from qiskit import QuantumCircuit circuit = QuantumCircuit(2) circuit.measure_all() circuit.draw(output='text', initial_state=True) -
qiskit.compiler.transpile()(및 내부적으로transpile을 사용하는qiskit.execute.execute())는 이제pass_managerkwarg가 설정되고 인스턴스화된 객체에 이미 설정된 다른 kwarg에 값이 설정되면 오류를 발생시킵니다PassManager객체에 이미 설정되어 있는 경우 오류가 발생합니다. 이전에는 이러한 충돌하는 kwarg는 그냥 무시되고PassManager인스턴스의 값이 사용되었습니다. 예를 들어,from qiskit.circuit import QuantumCircuit from qiskit.transpiler.pass_manager_config import PassManagerConfig from qiskit.transpiler import preset_passmanagers from qiskit.compiler import transpile qc = QuantumCircuit(5) config = PassManagerConfig(basis_gates=['u3', 'cx']) pm = preset_passmanagers.level_0_pass_manager(config) transpile(qc, optimization_level=3, pass_manager=pm)는 이제 오류를 발생시키지만, 이 릴리스 이전에는
pm의 값이 그냥 자동으로 사용되고optimization_levelkwarg의 값은 무시되었습니다. 해당되는transpilekwarg는 다음과 같습니다:optimization_levelbasis_gatescoupling_mapseed_transpilerbackend_propertiesinitial_layoutlayout_methodrouting_methodbackend
-
그리고
Operator,Clifford,SparsePauliOp,PauliTable,StabilizerTable, 연산자 클래스에는call메서드가 추가되어 연산자에게 qargs를 할당하여 함께 사용할 수 있습니다compose(),dot(),evolve(), ``+``,-연산자와 함께 사용할 수 있습니다. -
클래스의 추가 메서드는 이제
qiskit.quantum_info.Operator클래스의 추가 메서드는 이제qargkwarg를 허용하여 다른 서브시스템의 신원을 가정하여 더 작은 연산자를 더 큰 연산자에 추가할 수 있습니다(qargs의compose()및dot()메서드와 동일). 이렇게 하면 컴포지션과 마찬가지로 호출 메서드를 사용하여 하위 시스템을 추가할 수 있습니다. 이 지원은 모든 BaseOperator 하위 클래스(ScalarOp,Operator,QuantumChannel).예를 들어,
from qiskit.quantum_info import Operator, ScalarOp ZZ = Operator.from_label('ZZ') # Initialize empty Hamiltonian n_qubits = 10 ham = ScalarOp(2 ** n_qubits, coeff=0) # Add 2-body nearest neighbour terms for j in range(n_qubits - 1): ham = ham + ZZ([j, j+1]) -
BaseOperator클래스가 업데이트되어 덧셈, 뺄셈, 스칼라 곱셈이 더 이상 추상적인 메서드가 아닙니다. 즉, 지원되지 않는 경우 더 이상 하위 클래스에서 구현할 필요가 없습니다. 메서드가 정의되지 않은 경우 기본 클래스는NotImplementedError을 발생시킵니다. -
이제
qiskit.quantum_info.random_density_matrix()함수는 이제 임의의DensityMatrix객체를 반환합니다. 이전 릴리스에서는 널 배열을 반환했습니다. -
그리고
qiskit.quantum_info.Statevector와qiskit.quantum_info.DensityMatrix클래스는 입력 배열이 이미 올바른 dtype인 경우 더 이상 입력 배열을 복사하지 않습니다. -
fastjsonschema가 종속성으로 추가됩니다. 이는
validate키워드 인수가True로 설정된 qobj 객체에서to_dict()메서드가 호출될 때 JSON 스키마에 대한 qobj 사전의 유효성을 훨씬 빠르게 검사하는 데 사용됩니다. -
의 qobj 구성 클래스는
qiskit.qobj의 qobj 구성 클래스는 더 이상 기본적으로 qobj jsonschema에 대해 유효성을 검사하지 않습니다. 여기에는 다음 클래스가 포함됩니다:qiskit.qobj.QasmQobjInstructionqiskit.qobj.QobjExperimentHeaderqiskit.qobj.QasmQobjExperimentConfigqiskit.qobj.QasmQobjExperimentqiskit.qobj.QasmQobjConfigqiskit.qobj.QobjHeaderqiskit.qobj.PulseQobjInstructionqiskit.qobj.PulseQobjExperimentConfigqiskit.qobj.PulseQobjExperimentqiskit.qobj.PulseQobjConfigqiskit.qobj.QobjMeasurementOptionqiskit.qobj.PulseLibraryItemqiskit.qobj.QasmQobjInstructionqiskit.qobj.QasmQobjExperimentConfigqiskit.qobj.QasmQobjExperimentqiskit.qobj.QasmQobjConfigqiskit.qobj.QasmQobjqiskit.qobj.PulseQobj
이 유효성 검사에 의존하고 있거나 qobj 스키마에 대해 유효성을 검사하려는 경우
validatekwarg를True으로 설정하여 수행할 수 있습니다to_dict()메서드를 호출하면 됩니다QasmQobj또는PulseQobj. 예를 들어,를 사용하여 출력 사전의 유효성을 검사합니다.
-
의 출력 사전
qiskit.qobj.QasmQobj.to_dict()및qiskit.qobj.PulseQobj.to_dict()의 출력 사전은 더 이상 IBMQ의 API에서 예상한 대로 직접 json 직렬화할 수 있는 형식이 아닙니다. 이러한 Qobj 객체는 현재 공급자/백엔드에 실험을 전달할 때 사용하는 형식이며, 사전 형식이 IBMQ API에 직접 전달되는 것은qiskit-ibmq-provider에는 어느 정도 유용했지만 다른 공급자에는 더 어렵게 만들었습니다. 특히 로컬 시뮬레이터를 래핑하는 제공업체의 경우 더욱 그렇습니다. 앞으로는 공급자 간에 전달되는 항목의 정의와 IBMQ API 요청 형식이 이전 버전과 호환되는 방식으로 더욱 분리되어 공급자 및 백엔드 작성의 부담을 덜어줄 것입니다.실제로 이러한 메서드의 출력과 이전 릴리즈의 유일한 기능적 차이는 복소수가
complex유형으로 표현되고, 정수 배열이 더 이상 목록으로 자동 변환되지 않는다는 점입니다. 이 릴리스 이후to_dict()출력에서json.dumps()을 직접 호출하던 경우 이러한 경우를 처리하려면 사용자 지정 json 인코더가 필요합니다. 예를 들어,import json from qiskit.circuit import ParameterExpression from qiskit import qobj my_qasm = qobj.QasmQobj( qobj_id='12345', header=qobj.QobjHeader(), config=qobj.QasmQobjConfig(shots=1024, memory_slots=2, max_credits=10), experiments=[ qobj.QasmQobjExperiment(instructions=[ qobj.QasmQobjInstruction(name='u1', qubits=[1], params=[0.4]), qobj.QasmQobjInstruction(name='u2', qubits=[1], params=[0.4, 0.2]) ]) ] ) qasm_dict = my_qasm.to_dict() class QobjEncoder(json.JSONEncoder): """A json encoder for pulse qobj""" def default(self, obj): # Convert numpy arrays: if hasattr(obj, 'tolist'): return obj.tolist() # Use Qobj complex json format: if isinstance(obj, complex): return (obj.real, obj.imag) if isinstance(obj, ParameterExpression): return float(obj) return json.JSONEncoder.default(self, obj) json_str = json.dumps(qasm_dict, cls=QobjEncoder)은 이전 릴리스에서
json.dumps(my_qasm.to_dict())과 동일한 방식으로 json 문자열을 생성합니다. -
CmdDef은 Terra 0.11.0 이후 더 이상 사용되지 않으며 제거되었습니다. 계속 사용하세요InstructionScheduleMap대신 -
의
cmds및cmd_qubits메서드는InstructionScheduleMap은 Terra 0.11.0 이후 더 이상 사용되지 않으며 제거되었습니다. 대신instructions및qubits_with_instruction을 사용하세요. -
PulseDefaults 는 테라 출시 이후
qubit_freq_est와meas_freq_est을 GHz가 아닌 Hz로 보고했습니다 0.11.0. 이 변경 사항을 알리는 경고가 제거되었습니다. -
이전에 더 이상 사용되지 않는( 0.11.0 릴리스에서) 전달에 대한 지원이 제거되었습니다
qiskit.circuit.Instructionsympy.Basic,sympy.Expr,qiskit.qasm.node.node.Node(QASM AST 노드) 및sympy.Matrix유형의 매개변수 전달에 대한 지원이 제거되었습니다. 인스트럭션 파라미터에 지원되는 유형은 다음과 같습니다:intfloatcomplexstrlistnp.ndarrayqiskit.circuit.ParameterExpression
-
다음 속성은
BackendConfiguration:dtdtmrep_time
모두 초 단위입니다. 출시 전 0.11.0,
dt및dtm의 단위는 나노초였습니다. 출시 전 0.12.0,rep_time의 단위는 마이크로초였습니다. 이러한 변경 사항을 사용자에게 알리는 경고는 이제BackendConfiguration에서 제거되었습니다. -
요구 사항 목록에 새로운 요구 사항인 retworkx가 추가되었습니다. Apache 2.0 라이선스가 있는 그래프 라이브러리로, 네트워크엑스와 유사한 API를 가지고 있으며 트랜스파일러의 일부로
qiskit.dagcircuit.DAGCircuit작업 속도를 크게 높이는 데 사용되고 있습니다. 키스킷 테라가 지원하는 모든 플랫폼에 대해 PyPI 에 바이너리가 게시되어 있지만, 미리 컴파일된 바이너리가 게시되지 않은 플랫폼을 사용하는 경우, sdist에서 pip 설치에 대한 지침은 retworkx 문서를 참조하세요.전환 과정에서 트랜스파일러 또는 DAGCircuit 클래스에 문제가 발생하면 환경 변수
USE_RETWORKX를N로 설정하여 이전 네트워크x 구현으로 다시 전환할 수 있습니다. 이 옵션은 0.14.0 릴리스에서 제거될 예정입니다.
지원 중단 노트
-
생성자에 데이터를 전달할 때
qiskit.dagcircuit.DAGNode의 생성자에 데이터를 사전 인수data_dict로 전달하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 이제 생성자에 필드를 kwarg로 전달해야 합니다. 예를 들어 이전 동작은 다음과 같습니다:from qiskit.dagcircuit import DAGNode data_dict = { 'type': 'in', 'name': 'q_0', } node = DAGNode(data_dict)가 있어야 합니다:
from qiskit.dagcircuit import DAGNode node = DAGNode(type='in', name='q_0') -
게이트 객체와 메서드의 이름이 보다 일관성 있게 업데이트되었습니다. 다음과 같은 사항이 변경되었습니다.
- 폴리 게이트는 모두 대문자 하나만 사용합니다 (
I,X,Y,Z) - 매개변수화된 폴리 게이트(즉, 회전)는 대문자
R(RX,RY,RZ)를 앞에 붙입니다 - 제어 버전은 대문자
C(CX,CRX,CCX)를 앞에 붙입니다 - 게이트는 대체 이름이 아닌 동작에 따라 이름이 지정됩니다(
CCX,Toffoli아님 )
이전 이름은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이전 및 새 클래스, 이름 속성 및 메서드가 표시된 변경 사항 목록입니다. 새 열이 비어 있으면 해당 열에는 변경 사항이 없습니다.
이전 클래스새 클래스이전 이름 속성새 이름 속성Oldqiskit.circuit.QuantumCircuit메서드Newqiskit.circuit.QuantumCircuit메서드ToffoliGateCCXGateccxccx()및toffoli()CrxGateCRXGatecrxcrx()CryGateCRYGatecrycry()CrzGateCRZGatecrzcrz()FredkinGateCSwapGatecswapcswap()및fredkin()Cu1GateCU1Gatecu1cu1()Cu3GateCU3Gatecu3cu3()CnotGateCXGatecxcx()및cnot()CyGateCYGatecycy()CzGateCZGateczcz()DiagGateDiagonalGatediagdiagonaldiag_gatediagonal()IdGateIGateidideni()및id()Isometryisoisometryiso()isometry()및iso()UCGUCGatemultiplexerucguc()UCRotUCPauliRotGateUCXUCRXGateucrotXucrxucxucrx()UCYUCRYGateucrotyucryucyucry()UCZUCRZGateucrotzucrzuczucrz() - 폴리 게이트는 모두 대문자 하나만 사용합니다 (
-
qiskit.pulse.pulse_lib에서square(),sawtooth(),triangle()함수에 대한 kwargperiod은 이제 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 이제freqkwarg를 사용하여 주파수를 설정해야 합니다. -
DAGCircuit.compose_back()및DAGCircuit.extend_back()메서드는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 동일한 기능을 제공하는qiskit.dagcircuit.DAGCircuit.compose()메서드를 사용해야 하며, 이는 동일한 기능을 제공하는 보다 일반적이고 유연한 방법입니다. -
클래스의 생성자의
callbackkwargqiskit.transpiler.PassManager클래스의 생성자는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 생성 시 객체 수준에서 설정하는 대신 이제 메서드의qiskit.transpiler.PassManager.run()메서드에 설정해야 합니다. -
n_qubits및numberofqubits키워드는 Terra에서 더 이상 사용되지 않으며num_qubits로 대체됩니다. 이전 이름은 향후 릴리스에서 제거될 예정입니다. 이 변경 사항의 영향을 받는 개체는 다음과 같습니다:클래스이전 메소드새 메소드QuantumCircuitn_qubitsnum_qubits()Paulinumberofqubitsnum_qubits()함수이전 인수새 인수random_circuit()n_qubitsnum_qubitsMSGaten_qubitnum_qubits -
qiskit.quantum_info.synthesis.euler_angles_1q함수는 이제 더 이상 사용되지 않습니다. 이 클래스는 다음과 같은 기능을 제공하는qiskit.quantum_info.OneQubitEulerDecomposer클래스를 통해 동일한 기능을 제공합니다:OneQubitEulerDecomposer().angles(mat) -
에 대한
pass_managerkwargqiskit.compiler.transpile()는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 앞으로 사용자 정의 객체로 회로를 트랜스파일하는 가장 선호되는 방법은PassManager객체의run()PassManager메서드를 사용하는 것입니다. -
qiskit.quantum_info.random_state()함수는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신qiskit.quantum_info.random_statevector()함수를 사용해야 합니다. -
add,subtract,multiply메소드의qiskit.quantum_info.Statevector및qiskit.quantum_info.DensityMatrix클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신+,-,*이진 연산자를 사용해야 합니다. -
qiskit.quantum_info.Statevector.to_counts(),qiskit.quantum_info.DensityMatrix.to_counts(),qiskit.quantum_info.counts.state_to_counts()를 더 이상 사용하지 않습니다. 이러한 함수는 클래스 메서드인qiskit.quantum_info.Statevector.probabilities_dict()와qiskit.quantum_info.DensityMatrix.probabilities_dict(). -
SamplePulse및ParametricPulses(예:Gaussian)는 이제Pulse에서 하위 클래스화되어qiskit.pulse.pulse_lib로 이동되었습니다. pulse.commands `를 통한 이전 경로는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. -
DelayInstruction는 더 이상 사용되지 않으며Delay로 대체되었습니다. 이 새로운 지침은 이전CommandDelay을 이어받았습니다. 마이그레이션 패턴은 다음과 같습니다:Delay(<duration>)(<channel>) -> Delay(<duration>, <channel>) DelayInstruction(Delay(<duration>), <channel>) -> Delay(<duration>, <channel>)사용 중단 기간이 종료될 때까지 채널에서 명령을 호출하는 이전
Delay구문도 계속 지원됩니다:Delay(<phase>)(<channel>)새로운
Delay인스트럭션은command속성을 지원하지 않습니다. -
FrameChange및FrameChangeInstruction은 더 이상 사용되지 않으며ShiftPhase. 변경 사항은 다음과 같습니다:FrameChange(<phase>)(<channel>) -> ShiftPhase(<phase>, <channel>) FrameChangeInstruction(FrameChange(<phase>), <channel>) -> ShiftPhase(<phase>, <channel>)사용 중단 기간이 종료될 때까지 채널에서 명령을 호출하는 이전 FrameChange 구문은 계속 지원됩니다:
ShiftPhase(<phase>)(<channel>) -
SamplePulse및ParametricPulse의call방식은 더 이상 사용되지 않습니다. 마이그레이션은 다음과 같습니다:Pulse(<*args>)(<channel>) -> Play(Pulse(*args), <channel>) -
AcquireInstruction은 더 이상 사용되지 않으며Acquire. 변경 사항은 다음과 같습니다:Acquire(<duration>)(<**channels>) -> Acquire(<duration>, <**channels>) AcquireInstruction(Acquire(<duration>), <**channels>) -> Acquire(<duration>, <**channels>)사용 중단 기간이 종료될 때까지 채널에서 명령을 호출하는 이전 Acquire 구문은 지원됩니다:
Acquire(<duration>)(<**channels>)
버그 수정
-
트랜스파일러 패스는
BarrierBeforeFinalMeasurements트랜스파일러 패스는 물리적 디바이스를 타깃팅할 때 사전 설정된 트랜스파일러 레벨에 포함되며, 이전에는 측정된 큐비트에만 배리어를 삽입했습니다. 일부 경우, 트랜스파일러가 측정 작업 후 스왑을 삽입하여 현재 장치에 대해 회로를 무효화할 수 있었습니다. 삽입된 배리어가 디바이스의 모든 큐비트에 걸쳐 있도록 패스가 업데이트되었습니다. 수정 #3937 -
인스턴스(확장자)를 다른 회로(확장자)로 확장할 때
QuantumCircuit인스턴스(확장 대상)를 다른 회로(확장)로 확장할 때, 회로는 참조를 통해 가져옵니다. 확장 대상과 확장자가 동일하므로 무한 루프로 이어지는 회로가 자체적으로 확장되는 경우. 이 버그는 확장자가 확장 대상과 동일한 개체인 경우 확장자를 복사하여 해결되었습니다. 수정 #3811 -
의 사례를 수정했습니다
qiskit.result.Result.get_counts()에서 실험이 이름 없이 스케줄로 초기화된 경우 만료에 대한 결과를 참조할 수 없던 문제를 수정했습니다. 수정 #2753 -
이전에는 회로를 분해하기 전에 회로의 객체를
Parameter객체를 회로를 분해하기 전에 새로운 파라미터 객체로 대체하면 대체된 값이 분해된 게이트에 올바르게 치환되지 않는 문제가 발생했습니다. 바인딩과 분해가 어떤 순서로든 발생할 수 있도록 이 문제가 해결되었습니다. -
Matplotlib 출력 백엔드의
qiskit.visualization.circuit_drawer()함수와qiskit.circuit.QuantumCircuit.draw()메서드 서랍의 출력 백엔드가CU1Gate게이트를 올바르게 렌더링하도록 수정되었습니다. 수정 #3684 -
의 버그
qiskit.circuit.QuantumCircuit.from_qasm_str()및qiskit.circuit.QuantumCircuit.from_qasm_file()의 버그가 수정되었습니다. 이제 이 QASM을 로드합니다:OPENQASM 2.0; include "qelib1.inc"; gate rinv q {sdg q; h q; sdg q; h q; } qreg q[1]; rinv q[0];는 다음 회로와 동일합니다:
rinv_q = QuantumRegister(1, name='q') rinv_gate = QuantumCircuit(rinv_q, name='rinv') rinv_gate.sdg(rinv_q) rinv_gate.h(rinv_q) rinv_gate.sdg(rinv_q) rinv_gate.h(rinv_q) rinv = rinv_gate.to_instruction() qr = QuantumRegister(1, name='q') expected = QuantumCircuit(qr, name='circuit') expected.append(rinv, [qr[0]])수정 #1566
-
양자 회로 인스트럭션에 파라미터 값을 나열하도록 허용합니다. 이는 Aer에서 기대값 스냅샷 매개변수(예: 의 경우
params = [[1.0, 'I'], [1.0, 'X']]])에 사용됩니다. -
이전에는 복합 게이트가 포함된 회로의 경우(
qiskit.circuit.QuantumCircuit.to_gate()또는qiskit.circuit.QuantumCircuit.to_instruction()또는 해당 변환기를 통해 생성된 회로)의 경우 회로를 두 번 이상 바인딩하려고 시도하면 트랜스파일 시 첫 번째 바인딩 값만 모든 회로에 적용되었습니다. 후속 바인딩에 제공된 값이 올바르게 존중되도록 이 문제가 해결되었습니다.
기타 참고사항
-
Qasm 및 pulse qobj 클래스:
QasmQobjInstructionQobjExperimentHeaderQasmQobjExperimentConfigQasmQobjExperimentQasmQobjConfigQobjHeaderPulseQobjInstructionPulseQobjExperimentConfigPulseQobjExperimentPulseQobjConfigQobjMeasurementOptionPulseLibraryItemQasmQobjInstructionQasmQobjExperimentConfigQasmQobjExperimentQasmQobjConfigQasmQobjPulseQobj
에서
qiskit.qobj에서 모두 마시멜로 라이브러리를 사용하지 않고 재구현되었습니다. 이러한 새로운 구현은 드롭인 대체용으로 설계되었지만(업그레이드 릴리스 노트에 명시된 경우를 제외하고) 마시멜로에서 상속된 특정 기능은 작동하지 않을 수 있습니다. 호환되지 않는 문제가 발견되면 문제를 제기해 주세요.
에어 0.5.0
추가됨
- 테라 대각선 게이트 지원 추가
- 매개변수화된 qobj에 대한 지원 추가
고정
- 라즈베리 파이에 리눅스용 포스트픽스 추가
- Qobj에서 널 배열 입력 처리하기
이그니스 0.3.0
추가됨
- API 문서
- CNOT-이원면체 무작위 벤치마킹
- 잡음이 많은 디바이스의 출력 인증을 위한 인증 모듈
- 단일 큐비트에 대한 펄스 보정
- 펄스 감별기
- 얽힘 확인 회로
- 단일 큐비트 게이트 세트용 게이트 세트 단층 촬영
- 무작위 벤치마킹 유틸리티 함수
calculate_1q_epg,calculate_2q_epg함수를 추가하여 클리포드당 오류에서 게이트당 1 및 2-큐비트 오류를 계산합니다 - 게이트당 오류에서 클리포드당 1 및 2-큐비트 오류를 계산하기 위한 무작위 벤치마킹 유틸리티 함수
calculate_1q_epc,calculate_2q_epc를 추가합니다
변경됨
- 단층 촬영에서 큐비트에 정수 레이블 지원
- 측정 오류 완화를 위한 정수 레이블 지원
더 이상 사용되지 않음
twoQ_clifford_error함수를 더 이상 사용하지 않습니다. 대신calculate_2q_epc을 사용하세요.- Python 3.5 지원은 더 이상 사용되지 않습니다. 해당 버전에 대한 업스트림 파이썬 커뮤니티의 지원 종료일인 2020년 9월 13일에 지원이 제거됩니다.
아쿠아 0.6.5
변경 없음
IBM Q 제공자 0.6.0
변경 없음