Skip to main content
IBM Quantum Platform

키스킷 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() 함수에 새로운 kwarg output_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.Operatorqiskit.quantum_info.Statevector 클래스에 새로운 메서드 equiv() 가 추가되었습니다. 이 메서드는 두 번째 Operator 객체 또는 Statevector 객체가 전역 단계까지 동등한지 확인하는 데 사용됩니다.

  • 사용자 구성 파일에는 몇 가지 새로운 옵션이 있습니다:

    • 이제 circuit_drawer 필드에 자동 값을 사용할 수 있습니다. circuit_drawer 필드의 값으로 설정하면 기본 서랍 백엔드를 사용할 수 있는 경우 mpl이 사용되며, 그렇지 않으면 텍스트 백엔드가 사용됩니다.
    • 새 필드 circuit_mpl_style 를 사용하여 matplotlib 회로 드로어에서 사용하는 기본 스타일을 설정할 수 있습니다. 이 필드의 유효한 값은 bwdefault 으로 각각 기본값을 흑백 또는 기본 색상 스타일로 설정할 수 있습니다.
    • 새 필드 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 객체를 반환합니다. OrderedDictdict 하위 클래스이므로 대부분의 사용 사례에서 호환됩니다. 그러나 유형 검사 및 기타 클래스 검사는 업데이트해야 할 수 있습니다.

  • DAGCircuit.width() 메서드는 이제 총 양자 비트 수와 클래식 비트를 반환합니다. 이전에는 양자 비트 수만 반환했습니다. 양자 비트 수만 필요한 경우 DAGCircuit.num_qubits() 을 대신 사용할 수 있습니다.

  • DAGCircuit.num_cbits() 기능이 제거되었습니다. 대신 DAGCircuit.num_clbits() 을 사용할 수 있습니다.

  • 개별 양자 비트와 기존 비트는 더 이상 (register, index) 튜플로 표현되지 않습니다. 이제 이들은 큐비트와 클레빗 클래스의 인스턴스입니다. 개별 비트를 다루는 경우 튜플 대신 새로운 클래스를 찾도록 사용 방법이나 유형 검사를 업데이트해야 합니다.

  • qiskit.compiler.transpile() 호출의 이전 기본 패스 매니저였던 qiskit.transpiler.preset_passmanagers.default_pass_managerqiskit.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 이 제거되었습니다. 기본 networkx multi_graph 개체에 대한 직접 액세스는 더 이상 지원되지 않습니다. 대신 DAGCircuit 클래스에서 제공하는 API를 사용해야 합니다.

  • 더 이상 사용되지 않는 예외 클래스 qiskit.qiskiterror.QiskitError 가 제거되었습니다. 대신 qiskit.exceptions.QiskitError 을 사용해야 합니다.

  • qiskit.transpiler.PassManager 생성자에서 부울 kwarg, ignore_requiresignore_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()
  • 이전에 사용되지 않던 seedconfig ( qiskit.compiler.assemble() )은 제거되었으며, 대신 seed_simulatorrun_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, circuitsqiskit.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.CouplingMap qiskit.transpiler.CouplingMap 대신 사용해야 합니다.
    • qiskit.mapper.Layout qiskit.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.CouplingErrorqiskit.mapper.exceptions.LayoutErrorqiskit.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_stateqiskit.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)
  • latexlatex_source 회로 드로어 백엔드에 대한 pylatexencpillow 종속성은 더 이상 요구 사항으로 나열되지 않습니다. 라텍스 회로 서랍을 사용하려는 경우 두 패키지가 모두 설치되어 있는지 확인하거나 설치 도구 추가 기능을 사용하여 키스킷 테라와 함께 설치하세요:

    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 또는 다른 패키지에서 발생하는 다른 경고는 그대로 유지된다.

