Skip to main content
IBM Quantum Platform

키스킷 0.25 릴리즈 노트


0.25.4

테라 0.17.2

Prelude

0.17.1 릴리스의 몇 가지 문제를 수정하는 버그 수정 릴리스입니다. 가장 중요한 것은 이 릴리스가 백엔드 기반에서 실행될 때 QuantumInstance 클래스를 기반으로 하는 백엔드에서 실행할 때 BackendV1 추상 클래스. 이렇게 하면 기반이 되는 모든 알고리즘과 애플리케이션이 qiskit.algorithms 또는 qiskit.opflow 에서 빌드된 모든 알고리즘과 애플리케이션을 수정합니다.

버그 수정

  • 트랜스파일러 패스 관련 문제를 수정했습니다 BasisTranslator 트랜스파일러 패스가 경우에 따라 이미 타깃에 있는 게이트를 변환하는 문제를 수정했습니다. 이렇게 하면 실행 시간이 길어지고 최적의 결과가 나오지 않을 수 있습니다. 수정 #6085
  • callback kwarg를 통해 콜백 함수로 옵티마이저를 초기화할 때 오류가 발생할 수 있는 SPSA 문제를 수정했습니다.
  • 의 문제를 수정했습니다 qiskit.quantum_info.Statevector.expectation_value()qiskit.quantum_info.DensityMatrix.expectation_value`methods where the ``qargs`() kwarg가 운영자가 Pauli 또는 SparsePauliOp 연산자 객체인 경우 무시되었습니다. 수정 #6303
  • 메서드의 문제를 수정했습니다 qiskit.quantum_info.Pauli.evolve() 메서드에서 진화할 때 잘못된 폴리가 반환될 수 있었던 문제를 수정했습니다 CZGate, CYGate또는 SwapGate 게이트로 진화할 때 잘못된 폴리가 반환되던 문제를 고쳤습니다.
  • 인덱스 오류로 인해 이전에 모든 0 상태에 대해 최대 하나의 항목만 있던 qiskit.opflow.SparseVectorStateFn.to_dict_fn() 메서드의 문제를 수정했습니다.
  • 단일 요소의 희소 벡터 비교 대신 True 또는 False 를 올바르게 반환하도록 qiskit.opflow.SparseVectorStateFn.equals() 메서드의 문제를 수정했습니다.
  • 의 문제를 수정합니다 StatevectorDensityMatrix 확률 메서드 qiskit.quantum_info.Statevector.probabilities(), qiskit.quantum_info.Statevector.probabilities_dict(), qiskit.quantum_info.DensityMatrix.probabilities(), qiskit.quantum_info.DensityMatrix.probabilities_dict() 의 특정 값에 대해 반환된 확률이 잘못된 순서를 가질 수 있는 경우 qargs kwarg. 수정 #6320
  • TaperedPauliSumOp 클래스가 곱셈을 지원하지 않는 문제를 수정했습니다 ParameterExpression 객체와의 곱셈을 지원하지 않고, 또한 필요한 assign_parameters() 메서드가 없는 문제를 수정했습니다 ParameterExpression 객체로 작업하는 데 필요한 메서드가 없는 문제를 수정했습니다. 수정 #6127
  • 백엔드를 기반으로 실행되는 QuantumInstance 클래스의 호환성을 수정했습니다 BackendV1 추상 클래스를 기반으로 하는 백엔드에서 실행할 때 클래스의 호환성을 수정했습니다. 수정 #6280

에어 0.8.2

변경 없음

이그니스 0.6.0

변경 없음

아쿠아 0.9.1

변경 없음

IBM Q 제공자 0.12.3

변경 없음


0.25.3

테라 0.17.1

변경 없음

에어 0.8.2

알려진 문제점

  • 특정 폴리 연산자 구성 요소에 대해 잘못된 값을 반환하여 QasmSimulatorAerSimulator 의 확장_stabilizer 메서드에 대해 SaveExpectationValueSaveExpectationValueVariance 이 비활성화되었습니다. 자세한 내용과 예시는 #1227 <https://github.com/Qiskit/qiskit-aer/issues/1227> 을 참조하세요.

버그 수정

  • basis_gates 구성 속성의 설정 방식과 관련된 성능 문제를 수정했습니다. 이전에는 백엔드 클래스에 의도하지 않은 부작용이 발생하여 시뮬레이션 런타임이 점점 더 늘어날 수 있었습니다. 자세한 내용과 예시는 #1229 <https://github.com/Qiskit/qiskit-aer/issues/1229> 를 참조하세요.
  • 대상 큐비트와 제어 큐비트의 순서가 키스킷 명령어의 순서와 뒤바뀌는 "multiplexer" 시뮬레이터 명령어의 버그가 수정되었습니다.
  • 0.8.0 에 도입된 버그를 수정하여 GPU 시뮬레이션이 GPU 메모리 외에 불필요한 호스트 메모리를 할당하던 문제를 해결했습니다.
  • QasmSimulatorAerSimulatorstabilizer 시뮬레이터 메서드에서 save_expectation_valuesnapshot_expectation_value 의 기대값이 특정 Y 폴리에 대해 잘못된 부호를 가질 수 있는 버그를 수정합니다.

이그니스 0.6.0

변경 없음

아쿠아 0.9.1

변경 없음

IBM Q 제공자 0.12.3

변경 없음


0.25.2

테라 0.17.1

변경 없음

에어 0.8.1

변경 없음

이그니스 0.6.0

변경 없음

아쿠아 0.9.1

변경 없음

IBM Q 제공자 0.12.3

기타 참고사항

  • qiskit.providers.ibmq.experiment.analysis_result.AnalysisResult fit 속성은 이제 선택 사항입니다.

0.25.1

테라 0.17.1

Prelude

0.17.0 릴리스의 몇 가지 문제를 수정하는 버그 수정 릴리스입니다. 가장 중요한 것은 이번 릴리스에서 실제로 빌드할 수 없고 미리 컴파일된 바이너리가 없는 플랫폼에서 설치를 차단하던 0.17.0 릴리스에 대해 잘못 구성된 sdist 패키지를 수정한다는 점입니다.

버그 수정

  • 속성이 출력에 보존되지 않는 문제를 수정했습니다 global_phase 속성이 출력에 보존되지 않는 문제를 수정했습니다 QuantumCircuit 객체에 속성이 보존되지 않는 문제를 수정했습니다 qiskit.circuit.QuantumCircuit.reverse_bits() 메서드가 호출되었을 때 속성이 출력 객체에 보존되지 않는 문제를 수정했습니다. 예를 들어,

    import math
    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(3, 2, global_phase=math.pi)
    qc.h(0)
    qc.s(1)
    qc.cx(0, 1)
    qc.measure(0, 1)
    qc.x(0)
    qc.y(1)
    
    reversed = qc.reverse_bits()
    print(reversed.global_phase)

    이제 π\pi 이 올바르게 인쇄됩니다.

  • 트랜스파일러 패스가 Unroller 가 정의에 하나의 규칙이 있는 중첩된 명령어의 경우 전역 위상을 보존하지 않는 문제를 수정했습니다. 수정 #6134

  • parameter 객체의 속성이 ControlledGateUnitaryGate 속성이 UnitaryGate 객체의 단일 행렬로 설정되지 않는 문제를 수정했습니다. 이전에는 control() 에서 ControlledGateparameter 속성을 UnitaryGate 행렬의 제어 버전으로 설정했습니다. 이렇게 하면 기본 UnitaryGate 객체의 parameter 가 수정되고 이후 호출은 inverse() 는 이중 제어된 UnitaryGate 의 역을 생성했습니다. 수정 #5750

  • 사전 설정 패스 관리자 관련 문제 수정 level_0_pass_managerlevel_1_pass_manager ( optimization_level 0 및 1의 경우 transpile())가 경우에 따라 요청된 기준이 아닌 회로를 생성하는 문제를 수정했습니다.

  • 학습 속도와 교란을 자동으로 보정하는 SPSA 를 사용하면 학습 속도와 섭동이 자동으로 보정되는 버그 수정 (예 learning_rateperturbation )는 이니셜라이저에서 None )는 향후 모든 최적화를 위한 캘리브레이션을 저장합니다. 대신 새로운 목적 함수마다 보정을 수행해야 합니다.

에어 0.8.1

버그 수정

  • 크라우스 오류와 함께 노이즈 시뮬레이션을 실행할 때 AerSimulatorQasmSimulator 시뮬레이터의 matrix_product_state 메서드 사용 관련 문제를 수정했습니다. 이전에는 행렬 곱 상태 시뮬레이션 방식이 크라우스 행렬을 적용한 후 인접 큐비트에 변경 사항을 전파하지 않았습니다. 시뮬레이션 결과가 올바르게 출력되도록 이 문제가 수정되었습니다. 11841205 수정
  • qiskit.extensions.Initialize 명령어가 첫 번째 회로 명령어이거나 모든 큐비트에 적용되어 결정론적일 때에도 AerSimulatorQasmSimulator 시뮬레이터의 statevectormatrix_product_state 시뮬레이션 방법에 대한 측정 샘플링 최적화를 비활성화하던 문제를 수정했습니다. 수정 #1210
  • AerSimulatorQasmSimulator 시뮬레이터의 extended_stabilizer 시뮬레이션 메서드와 함께 사용할 때 정규화되지 않은 상태 벡터를 반환하는 SaveStatevectorSnapshotStatevector 명령어 관련 문제를 수정했습니다. 수정 #1196
  • 이제 matrix_product_state 시뮬레이션 메서드에 이전에 없던 상태 설정 명령( qiskit.providers.aer.library.SetMatrixProductState)이 지원되어 회로에서 시뮬레이션의 상태를 설정할 수 있습니다.

이그니스 0.6.0

변경 없음

아쿠아 0.9.1

IBM Q 제공자 0.12.2

변경 없음


0.25.0

