Skip to main content
IBM Quantum Platform

키스킷 0.18 릴리즈 노트


0.18.3

테라 0.13.0

변경 없음

에어 0.5.1

업그레이드 주의사항

  • C++ 컨트롤러 클래스에서 트랜스퓔레이션 패스가 처리되는 방식을 변경하여 각 패스를 명시적으로 호출해야 합니다. 이를 통해 각 패스가 언제 호출되어야 하는지, 어떤 매개변수를 사용해야 하는지에 대해 더 많은 사용자 지정이 가능합니다. 특히 QasmController 시뮬레이션 방법에 따라 게이트 퓨전 최적화 패스에 대한 다양한 파라미터를 설정할 수 있습니다.
  • 내부 코드의 단위 변환을 처리하기 위해 디바이스 노이즈 모델 함수에서 사용자 지정 gate_lengths 을 지정하려면 qiskit.providers.aer.noise.NoiseModel.from_device()gate_length_units kwarg를 추가하세요.
  • 안정화 시뮬레이터 메서드 지원 게이트셋에 제어-Y("cy") 게이트를 추가합니다.
  • Aer의 백엔드에서는 이제 기본적으로 활성화되는 대신 테라의 입력 qobj 객체에 대한 jsonschema 유효성 검사가 선택 사항으로 설정됩니다. 백엔드 오브젝트에 대한 qiskit.providers.aer.QasmSimualtor.run() 메서드의 validate kwarg를 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 모듈에는 랜덤 연산자(클리포드 및 양자 채널 등)를 생성하고 양자 채널의 다이아몬드 규범을 계산하기 위한 몇 가지 새로운 함수가 포함되어 있으며, 업그레이드된 StatevectorDensityMatrix 클래스의 업그레이드, 측정 확률 계산과 샘플링 측정을 지원하는 클래스, 폴리 행렬의 심플렉틱 표현을 기반으로 하는 몇 가지 새로운 클래스가 포함되어 있습니다. 이러한 새로운 클래스에는 클리포드 연산자(Clifford), 폴리 기저에서 희박한 N 큐비트 행렬(SparsePauliOp), 폴리의 목록(PauliTable), 안정화기 목록(StabilizerTable) 등이 포함됩니다.