지원 중단 노트

  • UCX 게이트는 더 이상 사용되지 않습니다. 코드에서 이러한 게이트를 사용하는 경우 u3cx 대신 및 을 사용하도록 업데이트해야 합니다. 예를 들어 회로 게이트 기능 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) 튜플과의 호환성을 위해). 대신 registerindex 속성을 사용해야 합니다.

  • 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 모듈은 더 이상 사용되지 않습니다. 제공하는 모든 기능:

    • union
    • flatten
    • shift
    • insert
    • append

    qiskit.pulse.Scheduleqiskit.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_layout kwarg 매개변수는 이제 회로를 트랜스파일링할 때 회로의 큐비트를 디바이스의 원하는 큐비트에 배치합니다.

  • 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 피터의 추측 값이 개선되었습니다

아쿠아 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, WeightedPauliOperatorTPBGroupedPauliOperator 클래스를 추가합니다.

  • evolution_instruction 함수를 추가하여 등록되지 않은 시간 진화 지시를 받습니다.

  • op_converter 모듈을 추가하여 다양한 유형의 운영자 전환을 담당하는 장소를 통합합니다.

  • Z2Symmetries 클래스를 추가하여 Z2 대칭 정보를 캡슐화하고 연산자 테이퍼링에 대한 헬퍼 메서드를 추가합니다.

  • 진폭 추정: 최대 가능성 후처리 및 신뢰 구간 계산이 추가되었습니다.

  • 최대 가능성 진폭 추정(MLAE): 최대 가능성 추정에 기반한 진폭 추정을 위한 새로운 알고리즘을 구현하여 필요한 큐비트 수와 회로 깊이를 줄였습니다.

  • 선형 및 다항식으로 제어되는 폴리 회전 회로가 (부분적으로) 추가되었습니다.

  • q_equation_of_motion 을 추가하여 분자의 여기 상태를 연구하고 두 개의 알고리즘을 추가하여 기준 상태를 준비합니다.

변경됨

  • 상대 위상 토폴리 게이트를 사용하여 중간 결과를 구축함으로써 mct'basic' 모드를 개선합니다.
  • 새로 도입된 키스킷 테라의 Qubit 클래스에 적응하세요.
  • QPE/IQPE 입력 Operator 개체를 수정하지 못하도록 합니다.
  • PyEDA 종속성이 제거되었으며 해당 오라클의 기본 로직 연산은 이제 SymPy 에서 처리됩니다.
  • Operator 클래스를 리팩터링하면 각 표현에는 자체 클래스 MatrixOperator, WeightedPauliOperatorTPBGroupedPauliOperator 이 있습니다.
  • evolution_instructionpower 은 CRZ 게이트의 세타에 직접 적용되었지만, 새 버전은 회로를 반복하여 전력을 구현합니다.
  • CircuitCache 는 기본적으로 꺼져 있으며, 이제 환경 변수를 통해 설정할 수 있습니다 QISKIT_AQUA_CIRCUIT_CACHE.

버그 수정

  • 1 값이 하나만 있는 진리 테이블에 대해 TruthTableOracle 가 잘못된 회로를 생성하는 버그입니다.
  • PyEDA의 불확정성으로 인해 발생한 버그입니다.
  • QPE/IQPE의 번역 및 스트레치 계산 관련 버그입니다.
  • 화학: 큐비트 수가 2의 거듭제곱이 아닐 때 브라비-키타에프 매핑이 수정되었습니다
  • 목록을 통해 QuantumInstance 에서 initial_layout 을 설정합니다.

제거됨

  • 일반 다중 제어 회전 게이트 mcu3 가 제거되고 다중 제어 회전 게이트 mcrx, mcry 로 대체됩니다 mcrz

더 이상 사용되지 않음

  • Operator 클래스는 더 이상 사용되지 않으며 MatrixOperator, WeightedPauliOperatorTPBGroupedPauliOperator 을 사용하는 것이 좋습니다.

IBM Q 제공자 0.3

변경 없음

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