이번 릴리스에서는 키스킷 아쿠아 프로젝트가 공식적으로 지원되지 않습니다. 따라서 향후 릴리스에서 qiskit-aqua 패키지는 키스킷 메타패키지에서 제거될 것이며, 이는 향후 릴리스에서 pip install qiskit 에 더 이상 qiskit-aqua 이 포함되지 않음을 의미합니다. 키스킷-아쿠아에서 제공하는 애플리케이션 모듈이 여러 개의 새로운 패키지로 분리되었습니다: qiskit-optimization, qiskit-nature, qiskit-machine-learning, 그리고 qiskit-finance 이다. 이러한 패키지는 표준 pip 설치 명령(예: pip install qiskit-nature)을 통해 자체적으로 설치할 수 있습니다 또는 나머지 키스킷 메타패키지를 선택적 추가 기능으로 제공(예 pip install 'qiskit[finance,optimization]' 또는 pip install 'qiskit[all]' 핵심 알고리즘과 연산자 흐름은 이제 qiskit-terra의 일부로 존재합니다 qiskit.algorithmsqiskit.opflow. 기존 아쿠아 사용법에 따라 애플리케이션 패키지를 사용하거나 키스킷 테라의 새로운 모듈을 사용해야 합니다. 키스킷 아쿠아에서 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.

테라 0.17.0

Prelude

키스킷 테라 0.17.0 에는 많은 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 주요 새로운 기능은 qiskit.algorithmsqiskit.opflow 모듈을 도입한 것입니다. qiskit.aqua 프로젝트에서 마이그레이션하여 적용했습니다.

새 기능

  • qiskit.pulse.call() 함수는 이제 매개변수화된 서브루틴과 함께 Parameter 객체를 매개변수화된 서브루틴과 함께 받을 수 있습니다. 이렇게 하면 각 서브루틴 호출마다 다른 값을 Parameter 객체에 다른 값을 할당할 수 있습니다.

    예를 들면 다음과 같습니다.

    from qiskit.circuit import Parameter
    from qiskit import pulse
    
    amp = Parameter('amp')
    
    with pulse.build() as subroutine:
        pulse.play(pulse.Gaussian(160, amp, 40), DriveChannel(0))
    
    with pulse.build() as main_prog:
        pulse.call(subroutine, amp=0.1)
        pulse.call(subroutine, amp=0.3)
  • 에는 qiskit.providers.models.QasmBackendConfiguration 에는 선택적으로 백엔드 프로세서에 대한 정보를 제공하는 데 사용할 수 있는 새로운 필드 processor_type 가 있습니다: {"family": <str>, "revision": <str>, segment: <str>}. 예: {"family": "Canary", "revision": "1.0", segment: "A"}.

  • qiskit.pulse.Schedule, qiskit.pulse.Instruction, qiskit.pulse.Channel 클래스에는 이제 parameter 프로퍼티가 있으며, 이 프로퍼티는 객체에 사용된 모든 Parameter 객체와 객체에 매개변수가 사용된 경우 is_parameterized() 메서드가 있으며, 객체에 매개변수가 사용된 경우 True 을 반환합니다.

    예를 들어,

    from qiskit.circuit import Parameter
    from qiskit import pulse
    
    shift = Parameter('alpha')
    
    schedule = pulse.Schedule()
    schedule += pulse.SetFrequency(shift, pulse.DriveChannel(0))
    
    assert schedule.is_parameterized() == True
    print(schedule.parameters)
  • 추가 PiecewiseChebyshevqiskit.circuit.library 에 입력 함수의 부분 체비셰프 근사치를 구현하기 위해 추가되었습니다. 주어진 함수 f(x)f(x) 와 차수 dd 에 대해 이 클래스는 주어진 간격으로 nn 큐비트에서 f(x)f(x) 로의 부분 다항식 체비셰프 근사치를 구현합니다. 근사치의 모든 다항식은 차수 dd 입니다.

    예를 들어,

    import numpy as np
    from qiskit import QuantumCircuit
    from qiskit.circuit.library.arithmetic.piecewise_chebyshev import PiecewiseChebyshev
    f_x, degree, breakpoints, num_state_qubits = lambda x: np.arcsin(1 / x), 2, [2, 4], 2
    pw_approximation = PiecewiseChebyshev(f_x, degree, breakpoints, num_state_qubits)
    pw_approximation._build()
    qc = QuantumCircuit(pw_approximation.num_qubits)
    qc.h(list(range(num_state_qubits)))
    qc.append(pw_approximation.to_instruction(), qc.qubits)
    qc.draw(output='mpl')
  • 클래스는 이제 BackendProperties 클래스에는 이제 readout_length() 메서드가 추가되어 주어진 큐비트의 읽기 길이 [초를] 반환합니다.

  • 새로운 클래스 ScheduleBlock클래스가 qiskit.pulse 모듈에 추가되었습니다. 이 클래스는 펄스 프로그램의 새로운 표현을 제공합니다. 이 표현은 펄스 빌더 구문에 가장 적합하며 상대적인 명령어 순서를 기반으로 합니다.

    이 표현은 각 명령어에 대해 시작 시간 t0 을 지정하는 대신 alignment_context 을 사용합니다. 인스트럭션 시작 시간은 지정된 변환과 인스트럭션의 상대적 위치에 따라 암시적으로 할당됩니다.

    ScheduleBlock 는 지연 명령어 스케줄링을 허용하므로 명령어 지속 시간에 임의의 매개변수를 할당할 수 있습니다.

    예를 들어,

    from qiskit.pulse import ScheduleBlock, DriveChannel, Gaussian
    from qiskit.pulse.instructions import Play, Call
    from qiskit.pulse.transforms import AlignRight
    from qiskit.circuit import Parameter
    
    dur = Parameter('rabi_duration')
    
    block = ScheduleBlock(alignment_context=AlignRight())
    block += Play(Gaussian(dur, 0.1, dur/4), DriveChannel(0))
    block += Call(measure_sched)  # subroutine defined elsewhere

    이 코드는 가우스 펄스의 지속 시간을 스캔한 후 measure_sched, 즉 라비 실험을 측정하는 실험을 정의합니다. 대상 기간 값을 지정하여 스캔한 모든 기간에 대해 block 개체를 재사용할 수 있습니다.

  • 새로운 기능 추가 array_to_latex() 모듈에 qiskit.visualization 모듈에 벡터와 행렬을 표현하고 시각화하는 데 사용할 수 있는 새로운 함수를 추가했습니다( LaTeX ).

    from qiskit.visualization import array_to_latex
    from numpy import sqrt, exp, pi
    mat = [[0, exp(pi*.75j)],
           [1/sqrt(8), 0.875]]
    array_to_latex(mat)
  • 그리고 StatevectorDensityMatrix 클래스에는 이제 draw() 메서드를 통해 텍스트 행렬, IPython 라텍스 객체, 라텍스 소스, Q-구, 블로흐 구 및 힌튼 플롯으로 객체를 그릴 수 있습니다. 기본적으로 출력 유형은 __repr__ 의 출력과 동일하지만 사용자 구성 파일에서 state_drawer 옵션을 설정하여 이 기본값을 변경할 수 있습니다. 예를 들어,

    from qiskit.quantum_info import DensityMatrix
    dm = DensityMatrix.from_label('r0')
    dm.draw('latex')
    from qiskit.quantum_info import Statevector
    sv = Statevector.from_label('+r')
    sv.draw('qsphere')

    또한, 이제 이러한 클래스의 draw() 메서드가 이제 이러한 클래스의 아이피썬 디스플레이에 사용되므로 사용자 구성 파일에서 기본 출력 유형을 변경하면 Statevector 또는 DensityMatrix 객체가 주피터 노트북에 표시될 때 해당 출력 유형이 객체에 사용됩니다.

  • 펄스 qiskit.pulse.Instruction 개체 및 파라메트릭 펄스 개체(예 Gaussian 이제 ParameterParameterExpressionduration 객체를 지원합니다. 예를 들어,

    from qiskit.circuit import Parameter
    from qiskit.pulse import Gaussian
    
    dur = Parameter('x_pulse_duration')
    double_dur = dur * 2
    rx_pulse = Gaussian(dur, 0.1, dur/4)
    double_rx_pulse = Gaussian(double_dir, 0.1, dur/4)

    매개변수화된 duration 으로 인스트럭션을 생성할 수 있지만, 바인딩되지 않은 매개변수 duration 를 스케줄에 추가하는 것은 새로 도입된 표현인 ScheduleBlock. 자세한 내용은 알려진 문제 릴리스 노트 섹션을 참조하세요.

  • 메서드 run() 메서드에 대한 QasmSimulatorPy, StatevectorSimulatorPyUnitarySimulatorPy 백엔드의 메서드는 이제 QuantumCircuit (또는 QuantumCircuit 객체 목록)을 입력으로 받습니다. 이전 QasmQobj 객체는 현재로서는 계속 지원되지만 향후 릴리스에서 더 이상 사용되지 않을 예정입니다.

    사용 방법에 대한 예는 다음을 참조하세요:

    from qiskit import transpile, QuantumCircuit
    
    from qiskit.providers.basicaer import BasicAer
    
    backend = BasicAer.get_backend('qasm_simulator')
    
    circuit = QuantumCircuit(2)
    circuit.h(0)
    circuit.cx(0, 1)
    circuit.measure_all()
    
    tqc = transpile(circuit, backend)
    result = backend.run(tqc, shots=4096).result()
  • 트랜스파일러 패스의 CommutativeCancellation 트랜스파일러 패스에는 생성자 basis_gates 에 새로운 옵션 kwarg가 있는데, 이는 대상 백엔드의 베이시스 게이트 이름 목록을 받습니다. 지정하면 패스는 basis_gates kwarg의 게이트만 사용합니다. 이전에는 패스가 자동으로 출퇴근하는 연속된 게이트를 ZGateU1Gate 로 자동 교체되었습니다. basis_gates kwarg를 사용하면 이를 방지하기 위해 타겟에 존재하는 z-회전 게이트를 지정할 수 있습니다.

  • 클래스의 생성자와 Bit 클래스와 서브클래스의 생성자 Qubit, ClbitAncillaQubit는 이제 두 개의 매개변수 registerindex 를 선택 사항으로 사용할 수 있도록 업데이트되었습니다. 이를 통해 레지스터와 독립적인 비트 객체를 생성할 수 있습니다.

  • 새로운 클래스 BooleanExpression클래스가 qiskit.circuit.classicalfunction 모듈에 추가되었습니다. 이 클래스를 사용하면 Python 부울 표현식에서 오라클을 만들 수 있습니다. 예를 들어,

    from qiskit.circuit import BooleanExpression, QuantumCircuit
    
    expression = BooleanExpression('~x & (y | z)')
    circuit = QuantumCircuit(4)
    circuit.append(expression, [0, 1, 2, 3])
    circuit.draw('mpl')
    circuit.decompose().draw('mpl')

    메서드에는 BooleanExpression 메서드도 포함되어 있습니다, from_dimacs_file()메서드도 포함되어 있어 DIMACS-CNF 형식으로 설명된 수식을 로드할 수 있습니다. 예를 들어,

    from qiskit.circuit import BooleanExpression, QuantumCircuit
    
    boolean_exp = BooleanExpression.from_dimacs_file("simple_v3_c2.cnf")
    circuit = QuantumCircuit(boolean_exp.num_qubits)
    circuit.append(boolean_exp, range(boolean_exp.num_qubits))
    circuit.draw('text')
         ┌───────────────────┐
    q_0:0
         │                   │
    q_1:1
         │  SIMPLE_V3_C2.CNF │
    q_2:2
         │                   │
    q_3:3
         └───────────────────┘
    circuit.decompose().draw('text')
    q_0: ──o────o────────────
           │    │
    q_1: ──■────o────■───────
           │    │    │
    q_2: ──■────┼────o────■──
         ┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐
    q_3: ┤ X ├┤ X ├┤ X ├┤ X ├
         └───┘└───┘└───┘└───┘
  • 새로운 클래스가 추가되었습니다, PhaseOracle클래스가 qiskit.circuit.library 모듈에 추가되었습니다. 이 클래스를 사용하면 Python 부울 표현식에서 위상 오라클 회로를 구성할 수 있습니다.

    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    oracle = PhaseOracle('x1 & x2 & (not x3)')
    oracle.draw('mpl')

    이러한 위상 오라클은 예를 들어 다음과 같이 더 큰 알고리즘의 일부로 사용할 수 있습니다 qiskit.algorithms.AmplificationProblem:

    from qiskit.algorithms import AmplificationProblem, Grover
    from qiskit import BasicAer
    
    backend = BasicAer.get_backend('qasm_simulator')
    
    problem = AmplificationProblem(oracle, is_good_state=oracle.evaluate_bitstring)
    grover = Grover(quantum_instance=backend)
    result = grover.amplify(problem)
    result.top_measurement

    클래스에는 PhaseOracle 클래스에는 또한 from_dimacs_file() 메서드도 포함되어 있어 DIMACS-CNF 형식의 수식을 설명하는 파일에서 위상 오라클을 구성할 수 있습니다.

    from qiskit.circuit.library.phase_oracle import PhaseOracle
    
    oracle = PhaseOracle.from_dimacs_file("simple_v3_c2.cnf")
    oracle.draw('text')
    state_0: ─o───────o──────────────
              │ ┌───┐ │ ┌───┐
    state_1: ─■─┤ X ├─■─┤ X ├─■──────
              │ └───┘   └───┘ │ ┌───┐
    state_2: ─■───────────────o─┤ Z ├
                                └───┘
  • 이제 모든 트랜스파일러 패스(즉, BasePass 의 모든 인스턴스)를 직접 호출할 수 있습니다. 패스를 호출하면 객체에서 패스를 실행할 수 있는 편리한 인터페이스가 제공됩니다 QuantumCircuit 객체에서 패스를 실행할 수 있는 편리한 인터페이스를 제공합니다.

    예를 들어, 다음과 같은 단일 변환 패스를 실행하는 경우 BasisTranslator와 같은 단일 변환 패스를 실행할 수 있습니다:

    from qiskit import QuantumCircuit
    from qiskit.transpiler.passes import BasisTranslator
    from qiskit.circuit.equivalence_library import SessionEquivalenceLibrary as sel
    
    circuit = QuantumCircuit(1)
    circuit.h(0)
    
    pass_instance = BasisTranslator(sel, ['rx', 'rz', 'cx'])
    result = pass_instance(circuit)
    result.draw(output='mpl')

    분석 패스를 실행할 때 속성 집합( dict 또는 PropertySet)을 매개변수로 추가해야 하며 '제자리에서' 수정할 수 있습니다. 예를 들어,

    from qiskit import QuantumCircuit
    from qiskit.transpiler.passes import Depth
    
    circuit = QuantumCircuit(1)
    circuit.h(0)
    
    property_set = {}
    pass_instance = Depth()
    pass_instance(circuit, property_set)
    print(property_set)
  • 클래스에는 QasmQobjConfig 클래스에는 이제 meas_levelmeas_return 에 대한 선택적 kwarg 가 있습니다. 이 필드는 다음을 생성하는 데 사용할 수 있습니다 QasmQobj 회로 작업에 대해 meas_level=1 (커널화된 데이터)를 지원하는 작업 페이로드(이전에는 PulseQobj 객체에 대해서만 노출되었습니다). 함수가 업데이트되어 assemble() 함수가 생성하는 객체에 대해 이 필드를 설정하도록 QasmQobj 객체에 대해 이 필드를 설정하도록 업데이트되었습니다.

  • 새로운 tensor() 메서드가 추가되었습니다 QuantumCircuit 클래스에 새로운 메서드가 추가되었습니다. 이 방법을 사용하면 기존 회로로 다른 회로를 텐서링할 수 있습니다. 이 메서드는 다음과 유사하게 작동하며 qiskit.quantum_info.Operator.tensor() 와 유사하게 작동하며 키스킷의 리틀 엔디안 규칙과 일치합니다.

    예를 들어,

    from qiskit import QuantumCircuit
    top = QuantumCircuit(1)
    top.x(0);
    bottom = QuantumCircuit(2)
    bottom.cry(0.2, 0, 1);
    bottom.tensor(top).draw(output='mpl')
  • 클래스는 이제 qiskit.circuit.QuantumCircuit 클래스는 이제 임의의 자유 형식 메타데이터를 지원하며 metadata 어트리뷰트를 지원합니다. 사용자( 또는 그 위에 구축된 프로그램 QuantumCircuit)는 회로를 추적하는 데 사용할 메타데이터를 회로에 첨부할 수 있습니다. 예를 들어,

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2, user_metadata_field_1='my_metadata',
                        user_metadata_field_2='my_other_value')

    또는:

    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.metadata = {'user_metadata_field_1': 'my_metadata',
                   'user_metadata_field_2': 'my_other_value'}

    이 메타데이터는 회로의 실행에 영향을 미치는 데 사용되지 않고 객체의 수명 동안 회로를 추적하는 데만 사용됩니다. metadata 속성은 다음을 포함한 모든 회로 변환 간에 유지됩니다 transpile()assemble(). 제공자가 반환하는 결과에 메타데이터를 연결하여 사용자가 현재 QuantumCircuit.name 에서 하는 것과 같은 방식으로 서킷 메타데이터를 기반으로 결과를 필터링할 수 있도록 하는 것이 기대됩니다.

  • 새 연산자 클래스 추가 CNOTDihedralqiskit.quantum_info 모듈에 새로운 연산자 클래스를 추가했습니다. 이 클래스는 양자 게이트에 의해 생성되는 CNOT-이원체 그룹을 나타내는 데 사용됩니다 CXGate, TGateXGate.

  • BaseOperator 서브클래스에 & (__and__) 이진 연산자를 추가합니다 (예 qiskit.quantum_info.Operator)에 qiskit.quantum_info 모듈에 추가합니다. 이것은 클래스를 호출하는 속기입니다 compose() 메서드를 호출하는 약어입니다(예: A & B == A.compose(B)).

    예를 들어,

    import qiskit.quantum_info as qi
    
    qi.Pauli('X') & qi.Pauli('Y')
  • & (__and__) 이진 연산자를 qiskit.quantum_info.Statevectorqiskit.quantum_info.DensityMatrix 클래스를 추가합니다. 이것은 클래스를 호출하는 속기입니다 evolve() 메서드를 호출하는 약어입니다(예: psi & U == psi.evolve(U)).

    예를 들어,

    import qiskit.quantum_info as qi
    
    qi.Statevector.from_label('0') & qi.Pauli('X')
  • 새로운 2큐비트 게이트, ECRGate에코 교차 공명(ECR)이 모듈에 추가되었습니다 qiskit.circuit.library 모듈에 해당 메서드와 함께 추가되었습니다, ecr() 메서드와 함께 모듈에 추가되었습니다 QuantumCircuit 클래스. ECR 게이트는 에코를 위해 두 개의 CR(π4)CR(\frac{π}{4}) 펄스 사이에 XGate 가 있는 두 개의 펄스입니다. 이 게이트는 로컬에서 CXGate (로컬 사전 또는 사후 회전을 통해 CNOT로 변환할 수 있음)와 동일합니다. 이 게이트는 현재 IBM 하드웨어의 기본 게이트이며, 이 게이트로 컴파일하면 사전/사후 회전을 나머지 회로에 병합할 수 있습니다.

  • 대략적인 컴파일을 가능하게 하는 새로운 kwarg approximation_degreetranspile() 함수에 추가되어 대략적인 컴파일이 가능해졌습니다. 유효한 값의 범위는 0에서 1까지이며, 값이 클수록 근사치가 작아집니다. 회로 근사치를 실험하기 위한 휴리스틱 다이얼입니다. 이 숫자에 대한 구체적인 해석은 각 패스에 맡겨지며, 각 패스는 이 숫자를 사용하여 대략적인 버전의 패스를 수행할 수 있습니다. 구체적인 예로는 UnitarySynthesis 패스 또는 또는 변환기를 개별 게이트 집합으로 변환하는 것입니다. 패스가 이 옵션을 지원하지 않는다면 정확한 변환을 의미합니다.

  • 두 개의 새로운 트랜스파일러 패스, GateDirectionqiskit.transpiler.passes.CheckGateDirectionqiskit.transpiler.passes 모듈에 추가되었습니다. 이 새로운 패스는 CXDirectionCheckCXDirection (현재 사용되지 않음, 자세한 내용은 사용 중단 노트 참조)을 보다 일반적으로 대체하기 위한 것으로, 동일한 기능을 수행하지만 다른 게이트와 함께 작동합니다 CXGate.

  • Windows에서 실행할 때 이제 parallel_map() 함수를 사용한 병렬 실행을 활성화할 수 있습니다(기본적으로 여전히 비활성화되어 있음). 이렇게 하려면 사용자 구성 파일에서 parallel = True 을 설정하거나 QISKIT_PARALLEL 환경 변수를 TRUE 로 설정하면 됩니다(이 경우 transpile()assemble()parallel_map() 를 사용합니다). Windows에서 병렬 처리를 사용하도록 설정할 때 Python 이 Windows용 프로세스를 실행하는 방식에 제한이 있다는 점에 유의하세요. Windows에서 병렬 실행의 제한 사항에 대한 자세한 내용은 아래의 알려진 문제 섹션을 참조하세요.

  • 새로운 함수 hellinger_distance()두 카운트 분포 사이의 헬러 거리를 계산하는 새로운 함수인 qiskit.quantum_info 모듈에 추가되었습니다.

  • 모듈의 decompose_clifford() 함수(내부적으로 사용되는 qiskit.quantum_info 모듈( 내부적으로 qiskit.quantum_info.Clifford.to_circuit() 메서드에서 내부적으로 사용됨)에는 'AG' 또는 'greedy' 로 설정하여 사용되는 합성 방법을 선택할 수 있는 새로운 kwarg method 이 있습니다. 기본적으로 3큐비트 이상의 경우, 이 값은 'greedy' 으로 설정되어 있으며, 이는 Bravyi 등의 클리포드 요소 합성을 위해 비최적의 탐욕적인 컴파일 루틴을 사용합니다. al., 이 방법은 일반적으로 이전에 사용되던 Aaronson-Gottesman 방법(2큐비트 이상)에 비해 더 나은 CX 비용을 산출합니다. method='AG' 을 설정하여 이전 기본 Aaronson-Gottesman 방법으로 되돌리려면 method kwarg를 사용할 수 있습니다.

  • 모듈의 Initialize 클래스는 이제 qiskit.extensions 모듈의 클래스는 이제 정수를 사용하여 생성할 수 있습니다. 정수의 '1' 비트는 해당 큐비트에 대한 회로에 Reset 및 an XGate 를 해당 큐비트에 대한 회로에 삽입합니다. 이는 표준 리틀 엔디안 규칙인 키스킷을 사용하여 수행됩니다. 즉, 정수의 가장 오른쪽 비트는 큐비트 0을 설정합니다. 예를 들어 Initialize 에서 파라미터를 5 으로 설정하면 큐비트 0과 2가 값 1로 설정됩니다.

    from qiskit.extensions import Initialize
    
    initialize = Initialize(13)
    initialize.definition.draw('mpl')
  • 모듈의 Initialize 클래스는 이제 qiskit.extensions 모듈의 클래스는 이제 폴리 레이블에서 직접 구성하는 것을 지원합니다( qiskit.quantum_info.Statevector.from_label() 메서드와 유사). 파울리 레이블은 파울리 고유 상태 Z, X, Y의 기저 상태를 나타냅니다. 이러한 레이블은 키스킷의 표준 리틀 엔디안 표기법을 사용합니다. 예를 들어 '01' 레이블은 큐비트 0을 1|1\rangle, 큐비트 1을 0|0\rangle 로 초기화합니다.

    from qiskit.extensions import Initialize
    
    initialize = Initialize("10+-lr")
    initialize.definition.draw('mpl')
  • Kwarg, template_list, 의 생성자에 대한 qiskit.transpiler.passes.TemplateOptimization 트랜스파일러 패스의 생성자가 이제 QuantumCircuitDAGDependency 객체 목록을 받습니다. 이전에는 QuantumCircuit 만 허용되었지만(내부적으로 DAGDependency 객체)만 입력 목록에서 허용되었습니다.

  • 새로운 트랜스파일러 패스 qiskit.transpiler.passes.RZXCalibrationBuilder캘리브레이션을 생성하여 양자 회로에 추가할 수 있는 새로운 트랜스파일러 패스가 도입되었습니다. 이 패스는 보정된 CXGate 오브젝트를 가져와서 임의의 회전 각도를 가진 qiskit.circuit.library.RZXGate 오브젝트에 대한 보정을 생성합니다. 스케줄은 에코 교차 공명 게이트의 GaussianSquare 펄스를 늘리고 압축하여 만들어집니다.

  • 사용하기 위한 새로운 템플릿 회로 qiskit.circuit.library.RZXGate 를 사용하기 위한 새로운 템플릿 회로가 qiskit.circuit.library 모듈(예 rzx_yz). 이렇게 하면 TemplateOptimization 패스와 qiskit.transpiler.passes.RZXCalibrationBuilder 패스와 페어링하여 CNOT - P(theta) - CNOT 와 같은 게이트 시퀀스를 자동으로 찾아서 더 효율적인 회로로 대체할 수 있습니다 qiskit.circuit.library.RZXGate 를 기반으로 더 효율적인 회로로 교체할 수 있습니다.

  • Matplotlib 출력 유형은 circuit_drawer()draw() 메서드에 대한 QuantumCircuit 클래스의 메서드는 이제 시각화 스타일 설정을 위한 구성 파일을 지원합니다. 이전 릴리스에서는 사용자가 style kwarg를 dict 받아 mpl 서랍의 색상 및 기타 표시 기능을 사용자 지정할 수 있는 기본 기능이 있었습니다. 이제 사전을 전달할 필요 없이 JSON 파일에서 직접 이러한 사전을 로드할 수 있도록 기능이 확장되었습니다. 이렇게 하면 사용자가 스타일 파일 이름을 style kwarg에 문자열로 전달하여 새 스타일 파일을 만들고 해당 스타일을 시각화에 사용할 수 있습니다.

    이 기능을 활용하려면 사용자 구성 파일에서 circuit_mpl_style_path 옵션을 설정해야 합니다. 이 옵션은 키스킷이 스타일 JSON 파일을 검색할 경로로 설정해야 합니다. 경로 항목을 여러 개 지정하는 경우 : 로 구분해야 합니다. 예를 들어 사용자 설정 파일에 circuit_mpl_style_path = ~/.qiskit:~/user_styles 을 설정하면 ~/.qiskit~/user_styles 모두에서 JSON 파일을 찾습니다.

  • marginal_counts() 함수에 새로운 kwarg, format_marginal 가 추가되어 True 로 설정하면 회로의 cregs 에 따라 출력되는 카운트 형식을 지정하고 누락된 인덱스는 _ 로 표시됩니다. 예를 들어,

    from qiskit import QuantumCircuit, execute, BasicAer, result
    from qiskit.result.utils import marginal_counts
    qc = QuantumCircuit(5, 5)
    qc.x(0)
    qc.measure(0, 0)
    
    result = execute(qc, BasicAer.get_backend('qasm_simulator')).result()
    print(marginal_counts(result.get_counts(), [0, 2, 4], format_marginal=True))
  • 의 성능 개선 qiskit.quantum_info.Statevector.expectation_value()qiskit.quantum_info.DensityMatrix.expectation_value() 인자 연산자가 Pauli 또는 SparsePauliOp 연산자의 성능을 개선했습니다.

  • 사용자 구성 파일에는 num_processesparallel 의 기본 동작을 제어하는 데 사용되는 두 가지 새로운 구성 옵션이 있습니다 parallel_map(). parallel 옵션은 여러 프로세스에서 실행할지 여부를 지정하는 데 사용되는 부울입니다 parallel_map() 가 여러 프로세스에서 실행될지 여부를 지정하는 데 사용됩니다. False 로 설정하면 parallel_map() 호출은 직렬로 실행되고 True 로 설정하면 병렬 실행이 활성화됩니다. num_processes 옵션은 병렬 실행 시 사용할 CPU 수를 설정하는 정수를 받습니다. 기본적으로 시스템의 CPU 코어 수를 사용합니다.

  • 의 기본 동작을 제어하는 데 사용할 수 있는 2개의 새로운 환경 변수 QISKIT_PARALLELQISKIT_NUM_PROCS 가 있습니다 parallel_map(). QISKIT_PARALLEL 옵션을 TRUE (대문자)로 설정하여 호출 시 여러 프로세스에서 실행되도록 기본값을 설정할 수 있습니다 parallel_map() 가 호출될 때 여러 프로세스에서 실행되도록 설정합니다. 다른 값으로 설정하면 parallel_map() 로 설정하면 연속적으로 실행됩니다. QISKIT_NUM_PROCS 는 실행할 기본 프로세스 수로 사용되는 정수(예: QISKIT_NUM_PROCS=5)를 받습니다. 이 두 가지 옵션은 사용자 구성 파일에 설정된 동등한 옵션보다 우선합니다.

  • 새로운 메서드 gradient()메서드가 ParameterExpression 클래스에 추가되었습니다. 이 메서드는 객체의 그라데이션을 평가하는 데 사용됩니다 ParameterExpression 객체의 기울기를 평가하는 데 사용됩니다.

  • __eq__ 메서드(즉, == 연산자를 사용할 때 호출되는 메서드)를 사용하면 ParameterExpression 에 대해 이제 숫자 값과 비교할 수 있습니다. 이전에는 두 개의 인스턴스만 비교할 수 있었습니다 ParameterExpression==. 예를 들어,

    from qiskit.circuit import Parameter
    
    x = Parameter("x")
    y = x + 2
    y = y.assign(x, -1)
    
    assert y == 1
  • 클래스의 PauliFeatureMap 모듈의 qiskit.circuit.libraryα\alpha 모듈의 클래스는 이제 생성자에서 kwarg alpha 를 사용하여 설정하거나 생성 후 alpha 어트리뷰트를 설정하면 됩니다. 이전에는 이 값이 2.0 로 고정되어 있었습니다. 이 속성을 조정하면 의사 결정 경계를 더 잘 제어할 수 있으며 데이터 집합에서 명시적으로 확장하지 않고도 입력 기능을 유연하게 처리할 수 있습니다.

  • 새로운 Gate 클래스 PauliGate클래스가 추가되었습니다 qiskit.circuit.library 모듈과 해당 메서드가 추가되었습니다, pauli()QuantumCircuit 클래스에 추가되었습니다. 이 새로운 게이트 클래스를 사용하면 여러 개의 개별 폴리 게이트를 동시에 여러 큐비트에 적용할 수 있습니다. 이는 주로 이 새로운 게이트를 사용하여 여러 개의 동시 폴리 게이트를 보다 효율적으로 구현할 수 있는 시뮬레이터에 유용합니다.

  • 연산자 개선 qiskit.quantum_info.Pauli 연산자를 개선합니다. 이 클래스는 이제 복소 계수를 포함한 전체 N-큐비트 폴리 그룹을 표현하고 요소를 나타냅니다. 이제 다음과 같은 연산자 API 메서드를 지원합니다 compose(), dot(), tensor() 등, 전체 폴리 그룹에 대해 컴포지션 및 점이 정의된 메서드를 지원합니다.

    이 클래스는 편의를 위해 폴리의 문자열 표현을 변환할 수도 있습니다.

    예를 들면 다음과 같습니다

    from qiskit.quantum_info import Pauli
    
    P1 = Pauli('XYZ')
    P2 = Pauli('YZX')
    P1.dot(P2)

    폴리를 직접 추가할 수도 있습니다 QuantumCircuit 객체

    from qiskit import QuantumCircuit
    from qiskit.quantum_info import Pauli
    
    circ = QuantumCircuit(3)
    circ.append(Pauli('XYZ'), [0, 1, 2])
    circ.draw(output='mpl')

    추가 메서드를 사용하면 두 명의 폴리가 출퇴근( commutes() 메서드 사용) 또는 출퇴근 반대( anticommutes() 메서드 사용), 클리포드 활용( P=C.P.CP^\prime = C.P.C^\dagger )으로 인한 폴리를 계산할 수 있습니다 evolve() 메서드를 사용합니다.

    클래스의 API 설명서를 참조하세요 Pauli 클래스의 API 문서를 참조하세요.

  • 새로운 함수 random_pauli()n-큐비트 폴리 그룹의 무작위 요소를 생성하는 새로운 함수인 qiskit.quantum_info 모듈에 추가되었습니다.

  • 새로운 클래스 PiecewisePolynomialPauliRotations클래스가 qiskit.circuit.library 모듈에 추가되었습니다. 이 회로 라이브러리 요소는 중단점과 계수를 통해 정의되는 조각 다항식 함수( f(x)f(x) )를 큐비트 진폭에 매핑하는 데 사용됩니다. 중단점 (x0,...,xJ)(x_0, ..., x_J)[0,2n1][0, 2^n-1] 의 하위 집합이며, 여기서 nn 은 상태 큐비트 수입니다. 해당 계수 [aj,1,...,aj,d][a_{j,1},...,a_{j,d}], 여기서 dd 은 모든 다항식 중 가장 높은 차수입니다. 그러면 f(x)f(x) 으로 정의됩니다:

f(x)={0,x<x0i=0i=daj,ixi,xjx<xj+1\begin{split}f(x) = \begin{cases} 0, x < x_0 \\ \sum_{i=0}^{i=d}a_{j,i} x^i, x_j \leq x < x_{j+1} \end{cases}\end{split}

를 암시적으로 가정합니다 xJ+1=2nx_{J+1} = 2^n. 그리고 진폭에 적용된 매핑은 다음과 같이 주어집니다

Fx0=cos(pj(x))x0+sin(pj(x))x1F|x\rangle |0\rangle = \cos(p_j(x))|x\rangle |0\rangle + \sin(p_j(x))|x\rangle |1\rangle

이 매핑은 제어된 폴리 Y 회전을 기반으로 하고 PolynomialPauliRotations.

  • 새로운 모듈 qiskit.algorithms 이 도입되었습니다. 이 모듈에는 이전에 qiskit.aqua.algorithms 모듈(현재는 사용되지 않음)에서 제공하던 것과 동일한 기능이 포함되어 있으며, 양자 알고리즘을 구성하기 위한 빌딩 블록을 제공합니다. qiskit-aqua 에서 이 새 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.

  • 새로운 모듈 qiskit.opflow 이 도입되었습니다. 이 모듈에는 이전에 qiskit.aqua.operators 모듈(현재는 사용되지 않음)에서 제공하던 것과 동일한 기능이 포함되어 있으며, 양자 알고리즘을 구축하는 데 사용되는 연산자와 상태 함수를 제공합니다. qiskit-aqua 에서 이 새 모듈로 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.

  • Linux aarch64 시스템용 사전 컴파일된 바이너리 휠이 포함된 첫 번째 릴리스입니다. manylinux2014 호환 aarch64 Linux 시스템을 실행하는 경우 이제 PyPI, 에서 미리 컴파일된 휠을 사용할 수 있으므로 더 이상 소스에서 빌드하여 qiskit-terra를 설치할 필요가 없습니다.

  • 이제 qiskit.quantum_info.process_fidelity() 함수를 이제 단일이 아닌 타겟 채널에 사용할 수 있습니다. 이 경우 반환된 값은 정규화된 값의 qiskit.quantum_info.state_fidelity() 채널의 정규화된 qiskit.quantum_info.Choi 행렬과 같습니다.

    참고 qiskit.quantum_info.average_gate_fidelity()qiskit.quantum_info.gate_error() 함수는 여전히 대상 채널이 단일 채널이어야 하며, 그렇지 않은 경우 예외를 발생시킵니다.

  • 새로운 펄스 빌더 기능( qiskit.pulse.macro())이 추가되었습니다. 이렇게 하면 일반 Python 함수를 매크로로 꾸밀 수 있습니다. 이렇게 하면 펄스 빌더 기능을 데코레이션된 함수 내에서 사용할 수 있습니다. 그런 다음 빌더 매크로를 펄스 빌드 컨텍스트 내에서 호출하여 코드를 재사용할 수 있습니다.

    예를 들면 다음과 같습니다.

    from qiskit import pulse
    
    @pulse.macro
    def measure(qubit: int):
        pulse.play(pulse.GaussianSquare(16384, 256, 15872),
                   pulse.MeasureChannel(qubit))
        mem_slot = pulse.MemorySlot(0)
        pulse.acquire(16384, pulse.AcquireChannel(0), mem_slot)
        return mem_slot
    
    with pulse.build(backend=backend) as sched:
        mem_slot = measure(0)
        print(f"Qubit measured into {mem_slot}")
    
    sched.draw()
  • 새로운 클래스 PauliTwoDesign클래스가 추가되었습니다 qiskit.circuit.library 의 특정 형태의 2-디자인 회로를 구현하는 클래스입니다 https://arxiv.org/pdf/1803.11173.pdf 예를 들어, 이 회로는 다음과 같습니다:

    from qiskit.circuit.library import PauliTwoDesign
    circuit = PauliTwoDesign(4, reps=2, seed=5, insert_barriers=True)
    circuit.decompose().draw(output='mpl')
  • 이제 새로운 펄스 서랍 qiskit.visualization.pulse_v2.draw() (별칭은 qiskit.visualization.pulse_drawer_v2)을 사용할 수 있습니다. 이 새로운 펄스 서랍은 기존 펄스 서랍에는 없던 여러 가지 새로운 기능을 지원합니다(pulse_drawer()).

    • 긴 펄스 지침 잘라내기.
    • 파라메트릭 펄스의 시각화.
    • 새로운 스타일시트 IQXStandard, IQXSimple, IQXDebugging.
    • 시스템 정보 시각화(채널 주파수 등...) 를 지정하여 qiskit.providers.Backend 개체를 지정하여 시각화할 수 있습니다.
    • 플롯에 axis 객체를 지정하여 생성된 플롯의 추가 확장, 즉 게시 조작을 허용합니다.

    새로운 스타일시트는 채널 컬렉션 재조립, 지침 세부 정보 표시, 펄스 봉투 모양 업데이트 등과 같이 출력 이미지의 모양을 동적으로 수정하는 콜백 함수를 사용할 수 있습니다 사용자 지정 콜백 함수를 만들어 스타일시트 인스턴스에 공급하여 드로어 코드를 수정하지 않고도 그림 모양을 수정할 수 있습니다. 자세한 내용은 펄스 서랍 모듈 문서 설명을 참조하세요.

    파일 저장은 이제 Matplotlib 로 위임되었습니다. 이미지 파일을 저장하려면 Figure 객체를 반환하는 savefig 메서드를 호출해야 합니다.

  • 메서드를 추가합니다 reverse_qargs() 메서드에 qiskit.quantum_info.Statevectorqiskit.quantum_info.DensityMatrix 클래스에 메서드를 추가합니다. 이 메서드는 상태의 하위 시스템 순서를 반대로 하며, N-큐비트 상태에 대한 qiskit.circuit.QuantumCircuit.reverse_bits() 메서드와 동일합니다. 예를 들어,

    from qiskit.circuit.library import QFT
    from qiskit.quantum_info import Statevector
    
    circ = QFT(3)
    
    state1 = Statevector.from_instruction(circ)
    state2 = Statevector.from_instruction(circ.reverse_bits())
    
    state1.reverse_qargs() == state2
  • 메서드를 추가합니다 reverse_qargs() 메서드를 추가합니다 qiskit.quantum_info.Operator 클래스에 메서드를 추가합니다. 이 메서드는 연산자의 서브시스템 순서를 뒤집는 것으로, N-큐비트 연산자를 위한 qiskit.circuit.QuantumCircuit.reverse_bits() 메서드와 동일합니다. 예를 들어,

    from qiskit.circuit.library import QFT
    from qiskit.quantum_info import Operator
    
    circ = QFT(3)
    
    op1 = Operator(circ)
    op2 = Operator(circ.reverse_bits())
    
    op1.reverse_qargs() == op2
  • 함수에 대한 latex 출력 메서드 qiskit.visualization.circuit_drawer() 함수와 draw() 메서드는 이제 출력 시각화에서 게이트에 사용자 정의 레이블을 사용합니다. 예를 들어,

    import math
    
    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.rx(math.pi/2, 0, label='My Special Rotation')
    
    qc.draw(output='latex')
  • routing_method kwarg transpile() 함수는 이제 새로운 옵션인 'none' 을 허용합니다. routing_method='none' 시 라우팅 패스가 트랜스파일링의 일부로 실행되지 않습니다. 회로가 커플링 맵에 맞지 않으면 TranspilerError 예외가 발생합니다.

  • 새로운 게이트 클래스 RVGate라는 새로운 게이트 클래스가 qiskit.circuit.library 모듈에 해당 QuantumCircuit 메서드 rv(). 는 RVGate 는 일반적인 회전 게이트이며, 이는 UGate와 유사하지만 오일러 각을 지정하는 대신 회전 벡터의 세 가지 구성 요소가 지정되며, 벡터의 방향은 회전 축을 지정하고 크기는 축에 대한 회전 각도(라디안)를 지정합니다. 예를 들어,

    import math
    
    import np
    
    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(1)
    theta = math.pi / 5
    phi = math.pi / 3
    # RGate axis:
    axis = np.array([math.cos(phi), math.sin(phi)])
    rotation_vector = theta * axis
    qc.rv(*rotation_vector, 0)
  • 언바운드 Parameter 객체에서 사용된 QuantumCircuit 객체는 이제 이름별로 정렬됩니다. 속성이 반환하는 매개변수에 대해 적용되며 parameters 어트리뷰트가 반환하는 매개변수에 적용됩니다. 또한 qiskit.circuit.QuantumCircuit.bind_parameters()qiskit.circuit.QuantumCircuit.assign_parameters() 메서드는 이제 값 목록을 받아 이름 정렬 순서대로 매개변수에 바인딩/할당할 수 있습니다. 이전에는 이러한 메서드에 매개변수와 값의 사전만 필요했습니다. 예를 들어,

    from qiskit.circuit import QuantumCircuit, Parameter
    
    circuit = QuantumCircuit(1)
    circuit.rx(Parameter('x'), 0)
    circuit.ry(Parameter('y'), 0)
    
    print(circuit.parameters)
    
    bound = circuit.bind_parameters([1, 2])
    bound.draw(output='mpl')
  • 의 생성자와 qiskit.quantum_info.Statevectorqiskit.quantum_info.DensityMatrix 클래스의 생성자는 이제 QuantumCircuit 객체를 가져와서 StatevectorDensityMatrix 객체를 생성할 수 있습니다(큐비트가 0|0\rangle 에서 초기화되어 있다고 가정). 예를 들어

    from qiskit import QuantumCircuit
    from qiskit.quantum_info import Statevector
    
    qc = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    
    statevector = Statevector(qc)
    statevector.draw(output='latex')
  • 새로운 가짜 백엔드 클래스는 qiskit.test.mock 에서 확인할 수 있습니다. 여기에는 ibmq_casablanca, ibmq_sydney, ibmq_mumbai, ibmq_lima, ibmq_belem, ibmq_quito 의 모의 버전이 포함되었습니다. 다른 가짜 백엔드와 마찬가지로 여기에는 캘리브레이션 데이터의 스냅샷(예: backend.defaults())이 포함됩니다 및 오류 데이터(예: backend.properties()) 실제 시스템에서 가져온 것으로 로컬 테스트, 컴파일 및 시뮬레이션에 사용할 수 있습니다.

알려진 문제점

  • qiskit.pulse.Instruction 매개변수화된 duration (즉, duration 값이 바인딩되지 않은 Parameter 또는 ParameterExpression 객체)를 qiskit.pulse.Schedule 는 지원되지 않습니다. 시도하면 UnassignedDurationError PulseError 가 표시됩니다. 이는 현재 Instruction 중첩 제약 조건이 평가되는 방식의 한계입니다. 이는 다음에서 지원됩니다 ScheduleBlock에서 지원되며, 이 경우 오버랩 제약 조건은 실행 직전에 평가됩니다.

  • Windows 시스템에서 병렬 실행이 활성화된 경우 parallel_map() 에 병렬 실행이 활성화된 경우 if __name__ == '__main__': 블록 외부에서 실행되는 스크립트에서 호출할 때 병렬 처리가 작동하지 않을 수 있습니다. 이는 Python 이 Windows에서 병렬 프로세스를 실행하는 방식 때문입니다. RuntimeError 또는 AttributeError 을 호출하는 스크립트에서 발생하는 경우 parallel_map() (내부적으로 parallel_map() 를 사용하는 함수 사용 포함 transpile()) Windows 및 병렬 처리가 활성화된 상태에서 스크립트 호출을 if __name__ == '__main__': 안에 삽입하여 문제를 해결할 수 있습니다. 예를 들어,

    from qiskit import QuantumCircuit, QiskitError
    from qiskit import execute, Aer
    
    qc1 = QuantumCircuit(2, 2)
    qc1.h(0)
    qc1.cx(0, 1)
    qc1.measure([0,1], [0,1])
    # making another circuit: superpositions
    qc2 = QuantumCircuit(2, 2)
    qc2.h([0,1])
    qc2.measure([0,1], [0,1])
    execute([qc1, qc2], Aer.get_backend('qasm_simulator'))

    는 다음과 같이 변경되어야 합니다.

    from qiskit import QuantumCircuit, QiskitError
    from qiskit import execute, Aer
    
    def main():
        qc1 = QuantumCircuit(2, 2)
        qc1.h(0)
        qc1.cx(0, 1)
        qc1.measure([0,1], [0,1])
        # making another circuit: superpositions
        qc2 = QuantumCircuit(2, 2)
        qc2.h([0,1])
        qc2.measure([0,1], [0,1])
        execute([qc1, qc2], Aer.get_backend('qasm_simulator'))
    
    if __name__ == '__main__':
        main()

    에서 병렬 처리에 오류가 발생하는 경우.

업그레이드 주의사항

  • 사전 설정 패스 관리자 level_1_pass_manager, level_2_pass_managerlevel_3_pass_manager ( optimization_level 1, 2, 3의 transpile()execute() 함수)는 이제 무조건 1 큐비트 게이트 최적화를 위해 Optimize1qGatesDecomposition 패스를 무조건 사용합니다. 이전에는 이러한 패스 관리자가 기본 게이트에 Optimize1qGates 기본 게이트에 u1, u2, 또는 u3 이 포함된 경우 패스를 사용했습니다. 이전 버전을 계속 사용하려면 Optimize1qGates 패스로 사용자 정의 PassManager 를 생성해야 합니다.

  • 매개변수화된 QuantumCircuit를 변환한 후 global_phase 어트리뷰트가 더 이상 단순화된 형태로 반환되지 않을 수 있으며, 전역 위상이 a인 경우 ParameterExpression.

    예를 들어,

    qc = QuantumCircuit(1)
    theta = Parameter('theta')
    
    qc.rz(theta, 0)
    qc.rz(-theta, 0)
    
    print(transpile(qc, basis_gates=['p']).global_phase)

    이전에는 0 을 반환했지만 이제 -0.5*theta + 0.5*theta 을 반환합니다. 이 변경이 필요했던 이유는 기호 표현식을 단순화하면 런타임 성능이 크게 저하될 수 있기 때문인데, 특히 회로에 객체가 많은 경우 ParameterExpression 객체가 많은 경우 특히 그렇습니다.

  • 이제 BasicAerJobBasicAer 백엔드에서 반환된 작업 객체는 이제 동기 인스턴스인 JobV1. 즉, 시뮬레이션 실행이 완료될 때까지 run() 호출은 시뮬레이션 실행이 완료될 때까지 차단됩니다. 이전 비동기 동작을 복원하려면 다음을 래핑해야 합니다 run()futures.ThreadPoolExecutor 또는 futures.ProcessPoolExecutor 과 같은 별도의 스레드나 프로세스에서 실행되는 것으로 래핑해야 합니다.

  • BasicAer 시뮬레이터의 allow_sample_measuring 옵션 QasmSimulatorPy 의 기본값이 False 에서 True 으로 변경되었습니다. 이는 입력 회로가 샘플 측정을 지원하는 경우(활성화되어 있지 않더라도) 이를 사용하는 시뮬레이터의 실제 기본 동작을 더 잘 반영하기 위해 수행되었습니다. 샘플 측정을 지원하지 않는 회로를 실행하는 경우(즉, Reset 연산이 있거나 큐비트에서 측정 후 연산이 있는 경우) 이 옵션을 False 으로 명시적으로 설정해야 합니다 run().

  • 트랜스파일러 패스는 CommutativeCancellation 트랜스파일러 패스는 이제 대상 기준 게이트를 인식하므로 지정된 기준의 게이트만 사용합니다. 이전에는 패스로 출퇴근하는 연속 게이트는 무조건 ZGateU1Gate. 그러나 이제 패스가 베이스를 인식하고 대상 베이스를 지정하기 위한 kwarg( basis_gates)가 있으므로 kwarg를 설정하지 않으면 동작이 변경될 가능성이 있습니다. basis_gates kwarg가 사용되지 않고 회로에 가변 Z 회전 게이트가 없는 경우 정류 취소가 발생하지 않습니다.

  • Register (의 부모 클래스인 QuantumRegisterClassicalRegisterBit (의 부모 클래스인 QubitClbit) 객체는 이제 불변입니다. 이전 릴리스에서는 값을 조정할 수 있었습니다 size 또는 name 속성의 값을 조정할 수 있었습니다 Register 객체의 값과 index 또는 register 속성의 값을 조정할 수 있었습니다 Bit 객체를 처음 생성한 후 그러나 이러한 속성은 레지스터 또는 비트의 불변 속성으로 취급되므로 해시(예: 딕셔너리)에 의존하는 컨테이너 구조를 손상시키는 불건전한 동작이 발생할 수 있습니다(자세한 내용은 #4705 참조). 이러한 불건전한 동작을 방지하기 위해 이 속성은 RegisterBit 의 속성은 최초 생성 후 더 이상 설정할 수 없습니다. 이전에 런타임에 개체를 조정했다면 이제 새 값으로 Register 또는 Bit 개체를 새로 만들어야 합니다.

  • DAGCircuit.__eq__ 메서드( == 운영자가 사용하는)는 구조적 동일성을 확인하는 데 사용됩니다 DAGCircuitQuantumCircuit 인스턴스의 구조적 동일성을 확인하는 데 사용되는 global_phasecalibrations 속성이 동일성을 검사하는 필드에 포함됩니다. 즉, 이전 릴리스에서는 동일한 것으로 평가되던 회로가 global_phase 또는 calibrations 이 다를 경우 더 이상 동일하지 않을 수 있습니다. 예를 들어, 이전 릴리스에서는 True 을 반환합니다:

    import math
    
    from qiskit import QuantumCircuit
    
    qc1 = QuantumCircuit(1)
    qc1.x(0)
    
    qc2 = QuantumCircuit(1, global_phase=math.pi)
    qc2.x(0)
    
    print(qc2 == qc1)

    그러나 이제 회로의 global_phase 속성이 다르므로 이제 False 을 반환합니다.

  • 이전에 더 이상 사용되지 않는 qubits()clbits() 메서드가 제거되었습니다 DAGCircuit 클래스의 메서드는 0.15.0 테라 릴리스에서 더 이상 사용되지 않습니다. 대신 qubitsclbits 속성을 사용해야 합니다 DAGCircuit 클래스의 속성을 사용해야 합니다. 예를 들어, 달리기를 하는 경우입니다:

    from qiskit.dagcircuit import DAGCircuit
    
    dag = DAGCircuit()
    qubits = dag.qubits()

    이는 다음과 같이 대체됩니다:

    from qiskit.dagcircuit import DAGCircuit
    
    dag = DAGCircuit()
    qubits = dag.qubits
  • 가짜 펄스 백엔드에서 반환되는 PulseDefaults 가짜 펄스 백엔드에서 반환되는 qiskit.test.mock.FakeOpenPulse2Qqiskit.test.mock.FakeOpenPulse3Q 이 보다 현실적인 펄스 시퀀스 정의를 갖도록 업데이트되었습니다. 이러한 가짜 백엔드 클래스를 사용 중인 경우 이러한 변경 사항으로 인해 사용법을 업데이트해야 할 수 있습니다.

  • decompose_clifford() 함수에서 사용하는 기본 합성 방법은 quantum_info 모듈( 내부적으로 qiskit.quantum_info.Clifford.to_circuit() 메서드에서 내부적으로 사용됨)는 이제 3 큐비트 이상의 클리포드 요소 합성을 위해 최적이 아닌 탐욕스러운 컴파일 루틴을 사용합니다(Bravyi 등). al., 를 사용하면 일반적으로 기존 기본값에 비해 더 나은 CX 비용을 얻을 수 있습니다. 이전 아론슨-고츠먼 방식으로 되돌려야 하는 경우 method='AG' 을 설정하면 됩니다.

  • 0.15.0 릴리스에서 사용되지 않는 모듈 qiskit.visualization.interactive 은 이제 제거되었습니다. 대신 matplotlib 기반 시각화를 사용해야 합니다:

  • qiskit.Aerqiskit.IBMQ 최상위 속성은 이제 지연 로드됩니다. 즉, 이제 개체가 항상 존재하며 qiskit-aer 또는 qiskit-ibmq-provider 이 설치되어 있지 않거나 Python 에서 찾을 수 없는 경우 가져오기 시 더 이상 경고가 표시되지 않습니다. 이러한 모듈 속성을 사용하여 qiskit-aer 또는 qiskit-ibmq-provider 의 존재 여부를 확인하고 None 와 명시적으로 비교하거나 속성이 없는지 확인했다면 이제 항상 객체로 정의되어 있으므로 더 이상 작동하지 않습니다. 즉, 다음과 같이 실행합니다:

    try:
        from qiskit import Aer
    except ImportError:
        print("Aer not available")
    
    or::
    
    try:
        from qiskit import IBMQ
    except ImportError:
        print("IBMQ not available")

    는 더 이상 작동하지 않습니다. 대신 이러한 제공업체가 있는지 확인하려면 qiskit.providers.aer.Aerqiskit.providers.ibmq.IBMQ 을 명시적으로 사용할 수 있습니다:

    try:
        from qiskit.providers.aer import Aer
    except ImportError:
        print("Aer not available")
    
    try:
        from qiskit.providers.ibmq import IBMQ
    except ImportError:
        print("IBMQ not available")

    를 클릭하거나 bool(qiskit.Aer) , bool(qiskit.IBMQ) 등을 확인하세요:

    import qiskit
    
    if not qiskit.Aer:
        print("Aer not available")
    if not qiskit.IBMQ:
        print("IBMQ not available")

    이 변경은 키스킷 패키지 간의 잠재적인 가져오기 주기 문제를 방지하고 Aer 또는 IBMQ를 사용하지 않을 때 가져오기 시간을 개선하기 위해 필요했습니다.

  • 사용자 구성 파일 옵션 suppress_packaging_warnings 옵션과 QISKIT_SUPPRESS_PACKAGING_WARNINGS 환경 변수는 더 이상 영향을 미치지 않으며 자동으로 무시됩니다. 이 옵션이 제어하던 경고는 제거되었으며 더 이상 qiskit 모듈에서 가져오기 시점에 표시되지 않습니다.

  • 이전에 사용되지 않던 condition kwarg for qiskit.dagcircuit.DAGNode 생성자가 제거되었습니다. 0.15.0 릴리스에서 더 이상 사용되지 않습니다. 대신 이제 전달된 객체에 대해 고전적인 조건을 설정해야 합니다 Instruction 생성자에 전달된 객체에 DAGNodeop 생성자에 전달된 객체에 기존 조건을 설정해야 합니다.

  • 새 클래스를 생성할 때 Register (의 부모 클래스인 QuantumRegisterClassicalRegister) 또는 QuantumCircuit 객체를 생성할 때(예: QuantumCircuit(2)), 이제 비트 수를 정수 또는 모호하지 않은 정수로 형변환 가능한 다른 유형(예: 2.0)으로 지정해야 합니다. 정수가 아닌 값은 이제 의도가 불분명하므로 오류가 발생합니다(분수 비트를 가질 수 없음). 변경된 이유에 대한 자세한 내용은 다음을 참조하세요: #4855

  • 네트워크X는 더 이상 키스킷-테라에 대한 요구 사항이 아닙니다. 3개의 메서드를 제외한 모든 네트워크x 사용은 qiskit-terra 내에서 제거되었습니다:

    • qiskit.dagcircuit.DAGCircuit.to_networkx
    • qiskit.dagcircuit.DAGCircuit.from_networkx
    • qiskit.dagcircuit.DAGDependency.to_networkx

    이러한 방법 중 하나를 사용하는 경우 계속 사용하려면 사용자 환경에 네트워크x를 수동으로 설치해야 합니다.

  • 기본적으로 macOS 에서 Python >= 3.8 parallel_map() 는 더 이상 여러 프로세스에서 실행되지 않습니다. 이는 이전 릴리스에서 기본 동작이 여러 프로세스가 parallel_map() 가 여러 프로세스를 실행하는 것이 기본 동작이었습니다. macOS 이 변경은 Python 3.8 및 3.9 의 최신 버전에서는 멀티 프로세싱이 불안정하거나 fork 대신 spawn 으로 새 프로세스를 시작하는 Python 3.8 의 변경으로 인해 상당한 오버헤드가 추가되기 때문에 이루어졌습니다. Python >= 3.8 를 사용하여 macOS 에서 병렬 실행을 다시 활성화하려면 사용자 구성 파일 parallel 옵션을 사용하거나 환경 변수 QISKIT_PARALLELTrue 로 설정하면 됩니다.

  • 클래스의 생성자에서 이전에 더 이상 사용되지 않는 kwarg callback PassManager 클래스의 생성자에서 이전에 사용되지 않던 쿽이 제거되었습니다. 이 kwarg는 0.13.0 릴리스(2020년 4월 9일) 이후 더 이상 사용되지 않습니다. 대신 callback kwarg를 직접 qiskit.transpiler.PassManager.run() 메서드에 직접 전달할 수 있습니다. 예를 들어, 사용 중인 경우

    from qiskit.circuit.random import random_circuit
    from qiskit.transpiler import PassManager
    
    qc = random_circuit(2, 2)
    
    def callback(**kwargs)
      print(kwargs['pass_'])
    
    pm = PassManager(callback=callback)
    pm.run(qc)

    로 대체할 수 있습니다:

    from qiskit.circuit.random import random_circuit
    from qiskit.transpiler import PassManager
    
    qc = random_circuit(2, 2)
    
    def callback(**kwargs)
      print(kwargs['pass_'])
    
    pm = PassManager()
    pm.run(qc, callback=callback)
  • 이제 더 이상 qiskit.pulse.Channel 또는 qiskit.pulse.PulseChannel 과 같은 접두사 없이 기본 채널을 인스턴스화할 수 없습니다. 이러한 클래스는 qiskit.pulse.DriveChannel 와 같은 다양한 사용자 대면 채널 클래스의 유형을 분류하도록 설계되었지만 대상 리소스로서의 정의는 없습니다. 이전에 qiskit.pulse.Channel 또는 qiskit.pulse.PulseChannel 을 직접 인스턴스화했다면 더 이상 허용되지 않습니다. 적절한 하위 클래스를 사용하세요.

  • require_cp 및/또는 require_tp 의 경우 qiskit.quantum_info.process_fidelity(), qiskit.quantum_info.average_gate_fidelity(), qiskit.quantum_info.gate_error()True 인 경우, 이제 입력 채널이 각각 CP가 아닌 경우 예외를 발생시키는 이전 동작 대신 QiskitError 예외를 발생시키는 이전 동작 대신 경고만 기록합니다.

  • 클래스의 QFT 모듈의 qiskit.circuit.library 모듈의 클래스는 이제 텐서의 리틀 엔디안 표현을 사용하여 푸리에 변환을 계산합니다. 즉, 계산 기반이 정수의 리틀 엔디안 비트 순서와 일치한다고 가정하면 1|1\rangle 상태는 01+2..|0\rangle - |1\rangle + |2\rangle - .. 에 매핑됩니다. 0=000,1=001|0\rangle = |000\rangle, |1\rangle = |001\rangle 등 이는 비트 순서에 리틀 엔디안 규칙을 사용하는 키스킷의 나머지 부분과 일관성을 유지하기 위한 것입니다. 이전 비트 순서에 의존하고 있었다면 reverse_bits() 메서드를 사용하여 이전 동작으로 되돌릴 수 있습니다. 예를 들어,

    from qiskit.circuit.library import QFT
    
    qft = QFT(5).reverse_bits()
  • 이전에는 dict 이었던 qiskit.__qiskit_version__ 모듈 어트리뷰트는 이제 가져오기 시점이 아닌 런타임에 qiskit 요소의 버전을 확인하는 사용자 정의 읽기 전용 Mapping 객체를 반환합니다. 이는 패키지에서 버전이 필요한 경우에만 런타임에 요소 패키지를 가져옴으로써 qiskit의 가져오기 경로를 가속화하고 가능한 가져오기 주기를 없애기 위해 수행되었습니다. 이는 이전에 반환한 dict 과 완전히 호환되어야 하며 대부분의 일반적인 사용 사례에서는 차이가 없습니다. 그러나 일부 애플리케이션이 콘텐츠를 변경하거나 명시적으로 유형 검사에 의존하는 경우 이 변경 사항에 적응하기 위해 업데이트가 필요할 수 있습니다.

  • qiskit.execute 모듈의 이름이 qiskit.execute_function. 이는 다음과 같이 재내보내는 함수 사이의 잠재적인 이름 충돌을 피하기 위해 필요했습니다 execute() 함수로 다시 내보내는 qiskit.execute. qiskit.execute 함수가 qiskit.execute 모듈과 충돌할 수 있는데, 이는 Python 이 qiskit.execute 을 모듈로 취급하거나 그 반대의 경우로 인해 암호화된 오류로 이어질 수 있습니다. 이 충돌을 피하기 위해 모듈 이름을 변경해야 했습니다. qiskit.execute 를 가져와서 모듈을 가져오는 경우(일반적인 사용법은 from qiskit.execute import execute)에는 qiskit.execute_function 를 대신 사용하도록 업데이트해야 합니다. qiskit.execute 는 이제 항상 해당 함수로 해결됩니다.

  • qiskit.compiler.transpile, qiskit.compiler.assemble, qiskit.compiler.schedule, qiskit.compiler.sequence 모듈의 이름이 각각 qiskit.compiler.transpiler, qiskit.compiler.assembler, qiskit.compiler.scheduler, qiskit.compiler.sequence 로 변경되었습니다. 이는 모듈과 다시 내보낸 함수 경로 사이의 잠재적인 이름 충돌을 피하기 위해 필요했습니다 qiskit.compiler.transpile(), qiskit.compiler.assemble(), qiskit.compiler.schedule()qiskit.compiler.sequence(). 일부 상황에서는 모듈 경로와 다시 내보낸 함수 경로 간의 이름 충돌로 인해 Python 이 함수를 사용하려는 의도가 있는데도 가져오기를 모듈로 취급하거나 그 반대의 경우 암호화된 오류가 발생할 수 있습니다. 이 충돌을 피하기 위해 모듈 이름을 변경해야 했습니다. 이전에 임포트를 사용하여 모듈을 가져온 경우(일반적인 사용법은 qiskit.compiler.transpile import transpile``에서``처럼) 새 모듈 경로를 사용하려면 이를 업데이트해야 합니다. qiskit.compiler.transpile(), qiskit.compiler.assemble(), qiskit.compiler.schedule()qiskit.compiler.sequence() 는 이제 항상 함수로 리졸브됩니다.

  • 클래스는 qiskit.quantum_info.Quaternion 클래스는 그 목적을 더 잘 반영하기 위해 qiskit.quantum_info.operator 서브모듈에서 qiskit.quantum_info.synthesis 서브모듈로 이동했습니다. 루트 모듈에서 가져오는 경우 변경할 필요가 없지만 qiskit.quantum_info 모듈에서 임포트하는 경우에는 변경할 필요가 없지만 qiskit.quantum_info.operator 에서 임포트하는 경우에는 임포트 경로를 업데이트해야 합니다.

  • 2020년 4월 키스킷 테라 0.14.0 릴리스 이후 사용되지 않는 QuantumCircuit.mcmt 메서드를 제거했습니다. 메서드를 사용하는 대신 MCMT 클래스를 대신 사용하여 다중 제어 다중 타겟 게이트를 구성하고 qiskit.circuit.QuantumCircuit.append() 또는 qiskit.circuit.QuantumCircuit.compose() 를 사용하여 회로에 추가하세요.

    예를 들어 교체할 수 있습니다:

    circuit.mcmt(ZGate(), [0, 1, 2], [3, 4])

    다음 행으로 바꾸십시오.

    from qiskit.circuit.library import MCMT
    mcmt = MCMT(ZGate(), 3, 2)
    circuit.compose(mcmt, range(5))
  • 2020년 4월 키스킷 테라 0.14.0 릴리스 이후 더 이상 사용되지 않는 QuantumCircuit.diag_gate 메서드를 제거했습니다. 대신 diagonal() 메서드의 QuantumCircuit.

  • 2020년 4월 키스킷 테라 0.14.0 릴리스 이후 더 이상 사용되지 않는 QuantumCircuit.ucy 메서드를 제거했습니다. 대신 ucry() 메서드의 QuantumCircuit.

  • 이전에 더 이상 사용되지 않는 mirror() 메서드 qiskit.circuit.QuantumCircuit 가 제거되었습니다. 0.15.0 릴리스에서 더 이상 사용되지 않습니다. 대신 qiskit.circuit.QuantumCircuit.reverse_ops() 메서드를 대신 사용해야 합니다. 미러링은 회로의 출력 큐비트를 교체하는 것과 혼동될 수 있기 때문입니다. reverse_ops() 메서드는 미러링 대신 적용되는 게이트의 순서만 바꿉니다.

  • 이전에 더 이상 사용되지 않는 플로트 전달 지원( scale kwarg를 첫 번째 위치 인수로 사용하는 경우 qiskit.circuit.QuantumCircuit.draw() 가 제거되었습니다. 0.12.0 릴리스에서 더 이상 사용되지 않습니다. 메서드의 첫 번째 위치 인수는 qiskit.circuit.QuantumCircuit.draw() 메서드의 첫 번째 위치 인수는 이제 부동형을 허용하지 않는 output kwarg입니다. 대신 scale 을 위치적으로 사용하는 대신 네임드 kwarg로 사용해야 합니다.

    예를 들어 이전에 draw 으로 전화했다면:

    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.draw(0.75, output='mpl')

    이제 이렇게 해야 합니다:

    from qiskit import QuantumCircuit
    
    qc = QuantumCircuit(2)
    qc.draw(output='mpl', scale=0.75)

    또는:

    qc.draw('mpl', scale=0.75)
  • 키스킷 펄스의 기능(qiskit.pulse) 기능은 0.15.0 릴리스(2020년 8월)에서 더 이상 사용되지 않으며 제거되었습니다. 전체 변경 사항은 다음과 같습니다:

    모듈
    이전
    새로 작성
    qiskit.pulse.librarySamplePulseWaveform
    qiskit.pulse.libraryConstantPulseConstant
    (모듈 이름 변경)pulse.pulse_lib 모듈qiskit.pulse.library
    클래스
    이전 메소드
    새 메소드
    ParametricPulseget_sample_pulseget_waveform
    Instructioncommand해당사항 없음 명령과 지침이 통합되었습니다. operands() 을 사용하여 지침 데이터에 대한 정보를 얻으세요.
    Acquireacquires, mem_slots, reg_slotsacquire(), mem_slot(), reg_slot(). ( Acquire 명령어는 더 이상 여러 큐비트에 걸쳐 브로드캐스트되지 않습니다.)
  • 이전에 붙잡고 있던 사전 DAGCircuit 가장자리가 제거되었습니다. 대신, 이제 엣지는 이전에 사전에 포함되었던 Bit 인스턴스를 'wire' 필드에 포함시킵니다. to_networkx() 에서 반환된 NetworkX 그래프에는 여전히 에지 속성에 대한 사전이 있지만 'name' 필드는 더 이상 채워지지 않습니다.

  • 속성의 parameters 속성은 QuantumCircuit 클래스의 속성이 더 이상 set 을 반환하지 않습니다. 대신 set 에서 제공하는 모든 메서드를 구현하는 ParameterView 객체를 반환합니다(더 이상 사용되지 않지만). 이는 이름 정렬된 매개변수를 보존하는 모델을 지원하기 위해 수행되었습니다. 속성이 반환한 set 의 이전 사용법과 완전히 호환되어야 합니다 parameters 속성이 반환한 이전 사용법과 호환되어야 합니다. 단, 집합의 명시적 유형 검사가 수행된 경우는 예외입니다.

  • 실행 시 transpile() 에서 QuantumCircuit 와 함께 delay() 명령어로 실행할 때, 단위는 dt(샘플 시간)의 값이 transpile()로 명시적으로 또는 dt kwarg를 통해 또는 BackendConfigurationbackend 를 통해 전달된 Backend 객체의 경우입니다.

  • meas_map (객체의 어트리뷰트이거나 PulseBackendConfiguration 객체의 속성이거나 meas_map 에 대응하는 schedule(), assemble(), sequence()또는 execute() 함수)의 해석이 하드웨어의 실제 제약 조건과 더 잘 일치하도록 업데이트되었습니다. 이 데이터의 형식은 목록 목록이며, 내부 목록의 항목은 큐비트 레이블을 지정하는 정수입니다. 예:

    [[A, B, C], [D, E, F, G]]

    이전에는 meas_map 제약 조건이 하나의 큐비트(예: A)가 획득되면 해당 큐비트와 하위 그룹을 공유하는 다른 모든 큐비트(B 및 C)가 동시에 같은 기간 동안 획득되어야 한다고 해석되었습니다. 이 제약 조건이 완화되었습니다. 한 번 획득했다고 해서 더 많은 획득이 필요하지 않습니다. (A를 획득한 경우 B와 C는 획득할 필요가 없습니다.) 대신, 동일한 측정 그룹의 큐비트는 부분적으로 겹치는 방식으로 획득할 수 없습니다. meas_map 이 공유 획득 리소스를 지정한다고 생각하면 됩니다( t=1000 에서 t=2000 로 A를 획득하면 1000<t<2000 에서 시작하는 B를 획득할 수 없습니다). 예를 들어,

    # Good
    meas_map = [[0, 1]]
    # Acquire a subset of [0, 1]
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    
    # Acquire 0 and 1 together (same start time, same duration)
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1))
    
    # Acquire 0 and 1 disjointly
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1)) << 10
    
    # Acquisitions overlap, but 0 and 1 aren't in the same measurement
    # grouping
    meas_map = [[0], [1]]
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1)) << 1
    
    # Bad: 0 and 1 are in the same grouping, but acquisitions
    # partially overlap
    meas_map = [[0, 1]]
    sched = pulse.Schedule()
    sched = sched.append(pulse.Acquire(10, acq_q0))
    sched = sched.append(pulse.Acquire(10, acq_q1)) << 1