이번 릴리스에는 또한 키스킷 전반에 걸쳐 문서가 크게 개선되었으며, 여기에는 개선된 qiskit.circuit, qiskit.pulseqiskit.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_stateNone 인 경우 기본값은 모든 제어 큐비트가 여기되는 것을 조건으로 제어합니다.

  • 새로운 주피터 위젯인 %circuit_library_infoqiskit.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 객체가 모두 포함된 매개변수 딕셔너리를 허용합니다. 즉, 이 새로운 메서드를 사용하면 하나의 사전에서 플로트, 매개변수 또는 둘 다를 바인딩할 수 있습니다.

    또한 inplace kwarg를 사용하여 원래 회로를 선택적으로 수정하도록 지정할 수 있습니다. 기본적으로 이 값은 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.iSwapGateqiskit.extensions.DCXGate)와 해당 클래스들의 QuantumCircuit 메서드 iswap()dcx() 가 표준 확장에 추가되었습니다. 로컬로 서로 동등한 이러한 게이트는 특정 XY 상호작용을 구현하는 데 사용할 수 있습니다. 이러한 게이트에 대한 간략한 동기는 다음에서 확인할 수 있습니다: arxiv.org/abs/quant-ph/0209035

  • qiskit.providers.BaseJob 클래스에는 이제 작업이 최종 상태(예: DONE 또는 ERROR)에 도달할 때까지 작업 상태를 폴링하는 새로운 메서드 wait_for_final_state() 가 있습니다. 이 메서드는 또한 폴링 루프의 각 반복 중에 호출될 Python 콜러블을 받는 callback kwarg를 선택적으로 받습니다.

  • 패스의 search_widthsearch_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 SparsePauliOpPauliTable 구성 요소와 계수, 계수 및 폴리 문자열 레이블을 사용하여 반복할 수 있습니다 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_qubits qiskit.quantum_info.StateVectorqiskit.quantum_info.DensityMatrix 클래스에 추가합니다. N-큐비트 상태의 경우 큐비트 수를 반환하고 비큐비트 상태의 경우 None 을 반환합니다.

  • 추가 to_dict()to_dict() 메서드를 변환하는 qiskit.quantum_info.Statevectorqiskit.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.Statevectorqiskit.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.Statevectorqiskit.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() 메서드에 StatevectorDensityMatrix 클래스를 추가하여 하위 시스템에서 측정 결과를 샘플링할 수 있습니다.

    예:

    상태 벡터에서 샘플링하여 카운트 사전을 생성합니다

    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.Statevectorqiskit.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.Statevectorqiskit.quantum_info.DensityMatrix 양자 상태 클래스에 메서드를 추가합니다. 이렇게 하면 일부 또는 모든 하위 시스템을 0|0\rangle 상태로 재설정할 수 있습니다. 예를 들면 다음과 같습니다

    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가 설치되어 있는지 확인하는 것만으로도 이 기능을 사용할 수 있습니다.

    다음 게이트가 있는 회로를 지원합니다:

    • HGate
    • XGate
    • YGate
    • ZGate
    • RXGate
    • RYGate
    • RZGate
    • SGate
    • SdgGate
    • TGate
    • TdgGate
    • U1Gate

    예를 들어,

    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() 에 새로운 kwarg schedule_circuit 이 있습니다. schedule_circuit=True 을 설정하면 회로의 스케줄을 Schedule. 이를 통해 객체를 빌드하는 사용자는 qiskit.circuit.QuantumCircuit 객체를 빌드하는 사용자는 as_late_as_possibleas_soon_as_possible 메서드와 같은 사용자 정의 스케줄러 메서드를 사용할 수 있습니다. 예를 들어,

    job = execute(qc, backend, schedule_circuit=True,
                  scheduling_method="as_late_as_possible")
  • 새로운 환경 변수 QISKIT_SUPPRESS_PACKAGING_WARNINGSY 또는 y로 설정하면 qiskit-aerqiskit-ibmq-provider가 임포트 시 설치되지 않았다는 경고가 표시되지 않습니다. 이 경고는 키스킷-테라만 실행하는 사용자(또는 키스킷-에어나 키스킷-ibmq-프로바이더가 아닌)에게 유용하며, 잠재적인 패키징 문제를 나타내는 것은 아니다. 사용자 설정 파일에서 경고를 비활성화하도록 설정한 경우에도 환경 변수를 N 또는 n으로 설정하여 항상 경고가 활성화되도록 할 수 있습니다.

  • 새로운 사용자 설정 파일 옵션( suppress_packaging_warnings )이 추가되었습니다. 사용자 설정 파일에서 true 으로 설정하면 다음과 같습니다:

    [default]
    suppress_packaging_warnings = true

    를 사용하면 가져오기 시점에 qiskit-aerqiskit-ibmq-provider 설치되지 않았다는 경고가 표시되지 않습니다. 이 경고는 키스킷-테라만 실행하는 사용자(또는 키스킷-에어나 키스킷-ibmq-프로바이더가 아닌)에게 유용하며, 잠재적인 패키징 문제를 나타내는 것은 아니다. 사용자 구성 파일이 경고를 비활성화하도록 설정되어 있는 경우 QISKIT_SUPPRESS_PACKAGING_WARNINGSN 으로 설정하여 재정의할 수 있습니다 n

  • qiskit.compiler.transpile() 에는 layout_methodrouting_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 또는 formatted qasm() 메서드를 사용해야 합니다.

  • 펄스 buffer 옵션은 qiskit.pulse.Channelqiskit.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,,, 의 경우 대신 을 사용하세요. DriveChannel MeasureChannel ControlChannel from qiskit.pulse.channels.pulse_channels import X from 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_layout
    • basis_gates
    • coupling_map
    • backend_properties
    • seed_transpiler
  • transpile_circuit 기능이 qiskit.transpiler 함수가 제거되었습니다. 커스텀으로 회로를 트랜스파일하려면 PassManager 를 사용하여 회로를 변환하려면 이제 run():class:~qiskit.transpiler.PassManager` 메서드를 사용해야 합니다.

  • 메서드의 QuantumCircuit 메서드 draw()qiskit.visualization.circuit_drawer() 함수는 더 이상 기본적으로 비주얼리제이션에 포함된 초기 상태를 포함하지 않습니다. 출력 시각화에서 초기 상태를 유지하려면 initial_state kwarg를 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_manager kwarg가 설정되고 인스턴스화된 객체에 이미 설정된 다른 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_level kwarg의 값은 무시되었습니다. 해당되는 transpile kwarg는 다음과 같습니다:

    • optimization_level
    • basis_gates
    • coupling_map
    • seed_transpiler
    • backend_properties
    • initial_layout
    • layout_method
    • routing_method
    • backend
  • 그리고 Operator, Clifford, SparsePauliOp, PauliTable, StabilizerTable, 연산자 클래스에는 call 메서드가 추가되어 연산자에게 qargs를 할당하여 함께 사용할 수 있습니다 compose(), dot(), evolve(), ``+``, - 연산자와 함께 사용할 수 있습니다.

  • 클래스의 추가 메서드는 이제 qiskit.quantum_info.Operator클래스의 추가 메서드는 이제 qarg kwarg를 허용하여 다른 서브시스템의 신원을 가정하여 더 작은 연산자를 더 큰 연산자에 추가할 수 있습니다( qargscompose()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.Statevectorqiskit.quantum_info.DensityMatrix 클래스는 입력 배열이 이미 올바른 dtype인 경우 더 이상 입력 배열을 복사하지 않습니다.

  • fastjsonschema가 종속성으로 추가됩니다. 이는 validate 키워드 인수가 True 로 설정된 qobj 객체에서 to_dict() 메서드가 호출될 때 JSON 스키마에 대한 qobj 사전의 유효성을 훨씬 빠르게 검사하는 데 사용됩니다.

  • 의 qobj 구성 클래스는 qiskit.qobj 의 qobj 구성 클래스는 더 이상 기본적으로 qobj jsonschema에 대해 유효성을 검사하지 않습니다. 여기에는 다음 클래스가 포함됩니다:

    이 유효성 검사에 의존하고 있거나 qobj 스키마에 대해 유효성을 검사하려는 경우 validate kwarg를 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 대신

  • cmdscmd_qubits 메서드는 InstructionScheduleMap 은 Terra 0.11.0 이후 더 이상 사용되지 않으며 제거되었습니다. 대신 instructionsqubits_with_instruction 을 사용하세요.

  • PulseDefaults 는 테라 출시 이후 qubit_freq_estmeas_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 유형의 매개변수 전달에 대한 지원이 제거되었습니다. 인스트럭션 파라미터에 지원되는 유형은 다음과 같습니다:

  • 다음 속성은 BackendConfiguration:

    • dt
    • dtm
    • rep_time

    모두 초 단위입니다. 출시 전 0.11.0, dtdtm 의 단위는 나노초였습니다. 출시 전 0.12.0, rep_time 의 단위는 마이크로초였습니다. 이러한 변경 사항을 사용자에게 알리는 경고는 이제 BackendConfiguration 에서 제거되었습니다.

  • 요구 사항 목록에 새로운 요구 사항인 retworkx가 추가되었습니다. Apache 2.0 라이선스가 있는 그래프 라이브러리로, 네트워크엑스와 유사한 API를 가지고 있으며 트랜스파일러의 일부로 qiskit.dagcircuit.DAGCircuit 작업 속도를 크게 높이는 데 사용되고 있습니다. 키스킷 테라가 지원하는 모든 플랫폼에 대해 PyPI 에 바이너리가 게시되어 있지만, 미리 컴파일된 바이너리가 게시되지 않은 플랫폼을 사용하는 경우, sdist에서 pip 설치에 대한 지침은 retworkx 문서를 참조하세요.

    전환 과정에서 트랜스파일러 또는 DAGCircuit 클래스에 문제가 발생하면 환경 변수 USE_RETWORKXN 로 설정하여 이전 네트워크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 아님 )

    이전 이름은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이전 및 새 클래스, 이름 속성 및 메서드가 표시된 변경 사항 목록입니다. 새 열이 비어 있으면 해당 열에는 변경 사항이 없습니다.

    이전 클래스
    새 클래스
    이전 이름 속성
    새 이름 속성
    ToffoliGateCCXGateccxccx()toffoli()
    CrxGateCRXGatecrxcrx()
    CryGateCRYGatecrycry()
    CrzGateCRZGatecrzcrz()
    FredkinGateCSwapGatecswapcswap()fredkin()
    Cu1GateCU1Gatecu1cu1()
    Cu3GateCU3Gatecu3cu3()
    CnotGateCXGatecxcx()cnot()
    CyGateCYGatecycy()
    CzGateCZGateczcz()
    DiagGateDiagonalGatediagdiagonaldiag_gatediagonal()
    IdGateIGateidideni()id()
    Isometryisoisometryiso()isometry()iso()
    UCGUCGatemultiplexerucguc()
    UCRotUCPauliRotGate
    UCXUCRXGateucrotXucrxucxucrx()
    UCYUCRYGateucrotyucryucyucry()
    UCZUCRZGateucrotzucrzuczucrz()
  • qiskit.pulse.pulse_lib 에서 square(), sawtooth(), triangle() 함수에 대한 kwarg period 은 이제 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 이제 freq kwarg를 사용하여 주파수를 설정해야 합니다.

  • DAGCircuit.compose_back()DAGCircuit.extend_back() 메서드는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 동일한 기능을 제공하는 qiskit.dagcircuit.DAGCircuit.compose() 메서드를 사용해야 하며, 이는 동일한 기능을 제공하는 보다 일반적이고 유연한 방법입니다.

  • 클래스의 생성자의 callback kwarg qiskit.transpiler.PassManager 클래스의 생성자는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 생성 시 객체 수준에서 설정하는 대신 이제 메서드의 qiskit.transpiler.PassManager.run() 메서드에 설정해야 합니다.

  • n_qubitsnumberofqubits 키워드는 Terra에서 더 이상 사용되지 않으며 num_qubits 로 대체됩니다. 이전 이름은 향후 릴리스에서 제거될 예정입니다. 이 변경 사항의 영향을 받는 개체는 다음과 같습니다:

    클래스
    이전 메소드
    새 메소드
    QuantumCircuitn_qubitsnum_qubits()
    Paulinumberofqubitsnum_qubits()
    함수
    이전 인수
    새 인수
    random_circuit()n_qubitsnum_qubits
    MSGaten_qubitnum_qubits
  • qiskit.quantum_info.synthesis.euler_angles_1q 함수는 이제 더 이상 사용되지 않습니다. 이 클래스는 다음과 같은 기능을 제공하는 qiskit.quantum_info.OneQubitEulerDecomposer 클래스를 통해 동일한 기능을 제공합니다:

    OneQubitEulerDecomposer().angles(mat)
  • 에 대한 pass_manager kwarg qiskit.compiler.transpile() 는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 앞으로 사용자 정의 객체로 회로를 트랜스파일하는 가장 선호되는 방법은 PassManager 객체의 run()PassManager 메서드를 사용하는 것입니다.

  • qiskit.quantum_info.random_state() 함수는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 qiskit.quantum_info.random_statevector() 함수를 사용해야 합니다.

  • add, subtract, multiply 메소드의 qiskit.quantum_info.Statevectorqiskit.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().

  • SamplePulseParametricPulse s(예: Gaussian)는 이제 Pulse에서 하위 클래스화되어 qiskit.pulse.pulse_lib로 이동되었습니다. pulse.commands `를 통한 이전 경로는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다.

  • DelayInstruction 는 더 이상 사용되지 않으며 Delay 로 대체되었습니다. 이 새로운 지침은 이전 Command Delay 을 이어받았습니다. 마이그레이션 패턴은 다음과 같습니다:

    Delay(<duration>)(<channel>) -> Delay(<duration>, <channel>)
    DelayInstruction(Delay(<duration>), <channel>)
        -> Delay(<duration>, <channel>)

    사용 중단 기간이 종료될 때까지 채널에서 명령을 호출하는 이전 Delay 구문도 계속 지원됩니다:

    Delay(<phase>)(<channel>)

    새로운 Delay 인스트럭션은 command 속성을 지원하지 않습니다.

  • FrameChangeFrameChangeInstruction 은 더 이상 사용되지 않으며 ShiftPhase. 변경 사항은 다음과 같습니다:

    FrameChange(<phase>)(<channel>) -> ShiftPhase(<phase>, <channel>)
    FrameChangeInstruction(FrameChange(<phase>), <channel>)
        -> ShiftPhase(<phase>, <channel>)

    사용 중단 기간이 종료될 때까지 채널에서 명령을 호출하는 이전 FrameChange 구문은 계속 지원됩니다:

    ShiftPhase(<phase>)(<channel>)
  • SamplePulseParametricPulsecall 방식은 더 이상 사용되지 않습니다. 마이그레이션은 다음과 같습니다:

    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에서 기대값 스냅샷 매개변수(예: I+X\langle I + X\rangle 의 경우 params = [[1.0, 'I'], [1.0, 'X']]] )에 사용됩니다.

  • 이전에는 복합 게이트가 포함된 회로의 경우( qiskit.circuit.QuantumCircuit.to_gate() 또는 qiskit.circuit.QuantumCircuit.to_instruction() 또는 해당 변환기를 통해 생성된 회로)의 경우 회로를 두 번 이상 바인딩하려고 시도하면 트랜스파일 시 첫 번째 바인딩 값만 모든 회로에 적용되었습니다. 후속 바인딩에 제공된 값이 올바르게 존중되도록 이 문제가 해결되었습니다.

기타 참고사항

에어 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

변경 없음

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.