지원 중단 노트

  • 에 두 개의 새로운 인수가 추가되었습니다 qiskit.dagcircuit.DAGNode.semantic_eq(), bit_indices1bit_indices2 에 두 개의 새로운 인수가 추가되었는데, 이는 각 인스턴스의 Bit 인스턴스를 DAGNode 의 인스턴스를 qubits 또는 clbits 목록의 해당 인덱스에 매핑할 것으로 예상됩니다 DAGCircuit. 사용 중단 기간 동안 이러한 인수는 선택 사항이며 지정하지 않으면 각 인스턴스의 registerindex 속성을 기반으로 매핑이 자동으로 구성됩니다 Bit 인스턴스의 속성을 기반으로 매핑이 자동으로 구성됩니다. 그러나 향후 릴리스에서는 필수 인수가 될 것이며 매핑은 사용자가 제공해야 합니다.

  • 빌더 함수 pulse 빌더 기능:

    • qiskit.pulse.call_circuit()
    • qiskit.pulse.call_schedule()

    는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이러한 기능은 qiskit.pulse.call() 으로 통합되어 대신 사용해야 합니다.

  • 메서드 qiskit.pulse.Schedule 메서드 qiskit.pulse.Schedule.flatten() 메서드는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 동일한 작업을 수행하는 qiskit.pulse.transforms.flatten() 함수를 사용하여 동일한 작업을 수행할 수 있습니다.

  • 다음 클래스의 경우 assign_parameters() :

    및 모든 하위 클래스는 이제 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 기능은 매개변수화된 펄스 프로그램을 구성하는 ScheduleBlock 에 포함되었으며, 이는 파라미터화된 펄스 프로그램을 구성하기 위한 향후 방향입니다.

  • 다음 클래스에 대한 parameters 속성입니다:

    은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이 기능은 매개변수화된 펄스 프로그램을 구성하는 ScheduleBlock 에 포함되었으며, 이는 파라미터화된 펄스 프로그램을 구성하기 위한 향후 방향입니다.

  • Python 3.6 지원은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 지원이 중단되면 사용 중인 Python 버전을 Python 3.7 이상으로 업그레이드해야 합니다.

  • Two QuantumCircuit 메서드 combine()extend() 와 해당 Python 연산자 ++= 는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 QuantumCircuit 메서드 compose() 메서드를 사용해야 합니다. 메서드를 사용하면 compose() 메서드를 사용하면 일치하는 레지스터가 없는 두 개의 회로를 보다 유연하게 구성할 수 있습니다. 그러나 더 이상 사용되지 않는 방법과 달리 큐비트/클릭비트를 자동으로 추가하지는 않습니다. 새 큐비트/클릭비트에 회로를 추가하려면 qiskit.circuit.QuantumCircuit.tensor() 메서드를 사용할 수 있습니다. 예를 들어,

    from qiskit.circuit import QuantumRegister, QuantumCircuit
    
    a = QuantumRegister(2, 'a')
    circuit_a = QuantumCircuit(a)
    circuit_a.cx(0, 1)
    
    b = QuantumRegister(2, 'b')
    circuit_b = QuantumCircuit(b)
    circuit_b.cz(0, 1)
    
    # same as circuit_a + circuit_b (or combine)
    added_with_different_regs = circuit_b.tensor(circuit_a)
    
    # same as circuit_a + circuit_a (or combine)
    added_with_same_regs = circuit_a.compose(circuit_a)
    
    # same as circuit_a += circuit_b (or extend)
    circuit_a = circuit_b.tensor(circuit_a)
    
    # same as circuit_a += circuit_a (or extend)
    circuit_a.compose(circuit_a, inplace=True)
  • 인스턴스 전달 지원 Qubit 인스턴스를 qubits kwarg로 전달하기 위한 지원은 qiskit.transpiler.InstructionDurations.get() 메서드에 대한 지원은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 원하는 큐비트의 정수 인덱스로 get() 메서드를 원하는 큐비트의 정수 인덱스로 호출해야 합니다.

  • BaseOperator 서브클래스의 compose 메서드 호출에 @ (__matmul__)를 사용하는 경우(예 Operator)는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 메서드 qiskit.quantum_info.Operator.compose() 메서드를 직접 사용하거나 & (__and__) 연산자를 사용하여 호출할 수도 있습니다.

  • * (__mul__)를 사용하여 dot() 메서드를 호출하는 데 BaseOperator 서브클래스(예 qiskit.quantum_info.Operator)는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 dot() 를 직접 호출할 수 있습니다.

  • @ (__matmul__)를 사용하여 evolve() 메서드의 qiskit.quantum_info.Statevectorqiskit.quantum_info.DensityMatrix 클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. evolve 메서드는 직접 사용하거나 & (__and__) 연산자를 사용하여 호출할 수도 있습니다.

  • qiskit.pulse.schedule.ParameterizedSchedule 클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 펄스 객체를 직접 매개변수화할 수 있습니다 Schedule 객체를 직접 매개변수화할 수 있습니다 Parameter 객체로 직접 매개변수화할 수 있습니다:

    from qiskit.circuit import Parameter
    from qiskit.pulse import Schedule
    from qiskit.pulse import ShiftPhase, DriveChannel
    
    theta = Parameter('theta')
    target_schedule = Schedule()
    target_schedule.insert(0, ShiftPhase(theta, DriveChannel(0)), inplace=True)
  • 모듈의 qiskit.pulse.ScheduleComponent 클래스는 qiskit.pulse 모듈의 클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 또는 qiskit.pulse.Schedule 또는 qiskit.pulse.Instruction 으로 직접 교체해야 합니다. 또한 ScheduleComponent 클래스의 주요 목적은 두 가지 모두에 대한 공통 기본 클래스였습니다 ScheduleScheduleComponentInstruction 입력을 수락하는 것을 명시적으로 형식 검사하거나 문서화했던 모든 곳의 경우 Instruction 또는 Schedule.

  • IBMQ API 페이로드에 대한 JSON 스키마 파일 및 사용법은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 여기에는 qiskit.schemas 모듈과 qiskit.validation 모듈 아래의 모든 것이 포함됩니다. 여기에는 validate kwargs에 대한 qiskit.qobj.QasmQobj.to_dict()qiskit.qobj.QasmQobj.to_dict() 의 모듈 수준 fastjsonschema 유효성 검사기와 함께 qiskit.qobj (사용 중단 경고를 발생시키지 않음). 스키마 파일은 Qiskit/ibmq-schemas 리포지토리로 이동되었으며, 이 스키마 파일은 API 스키마의 정식 버전으로 취급되어야 합니다. 앞으로는 해당 스키마만 업데이트를 수신하고 스키마의 진실 소스로 사용됩니다. 키스킷-테라에 번들로 제공되는 스키마에 의존하고 있다면 대신 해당 저장소를 사용하도록 업데이트해야 합니다.

  • qiskit.util 모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 으로 대체되었습니다 qiskit.utils 로 대체되었으며, 동일한 기능을 제공하며 향후 확장될 예정입니다. Python 3.6 에서는 지원되지 않았으므로 이 사용 중단과 관련된 DeprecationWarning 은 발행되지 않습니다.

  • 모듈의 CXDirection 트랜스파일러 패스는 qiskit.transpiler.passes 모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 GateDirection 을 사용해야 합니다. CXDirection 와 동일하게 동작하지만, 이제 다음과 같은 회로 변환을 지원한다는 점을 제외하면 ECRGate 게이트 외에 CXGate gates.

  • 모듈의 CheckCXDirection 트랜스파일러 패스는 qiskit.transpiler.passes 모듈은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 CheckGateDirection 패스를 사용해야 합니다. CheckCXDirection 와 동일하게 동작하지만, 이제 2쿼비트 게이트뿐만 아니라 모든 2쿼비트 게이트의 방향 확인도 지원한다는 점을 제외하면 CXGate 게이트.

  • 메서드 WeightedAdder 메서드 num_ancilla_qubits() 는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 다른 회로 라이브러리 API와 일치하는 qiskit.circuit.library.WeightedAdder.num_ancillas 속성으로 대체되었으며, 이는 다른 회로 라이브러리의 API와 일치합니다.

  • 클래스의 다음 레거시 메서드는 qiskit.quantum_info.Pauli 클래스의 다음 레거시 메서드는 더 이상 사용되지 않습니다. 업데이트된 폴리 클래스에서 대체 사용법은 메서드 문서를 참조하세요.

    • from_label()
    • sgn_prod()
    • to_spmatrix()
    • kron()
    • update_z()
    • update_x()
    • insert_paulis()
    • append_paulis()
    • delete_qubits()
    • pauli_single()
    • random()
  • channel 또는 target 인수로 list 또는 numpy.ndarray 사용 qiskit.quantum_info.process_fidelity(), qiskit.quantum_info.average_gate_fidelity(), qiskit.quantum_info.gate_error()qiskit.quantum_info.diamond_norm() 함수는 더 이상 사용되지 않으며 향후 릴리스에서는 지원되지 않습니다. 입력은 대신 Gate 또는 BaseOperator 서브클래스 객체(예 Operator, Choi등)

  • 에서 참조에 액세스 QubitClbit 인스턴스를 통해 해당 레지스터를 포함하는 register 또는 index 속성은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 Register 객체를 쿼리하여 포함된 Bit 객체를 쿼리할 수 있습니다.

  • 현재 기능의 qiskit.visualization.pulse_drawer() 함수의 현재 기능은 더 이상 사용되지 않으며 향후 릴리스에서 qiskit.visualization.pulse_drawer_v2() (이전 버전과 호환되지 않음)로 대체될 예정입니다.

  • set 유형에서 상속된 메서드를 출력에 사용하는 것은 parameters 속성(이전에는 set)에서 상속된 메서드의 사용은 더 이상 사용되지 않습니다 QuantumCircuit 클래스의 메서드 사용은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 여기에는 add(), difference(), difference_update(), discard(), intersection(), intersection_update(), issubset(), issuperset(), symmetric_difference(), symmetric_difference_update(), union(), update(), __isub__() ( -= 운영자) 및 __ixor__() ( ^= 운영자)의 방법이 포함됩니다.

  • 메서드의 첫 번째(그리고 유일한) 위치 인자의 이름이 qiskit.circuit.QuantumCircuit.bind_parameters() 메서드의 첫 번째 위치 인수 이름이 value_dict 에서 values 으로 변경되었습니다. values_dict 이라는 이름으로 인수를 전달하는 기능은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 예를 들어, 이전에 다음과 같은 호출로 bind_parameters() 와 같은 호출을 사용했다면 bind_parameters(values_dict={}) 이는 더 이상 사용되지 않으며 bind_parameters(values={}) 으로 대체하거나 인수를 위치적으로 전달 bind_parameters({}) 하는 것이 좋습니다.

  • 메서드의 첫 번째(그리고 유일한) 위치 인자의 이름이 qiskit.circuit.QuantumCircuit.assign_parameters() 메서드의 첫 번째 위치 인수 이름이 param_dict 에서 parameters 으로 변경되었습니다. param_dict 이라는 이름으로 인수를 전달하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 예를 들어, 이전에 다음과 같은 호출로 assign_parameters() 와 같은 호출을 사용했다면 assign_parameters(param_dict={}) 이는 더 이상 사용되지 않으며 assign_parameters(values={}) 으로 대체하거나 인수를 위치적으로 전달 assign_parameters({}) 하는 것이 좋습니다.

버그 수정

  • 함수가 execute() 함수가 QiskitError 예외를 발생시키는 문제를 수정했습니다 ParameterVectorparameter_bind 객체가 전달될 때 함수가 예외를 발생시키는 문제를 수정했습니다. IMPORT의 경우, 조치 문자열(예: "REPLACE into ...") 매개변수에서 컬럼 목록의 닫는 괄호 이후에 공백 이외의 문자가 있습니다. 예를 들어, 이제 다음과 같이 호출할 수 있습니다:

    execute(circuit, backend, parameter_binds=[{pv1: [...], pv2: [...]}])

    여기서 pv1pv2ParameterVector 객체입니다. 수정 #5467

  • 클래스의 파라메트릭 펄스 레이블과 관련된 문제를 수정했습니다 PulseQobjInstruction 클래스의 파라메트릭 펄스 레이블이 샘플링된 펄스 그대로 제대로 설정되지 않던 문제를 수정했습니다. 이는 또한 반환된 펄스 이름에서 가져온 펄스 이름이 PulseDefaults 에서 반환된 Backend에서 가져온 펄스 이름(예: x90, x90m 등)이 올바르게 설정됩니다. 수정 #5363

  • 바인딩되지 않은 매개변수가 속성의 global_phase 어트리뷰트에서만 발생하는 QuantumCircuit 객체의 속성에서만 발생하는 바인딩되지 않은 매개변수가 parameters 속성에 표시되지 않고 바인딩할 수 없는 문제를 수정했습니다. 수정 #5806

  • 속성은 calibrations 속성은 QuantumCircuit 객체의 속성은 이제 += (즉, extend() 메서드) 및 + (즉, combine() 메서드)를 사용할 때 보존됩니다. 59305908 수정

  • 클래스의 name 클래스의 세터 메서드 Register (의 부모 클래스인 QuantumRegisterClassicalRegister)는 이전에는 할당된 문자열이 OpenQASM 사양에 따라 유효한 레지스터 이름인지 확인하지 않았습니다. 이전에는 생성자에서 이름이 지정된 경우에만 이 검사가 수행되었지만, 이제 name 속성을 잘못된 값으로 직접 설정해도 예외가 발생하도록 수정되었습니다. 수정 #5461

  • 함수 관련 문제를 수정했습니다 qiskit.visualization.circuit_drawer() 함수 및 qiskit.circuit.QuantumCircuit.draw() 메서드 관련 문제를 수정했습니다 QuantumCircuitGateMeasure 를 시각화할 때 발생하는 문제를 수정했습니다 ClassicalRegister를 사용할 때 조건부 GateMeasure 의 왼쪽에 표시할 수 있었습니다. 수정 #5387

  • 트랜스파일러 패스에서 qiskit.transpiler.passes.CSPLayout 에서 낮은 번호의 큐비트에 대한 편향이 관찰될 수 있습니다. 이 바람직하지 않은 편향은 후보를 무작위로 섞어 결과를 무작위화함으로써 수정되었습니다. 또한 CSPLayout 패스의 preset_passmanagers (레벨 2 및 3의 경우)의 패스 사용법이 seed_transpiler kwarg가 설정된 경우 구성된 시드를 사용하도록 조정되었습니다 transpile() 가 호출될 때 설정된 시드를 사용하도록 변경되었습니다. 수정 #5990

  • 객체의 channels 필드가 출력에 포함되지 않는 버그 수정 PulseBackendConfiguration 객체에 대한 필드가 qiskit.providers.models.PulseBackendConfiguration.to_dict 메서드의 출력에 포함되지 않던 버그를 수정합니다. 수정 #5579

  • 에지 케이스에 대한 'circular' 얽힘을 수정했습니다 qiskit.circuit.library.NLocal 회로 클래스가 얽힘 블록과 크기가 같은 에지 케이스(예: 2큐비트 회로 및 CZ 얽힘 게이트)에 대해 수정되었습니다. 이 경우 얽힘 게이트는 하나만 있어야 하는데, 실수로 첫 번째 게이트와 반대 방향으로 두 번째 게이트가 추가되었습니다. 수정됨 qiskit-community/qiskit-aqua#1452

  • 클래스에서 중단점 처리를 수정했습니다 PiecewisePolynomialPauliRotations 클래스의 중단점 처리를 수정했습니다 qiskit.circuit.library. 이제 n 간격의 경우 n+1 중단점이 허용됩니다. 이렇게 하면 2num qubits2^\text{num qubits} 이외의 다른 끝 간격을 지정할 수 있습니다. 이는 마지막 간격의 끝에서 2num qubits2^\text{num qubits} 까지의 함수가 아이덴티티이기 때문에 중요합니다.

  • 회로 클래스의 문제를 수정했습니다 qiskit.circuit.library.Permutation 회로 클래스에서 일부 순열이 제대로 생성되지 않는 문제를 수정했습니다. 이 문제는 qiskit.circuit.library.QuantumVolume 와 함께 호출된 경우에도 영향을 줄 수 있습니다. 5812 수정

  • 메서드를 사용하여 QASM 출력을 생성할 때 발생하는 문제를 수정했습니다 qasm() 메서드를 사용하여 QuantumCircuit 객체에 대한 메서드로 ControlledGate 컨트롤이 있는 객체에 대한 메서드를 사용하여 출력을 생성하면 지정된 컨트롤 상태와 무관하게 모든 컨트롤이 닫힌 것처럼 출력되는 문제를 수정했습니다. 이렇게 하면 생성된 QASM을 구문 분석할 경우 from_qasm_str() 와 다른 회로가 생성됩니다.

    이 문제는 다음에서 QASM 출력을 업데이트하여 해결되었습니다 qasm()XGate 를 사용하여 개방형 컨트롤을 구현하는 복합 게이트를 정의함으로써 해결되었습니다. 복합 게이트의 이름은 <original_gate_name>_o<ctrl_state> , 여기서 o 은 개방형 제어를 나타내고 ctrl_state 은 제어 상태의 정수 값입니다. 수정 #5443

  • 객체를 바인딩하는 문제를 수정했습니다 Parameter 객체를 QuantumCircuitparameter_binds 에 있는 객체를 바인딩하면 execute 함수로 바인딩하면 바인딩된 모든 QuantumCircuit 객체가 모두 동일한 name 을 갖게 되어 결과 이름도 고유하지 않게 되는 문제를 수정했습니다. 이 수정으로 인해 bind_parameters()assign_parameters()inplace=False 로 지정할 때 고유한 회로 이름을 지정합니다:

    <base name>-<class instance no.>[-<pid name>]

    여기서 <base name> 은 "이름" kwarg에서 제공한 이름이며, 그렇지 않으면 기본값은 "회로"입니다. 클래스 인스턴스 번호는 클래스의 인스턴스가 생성될 때마다 증가합니다. <pid name> 가 주 프로세스 외부에서 호출되면 추가됩니다. 수정 #5185

  • 입력 회로에 바인딩되지 않은 객체가 포함된 경우 예외를 발생시키는 scheduler() 함수의 문제를 수정했습니다 QuantumCircuit 객체가 포함된 경우 예외를 발생시키는 문제를 수정했습니다. 수정 #5304

  • 트랜스파일러 패스의 qiskit.transpiler.passes.TemplateOptimization 트랜스파일러 패스의 문제를 수정했습니다 Parameter 객체가 포함된 템플릿 회로가 일부 시나리오에서 템플릿 일치 중에 매개변수를 바인딩할 수 없는 경우 충돌하는 문제를 수정했습니다. 이제 Parameter 객체가 바인딩되지 않은 템플릿을 바인딩할 수 없는 경우 Parameter 이 있는 템플릿은 버려지고 TemplateOptimization 패스에 의해 무시됩니다. 수정 #5533

  • 클래식 비트가 부적절하게 처리되던 qiskit.visualization.timeline_drawer() 함수의 클래식 비트가 부적절하게 처리되는 문제를 수정했습니다. 수정 #5361

  • 함수의 문제를 수정했습니다 qiskit.visualization.circuit_drawer() 함수와 qiskit.circuit.QuantumCircuit.draw() 메서드에서 Delay 객체의 인스트럭션이 QuantumCircuit 객체의 명령이 유휴 시간으로 올바르게 처리되지 않던 문제를 수정했습니다. 따라서 idle_wires kwarg를 False 으로 설정하면 전선이 있는 Delay 객체가 있는 와이어가 계속 표시됩니다. 전선에 개체만 있는 경우 유휴 전선이 시각화에서 제거되도록 수정되었습니다 Delay 오브젝트만 있는 경우 시각화에서 제거되도록 수정되었습니다.

  • 이전에는 layout_method kwarg 옵션이 함수에 제공되고 transpile() 함수에 제공되고 optimization_level kwarg가 >= 2로 설정되어 패스 qiskit.transpiler.passes.CSPLayout 가 실행될 경우 CSPLayout 가 해결책을 찾으면 layout_method 의 메서드가 실행되지 않았습니다. 지정한 경우 항상 layout_method 을 사용하도록 수정되었습니다. 수정 #5409

  • 인자 coupling_map=None (명시적으로 설정하거나 기본값으로 암시적으로 설정하거나 backend kwarg를 통해 설정)를 사용하면 트랜스파일링 프로세스가 회로를 '임베딩'하지 않습니다. 즉, initial_layout 을 지정하더라도 가상 큐비트는 물리적 큐비트에 할당되지 않았습니다. 이 문제가 수정되어 이제 qiskit.compiler.transpile() 함수는 회로를 임베드하여 initial_layout 인수를 존중합니다:

    from qiskit import QuantumCircuit, QuantumRegister
    from qiskit.compiler import transpile
    
    qr = QuantumRegister(2, name='qr')
    circ = QuantumCircuit(qr)
    circ.h(qr[0])
    circ.cx(qr[0], qr[1])
    
    transpile(circ, initial_layout=[1, 0]).draw(output='mpl')

    initial_layout 이 회로보다 더 많은 큐비트를 참조하는 경우, 트랜스파일링 프로세스는 부호로 회로를 확장합니다.

    from qiskit import QuantumCircuit, QuantumRegister
    from qiskit.compiler import transpile
    
    qr = QuantumRegister(2, name='qr')
    circ = QuantumCircuit(qr)
    circ.h(qr[0])
    circ.cx(qr[0], qr[1])
    
    transpile(circ, initial_layout=[4, 2], coupling_map=None).draw()

    수정 #5345

  • 트랜스파일러 패스의 생성자에 새로운 kwarg( user_cost_dict )가 추가되었습니다 qiskit.transpiler.passes.TemplateOptimization 트랜스파일러 패스의 생성자에 추가되었습니다. 이를 통해 사용자는 기본 템플릿 매칭 알고리즘에 게이트에 대한 사용자 지정 비용 사전을 제공할 수 있습니다. 예를 들어,

    from qiskit.transpiler.passes import TemplateOptimization
    
    cost_dict = {'id': 0, 'x': 1, 'y': 1, 'z': 1, 'h': 1, 't': 1}
    pass = TemplateOptimization(user_cost_dict=cost_dict)
  • 반환된 객체를 전달할 때 발생하는 문제 Counts 에서 반환된 객체를 get_counts()marginal_counts() 에 반환된 객체를 전달할 때 특정 입력이 있는 부적절한 형식의 Counts 객체를 생성하는 문제가 수정되었습니다. 수정 #5424

  • 에서 헬퍼 큐비트 할당을 개선했습니다 PolynomialPauliRotationsPiecewiseLinearPauliRotations 에 헬퍼 큐비트 할당을 개선하여 회로를 더 효율적으로 구현할 수 있습니다. 53205322 수정

  • 에서 할당된 헬퍼 큐 비트의 사용법을 수정합니다 MCXGate 클래스에서 WeightedAdder 클래스에서 할당된 헬퍼 큐비트 사용을 수정합니다. 이 수정 이전에는 이전에 할당되었지만 사용되지 않았습니다. 수정 #5321

  • 많은 경우, latex 출력 메서드에 대한 qiskit.visualization.circuit_drawer() 함수와 draw() 메서드가 게이트 이름을 올바르게 표시하지 않았고, 다른 경우에는 게이트 매개 변수가 있어야 할 위치에 포함되지 않았습니다. 이제 게이트 이름은 mpl 출력 메서드에서 표시되는 것과 동일한 방식으로 표시되며 매개변수가 있는 모든 게이트에 대해 매개변수가 표시됩니다. 또한 일부 게이트가 올바른 형태로 표시되지 않는 문제가 있었는데, 이를 수정했습니다. 5605, #4938, #3765 수정

  • qiskit.circuit.Instruction.to_instruction() 메서드가 클래식 레지스터를 포함하는 하위 회로에서 사용되었고 그 후 해당 Instruction 객체가 QuantumCircuit 객체에 추가되면 qiskit.visualization.circuit_drawer() 함수와 qiskit.circuit.QuantumCircuit.draw() 메서드의 출력이 경우에 따라 측정값의 왼쪽에 표시되어야 할 하위 회로를 오른쪽에 표시하는 문제를 수정했습니다. 수정 #5947

  • 다음과 관련된 문제를 수정했습니다 Delay 객체의 QuantumCircuit 의 객체에서 qiskit.compiler.transpile() 의 객체가 Delay 의 단위를 Backend의 단위로 변환되지 않는 문제를 수정했습니다( backend kwarg가 transpile() 에 설정된 경우). 단위 불일치로 인해 잘못된 동작(예: 실행)이 발생할 수 있습니다:

    from qiskit import transpile, execute
    from qiskit.circuit import QuantumCircuit
    
    qc = QuantumCircuit(1)
    qc.delay(100, [0], unit='us')
    
    qc = transpile(qc, backend)
    job = execute(qc, backend)

    를 사용하면 이전에는 예상( 100e-6 / dt) 타임스텝이 아닌 100개의 타임스텝(각각 지속 시간 dt)에 대한 백엔드 지연이 발생했을 것입니다. 이 문제가 수정되어 qiskit.compiler.transpile() 함수가 단위를 올바르게 변환하도록 수정되었습니다.

기타 참고사항

  • qiskit.test.mock 에 있는 모든 가짜/모의 백엔드의 스냅샷이 최근 기기 변경 사항을 반영하도록 업데이트되었습니다. 여기에는 basis_gates 속성을 BackendConfiguration 에서 ['cx', 'rz', 'sx', 'x', 'id'] 로, readout_length 속성을 큐비트 속성에 추가하고 BackendProperties로 변경하고 PulseDefaults 를 업데이트하여 모든 모의 백엔드가 파라메트릭 펄스 기반 InstructionScheduleMap 인스턴스를 지원하도록 업데이트했습니다.

에어 0.8.0

Prelude

0.8 릴리스에는 몇 가지 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 주요 특징은 지원되는 시뮬레이션 방법을 사용하여 회로 시뮬레이션을 실행하기 위한 통합 백엔드( AerSimulator )의 도입, 다양한 종류의 시뮬레이터 데이터를 저장하기 위한 사용자 지정 지침이 포함된 시뮬레이터 지침 라이브러리(qiskit.providers.aer.library), 분산 컴퓨팅 환경에서 대규모 시뮬레이션을 실행하기 위한 MPI 지원 등입니다.

새 기능

  • Python 3.9 지원이 이번 릴리스에 추가되었습니다. 이제 소스에서 빌드하지 않고 Python 3.9 을 사용하여 키스킷 에어를 실행할 수 있습니다.

  • CMake 플래그 DISABLE_CONAN (기본값=``OFF``)를 추가합니다. 소스에서 설치하는 경우 ON 으로 설정하면 시스템에 이미 설치된 라이브러리를 찾기 위해 Conan 패키지 관리자를 우회할 수 있습니다. 이는 환경 변수 DISABLE_CONAN 로도 사용할 수 있으며, CMake 플래그보다 우선합니다. 이것은 AER을 구축하는 공식 절차가 아닙니다. 따라서 사용자는 필요한 모든 라이브러리와 해당 파일을 CMake에서 찾을 수 있도록 제공해야 할 책임이 있습니다.

  • 이번 릴리스에는 분산 컴퓨팅 환경에서 대규모 시뮬레이션을 실행하기 위해 MPI를 지원하는 qiskit-aer를 빌드하는 기능이 포함되어 있습니다. MPI 환경에서의 빌드 및 실행에 대한 지침은 기여 가이드를 참조하세요.

  • 이제 Windows에서 CUDA를 활성화한 상태에서 qiskit-aer를 빌드할 수 있습니다. GPU를 지원하는 소스에서 빌드하는 방법에 대한 지침은 기여 가이드를 참조하세요.

  • 소스에서 qiskit-aer Python 확장을 빌드할 때 C++ 컴파일을 사용하려면 몇 가지 빌드 종속성을 미리 설치해야 합니다. 확장 프로그램을 빌드할 때 사용자 편의를 위해 누락된 빌드 종속성은 일반적인 setuptools 설치 단계 전에 pip 을 사용하여 자동으로 설치되지만, 이전에는 이러한 자동 설치를 피할 수 없었습니다. 이 문제를 해결하기 위해 새로운 환경 변수 DISABLE_DEPENDENCY_INSTALL 가 추가되었습니다. 소스에서 파이썬 확장 프로그램을 빌드할 때 1 또는 ON 로 설정하면 이러한 누락된 빌드 종속성의 자동 설치가 비활성화됩니다.

  • 최적화된 N-큐비트 폴리 게이트에 대한 지원을 추가합니다 qiskit.circuit.library.PauliGate), StatevectorSimulator, UnitarySimulator, 그리고 QasmSimulatorAerSimulator 의 상태 벡터 및 밀도 행렬 메서드에 대한 지원을 추가했습니다.

  • AerSimulator, QasmSimulator, StatevectorSimulator, UnitarySimulator 백엔드에 대한 run() 메서드는 이제 QuantumCircuit (또는 QuantumCircuit 객체 목록)을 입력으로 받습니다. 이전 QasmQobj 객체는 현재로서는 계속 지원되지만 향후 릴리스에서 더 이상 사용되지 않을 예정입니다.

    사용 방법에 대한 예는 다음을 참조하세요:

    from qiskit import transpile, QuantumCircuit
    
    from qiskit.providers.aer import Aer
    
    backend = Aer.get_backend('aer_simulator')
    
    circuit = QuantumCircuit(2)
    qc.h(0)
    qc.cx(0, 1)
    qc.measure_all()
    
    tqc = transpile(circuit, backend)
    result = backend.run(tqc, shots=4096).result()
  • PulseSimulator 백엔드에 대한 run() 메서드는 이제 Schedule (또는 Schedule 객체 목록)을 입력으로 받습니다. 이전 PulseQobj 객체는 현재로서는 계속 지원되지만 향후 릴리스에서 더 이상 사용되지 않을 예정입니다.

  • 다음 시뮬레이션 방법을 지원하는 새로운 AerSimulator 시뮬레이터 백엔드를 추가합니다

    • automatic
    • statevector
    • stabilizer
    • density_matrix
    • matrix_product_state
    • unitary
    • superop

    기본 자동 방법은 회로 명령어와 노이즈 모델(있는 경우)에 따라 각 실행 회로에 대해 개별적으로 시뮬레이션 방법을 자동으로 선택합니다. 특정 방법으로 시뮬레이터를 초기화하는 것은 방법 옵션을 사용하여 수행할 수 있습니다.

    상태 벡터, 밀도 행렬 및 단일 메서드에 대한 GPU 시뮬레이션은 device='GPU' 백엔드 옵션을 설정하여 활성화할 수 있습니다.

    unitarysuperop 메서드는 실행 회로의 유니타리 행렬 또는 슈퍼 연산자 행렬을 시뮬레이션하므로 측정을 지원하지 않으므로 새로운 save_unitary(), save_superop() 또는 save_state() 명령어 중 하나를 사용하여 시뮬레이터 상태를 반환된 결과에 저장해야 합니다. 다른 시뮬레이션 방법의 상태도 적절한 지침을 사용하여 유사하게 저장할 수 있습니다. 자세한 내용은 qiskit.providers.aer.library API 문서를 참조하세요.

    AerSimulator 시뮬레이터가 QasmSimulator, StatevectorSimulator, UnitarySimulator 백엔드를 대체하며 향후 릴리스에서 더 이상 사용되지 않습니다.

  • 사용 가능한 모든 시뮬레이션 방법 및 시뮬레이션 장치에 대해 사전 구성된 여러 AerSimulator 백엔드를 포함하도록 AerProvider 클래스를 업데이트합니다. 새 백엔드는 공급자 인터페이스를 통해 다음 이름을 사용하여 액세스할 수 있습니다

    • "aer_simulator"
    • "aer_simulator_statevector"
    • "aer_simulator_stabilizer"
    • "aer_simulator_density_matrix"
    • "aer_simulator_matrix_product_state"
    • "aer_simulator_extended_stabilizer"
    • "aer_simulator_unitary"
    • "aer_simulator_superop"

    또한 호환되는 시스템에 GPU 지원과 함께 Aer를 설치한 경우 다음 GPU 백엔드도 사용할 수 있습니다

    • "aer_simulator_statevector_gpu"
    • "aer_simulator_density_matrix_gpu"
    • "aer_simulator_unitary_gpu"

    예를 들어,

    from qiskit import Aer
    
    # Get the GPU statevector simulator backend
    backend = Aer.get_backend('aer_simulator_statevector_gpu')
  • "extended_stabilizer" 시뮬레이션 방법을 사용할 때 측정을 수행하기 위한 새로운 norm estimation 방법을 추가했습니다. 이 규범 추정 방법은 AerSimulatorQasmSimulator 백엔드에 다음 옵션을 전달하여 사용할 수 있습니다

    simulator = QasmSimulator(
        method='extended_stabilizer',
        extended_stabilizer_sampling_method='norm_estimation')

    규범 추정 방법은 metropolis 또는 resampled_metropolis 옵션보다 느리지만 출력 분포가 희박한 회로에서 더 나은 성능을 제공합니다. 자세한 내용은 QasmSimulator 문서를 참조하세요.

  • 시뮬레이터의 상태를 다양한 형식으로 저장하는 지침을 추가합니다. 이러한 지침은 다음과 같습니다

    • qiskit.providers.aer.library.SaveDensityMatrix
    • qiskit.providers.aer.library.SaveMatrixProductState
    • qiskit.providers.aer.library.SaveStabilizer
    • qiskit.providers.aer.library.SaveState
    • qiskit.providers.aer.library.SaveStatevector
    • qiskit.providers.aer.library.SaveStatevectorDict
    • qiskit.providers.aer.library.SaveUnitary

    이러한 지침은 Aer를 가져올 때 QuantumCircuit 에 추가되는 save_density_matrix, save_matrix_product_state, save_stabilizer, save_state, save_statevector, save_statevector_dict, save_unitary 회로 메서드를 사용하여 양자 회로에 추가할 수 있습니다.

    각 인스트럭션의 메서드 호환성에 대한 자세한 내용은 qiskit.providers.aer.library API 설명서를 참조하세요.

    스냅샷 지침 SnapshotStatevector, SnapshotDensityMatrix, SnapshotStabilizer 은 여전히 지원되지만 향후 릴리스에서 더 이상 사용되지 않습니다.

  • 시뮬레이터 상태 ρ\rho 에 대한 에르미티안 연산자 HH 의 기대값 H=Tr[Hρ]\langle H\rangle = Tr[H\rho] 또는 기대값과 분산 Var(H)=H2H2Var(H) = \langle H^2\rangle - \langle H\rangle^2 을 저장하기 위한 qiskit.providers.aer.library.SaveExpectationValueqiskit.providers.aer.library.SaveExpectationValueVariance 양자 회로 명령어를 추가합니다. 이러한 명령어는 save_expectation_valuesave_expectation_value_variance 회로 메서드를 사용하여 양자 회로에 추가할 수 있으며, 이는 Aer를 가져올 때 QuantumCircuit 에 추가됩니다.

    스냅샷 명령어 SnapshotExpectationValue 는 여전히 지원되지만 향후 릴리스에서 더 이상 사용되지 않습니다.

  • 시뮬레이터 상태의 Z 기준 측정에 대한 모든 측정 결과 확률을 저장하기 위한 qiskit.providers.aer.library.SaveProbabilitiesqiskit.providers.aer.library.SaveProbabilitiesDict 양자 회로 지침을 추가합니다. 이러한 명령어는 save_probabilitiessave_probabilities_dict 회로 메서드를 사용하여 양자 회로에 추가할 수 있으며, 이는 Aer를 가져올 때 QuantumCircuit 에 추가됩니다.

    스냅샷 명령어 SnapshotProbabilities 는 여전히 지원되지만 향후 릴리스에서 더 이상 사용되지 않습니다.

  • 선택된 복소 상태 벡터 진폭 또는 지원되는 시뮬레이션 방법에 대한 선택 확률(진폭 제곱)을 저장하기 위한 qiskit.providers.aer.library.SaveAmplitudesqiskit.providers.aer.library.SaveAmplitudesSquared 회로 지침을 추가합니다. 이러한 지침은 save_amplitudessave_amplitudes_squared 회로 메서드를 사용하여 양자 회로에 추가할 수 있으며, 이 메서드는 Aer를 가져올 때 QuantumCircuit 에 추가됩니다.

  • 시뮬레이터 상태 설정에 대한 지침을 추가합니다. 이러한 명령은 회로의 전체 큐비트 수에 대해 정의되어야 합니다. 회로의 어느 지점에서나 적용할 수 있으며 시뮬레이터 상태를 지정된 상태로 재정의합니다. 추가된 지침은 다음과 같습니다

    • qiskit.providers.aer.library.SetDensityMatrix
    • qiskit.providers.aer.library.SetStabilizer
    • qiskit.providers.aer.library.SetStatevector
    • qiskit.providers.aer.library.SetUnitary

    이러한 명령어는 Aer를 가져올 때 QuantumCircuit 에 추가되는 set_density_matrix, set_stabilizer, set_statevector, set_unitary 회로 메서드를 사용하여 양자 회로에 추가할 수 있습니다.

    각 인스트럭션의 메서드 호환성에 대한 자세한 내용은 qiskit.providers.aer.library API 설명서를 참조하세요.

  • "matrix_product_state" 시뮬레이션 메서드에 대각선 게이트에 대한 지원이 추가되었습니다.

  • "matrix_product_state" 시뮬레이션 방법에 initialize 명령어에 대한 지원이 추가되었습니다.

알려진 문제점

  • "matrix_product_state" 시뮬레이션 방법을 사용하여 크라우스 노이즈 모델로 특정 회로를 시뮬레이션하면 시뮬레이터가 충돌할 수 있는 알려진 문제가 있습니다. 자세한 내용은 306번을 참조하세요.

업그레이드 주의사항

  • 코난의 최소 버전이 1.31.2 으로 증가했습니다. 이는 최신 버전과의 호환성 문제를 해결하기 위해 필요했습니다 urllib3 (코난의 종속성)과의 호환성 문제를 해결하기 위해서였습니다. 또한 새로운 Apple 컴퓨터를 사용하는 사용자에게 유용한 AppleClang 12에 대한 기본 지원도 추가되었습니다.

  • pybind11 필요한 최소 버전은 2.4 대신 2.6 입니다. 이는 Windows에서 CUDA 지원 컴파일을 지원하기 위해 필요합니다.

  • Cython이 빌드 종속성으로 제거되었습니다.

  • Qiskit-aer 0.7 에서 더 이상 사용되지 않는 노이즈 모델에서 x90 게이트 분해를 제거했다. 이 분해는 이제 일반 노이즈 모델 기반 게이트와 키스킷 트랜스파일러를 사용하여 수행됩니다.

  • "extended_stabilizer" 시뮬레이션 방법의 다음 옵션이 변경되었습니다.

    • extended_stabilizer_measure_sampling: 이 옵션은 extended_stabilizer_sampling_method 옵션으로 대체되었으며, 이 옵션은 쿼비트 측정 시뮬레이션 방법을 제어합니다.
    • extended_stabilizer_mixing_time: 이 옵션은 metropolisresampled_metropolis 샘플링 방법에만 적용된다는 점을 명확히 하기 위해 extended_stabilizer_metropolis_mixing_time 로 이름이 변경되었습니다.
    • extended_stabilizer_norm_estimation_samples: 이 옵션의 이름이 extended_stabilizer_norm_estimation_default_samples 으로 변경되었습니다.

    표준 추정 샘플링 방법의 일부 동작을 제어하는 extended_stabilizer_norm_estimation_repetitions 옵션이 추가되었습니다.

지원 중단 노트

  • Python 3.6 지원은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 지원이 중단되면 사용 중인 Python 버전을 Python 3.7 이상으로 업그레이드해야 합니다.

버그 수정

  • set_options() 을 사용하여 반환된 백엔드에 설정된 옵션이 공급자에 저장되어 이후 동일한 이름의 백엔드에 대한 get_backend() 호출 시 지속되는 버그( AerProvider )를 수정했습니다. 이제 backends() 으로 호출할 때마다 구성할 수 있는 시뮬레이터 백엔드의 새 인스턴스가 반환됩니다.
  • 회로에 지원되지 않는 시뮬레이터 명령어가 포함된 경우 반환되는 오류 메시지의 버그를 수정했습니다. 이전에는 일부 지원되는 지침도 지원되지 않는 지침과 함께 오류 메시지에 나열되었습니다.
  • "method""noise_model" 옵션을 함께 사용하거나 from_backend() 을 사용하여 구축된 시뮬레이터와 함께 사용할 때 QasmSimulator 기준 게이트 설정 관련 문제를 수정했습니다. 이제 나열된 기준 게이트는 백엔드 구성, 시뮬레이션 방법 및 노이즈 모델 기준 게이트가 지원하는 게이트의 교차점이 됩니다. 노이즈 모델 기준 게이트와 시뮬레이터 기준 게이트의 교집합이 비어 있으면 경고가 기록됩니다.
  • "sx"` 게이트 SXGatematrix_product_state.hpStateOpSet 에서 C++ 코드에 지원되는 게이트로 나열되지 않는 버그 수정.
  • "csx", "cu2", "cu3""density_matrix" 메서드의 지원되는 베이시스 게이트로 잘못 나열되던 버그 수정 QasmSimulator.
  • matrix_product_state_internal.cpp 에서 함수 간에 매개변수가 잘못 전달되어 잘못된 시뮬레이션이 발생하고 유효하지 않은 상태에 도달하여 무한 루프가 발생하는 버그를 수정했습니다.
  • 조건부 레지스터의 너비가 64보다 클 때 c_if 이 작동하지 않던 버그가 수정되었습니다. 1077번을 참조하세요.
  • 조건부 게이트의 노이즈가 클래식 레지스터 값을 기준으로 조건부 게이트가 실제로 적용되었는지 여부와 관계없이 항상 적용되던 버그 #1153 )를 수정했습니다. 이제 조건부 게이트의 노이즈는 조건부 게이트가 적용된 경우에만 적용됩니다.
  • 중첩된 OpenMP 플래그가 참으로 설정되어서는 안 되는 경우 참으로 설정되던 버그를 수정했습니다.
  • QasmSimulator 의 행렬 곱 상태 메서드에서 잘림을 적용할 때 발생하는 버그를 수정했습니다.
  • 문제 #1126 : 단일 큐비트 측정값 보고 버그가 수정되었습니다. 측정값을 출력 데이터 구조에 복사할 때 버그가 발생했습니다.
  • MPS에서 apply_kraus는 내부 큐비트 대신 매개변수 큐비트의 입력 비트에서 직접 작동했습니다. MPS 알고리즘에서는 큐비트가 지속적으로 이동하므로 모든 연산이 내부 큐비트에 적용되어야 합니다.
  • MPS::sample_measure를 호출할 때, qasm_controller.This 에서 이동_all_쿼비트_to_sorted_ordering 메서드를 호출하여 수행한다고 가정하므로 먼저 큐비트를 기본 순서로 정렬해야 합니다. 샘플_측정_사용_적용_측정에서는 정확했지만 샘플_측정_사용_확률에서는 누락되었습니다.
  • QasmSimulatorlocal 속성을 항상 True 로 설정하지 않고 백엔드 값으로 설정하는 from_backend() 메서드의 버그 수정.
  • 기본 게이트가 설정된 IBMQ 장치에 대해 basis_gates 가 잘못 설정된 from_backend()from_backend() 의 버그 수정 ['id', 'rz', 'sx', 'x', 'cx']. 이제 노이즈 모델에 오류가 있는지 여부에 관계없이 백엔드 베이시스 게이트와 항상 동일한 베이시스 게이트를 갖게 됩니다.
  • 출력 분포가 희박한 양자 회로에서 확장된 "확장_안정기" 시뮬레이션 방법이 잘못된 결과를 제공하던 문제를 수정했습니다. 자세한 내용과 예시는 306번을 참조하세요.

이그니스 0.6.0

새 기능

  • qiskit.ignis.mitigation.expval_meas_mitigator_circuits() 함수는 CTMP 방식으로 캘리브레이션에 사용되는 함수가 생성하는 회로 수를 O(n)O(n) 에서 O(logn)O(\log{n}) (여기서 nn 은 큐비트 수)로 줄이도록 개선되었습니다.

업그레이드 주의사항

  • qiskit.ignis.verification.randomized_benchmarking_seq() 함수는 이제 두 개 이상의 큐비트에서 CNOT-Dihedral 무작위 벤치마킹을 수행할 수 있는 업그레이드된 CNOTDihedral 클래스( qiskit.ignis.verification.CNOTDihedral)를 사용하고 있습니다.
  • 이제 파이썬 패키지 retworkx 는 qiskit-ignis를 설치하기 위한 요구 사항입니다. 더 나은 성능을 얻기 위해 더 이상 요구 사항이 아닌 이전 networkx 사용법을 대체합니다.
  • scikit-learn 종속성은 더 이상 필수 사항이 아니며 이제 선택 사항입니다. IQ 측정 판별기(IQDiscriminationFitter, LinearIQDiscriminationFitter, QuadraticIQDiscriminationFitter, SklearnIQDiscriminator)를 사용하는 경우 이제 pip install scikit-learn 를 실행하거나 pip install qiskit-ignis[iq] 와 함께 qiskit-ignis를 설치하는 경우 scikit-learn을 수동으로 설치해야 합니다.

버그 수정

  • 오류 완화 클래스 TensoredExpvalMeasMitigatorCTMPExpvalMeasMitigator 의 경우 qubits kwarg를 지정하지 않으면 카운트 사전의 클래식 비트 수가 아닌 완화자의 총 큐비트 수를 잘못 사용하여 성능이 크게 저하되는 기대값 메서드 expectation_value() 의 문제를 수정했습니다. 수정 #561
  • TomographyFitter, StateTomographyFitter, ProcessTomographyFitter"auto" 메서드를 수정하여 CVXPY가 설치되어 있고 SCS가 아닌 타사 SDP 솔버를 사용할 수 있는 경우에만 "cvx" 을 사용하도록 합니다. 이는 SCS 솔버가 다른 솔버 방법보다 정확도가 낮고, 완전 양수가 아닌 밀도 행렬이나 최 행렬을 반환하는 경우가 많아서 qiskit.quantum_info.state_fidelity() 또는 qiskit.quantum_info.process_fidelity() 함수.

아쿠아 0.9.0

이번 릴리스는 공식적으로 키스킷 아쿠아 프로젝트를 더 이상 지원하지 않으며, 향후 (이 릴리스에서 3개월 이내에) 아쿠아 프로젝트는 최종 릴리스가 되어 보관될 예정입니다. 키스킷-아쿠아가 제공하는 모든 기능은 새로운 패키지 또는 다른 키스킷 패키지로 마이그레이션되었습니다. 키스킷-아쿠아에서 제공하는 애플리케이션 모듈이 여러 개의 새로운 패키지로 분리되었습니다: qiskit-optimization, qiskit-nature, qiskit-machine-learning, 그리고 qiskit-finance 이다. 이 패키지는 표준 pip 설치 명령(예: pip install qiskit-nature)을 통해 단독으로 설치하거나 나머지 키스킷 메타패키지(예: pip install 'qiskit[finance,optimization]' 또는 pip install 'qiskit[all]')와 함께 선택적 추가 패키지로 설치할 수 있다. 알고리즘과 연산자 흐름을 위한 핵심 빌딩 블록은 이제 키스킷 테라의 일부로 다음과 같이 존재합니다 qiskit.algorithmsqiskit.opflow. 기존 아쿠아 사용법에 따라 애플리케이션 패키지를 사용하거나 키스킷 테라의 새로운 모듈을 사용해야 합니다.

키스킷 아쿠아 사용에서 마이그레이션하는 방법에 대한 자세한 내용은 마이그레이션 가이드를 참조하세요.

IBM Q 제공자 0.12.2

변경 없음

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