Skip to main content
IBM Quantum Platform

키스킷 0.43 릴리즈 노트


0.43.3

테라 0.24.2

Prelude

키스킷 테라 0.24.2 는 버그 수정 릴리스로, 0.24.1 릴리스 이후 확인된 몇 가지 사소한 문제를 해결합니다.

업그레이드 주의사항

  • dump 에서 방출하는 QPY 형식 버전이 8로 증가했습니다. 이 새로운 형식 버전은 직렬화 속성에 대한 지원을 추가합니다 QuantumCircuit.layout 속성을 지원합니다.

버그 수정

  • QPY를 통한 인스턴스의 역직렬화 DiagonalGate 인스턴스의 역직렬화를 수정했습니다. 수정 #10364

  • 양자 섀넌 분해를 수행하는 qs_decomposition() 함수가 이 분해의 혜택을 받지 못하는 사소한 숫자 단위에서 호출될 때 예기치 않은 오류가 발생하는 문제를 수정했습니다. 이 오류는 이러한 유니터리가 감지되어 등가 회로가 반환되도록 수정되었습니다. 수정 #10036

  • 클래스의 문제를 수정했습니다 BasicSwap 클래스의 문제를 수정했습니다 BasicSwap.run() 클래스가 인스턴스화될 때 fake_run 키워드 인수가 True 로 설정된 경우 메서드가 작동하지 않는 문제를 수정했습니다. 수정 #10147

  • 새로운 스타일로 회로를 복사할 때 발생하는 문제를 수정했습니다 ClbitQubits(레지스터가 없는 비트)가 포함된 회로에서 이러한 비트에 대한 참조가 끊어져 직렬화 및 회로 시각화에 문제가 발생할 수 있는 문제를 수정했습니다. 수정 #10409

  • 트랜스파일러 패스의 CheckMap 트랜스파일러 패스는 더 이상 제어 흐름 빌더 인터페이스에서 생성된 중첩된 조건부 구조를 처리할 때 가짜 오류를 일으키지 않습니다. 10394번을 참조하세요.

  • 컨텍스트가 다음과 같이 초기화될 때 펄스 빌더의 오류를 수정했습니다 BackendV2.

  • 펄스 출력 수정 measure()measure_all() 함수가 호출될 때 BackendV2 백엔드.

  • 에서 출력 밀도 행렬의 치수를 수정하여 DensityMatrix.partial_transpose() 에서 해당 입력 밀도 행렬의 치수와 일치하도록 수정했습니다.

  • 가져오기 qiskit.primitives 를 사용하면 더 이상 더 이상 사용되지 않는 qiskit.opflow 모듈로 인한 경고가 더 이상 발생하지 않습니다. 이러한 경고는 기본 Python 필터에 의해 사용자에게 숨겨졌을 테지만 opflow를 트리거했기 때문에 사용자가 이후에 가져올 때 경고가 트리거되지 않았습니다. 수정 #10245

  • OpenQASM 2의 출력을 수정했습니다 QuantumCircuit.qasm() 의 출력을 수정했습니다. 이상적으로는 대부분의 게이트에서 이런 일이 발생하지 않아야 하지만, 다음과 같은 복잡한 알고리즘 연산은 GroverOperator 클래스와 같은 복잡한 알고리즘 연산은 실수로 이러한 구조를 생성할 수 있습니다. 10162번을 참조하세요.

  • LaTeX 서랍의 회귀를 수정했습니다 QuantumCircuit.draw() 임시 파일을 별도의 파일 시스템에 배치할 때 작업 디렉터리로 되돌아가는 문제를 수정했습니다. 10211번을 참조하세요.

  • 관련 문제를 수정했습니다 UnitarySynthesistarget 매개변수를 사용할 때 제어 흐름이 있는 회로가 대상에 제대로 매핑되지 않는 문제를 수정했습니다.

  • 버그 수정 VQD 에서 result.optimal_valuesresult.optimal_points 의 복사본이었던 버그가 수정되었습니다. 이제 해당 값을 반환합니다. 수정 #10263

  • 완전 바인딩된 표현식을 구체적인 또는 ParameterExpression 을 구체적인 float 또는 int 으로 변환하려고 시도할 때 반환되는 오류 메시지를 개선했습니다(예: 표현식이 원래 복소수이기 때문). 수정 #9187

  • float 변환을 수정했습니다 ParameterExpression 값에 대한 변환을 수정했습니다. 이 값은 구성 기록의 어느 시점에 가상의 구성 요소가 있었으나 이후 취소되었습니다. Sympy를 백엔드로 사용하는 경우 이러한 변환은 일반적으로 이미 작동했을 것입니다. Symengine을 백엔드로 사용할 때, 이러한 변환은 종종 유형 오류로 인해 실패하는 경우가 많았는데, 그 결과는 상징적으로 실제라고 평가되고 ParameterExpression.is_real() 가 참임에도 불구하고. 수정 #10191

  • 수정 qpy 직렬화 QuantumCircuit.layout 속성의 직렬화를 수정했습니다. 이전에는 QPY에 회로를 직렬화할 때 layout 속성은 QPY로 회로를 직렬화할 때 삭제되었습니다. 수정 #10112

에어 0.12.2

Prelude

키스킷 에어 0.12.2 는 0.12.0 에 두 번째 패치를 릴리스합니다. 0.12.1 릴리스 이후 발견된 일부 버그가 수정되었습니다.

업그레이드 주의사항

  • 이제 키스킷 에어는 GPU 시뮬레이터의 CUDA 버전이 11.2 이상이어야 합니다. 이전에는 CUDA 10.1 가 최소 지원 버전이었습니다. 이 변경은 cuQuantum 지원을 포함한 업스트림 CUDA 에코시스템의 변화로 인해 필요했습니다. 다른 버전의 CUDA로 실행하는 사용자를 지원하기 위해 이제 CUDA 11로 실행할 수 있는 별도의 패키지( qiskit-aer-gpu-cu11 )가 제공되며, qiskit-aer-gpu 패키지를 사용하려면 이제 CUDA 12가 필요합니다. qiskit-aer-gpu 패키지의 기존 사용자이며 CUDA 11을 사용하려면 실행해야 합니다:

    pip uninstall qiskit-aer-gpu && pip install -U qiskit-aer-gpu-cu11

    를 사용하여 기존 CUDA 10.x 호환 qiskit-aer-gpu 패키지의 릴리스에서 새로운 CUDA 11 호환 패키지로 업그레이드할 수 있습니다. 이미 로컬에서 CUDA 12를 실행 중인 경우 정상적으로 qiskit-aer-gpu 패키지를 업그레이드할 수 있습니다.

버그 수정

  • 회로에 조건부 및 파라미터가 있는 경우, 에어의 파라미터 바인딩이 파라미터를 적용하는 잘못된 위치를 사용했기 때문에 회로가 올바르게 시뮬레이션되지 않았습니다. 이는 조건부로 주입되는 bfunc 연산에 대한 고려가 부족하기 때문입니다. 이 커밋을 통해 매개변수는 주입된 bfun 연산을 고려하여 위치를 수정하도록 설정됩니다.

  • 1814에서 전역 위상에 대한 파라미터가 올바르게 설정되지 않았습니다. https://github.com/Qiskit/qiskit-aer/pull/1814 전역 위상에 대한 파라미터 값이 시뮬레이션할 실제 회로가 아닌 템플릿 회로에 복사되었습니다. 이 커밋은 시뮬레이션할 회로에 파라미터 값을 올바르게 복사합니다.

  • backend.run() 의 결과는 AerCircuits를 포함하므로 직렬화할 수 없습니다. 이 커밋은 메타데이터에서 AerCircuits를 제거하여 결과를 직렬화할 수 있도록 합니다.

  • OpenQASM3 텍스트에서 회로를 생성한 경우 양자 레지스터에 큐비트 인스턴스가 중복되어 있으므로 :meth:QuantumCircuit.save_statevector() 이 작동하지 않습니다. 이 커밋을 통해 :meth:QuantumCircuit.save_statevector() 은 :data:QuantumCircuit.qubits 을 사용하여 저장할 큐비트를 가져옵니다.

IBM Q 제공자 0.20.2

변경되지 않습니다.


0.43.2

참고로, 키스킷 에어의 qiskit 패키지 포함은 더 이상 사용되지 않습니다. 키스킷 에어의 다음 마이너 버전( 0.13 )은 qiskit 패키지의 릴리스에 포함되지 않으며, 즉시 에어를 별도로 설치해야 합니다:

pip install qiskit-aer

로 가져옵니다:

import qiskit_aer

키스킷 0.44 에서 시작하여 pip install qiskit 명령은 더 이상 키스킷 에어 또는 이미 새로운 IBM 공급자로 대체된 더 이상 사용되지 않는 IBM Q 공급자를 설치하지 않습니다.

테라 0.24.1

변경 없음

에어 0.12.1

Prelude

키스킷 에어 0.12.1 에 첫 번째 패치가 릴리스되었습니다 0.12.0. 0.12.0 릴리스 이후 발견된 일부 버그가 수정되었습니다.

알려진 문제점

  • abelian_grouping=True 에서 잘못된 기대값을 반환하는 버그 수정 Estimator .

업그레이드 주의사항

  • 동일한 회로와 여러 매개 변수를 전달할 때 성능 향상 Estimatorapproximation=True 로 전달할 때 성능이 향상됩니다.

지원 중단 노트

  • meth:~.AerSimulator.run의 옵션은 올바른 유형을 사용해야 합니다.

버그 수정

  • AER::Config 도입으로 인한 성능 저하가 수정되었습니다. 이 클래스에는 많은 필드가 있지만 AER::Transpile::CircuitOptimization 에서 자주 복사됩니다. 원래 json_t (이전 구성용 클래스)도 자주 복사되었지만 대부분의 경우 항목이 있으므로 이 복사 오버헤드는 문제가 되지 않습니다. 이 수정으로 AER::Transpile::CircuitOptimizationAER::Config 을 복사하지 않습니다.

  • BLAS 호출이 실패하면 omp 스레드가 예외를 처리하지 않기 때문에 오류 메시지 없이 Aer가 충돌합니다. 이 수정 사항은 omp 스레드가 예외를 올바르게 포착한 다음 예외를 omp 루프 외부로 다시 던지도록 하는 것입니다.

  • 이전에는 C++에서 게이트의 파라미터가 유효성을 검사하지 않았습니다. 커스텀 게이트로 인해 파라미터가 예상보다 짧으면 세그먼트 오류를 발생시킵니다. 이 커밋은 매개변수 길이가 익스킷되는지 확인하는 기능을 추가합니다. 이 커밋은 #1612에서 보고된 문제를 수정합니다. https://github.com/Qiskit/qiskit-aer/issues/1612

  • 이후 0.12.0, 회로의 파라미터 값은 일시적으로 상수 값으로 대체되고 파라미터 값은 C++ 라이브러리에서 할당됩니다. 따라서 parameter_binds를 지정하면 시뮬레이터는 constnat 값을 매개변수 값으로 사용하여 결과를 반환합니다. 이 커밋을 사용하면 회로에 파라미터가 있지만 파라미터_binds가 지정되지 않은 경우 Aer에서 오류가 발생합니다.

  • 더 이상 Aer를 가져올 때 사용 가능한 디바이스 및 메서드가 쿼리되지 않습니다.

  • 이전에는 AerSimulator 시뮬레이션의 입력과 출력 간의 일관성을 유지하기 위해 회로 메타데이터를 수정하여 시뮬레이션에서 응용 프로그램의 메타데이터를 예기치 않게 보는 부작용이 발생했습니다. 이 수정 사항은 내부적으로 일관성을 유지하기 위해 회로 메타데이터를 사용하지 않고 애플리케이션에 항상 일관된 메타데이터 보기를 제공합니다.

  • EstimatorResult 의 메타데이터 분산이 복잡했던 버그가 수정되어 이제 플로트를 반환합니다.

  • cuQuautum 지원으로 키스킷 에어를 컴파일할 때 빌드 중단이 수정되었습니다(AER_ENABLE_CUQUANTUM=true). 이 변경 사항은 CPU 및 일반 GPU 바이너리 빌드에는 영향을 미치지 않습니다.

  • 백엔드에 큐비트 속성에 큐비트에 대한 T1 및 T2 값이 없을 때(즉, 없음) 오류가 발생하는 버그가 from_backend() 에서 수정되었습니다. 이 커밋은 NoiseModel.from_backend()basic_device_gate_errors() 을 업데이트하여 큐비트를 포함한 큐비트에 작용하는 모든 게이트에 대해 T1 및 T2 값이 없는 큐비트에 QuantumError (즉, 사실상 열 완화 오류가 없는) 아이덴티티를 추가합니다. 17791815를 수정했습니다.

  • 커플링 맵 또는 디바이스의 구성에 따라 큐비트 수가 설정되어 있어도 시뮬레이션 방법을 구성할 때 해당 방법에 따라 큐비트 수가 덮어쓰이는 문제 수정. 수정 #1769

  • cuQuantum SDK용 CMakeLists.txt의 라이브러리 경로 설정이 수정되었습니다. 최신 cuQuantum 에는 CUDA 11.x 및 12.x 용 라이브러리가 포함되어 있으므로 이 수정 사항은 FindCUDA 에서 반환된 CUDA 버전을 cuQuantum 및 cuTENSOR 의 라이브러리 경로로 사용합니다.

  • CUQUANTUM_STATIC=true로 빌드할 때 cuQuantum 의 정적 링크 라이브러리에 대한 수정 사항입니다.

  • Qobj를 사용하지 않았기 때문에 MPI 병렬화가 활성화되지 않았습니다. 이 수정으로 프로세스 수와 MPI 순위가 올바르게 설정됩니다.

  • AerCircuit 는 배리어 명령을 건너뛰면서 연산을 반복하여 회로에서 생성됩니다. 그러나 배리어 지침을 건너뛰면 매개변수 바인딩의 위치가 잘못 지정됩니다. 이 수정은 barrier() 을 추가하고 매개변수 바인딩을 올바르게 유지합니다.

  • 에어는 더 이상 사용되지 않지만 run() 의 인수로 Qobj를 여전히 지원합니다. 그러나 0.12.0 이후 run_options 을 지정하지 않으면 항상 실패합니다. 이 수정으로 run_options 없이도 Qobj를 시뮬레이션할 수 있습니다.

  • 0.12.0, AerConfig 은 meth:~.AerSimulator.run의 인수에 대해 엄격한 유형 검사를 수행하면서 시뮬레이션 구성에 사용됩니다. 이 커밋은 인자 유형이 예상되지 않는 경우 형 변환을 추가합니다.

  • 1821 <https://github.com/Qiskit/qiskit-aer/issues/1821> 에서 보고된 것처럼 int 값을 가진 :meth:QuantumCircuit.initialize() 가 올바르게 처리되지 않았습니다. 이 커밋은 초기화 명령어를 분해하여 이러한 초기화를 가능하게 합니다.

  • QuantumCircuit 글로벌_단계에 대한 매개변수화를 지원합니다. 하지만 에어는 이러한 파라미터화를 허용하지 않았고 트랜스파일러가 파라미터화된 전역 페이즈를 생성할 때 실패했습니다. 이 커밋은 글로벌_단계의 매개변수화를 지원하고 https://github.com/Qiskit/qiskit-aer/issues/1795, https://github.com/Qiskit/qiskit-aer/issues/1781https://github.com/Qiskit/qiskit-aer/issues/1798.

  • 이제 Aer는 최신 버전의 OpenMP 에 대해 컴파일할 때 더 이상 사용되지 않는 omp_set_nested() 대신 omp_set_max_active_levels() 을 사용합니다.

IBM Q 제공자 0.20.2

변경되지 않습니다.


0.43.1

테라 0.24.1

Prelude

키스킷 테라 0.24.1 에 첫 번째 패치가 릴리스되었습니다 0.24.0. 0.24.0 릴리스 이후 발견된 일부 버그가 수정되었습니다.

업그레이드 주의사항

  • 변경 QuantumCircuit.assign_parameters() 를 사용하여 할당된 정수 및 부동 소수점 값을 회로의 인스턴스 매개변수에 직접 바인딩하는 대신 Instruction 인스턴스의 파라미터에 직접 바인딩하도록 변경되었습니다 ParameterExpression. 이 변경은 float(QuantumCircuit.data[i].operation.params[j]) 에서 여전히 float 을 생성하므로 사용자에게 거의 영향을 미치지 않습니다 ParameterExpression). 또한 Instruction() 매개변수는 이미 float 뿐만 아니라 ParameterExpression일 수도 있으므로 명령어 매개변수를 처리하는 코드는 이미 두 가지 경우를 모두 처리해야 합니다. 사용자에게 영향을 미칠 가능성이 가장 높은 코드는 isinstance 를 사용하여 다음을 확인하는 코드입니다 ParameterExpression 를 확인하고 결과에 따라 다르게 동작하는 코드입니다. 또한, qpy는 바운드의 숫자 값을 직렬화합니다 ParameterExpressionfloat 와는 다른 정밀도로 직렬화합니다(관련 버그 수정 노트( QuantumCircuit.assign_parameters()).

버그 수정

  • 업데이트 plot_gate_map(), plot_error_map()plot_circuit_layout() 를 업데이트하여 433 큐비트 헤비헥스 커플링 맵을 지원합니다. 이를 통해 IBM Quantum 의 ibm_seattle 백엔드에 대한 맵 시각화를 결합할 수 있습니다.

  • 숫자 값의 바인딩을 QuantumCircuit.assign_parameters() 로 변경하여 회로 명령 파라미터 값과 회로의 보정 사전에서 해당 파라미터 키가 일치하지 않는 것을 방지했습니다. 976410166을 수정했습니다. 관련 업그레이드 노트도 참조하세요 QuantumCircuit.assign_parameters().

  • BlockCollapser 에서 노드 블록을 축소할 때 클래식 비트가 무시되던 버그를 수정했습니다.

  • 의 버그를 수정했습니다 replace_block_with_op()replace_block_with_op() 에서 클래식 비트를 무시하는 버그를 수정했습니다.

  • 버그 수정 QuantumCircuit.compose() 에서 하위 회로의 SwitchCaseOp.target 어트리뷰트가 기본 회로의 레지스터에 올바르게 매핑되지 않는 버그가 수정되었습니다.

  • 의 버그를 수정했습니다 RZXCalibrationBuilder 에서 잘못된 매개변수로 캘리브레이션을 호출하면 예외를 발생시키는 대신 충돌이 발생하던 버그를 수정했습니다.

  • 생성자 메서드 관련 문제를 수정했습니다 BooleanExpression.from_dimacs_file() 생성자 메서드에서 트위들덤이 설치되지 않았을 때 발생하는 예외 유형이 예상했던 MissingOptionalLibrary 이 아닌 문제를 수정했습니다. 수정 #10079

  • 에 대한 호출에서 initial_layout 을 사용하면 transpile() 에 대한 호출에서 를 사용하면 회로에 레지스터에 없는 큐비트나 둘 이상의 레지스터에 존재하는 큐비트가 포함된 경우 더 이상 오류가 발생하지 않습니다. 10125를 참조하세요.

  • 를 통해 추가된 다중 제어 Z 회전 게이트의 게이트 분해를 수정했습니다 QuantumCircuit.mcrz(). 이전에는 Z 회전과 상대 위상차가 있는 다중 제어 위상 게이트를 구현했습니다. 이전 동작을 얻으려면 QuantumCircuit.mcrz() 동작을 얻으려면 QuantumCircuit.mcp().

  • 생성자 관련 문제를 수정했습니다 PassManagerConfig.from_backend() 생성자 관련 문제를 수정했습니다 PassManagerConfig 객체를 생성할 때 발생하는 BackendV1 인스턴스에서 객체를 생성할 때 발생하는 문제를 수정했습니다. 이전에는 생성자가 0 큐비트를 가진 CouplingMap 객체를 0 큐비트로 생성하는 대신 None 을 사용했습니다. 수정 #10171

  • 2큐비트 합성을 준비하기 전에 숫자 회전 각도가 더 이상 기호 회전 각도로 대체되지 않던 버그가 키스킷( 0.24.0 )에서 수정되었습니다. 이로 인해 합성 루틴에 숫자 행렬이 필요하기 때문에 예외가 발생했습니다.

  • 병렬로 실행하면 Optimize1qGatesDecomposition 을 병렬로 실행하면 OneQubitGateErrorMap 을 피클할 수 없어 오류가 발생하는 버그를 수정했습니다.

  • 의 버그 수정 VF2LayoutVF2PostLayout 패스의 버그를 수정하여 잠재적 레이아웃을 평가할 때 1쿼비트 오류 구성 요소를 고려하지 못하던 문제를 해결했습니다.

에어 0.12.0

변경 없음

IBM Q 제공자 0.20.2

변경 없음


0.43.0

테라 0.24.0

Prelude

이번 업데이트는 수많은 새로운 기능과 버그 수정이 포함된 주요 기능 릴리스입니다.

이번 릴리스는 키스킷 실행을 지원하는 최종 릴리스이며 Python 3.7. 다음 마이너 버전 릴리스부터 키스킷을 실행하려면 Python >= 3.8 이 필요합니다.

이번 릴리스의 주요 내용입니다:

QuantumInstance, OpFlow, 및 알고리즘 사용 중단

이 릴리스에서는 공식적으로 QuantumInstance 클래스(및 관련 헬퍼 메서드 및 클래스), 모듈의 qiskit.opflow 모듈, 그리고 qiskit.algorithms. 이 지원 중단은 키스킷 테라 0.21.0 에서 시작된 긴 작업 스레드에서 비롯된 것입니다 qiskit.algorithms 모듈을 계산에 기반하도록 primitives. 기존 사용자가 새 워크플로로 마이그레이션할 수 있도록 관련 마이그레이션 가이드가 마련되어 있습니다:

OpenQASM2 개선 사항

이번 릴리스에는 키스킷의 OpenQASM 2.0 지원에 대한 주요 리팩터링이 포함되어 있습니다. 첫 번째 변경 사항은 OpenQASM 2.0 에 대한 새로운 구문 분석기가 qiskit.qasm2 모듈에 추가되었습니다. 이 새 모듈은 기존 qiskit.qasm 모듈을 대체합니다. 새 구문 분석기는 언어 사양과 관련하여 더 명확하고 정확합니다. 또한 Rust에서 구현되며 이전 구문 분석기보다 훨씬 빠릅니다. 새 구문 분석기와 함께 OpenQASM 2.0 내보내기는 대규모 리팩터링을 거쳐 출력의 정확성을 개선했습니다 QuantumCircuit.qasm() 메서드를 사용하여 QASM 출력을 생성할 때 출력의 정확성을 개선했습니다 QuantumCircuit 객체에서 출력을 생성할 때 정확성이 향상되었습니다.

분리된 연결성을 가진 장치에 대한 트랜스파일러 지원

이제 트랜스파일러는 연결이 분리된 백엔드 타겟팅을 지원합니다. 이전에는 트랜스파일러가 완전히 연결된 백엔드(백엔드의 모든 큐비트 쌍 간에 연산을 실행할 수 있는 경로가 있는 경우)만 지원했습니다. 이제 백엔드의 연결이 끊어진 경우 트랜스파일러는 백엔드에 레이아웃 (레이아웃 단계) 과 라우팅 (라우팅 단계)을 적용하는 방법을 추론할 수 있습니다. 연결된 컴포넌트 간의 연결성이 부족하여 하드웨어에서 입력 회로를 실행할 수 없는 경우 설명 오류가 반환됩니다.

예를 들어, IBM Quantum 의 하드웨어 로드맵에 설명된 헤론 장치는 별도의 양자 프로세서 간의 공유 제어 하드웨어와 실시간 클래식 통신을 갖춘 미래의 백엔드에 대해 설명합니다. 이 지원을 통해 Target 이러한 유형의 미래 디바이스나 유사한 제약 조건을 가진 기타 하드웨어를 정확하게 모델링할 수 있습니다.

스위치 작동

이번 릴리스에는 새로운 제어 흐름 연산인 switch 문이 추가되었습니다. 이는 새로운 연산 클래스를 사용하여 구현됩니다 SwitchCaseOpQuantumCircuit.switch() 메서드를 사용하여 구현됩니다. 이를 통해 숫자 입력(예: 클래식 레지스터 또는 비트)을 켜고 일치하는 값에 해당하는 회로를 실행할 수 있습니다.

새 기능

  • 기능 추가 add_deprecation_to_docstring(), deprecate_arg()deprecate_func() 함수를 qiskit.utils 모듈에

    add_deprecation_to_docstring() 는 사용 중단이 문서와 help() 에 표시되도록 스핑크스 .. deprecated:: 지시문을 포함하도록 함수의 문서 문자열을 다시 작성합니다. 의 사용 중단 데코레이터는 qiskit.utils call add_deprecation_to_docstring() 의 사용 중단 데코레이터를 이미 사용할 수 있지만, 사용 중단을 위해 다른 메커니즘을 사용하는 경우 직접 호출할 수 있습니다.

    @deprecate_func @deprecate_function 를 대체하며 전체 기능을 사용하지 않는 데 사용됩니다. 대부분의 사용 중단 메시지가 자동으로 생성됩니다.

    @deprecate_arg @deprecate_arguments 를 대체하며 함수의 인수를 사용하지 않는 데 사용됩니다. 이전 기능보다 더 유용한 메시지를 생성합니다. 또한 사용되지 않는 값이나 데이터 유형을 사용하는 등 특정 상황에서만 사용되지 않도록 predicate 을 설정할 수 있는 등 더 유연합니다.

트랜스파일러 기능
  • 지정된 하이레벨 객체에 사용되는 합성 메서드 목록을 HLSConfig 에 지정하는 대체 방법을 추가했습니다. 이전과 마찬가지로 합성 메서드는 메서드 이름과 추가 인수로 구성된 튜플로 지정할 수 있습니다. 또한 합성 메서드는 인스턴스와 추가 인수로 구성된 튜플로 지정할 수 있습니다 HighLevelSynthesisPlugin 와 추가 인자로 구성된 튜플로 지정할 수 있습니다. 또한 추가 인자가 없는 경우 합성 메서드는 단순히 이름이나 HighLevelSynthesisPlugin. 다음 예는 새로운 기능을 설명합니다:

    from qiskit import QuantumCircuit
    from qiskit.circuit.library.generalized_gates import PermutationGate
    from qiskit.transpiler import PassManager
    from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig, HighLevelSynthesis
    from qiskit.transpiler.passes.synthesis.high_level_synthesis import ACGSynthesisPermutation
    
    qc = QuantumCircuit(6)
    qc.append(PermutationGate([1, 2, 3, 0]), [1, 2, 3, 4])
    
    # All of the ways to specify hls_config are equivalent
    hls_config = HLSConfig(permutation=[("acg", {})])
    hls_config = HLSConfig(permutation=["acg"])
    hls_config = HLSConfig(permutation=[(ACGSynthesisPermutation(), {})])
    hls_config = HLSConfig(permutation=[ACGSynthesisPermutation()])
    
    # The hls_config can then be passed as an argument to HighLevelSynthesis
    pm = PassManager(HighLevelSynthesis(hls_config=hls_config))
    qc_synthesized = pm.run(qc)
  • 객체에 대한 지원이 추가되었습니다 CouplingMap 객체가 분리된 연결성을 갖도록 지원했습니다. 이전에는 CouplingMap 는 그래프가 연결된 경우에만 구성할 수 있었습니다. 이렇게 하면 CouplingMap 를 사용하여 여러 개의 개별 칩에 큐비트가 있는 하드웨어와 같이 분리된 큐비트가 있는 하드웨어를 나타낼 수 있습니다.

  • 새로운 메서드 추가 CouplingMap.connected_components() 메서드를 추가했습니다 CouplingMap 컴포넌트 하위 그래프 목록을 얻는 데 사용되는 새로운 메서드 CouplingMap. 객체가 연결된 경우 CouplingMap 객체가 연결되면 원본과 동일한 단일 CouplingMap 을 반환합니다.

  • 빌트인 인스턴스에 새로운 규칙을 추가했습니다 EquivalenceLibrary 인스턴스에 새로운 규칙을 추가했습니다: qiskit.circuit.equivalence_library.SessionEquivalenceLibrary. 추가된 새 규칙은 다음과 같습니다:

  • 하이 레벨 합성 플러그인 추가 LinearFunctionqiskit.quantum_info.Clifford에서 호출할 수 있는 합성 메서드 집합을 확장하여 HighLevelSynthesis 트랜스파일러 패스에서 호출할 수 있는 메서드 세트를 확장했습니다.

    의 경우 LinearFunction 의 경우 사용 가능한 플러그인은 다음과 같습니다:

    플러그인 이름
    하이 레벨 합성 플러그인
    defaultDefaultSynthesisLinearFunction
    kmsKMSSynthesisLinearFunction
    pmhPMHSynthesisLinearFunction

    의 경우 qiskit.quantum_info.Clifford 의 경우 사용 가능한 플러그인은 다음과 같습니다:

    플러그인 이름
    하이 레벨 합성 플러그인
    defaultDefaultSynthesisClifford
    agAGSynthesisClifford
    bmBMSynthesisClifford
    greedyGreedySynthesisClifford
    layersLayerSynthesisClifford
    lnnLayerLnnSynthesisClifford

    개별 방법에 대한 자세한 내용은 qiskit.synthesis 문서에서 각 개별 방법에 대한 자세한 내용을 확인하세요.

    다음 예는 새로운 플러그인 중 일부를 보여줍니다:

    from qiskit.circuit import QuantumCircuit
    from qiskit.circuit.library import LinearFunction
    from qiskit.quantum_info import Clifford
    from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig, HighLevelSynthesis
    
    # Create a quantum circuit with one linear function and one clifford
    qc1 = QuantumCircuit(3)
    qc1.cx(0, 1)
    qc1.swap(0, 2)
    lin_fun = LinearFunction(qc1)
    
    qc2 = QuantumCircuit(3)
    qc2.h(0)
    qc2.cx(0, 2)
    cliff = Clifford(qc2)
    
    qc = QuantumCircuit(4)
    qc.append(lin_fun, [0, 1, 2])
    qc.append(cliff, [1, 2, 3])
    
    # Choose synthesis methods that adhere to linear-nearest-neighbour connectivity
    hls_config = HLSConfig(linear_function=["kms"], clifford=["lnn"])
    
    # Synthesize
    qct = HighLevelSynthesis(hls_config)(qc)
    print(qct.decompose())
  • 새로운 트랜스파일러 패스를 추가했습니다, MinimumPoint 주로 루프 조건을 확인하기 위한 패스로 사용되는 PassManager. 이 패스는 과거 실행을 통해 프로퍼티 세트의 필드 상태를 추적하고 역추적 깊이에서 고정점에 도달하거나 역추적 깊이에 도달한 경우 발견된 최소값을 선택하면 부울 필드를 설정합니다. 이것은 단순히 다음 실행 사이에 속성 세트 필드에서 고정 값을 확인하는 FixedPoint 의 대안으로, 단순히 후속 실행 사이에 속성 세트 필드에서 고정된 값을 확인합니다.

  • 새로운 메서드를 추가했습니다, swap_nodes()메서드를 DAGCircuit 메서드를 추가하여 부분적으로 연결된 노드를 스왑할 수 있도록 했습니다. 여기서 부분적으로 연결되어 있다는 것은 두 노드가 적어도 하나의 에지(큐비트 또는 클럭비트를 나타냄)를 공유한다는 의미입니다. 노드가 어떤 에지도 공유하지 않으면 DAGCircuitError 가 발생합니다.

  • 새로운 합성 알고리즘 추가 synth_cz_depth_line_mr() 을 사용하여 2쿼비트 깊이( 2n+2 )의 선형 근접 이웃(LNN) 연결을 위한 CZ 회로에 CX 및 위상 게이트(S, Sdg 또는 Z)를 추가합니다. 합성된 회로는 큐비트의 순서를 되돌립니다. 합성 알고리즘은 Maslov와 Roetteler의 논문을 기반으로 합니다( https://arxiv.org/abs/1705.09176 ).

  • 새로운 합성 알고리즘 추가 synth_clifford_depth_lnn()9n+4 의 2-큐비트 깊이(아직 최적은 아님)의 LNN 연결을 위한 클리포드 회로에 계층화된 클리포드 합성(synth_clifford_layers()), synth_cnot_depth_line_kms() 를 사용하여 CX 레이어를 깊이 합성 5n, 그리고 synth_cz_depth_line_mr() 를 사용하여 각 CZ 레이어를 깊이 2n+2 로 합성합니다. 이 PR에 이어 Maslov와 Yang의 최근 논문을 기반으로 한 또 다른 PR( https://arxiv.org/abs/2210.16195 )에 기반한 또 다른 PR이 발표될 예정인데, 이는 LNN 연결을 위해 CX-CZ 레이어를 깊이 5n 합성하고 추가 최적화를 수행하여 클리포드 회로의 깊이를 7n-4 로 줄여서 LNN 연결을 위한 것입니다.

  • 이제 키스킷 표준 게이트의 등가 라이브러리에서 제어된 폴리 회전과 2폴리 회전으로의 변환 간의 등가성을 사용할 수 있습니다. 예를 들어, 이를 통해 다음을 번역할 수 있습니다 CRZGateRZZGate plus RZGate 또는 a CRYGate 를 단일 RZXGate 더하기 단일 큐비트 게이트로 변환할 수 있습니다:

    from qiskit.circuit import QuantumCircuit
    from qiskit.compiler import transpile
    
    angle = 0.123
    circuit = QuantumCircuit(2)
    circuit.cry(angle, 0, 1)
    
    basis = ["id", "sx", "x", "rz", "rzx"]
    transpiled = transpile(circuit, basis_gates=basis)
    print(transpiled.draw())
  • 에 새로운 옵션인 copy_operations 을 추가했습니다 circuit_to_dag() 에 선택적으로 입력에서 출력으로의 딥 복사를 비활성화할 수 있도록 QuantumCircuit 에서 출력 QuantumCircuit. 변환 후 :class`~.QuantumCircuit` 입력이 더 이상 사용되지 않는 경우 이 딥 카피는 불필요한 오버헤드이며, 공유 참조가 삭제되면 원치 않는 부작용이 발생할 수 있습니다 QuantumCircuit 을 삭제하면 공유 참조가 원치 않는 부작용을 일으킬 수 있기 때문입니다.

  • 에 새로운 옵션인 copy_operations 을 추가했습니다 dag_to_circuit() 에 새로운 옵션을 추가하여 입력에서 출력으로의 딥 복사를 선택적으로 비활성화할 수 있도록 DAGCircuit 에서 출력 QuantumCircuit. 변환 후 입력 DAGCircuit 이 변환 후 더 이상 사용되지 않는 경우 이 딥 복사는 불필요한 오버헤드이며, 공유 참조는 입력 DAGCircuit 이 버려지면 공유 참조가 원치 않는 부작용을 일으킬 수 있기 때문에 불필요한 오버헤드입니다.

  • 새로운 기능 추가 passmanager_stage_plugins() 모듈에 qiskit.transpiler.preset_passmanagers.plugin 모듈에 새로운 함수를 추가했습니다. 이 함수는 플러그인 이름에서 해당 클래스 유형에 대한 매핑을 얻는 데 사용됩니다. 이를 통해 정의된 패스 매니저 스테이지 플러그인의 문서를 식별하고 쿼리할 수 있습니다. 예를 들어,

    >>> from qiskit.transpiler.preset_passmanagers.plugin import passmanager_stage_plugins
    >>> passmanager_stage_plugins('routing')['lookahead'].__class__
    
    qiskit.transpiler.preset_passmanagers.builtin_plugins.LookaheadSwapPassManager
    
    >>> help(passmanager_stage_plugins('routing')['lookahead'])
    Help on BasicSwapPassManager in module qiskit.transpiler.preset_passmanagers.builtin_plugins object:
    
    class BasicSwapPassManager(qiskit.transpiler.preset_passmanagers.plugin.PassManagerStagePlugin)
    |  Plugin class for routing stage with :class:`~.BasicSwap`
    ...
  • 이제 트랜스파일러 패스 Errormsg 매개변수에 대한 호출 가능한 입력도 허용합니다. 이러한 입력 콜러블을 사용하면 패스의 property_set 속성이 전달되며 패스가 실행될 때 오류 메시지에 사용될 문자열을 반환할 것으로 예상됩니다. 예를 들어,

    from qiskit.transpiler.passes import Error
    
    def error_message(property_set):
    
        size = property_set["size']
        return f"The circuit size is: {size}"
    
    error_pass = Error(error_message)

    error_pass 이 패스 관리자에 포함되면 "The circuit size is: n" 메시지(여기서 n 는 속성 세트에 설정된 회로 크기입니다(일반적으로 이전에 실행한 Size 패스).

  • 메서드에는 build_coupling_map() 메서드에는 새로운 키워드 인수가 있는데, filter_idle_qubits 으로 설정하면 True 출력에서 연산을 지원하지 않는 큐비트를 제거합니다 CouplingMap 에서 어떤 연산도 지원하지 않는 모든 큐비트를 제거합니다.

  • 이제 GateDirection 트랜스파일러 패스는 이제 회로에 존재할 수 있는 SwapGate 인스턴스를 올바르게 처리할 수 있습니다. 이러한 경우 스왑 게이트의 큐비트 인자가 에지의 기본 방향이 아닌 방향에 있는 경우 패스는 인자 순서를 뒤집습니다.

  • 그리고 RZXCalibrationBuilderRZXCalibrationBuilderNoEcho 트랜스파일러 패스는 이제 백엔드 네이티브 탱글링 게이트가 있는 경우 ECRGate 를 인탱글링 게이트에 사용하며, 백엔드의 네이티브 인탱글링 게이트가 ECRGate. 이전에는 패스가 인탱글링 게이트가 CXGate.

  • 클래스에 대한 새로운 생성자를 추가했습니다 Target 클래스에 새로운 생성자를 추가했습니다, Target.from_configuration()클래스의 새로운 생성자가 추가되어, 백엔드 제약 조건을 설명하기 위해 별도의 객체 유형에서 Target 객체를 생성할 수 있는 새로운 생성자가 추가되었습니다(예: 베이스 게이트), CouplingMap, BackendProperties등). 예를 들어,

    target = Target.from_configuration(
        basis_gates=["u", "cx", "measure"],
        coupling_map=CouplingMap.from_line(25),
    )

    이렇게 하면 Target 객체를 생성합니다 UGate, CXGateMeasure 가 있는 객체를 생성하며, 25개의 큐비트가 일렬로 연결됩니다.

  • 에이미, 아짐자데, 모스카 방식을 사용하여 올투올 아키텍처에 대한 노트 위상 회로를 합성하는 데 사용되는 새로운 함수 synth_cnot_phase_aam() 를 추가했습니다. 이 함수는 사용 가능한 qiskit.transpiler.synthesis.graysynth() 함수와 동일하지만 더 설명적인 이름을 가지며 패키지 트리에 더 논리적으로 배치됩니다. 이 새로운 기능은 향후 릴리스에서 더 이상 사용되지 않을 가능성이 있는 레거시 기능을 대체합니다.

  • 의 라우팅 알고리즘을 내부적으로 조정하여 SabreSwap의 라우팅 알고리즘을 내부적으로 조정하여 0이 아닌 모든 최적화 수준에서 비동적 회로의 트랜스필레이션에 사용함으로써 매우 큰 회로의 라우팅 속도가 빨라졌습니다. 예를 들어, depth-5 QuantumVolume 회로를 라우팅하는 데 걸리는 시간은 약 절반으로 줄어듭니다.

  • 트랜스파일러 패스의 런타임 성능이 Optimize1qGatesDecomposition 트랜스파일러 패스의 런타임 성능이 크게 향상되었습니다. 이는 Rust에서 패스에 대한 모든 계산을 다시 작성하고 패스 실행의 일부로 생성되는 중간 오브젝트의 양을 줄이는 방식으로 이루어졌습니다. 이것은 또한 런타임 성능의 비슷한 개선에 해당해야 합니다 transpile()optimization_level 키워드 인수가 1, 2 또는 3 로 설정된 경우와도 비슷합니다.

  • 새로운 합성 방법 추가 synth_stabilizer_layers() 를 레이어에 추가합니다. 이는 안정기 상태에 영향을 주지 않는 초기 하다마드가 없는 하위 회로 없이 Bravyi와 Maslov의 렘마 8에 설명된 합성( arxiv:2003.09412 )과 유사한 분해를 제공합니다.

  • 2쿼비트 깊이( 2n+2 )의 선형 최접근 이웃 연결을 위한 안정화 상태의 새로운 합성 방법 synth_stabilizer_lnn() 을 추가하고, CX 및 위상 게이트(S, Sdg 또는 Z)를 사용하여 두 개의 별개의 CX 레이어를 추가합니다. 합성 알고리즘은 Maslov와 Roetteler의 논문을 기반으로 합니다( https://arxiv.org/abs/1705.09176 ).

  • 이제 SabreLayout 패스는 이제 분리된 대상에 대한 실행을 지원합니다 CouplingMap. 분리된 커플링을 타깃팅할 때 입력은 DAGCircuit 을 가상 큐비트의 연결된 컴포넌트로 분할하면, 각 컴포넌트가 연결된 CouplingMap레이아웃은 연결된 각 컴포넌트에서 개별적으로 실행된 다음 모든 레이아웃이 결합되어 반환됩니다. routing_pass 인수가 설정된 경우 패스는 분리된 연결로 실행하는 것을 지원하지 않습니다.

  • 이제 다음 레이아웃 및 라우팅 트랜스파일러 패스는 qiskit.transpiler.passes 모듈의 다음 레이아웃 및 라우팅 트랜스파일러 패스는 이제 첫 번째 위치 인수를 통해 Target 객체(현재 이름은 coupling_map 또는 backend_properties)를 통해 대상 백엔드의 제약 조건을 모델링하는 데 사용됩니다.

    새로 지원되는 패스 목록은 다음과 같습니다 Target 입력이 지원되는 패스 목록입니다:

  • 패스 관리자 구성 도우미 기능 generate_embed_passmanager() 는 이제 유일한 위치 인자로 Target 를 유일한 위치 인자로 사용할 수 있습니다(현재 이름은 coupling_map). 레이아웃 임베딩을 구성하는 데 사용할 수 있습니다 PassManager 에서 Target 객체 대신 CouplingMap.

  • 다음 레이아웃 및 라우팅 트랜스파일러 패스는 qiskit.transpiler.passes 모듈의 새로운 키워드 인수가 있는데, target 이 인수는 대상 백엔드의 제약 조건을 모델링하는 데 사용되는 Target 객체를 받아 대상 백엔드의 제약 조건을 모델링하는 데 사용됩니다. target 키워드 인수를 지정하면 트랜스파일러 패스의 작동에 사용되는 모든 하드웨어 제약 조건에 대한 진실 소스로 사용됩니다. 하드웨어 제약 조건을 지정하기 위한 다른 인자, 일반적으로 a를 사용하는 인자를 대체합니다 CouplingMap, InstructionScheduleMap 또는 베이스 게이트 목록을 취하는 인수를 대체합니다. 새로운 target 인수가 포함된 이러한 패스 목록은 다음과 같습니다:

  • 패스 관리자 구성 도우미 함수 generate_scheduling() 에는 새로운 키워드 인자 target 가 있는데, 이는 새 컴파일 대상 백엔드를 생성할 때 컴파일할 대상 백엔드의 제약 조건을 모델링하는 Target 객체를 생성할 때 컴파일되는 대상 백엔드의 제약 조건을 모델링하는 데 사용됩니다 PassManager. 지정하면 이 새 인수가 다른 인수 inst_map 를 대체합니다.

  • 트랜스파일러 패스에 사용되는 default 플러그인은 UnitarySynthesis 트랜스파일러 패스가 이제 1-큐비트 및 2-큐비트 단일 합성을 선택합니다 Target. 특히 플러그인에서 지원하는 모든 가능한 합성 방법을 실행하고 오류가 가장 적은 옵션을 선택합니다. 1큐비트 분해의 경우, 폴리 기저(예: RZ-RX-RZ 또는 RZ-RY-RZ), 일반 단일 기저(예: U) 등을 대상으로 할 수 있습니다. 2큐비트 분해의 경우, 모든 초제어 기저(예: CNOT, iSWAP, B) 또는 다중 제어 기저(예: CZ, CH, ZZ^.5, ZX^.2, 등)를 대상으로 할 수 있습니다.

  • 에 대한 인터페이스에는 UnitarySynthesisPlugin 인터페이스에는 supports_gate_lengths_by_qubitsupports_gate_errors_by_qubit 두 개의 새로운 옵션 속성이 있으며, 설정하면 플러그인의 run() 메서드에 대한 입력 옵션에 각각 gate_lengths_by_qubitgate_errors_by_qubit 필드가 추가됩니다. 이 새로운 필드는 gate_lengthsgate_errors 에서 제공하는 데이터의 대체 보기이지만 대신 {(qubits,): [Gate, length]} (여기서 Gate 은 해당 정의의 인스턴스입니다 Gate 의 인스턴스입니다.) 이를 통해 플러그인은 동일한 유형이지만 다른 매개변수가 설정된 게이트로 작업하는 것을 추론할 수 있습니다.

  • 새로운 트랜스파일러 패스를 추가했습니다, UnrollForLoops새로운 트랜스파일러 패스를 추가했습니다 ForLoopOp 연산에 사용되는 새로운 트랜스파일러 패스를 추가했습니다. 이 패스는 가능한 경우 포루프를 언롤링합니다 ContinueLoopOp 또는 BreakLoopOp 가 없는 경우 루프 본문 블록을 롤아웃합니다. 예를 들어,

    from qiskit.transpiler.passes import UnrollForLoops
    from qiskit import QuantumCircuit
    
    unroll_pass = UnrollForLoops()
    
    qc = QuantumCircuit(1)
    # For loop over range 5
    with qc.for_loop(range(5)) as i:
        qc.rx(i, 0)
    # Unroll loop into 5 rx gates
    unroll_pass(qc).draw("mpl")
    _images/legacy_release_notes-1.png
  • 전달할 새 매개변수 max_trials 추가 VF2PostLayout 지정하면 최적의 레이아웃을 검색할 때 검색 및 비교되는 레이아웃의 수를 제한합니다. 이는 기존 파라미터 call_limittime_limit ( VF2 알고리즘에서 수행되는 상태 방문 횟수와 패스별 총 소요 시간을 각각 제한하는 데 사용됨)과는 다릅니다 VF2PostLayout)와는 달리 잠재적 레이아웃을 점수화하는 데 소요되는 시간에 상한선을 설정하는 데 사용되며, 이는 대형 디바이스에 유용할 수 있습니다.

  • 트랜스파일러 패스의 CheckMap 트랜스파일러 패스의 생성자에는 새로운 키워드 인수가 있습니다( property_set_field). 이 인수는 분석 결과를 저장할 속성 집합의 필드를 지정하는 데 사용할 수 있습니다. 이전에는 결과를 "is_swap_mapped" (기본값) 필드에 저장하는 것만 가능했습니다. 이렇게 하면 패스의 여러 인스턴스 결과를 서로 다른 필드에 PassManager 필드에 저장할 수 있습니다.

회로 기능
  • 새로운 게이트 클래스를 추가했습니다, GlobalPhaseGate인스턴스에 글로벌 페이즈를 추가하는 데 사용할 수 있는 QuantumCircuit 인스턴스에 글로벌 페이즈를 추가하는 데 사용할 수 있습니다.

  • 새 속성을 추가했습니다, layout속성을 QuantumCircuit 클래스에 새로운 어트리뷰트를 추가했습니다. 이 속성은 일반적으로 transpile() 또는 PassManager.run() ( 레이아웃 스테 이지와 라우팅 스테이지가 PassManager)에 의해 채워지며 TranspileLayout 에 의해 채워지며, 여기에는 입력 회로의 순열에 대한 정보가 들어 있습니다 transpile().

  • 클래스의 생성자에 새로운 인수 var_order 를 추가하여 PhaseOracle 클래스의 생성자에 새로운 인수 를 추가하여 논리 표현식의 변수가 고려되는 순서를 설정할 수 있도록 했습니다. 예를 들어,

    from qiskit.tools.visualization import plot_histogram
    from qiskit.primitives import Sampler
    from qiskit.circuit.library import PhaseOracle
    from qiskit.algorithms import Grover, AmplificationProblem
    
    oracle = PhaseOracle('((A & C) | (B & D)) & ~(C & D)', var_order=['A', 'B', 'C', 'D'])
    problem = AmplificationProblem(oracle=oracle, is_good_state=oracle.evaluate_bitstring)
    grover = Grover(sampler=Sampler())
    result = grover.amplify(problem)
    print(result.circuit_results[0])
  • 새로운 OpenQASM 2 구문 분석기는 qiskit.qasm2. 여기에는 두 가지 진입점이 있습니다: qasm2.load()qasm2.loads()를 사용하여 각각 파일과 문자열에서 소스 코드를 읽습니다:

    import qiskit.qasm2
    program = """
      OPENQASM 2.0;
      include "qelib1.inc";
      qreg q[2];
      h q[0];
      cx q[0], q[1];
    """
    bell = qiskit.qasm2.loads(program)

    이 새로운 구문 분석기는 기존 구문 분석기보다 약 10x 빠릅니다 QuantumCircuit.from_qasm_file()QuantumCircuit.from_qasm_str() 보다 약 더 빠르며, 각 호출에 대한 오버헤드도 적습니다. 새로운 구문 분석기는 더 확장 가능하고, 사용자 정의가 가능하며, 일반적으로 더 형식 안전하며, 현재 내보내기와 달리 OpenQASM 2 파일의 정의가 키스킷 객체와 충돌할 때 사용자 정의 키스킷 객체를 출력하려고 시도하지 않습니다. 자세한 내용은 qiskit.qasm2 모듈 설명서를 참조하세요.

  • 다중 제어 폴리-X 및 폴리-Y 회전의 분해를 개선합니다 QuantumCircuit.mcrx()QuantumCircuit.mcry on :math:`n() 제어를 16n4016n - 40 CX 게이트로, n4n \geq 4. 이 개선 사항은 arXiv:2302.06377.

  • switch 이제 키스킷은 새로운 명령어인 SwitchCaseOp 명령어와 QuantumCircuit.switch() 메서드를 사용한다. 이를 통해 숫자 입력(예: 클래식 레지스터 또는 비트)을 켜고 일치하는 값에 해당하는 회로를 실행할 수 있습니다. 여러 값이 동일한 회로를 가리킬 수 있으며, 항상 일치하는 레이블로 CASE_DEFAULT 는 항상 일치하는 레이블로 사용할 수 있습니다.

    다른 제어 흐름 구조와 유사한 빌더 인터페이스를 사용하여 이러한 스위치 문을 작성할 수도 있습니다:

    from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
    
    qreg = QuantumRegister(2)
    creg = ClassicalRegister(2)
    qc = QuantumCircuit(qreg, creg)
    
    qc.h([0, 1])
    qc.measure([0, 1], [0, 1])
    with qc.switch(creg) as case:
      with case(0):  # if the register is '00'
        qc.z(0)
      with case(1, 2):  # if the register is '01' or '10'
        qc.cx(0, 1)
      with case(case.DEFAULT):  # the default case
        qc.h(0)

    switch 문은 키스킷 컴파일러 스택 전체에서 지원됩니다 transpile() 를 포함하는 회로(백엔드가 구조체에 대한 지원을 광고하는 경우)를 만들면 QPY로 직렬화됩니다.

    switch 문구는 현재 OpenQASM 3의 기능은 아니지만, 현재 설계 및 검토 중이며 조만간 채택될 것으로 예상됩니다. 키스킷 테라에서는 실험적 기능 플래그를 사용하여 링크된 풀 리퀘스트에 제안된 OpenQASM 3 구문으로 이 문을 내보내는 것을 실험적으로 지원하고 있습니다. 이 추측 지원을 사용하여 switch 문 회로(예: 위에서 만든 것과 같은)를 OpenQASM 3으로 내보내려면 다음과 같이 하세요:

    from qiskit import qasm3
    
    qasm3.dumps(qc, experimental=qasm3.ExperimentalFeatures.SWITCH_CASE_V1)
알고리즘 기능
  • 새로운 속성 eigenvalue_threshold 속성을 AdaptVQE 클래스에 고유값이 설정된 값보다 작아지면 알고리즘을 종료하는 새로운 종류의 임계값을 구성하기 위한 새로운 속성을 추가했습니다.

  • 새로운 속성 gradient_thresholdAdaptVQE 클래스에 새로운 속성을 추가했습니다 threshold 를 대체할 새로운 속성을 추가했습니다. 이 새로운 속성은 기존 threshold 속성과 동일하게 작동하지만 클래스에 추가 임계값 옵션이 도입되어 더 정확한 이름을 갖게 되었습니다.

  • 속성을 추가했습니다 EstimationProblem.has_good_state 속성을 추가하여 EstimationProblem 에 사용자 정의 EstimationProblem.is_good_state 가 있는지 또는 기본값인지 확인할 수 있는 속성을 추가했습니다. 이는 진폭 추정기(예 AmplitudeEstimation와 같이 기본 구현만 지원하는 진폭 추정에 유용합니다.

  • 플래그 local 를 추가하여 ComputeUncompute 상태 충실도 클래스에 단일 큐비트 프로젝터에 대한 평균으로 정의되는 로컬 충실도를 계산할 수 있는 플래그를 추가합니다.

  • 그라데이션 클래스는 이제 입력 매개변수의 순서에 따라 그라데이션 결과를 재정렬합니다.

    예:

    from qiskit.algorithms.gradients import ParamShiftEstimatorGradient
    from qiskit.circuit import QuantumCircuit, Parameter
    from qiskit.primitives import Estimator
    from qiskit.quantum_info import SparsePauliOp
    
    # Create a circuit with a parameter
    p = {i: Parameter(f'p{i}') for i in range(3)}
    qc = QuantumCircuit(1)
    qc.rx(p[0], 0)
    qc.ry(p[1], 0)
    qc.rz(p[2], 0)
    op = SparsePauliOp.from_list([("Z", 1)])
    param_values = [0.1, 0.2, 0.3]
    
    # Create a gradient object
    estimator = Estimator()
    grad = ParamShiftEstimatorGradient(estimator)
    result = grad.run(qc, op, [param_values]).result()
    # would produce a gradient of the form [df/dp0, df/dp1, df/dp2]
    result = grad.run(qc, op, [param_values], parameters=[[p[2], p[0]]]).result()
    # would produce a gradient of the form [df/dp2, df/dp0]
  • 클래스에 시간 종속 해밀턴 연산자(즉, 단일 매개변수화된 연산자) 처리를 위한 지원이 추가되었습니다 TrotterQRTE 클래스에 이 작업을 용이하게 하려면 num_timesteps 속성과 일치하는 키워드 인수를 생성자에 추가하여 TrotterQRTE 생성자에 속성과 일치하는 키워드 인수를 추가하여 전체 진화를 나누는 시간 단계의 수를 제어합니다.

  • 클래스를 실행하는 동안 모든 시간 단계에서 관찰 가능한 평가에 대한 지원이 추가되었습니다 TrotterQRTE 클래스. 는 TimeEvolutionProblem.aux_operators 는 생성자에서 입력 product_formula 인수의 ProductFormula.reps 속성이 1로 설정된 경우 모든 시간 단계에서 평가됩니다.

  • 알고리즘에 확장 기능이 추가되어 VQD 알고리즘에 확장 기능을 추가하여 다양한 최소화 실행을 위한 최적화 도구 목록과 초기 지점을 전달할 수 있습니다. 예를 들어, k-번째 초기 포인트와 k-번째 최적화 도구는 k-1-번째 퇴출 상태의 최적화에 사용됩니다.

양자 정보 특성
  • 두 개의 새로운 생성자 메서드가 추가되었습니다, Clifford.from_matrix()Clifford.from_operator()객체를 생성하는 두 개의 새로운 생성자 메서드와 Clifford 객체를 생성하는 두 가지 생성자 메서드를 추가했습니다.

  • 의 생성자는 Clifford 의 생성자는 이제 이전에는 변환할 수 없었던 Rz(pi/2) 과 같은 매개변수화된 게이트를 포함해 to_matrix 메서드를 구현하는 한 모든 클리포드 게이트 객체를 최대 3큐비트까지 가져올 수 있습니다.

  • 새로운 유틸리티 기능이 추가되었습니다: commutator(), anti_commutator()double_commutator() 와 같은 LinearOp 추상 베이스 클래스를 구현하는 모든 객체의 정류자를 계산하는 데 사용되는, QuantumChannel, SparsePauliOp또는 ScalarOp.

  • 두 개의 안정제 상태의 생성 세트가 동일한 안정제 그룹을 생성하는지 확인하는 메서드 StabilizerState.equiv 를 추가했습니다. 예를 들어, 2큐비트 벨 상태의 안정기 그룹은 네 가지 요소 {II,XX,YY,ZZ}\{II, XX, -YY, ZZ\} 를 포함하므로 [XX,ZZ][XX, ZZ], [XX,YY][XX, -YY] 또는 [YY,ZZ][-YY, ZZ] 로 생성할 수 있습니다.

  • 새로운 메서드를 추가했습니다, partial_transpose()메서드를 추가했습니다 qiskit.quantum_info 모듈의 DensityMatrix 클래스에 메서드를 추가했습니다. 이 방법은 이분 양자 시스템 간의 얽힘을 감지하는 데 필요한 밀도 행렬의 부분 전치를 계산하는 데 사용됩니다.

  • 메서드 추가 qiskit.quantum_info.Operator.apply_permutation() 연산자를 순열로 사전 합성하거나 사후 합성하는 메서드를 추가했습니다. 이 방법은 일반적인 종료에 적용됩니다.

    다음은 연산자의 비트를 재정렬하는 P.O.PP^\dagger.O.P 을 계산하는 예제입니다:

    import numpy as np
    from qiskit.quantum_info.operators import Operator
    
    op = Operator(np.array(range(576)).reshape((24, 24)), input_dims=(2, 3, 4), output_dims=(2, 3, 4))
    perm = [1, 2, 0]
    inv_perm = [2, 0, 1]
    conjugate_op = op.apply_permutation(inv_perm, front=True).apply_permutation(perm, front=False)

    공액 연산자의 크기는 (4, 2, 3) x (4, 2, 3)이며, 이는 큐트리트를 위치 0으로, 큐비트를 위치 1로, 4-큐티트를 위치 2로 이동하는 순열과 일치합니다.

  • 기본적으로 다음과 같은 SparsePauliOp 객체의 구성을 ParameterExpression 계수를 사용하여 객체 배열을 명시적으로 구성할 필요 없이 기본적으로 지원합니다. 이제 다음이 지원됩니다:

    from qiskit.circuit import Parameter
    from qiskit.quantum_info import SparsePauliOp
    
    x = Parameter("x")
    op = SparsePauliOp(["Z", "X"], coeffs=[1, x])
  • 추가 SparsePauliOp.assign_parameters() 메서드와 SparsePauliOp.parameters 속성을 추가하여 바인딩되지 않은 매개변수를 할당하고 쿼리할 수 있는 SparsePauliOp. 이 기능은 예를 들어 다음과 같이 사용할 수 있습니다:

    from qiskit.circuit import Parameter
    from qiskit.quantum_info import SparsePauliOp
    
    x = Parameter("x")
    op = SparsePauliOp(["Z", "X"], coeffs=[1, x])
    
    # free_params will be: ParameterView([x])
    free_params = op.parameters
    
    # assign the value 2 to the parameter x
    bound = op.assign_parameters([2])
펄스 기능
  • 펄스 라이브러리에 새로운 SymbolicPulse 클래스를 펄스 라이브러리에 추가했습니다(qiskit.pulse.library) 라이브러리의 새로운 펄스는 다음과 같습니다:

    이 새로운 클래스는 ScalableSymbolicPulse 의 인스턴스입니다. Sawtooth 단계를 제외하고 동작은 해당 파형 생성기 함수의 동작과 동일합니다(예 sin()). Sawtooth 클래스의 페이즈는 2π2\pi 의 페이즈가 전체 주기만큼 이동하도록 정의됩니다.

  • QPY(qiskit.qpy)에 대한 지원이 추가되었습니다 ScheduleBlock 인스턴스 작업과 서브루틴 참조를 위한 데이터 구조 보존을 위한 지원이 추가되었습니다. 이 기능을 사용하면 펄스 보정과 같은 작업을 위해 템플릿 펄스 프로그램을 직렬화 및 역직렬화할 수 있습니다. 예를 들어,

    from qiskit import pulse
    from qiskit import qpy
    
    with pulse.build() as schedule:
        pulse.reference("cr45p", "q0", "q1")
        pulse.reference("x", "q0")
        pulse.reference("cr45p", "q0", "q1")
    
    with open('template_ecr.qpy', 'wb') as fd:
        qpy.dump(schedule, fd)
  • 보정 항목에 새로운 방법 CalibrationEntry.user_provided() 이 추가되었습니다. 이 메서드를 호출하여 항목이 최종 사용자 또는 백엔드에 의해 정의되었는지 확인할 수 있습니다.

  • 새로운 메서드 추가 Target.get_calibration() 메서드를 추가하여 명령어의 캘리브레이션에 편리하게 액세스할 수 있습니다 Target 이 메서드는 매개변수 arg 및 kwarg를 사용하여 호출할 수 있으며, 캘리브레이션이 매개변수로 템플리트된 경우 매개변수로 구축된 펄스 스케줄을 반환합니다.

제공자 기능
  • 클래스에는 BackendV2Converter 클래스에는 생성자에 새로운 키워드 인자 filter_faulty 가 있습니다. 이 인수가 True 로 설정되면, 변환기 클래스는 입력에 대해 비작동으로 나열된 큐비트나 연산을 BackendProperties 페이로드에 BackendV1. 광범위하게 사용되지는 않지만 BackendProperties 객체는 큐비트와 게이트 모두 비작동 상태로 주석을 달 수 있도록 지원합니다. 이전에는 백엔드에서 큐비트나 게이트에 해당 플래그를 설정한 경우 출력 BackendV2 인스턴스와 그 Target 에는 작동 여부와 관계없이 모든 연산이 포함되었습니다. 새 플래그를 활용하면 이러한 비작동 큐비트와 게이트를 필터링할 수 있습니다 Target. 플래그가 설정되면 출력 백엔드는 여전히 전체 폭으로 나열되지만(예: 4 큐비트가 작동하지 않는 것으로 나열된 24 큐비트 백엔드는 여전히 24 큐비트로 표시됨) 결함이 있는 큐비트에는 지원되는 것으로 나열되는 연산이 Target.

  • 이제 Options 클래스는 이제 Mapping 프로토콜과 __setitem__ 메서드를 구현합니다. 즉, 이제 Options 인스턴스는 이제 삭제 메서드(__delitem__, pop, clear)를 제외하고 표준 딕셔너리와 동일한 인터페이스를 제공합니다. 키 할당은 유효성 검사기가 등록되어 있는 경우 유효성 검사기에 의해 검증됩니다.

시각화 기능
  • 인스턴스를 시각화하는 데 사용되는 새로운 함수 staged_pass_manager_drawer() 를 추가했습니다 StagedPassManager 인스턴스를 시각화하는 데 사용되는 함수를 추가했습니다. 각 단계가 바깥쪽 상자로 표시된 전체 패스 관리자를 그립니다.

    예를 들어,

    from qiskit.visualization import staged_pass_manager_drawer
    from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
    from qiskit.providers.fake_provider import FakeSherbrooke
    
    backend = FakeSherbrooke()
    pm = generate_preset_pass_manager(3, backend)
    staged_pass_manager_drawer(pm)
  • 메서드 StagedPassManager.draw() 메서드가 전체 패스 관리자 외에 스테이지의 시각화도 포함하도록 업데이트되었습니다. 단계는 시각화에서 바깥쪽 상자로 표시됩니다. 이전 릴리스에서는 스테이지가 시각화에 포함되지 않았습니다. 예를 들어,

    from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
    from qiskit.providers.fake_provider import FakeSherbrooke
    
    backend = FakeSherbrooke()
    pm = generate_preset_pass_manager(3, backend)
    pm.draw(pm)
  • 함수에 새로운 키워드 인수 figsize 를 추가했습니다 plot_bloch_multivector() 함수에 새로운 키워드 인수를 추가했습니다. 이 인수는 개별 블로흐 구체 하위 플롯의 크기를 설정하는 데 사용할 수 있습니다. 예를 들어 nn 큐비트가 있고 figsize(w, h) 로 설정된 경우 전체 그림 너비는 nwn \cdot w 로 설정되고 전체 높이는 hh 로 설정됩니다.

  • 함수에 새로운 키워드 인수 font_size 를 추가했습니다 plot_bloch_multivector() 함수에 새로운 키워드 인수를 추가했습니다. 이 인수는 출력 시각화의 글꼴 크기를 제어하는 데 사용할 수 있습니다.

  • 함수에 두 개의 새로운 키워드 인수 title_font_sizetitle_pad 를 추가했습니다 plot_bloch_multivector() 함수에 추가했습니다. 이 인수는 각각 전체 제목의 글꼴 크기와 패딩을 제어하는 데 사용할 수 있습니다.

업그레이드 주의사항

  • 지원되는 최소 Rust 버전(MSRV)이 1.56.1 에서 1.61.0 으로 증가했습니다. 소스에서 키스킷을 빌드하는 경우, 이제 키스킷을 빌드하려면 최소한 Rust 1.61.0 가 설치되어 있는지 확인해야 합니다. 이 변경은 여러 업스트림 종속성이 MSRV를 증가시켰기 때문에 이루어졌습니다.

  • 2022년 10월 키스킷 테라 0.22.0 릴리스에서 더 이상 사용되지 않는 컨텍스트 관리자와 회로, (추정기에만 관찰 가능한) 초기화 및 파라미터를 통한 프리미티브 사용이 제거되었습니다.

  • PrimitiveJob.submit() 더 이상 실행 완료를 차단하지 않습니다. 결과적으로 Sampler.run(), BackendSampler.run(), Estimator.run()BaseEstimator.run()PrimitiveJob.result() 메서드가 호출될 때까지 차단하지 않습니다.

트랜스파일러 업그레이드 노트
  • 를 사용하여 최적의 레이아웃을 검색할 때 평가되는 최대 시도 횟수입니다 VF2LayoutVF2PostLayout 이제 level_1_pass_manager(), level_2_pass_manager()level_3_pass_manager() 로 각각 2 500, 25 000, 250 000 로 제한됩니다. 이전에는 발견된 모든 가능한 레이아웃을 평가했습니다. 이 변경 사항은 연결된 각 구성 요소가 디바이스의 모든 가능한 위치에서 평가되기 때문에 조합적으로 확장되는 대형 디바이스에서 연결된 구성 요소가 많은 회로의 레이아웃 채점 시 트랜스필레이션이 중단되는 것을 방지하기 위해 만들어졌습니다. 이전처럼 전체 검색을 수행하려면, 수동으로 엄격 모드에서 VF2PostLayout 를 엄격 모드로 실행하고 max_trials0 를 지정합니다.

  • 이전에 더 이상 사용되지 않는 condition 속성은 DAGDepNode 클래스의 속성이 제거되었습니다. 0.18 릴리스(07-2021)에서 더 이상 사용되지 않는 것으로 표시되었습니다. 대신 작업 노드의 조건에 액세스하려면 conditionop 속성을 사용하여 작업 노드의 조건에 액세스해야 합니다. 다른 노드 유형의 경우 액세스 조건이 없습니다.

  • 기본값은 metadata DAGCircuitDAGDependency 의 일치하는 metadata 속성과의 호환성을 위해 None 에서 {} 로 변경되었습니다 QuantumCircuit.

  • CouplingMap.__eq__`() 메서드가 기본 그래프의 에지 목록에 동일한 요소가 포함되어 있는지 확인하도록 업데이트되었습니다. 기본 그래프가 연결되어 있다는 가정 하에, 이 검사는 그래프에 동일한 레이블을 가진 동일한 수의 노드가 있는지 추가로 확인합니다. CouplingMap() == CouplingMap() 를 사용하여 객체 동일성을 확인하는 모든 코드는 CouplingMap() is CouplingMap() 로 업데이트해야 합니다.

  • 함수를 실행할 때 transpile() 함수를 실행할 때 BackendV1 기반 백엔드 또는 BackendPropertiesbackend_properties 키워드 인수를 통해 결함이 있는 큐비트 또는 게이트가 있는 함수를 실행하면 함수는 더 이상 이 정보를 기반으로 큐비트를 자동으로 리매핑하려고 시도하지 않습니다. 이 리매핑을 시도하는 방법 transpile() 이 리매핑을 시도하는 방식은 근본적으로 결함이 있으며, 대부분의 경우 이러한 백엔드에서 내부 오류가 발생합니다. 실제로 백엔드에서 큐비트나 게이트에 결함을 표시하기 위해 BackendProperties 필드를 설정하여 큐비트나 게이트에 결함이 있는 것으로 플래그를 지정하는 백엔드는 거의 없습니다. 에 의존하고 있었다면 transpile() 에 의존하여 이 매핑을 수행했다면, 이제 수동으로 매핑된 입력을 coupling_mapbackend_properties 인수에 전달하여 결함이 있는 큐비트와 게이트를 필터링한 다음 출력을 수동으로 다시 매핑해야 합니다.

  • 이전 버전의 키스킷 테라에 비해 고정 시드에 대한 트랜슬레이션 결과가 변경되었을 수 있습니다. 이는 내부적으로 라우팅 알고리즘을 조정했기 때문입니다 SabreSwapSabreLayout가 각각 기본 라우팅 및 레이아웃 패스인 라우팅 알고리즘을 조정하여 대규모 회로의 경우 훨씬 더 빠르게 만들었습니다.

회로 업그레이드 노트
  • 그리고 QuantumCircuit metadata 속성은 이제 항상 사전을 반환하며 사전으로만 설정할 수 있습니다. 이전에는 기본값이 None 이었으며, None 또는 사전으로 수동으로 설정할 수 있었습니다.
알고리즘 업그레이드 노트
  • 더 이상 사용되지 않는 모듈 factorizerslinear_solvers, HHLShor 이 포함된 모듈은 qiskit.algorithms. 이러한 기능은 원래 0.22.0 릴리스(2022년 10월 13일 출시)의 일부로 더 이상 사용되지 않습니다. 대신 키스킷 교과서를 통해 코드에 액세스할 수 있습니다: 선형 솔버(HHL), 인수분해기(Shor )
펄스 업그레이드 노트
  • Target.update_from_instruction_schedule_map() 는 더 이상 대상 명령어에 큐비트가 누락되거나 정의되지 않은 명령어에 대해 inst_name_map 가 제공되지 않는 경우 KeyError 또는 ValueError 을 발생시키지 않습니다. 전자의 경우, 정의되지 않은 큐비트에 대한 입력 InstructionScheduleMap의 정의가 정의되지 않은 큐비트에 대해 무시합니다. 후자의 경우, 표준 키스킷 게이트에서 게이트 매핑을 가져오고, 마지막으로, 매핑이 없으면 스케줄 이름에서 사용자 정의 불투명한 Gate 객체가 스케줄 이름에서 정의됩니다.
공급자 업그레이드 안내
  • 더 이상 사용되지 않는 max_credits 인수는 execute(), assemble() 및 모든 Qobj 구성(예 QasmQobjConfigPulseQobjConfig)가 제거되었습니다. 이 논쟁은 IBM Quantum 서비스 제공과 더 밀접하게 연결된 초기 버전의 키스킷으로 거슬러 올라갑니다. 당시 max_credits 필드는 IBM Quantum 서비스 오퍼링에서 사용하는 '크레딧 시스템'의 일부였습니다. 그러나 이 크레딧 시스템은 거의 3년 동안 IBM Quantum 백엔드에서 사용되지 않았으며, 키스킷은 더 이상 IBM Quantum 의 서비스 제공과 연계되어 있지 않습니다(그리고 오랫동안 연계되어 있지 않았습니다). 백엔드에서 어떤 식으로든 이 옵션을 사용하는 경우 구현이 BackendV2 구현이 max_credits 필드를 해당 Options 객체에 노출해야 합니다.

  • 속성의 name 속성의 BackendV2 기반 가짜 백엔드 클래스의 속성이 qiskit.providers.fake_provider 의 속성이 이전 릴리스에서 변경되었습니다. 이전에는 클래스를 구분하기 위해 이름에 "_v2" 접미사가 붙었습니다 BackendV1 버전과 구분하기 위해 이 접미사가 있으면 백엔드 오브젝트를 구성하는 데 사용되는 다른 스냅샷 데이터와 불일치가 발생할 수 있으므로 이 접미사는 제거되었습니다.

지원 중단 노트

트랜스파일러 사용 중단 사항
  • 트랜스파일러 라우팅 패스( BIPMapping )는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 외부 플러그인 패키지로 대체되었습니다: qiskit-bip-mapper. 이 새로운 패키지에 대한 자세한 내용은 패키지의 깃허브 리포지토리에서 확인할 수 있습니다:

    https://github.com/qiskit-community/qiskit-bip-mapper

    패스는 두 가지 이유로 별도의 플러그인 패키지로 만들어졌는데, 첫째는 CPLEX에 대한 종속성으로 인해 사용하기가 더 어렵고 둘째는 플러그인 패키지가 더 깔끔하게 transpile().

  • 수업의 철자가 잘못된 aquire_alignment Target 올바른 철자 acquire_alignment 로 대체되었습니다. 이전 생성자 인자 aquire_alignment와 Target.aquire_alignment 은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 Target.acquire_alignment 대신 정렬 제약 조건 값을 가져와 설정합니다.

회로 사용 중단
  • 설정 QuantumCircuit metadata 속성을 None 으로 설정하는 것은 더 이상 사용되지 않으며 향후 릴리스에서 더 이상 지원되지 않습니다. 대신 사용자가 데이터를 포함하지 않으려면 빈 사전으로 설정해야 합니다.
알고리즘 사용 중단
양자 정보 폐기
  • PauliTableStabilizerTable 은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 PauliList 를 사용해야 합니다. 이 변경으로 table() 은 더 이상 사용되지 않으므로 없이 tableau() 에서 직접 작업해야 합니다.
펄스 기능 폐기
  • 이제 모든 키스킷 펄스 객체에서 ParameterExpression 에 복소수 값을 할당하면 PendingDeprecationWarning 이 발생합니다. 이렇게 하면 처음부터 이러한 할당이 불가능했던 다른 모듈과 펄스 모듈을 정렬할 수 있습니다. 모듈에서 복잡한 매개변수의 일반적인 사용 사례는 SymbolicPulse 라이브러리입니다. Qiskit-Terra 0.23.0 현재 모든 라이브러리 펄스는 ScalableSymbolicPulse 클래스에서 사용된 것처럼 두 개의 플로트(amp, angle)를 사용하여 복소 진폭 표현에서 실수 표현으로 변환되었습니다. 따라서 복잡한 매개변수가 필요하지 않습니다. 복잡한 매개변수(특히 사용자 정의 펄스)를 사용하는 경우 복잡한 매개변수를 사용하지 않도록 유사한 방식으로 변환해야 합니다.

버그 수정

  • 이제 AmplitudeEstimation 클래스가 이제 올바르게 경고합니다 EstimationProblem 설정된 is_good_state 속성이 입력으로 전달되면 지원되지 않으므로 무시됩니다. 이전에는 알고리즘이 이 옵션을 자동으로 무시하여 예상치 못한 결과를 초래했습니다.

  • QuantumCircuit.append() 는 이제 연산에 적용할 클래식 비트 수가 잘못 지정되면 오류를 올바르게 발생시킵니다. 수정 #9385.

  • 그리고 BarrierBeforeFinalMeasurementsMergeAdjacentBarriers 트랜스파일러 패스는 이전에는 방출되는 명령의 순서가 비결정적이었습니다 Barrier 인스트럭션의 비결정적 순서를 가졌습니다. 이로 인해 회로의 의미는 변경되지 않았지만, 전폭이 아닌 장벽이 있는 제한된 경우 나중에 스토캐스틱 트랜스파일러 패스에서 회로의 토폴로지 순서가 달라져 결과적으로 고정 시드에 대해 다른 출력이 발생할 수 있습니다. 이를 방지하기 위해 패스를 결정적으로 만들었습니다.

  • 의 반환 유형은 run() 의 반환 유형은 이제 항상 첫 번째 인수의 반환 유형과 동일합니다. 단일 회로를 전달하면 단일 회로가 반환되고, 길이가 1이라도 회로 목록을 전달하면 회로 목록이 반환됩니다. 9798번을 참조하세요.

  • 다음과 같은 복잡한 계수에서 PauliOp.adjoint()PauliOp(Pauli("iX")) 과 같이 복잡한 계수가 있는 폴리스에 대해 올바른 값을 반환하지 않는 버그를 수정했습니다. 수정 #9433.

  • 회로 서랍 기능 관련 문제 수정 circuit_drawer()QuantumCircuit.draw() 메서드에서 명령어 매개변수를 표시할 때 QuantumCircuit 를 입력하면 도면을 읽을 수 없게 되는 문제를 수정했습니다. 수정 #9908

  • 회로 서랍 기능 관련 문제 수정 circuit_drawer()QuantumCircuit.draw()text 메서드와 vertical_compression="low" 인수를 사용할 때 회로에서 게이트를 나타내는 데 사용되는 상자의 오른쪽 상단 모서리에 잘못된 문자를 사용할 수 있는 문제를 수정했습니다.

  • 메서드 관련 문제를 수정했습니다 Gate.control() 메서드가 ctrl_state 인수에 대해 str 또는 None 입력 유형을 잘못 처리하던 문제를 수정했습니다.

  • 인스턴스 구성의 에지 케이스를 수정했습니다 Pauli 이제 선택적 위상이 있고 큐비트가 없는 문자열이 유효한 레이블이 되어 큐비트가 없는 연산자(예: Pauli("-i"))를 만들 수 있습니다. 이는 배열 양식 또는 빈 슬라이스를 사용할 때 이미 가능했습니다. 수정 #9720.

  • 매크로를 사용할 때 발생하는 문제를 수정했습니다 pulse 매크로 measure() 를 사용할 때 발생하는 문제를 수정했습니다 BackendV2 기반 백엔드로 작업할 때 발생하는 문제를 수정했습니다. 이전에는 qiskit.pulse.macros.measure()BackendV2 기반 백엔드에서 사용하려고 하면 오류가 발생했습니다. 수정 #9488

  • 함수 관련 문제를 수정했습니다 marginal_distribution() 함수가 입력 카운트 딕셔너리가 Python int 유형 대신 numpy 정수 유형을 사용할 때 오류를 잘못 발생시키는 문제를 수정했습니다. 기본 함수는 항상 다른 유형을 올바르게 처리하지만, 이 경우 입력 유형 검사가 이전에는 TypeError 을 잘못 발생시켰습니다.

  • 매개변수가 Parameter.is_real() 가 매개변수가 바인딩되지 않은 경우 None 를 반환하지 않는 버그를 수정했습니다. 수정 #8619.

  • 를 포함하는 회로는 C3SXGate 를 포함하는 회로는 이제 OpenQASM 2.0 내보내기(QuantumCircuit.qasm()) 및 파서(QuantumCircuit.from_qasm_str()).

  • QPY의 버그 수정(qiskit.qpy) 클래스 게이트가 포함된 회로에서 MCXGate, MCXGrayCode, 및 MCXRecursiveMCXVChain 가 포함된 회로가 직렬화되지 않던 버그를 수정했습니다. 9390번을 참조하세요.

  • 트랜스파일러 라우팅 패스 수정 StochasticSwap, SabreSwap, LookaheadSwapBasicSwap 가 일관되게 TranspilerError 패스가 coupling_map=None 으로 초기화된 경우 각각의 .run() 메서드가 호출될 때 일관되게 발생하도록 수정했습니다. 이전에는 이러한 패스로 인해 오류가 발생했지만 모두 부작용으로 인한 것이었고 특정 예외를 예측할 수 없었습니다. 수정 #7127

  • 에서 항목을 수동으로 설정하면 QuantumCircuit.data 에서 항목을 수동으로 설정하면 이제 작업이 올바르게 허용됩니다 Operation뿐만 아니라 circuit.Instruction. 의 수동 변이는 권장하지 않습니다 QuantumCircuit.data 의 수동 변경은 권장하지 않습니다. 파라미터화된 객체를 둘러싼 불변성을 확인하는 데 의외로 많은 비용이 들 수 있으므로 일반적으로 새 회로 객체를 만드는 것보다 효율적이지 않습니다.

  • 생성 시 버그 수정 DAGDependency 트랜스파일러 패스 내에서 TemplateOptimization 트랜스파일러 패스 내에서 구성할 때 잘못된 최적화가 발생할 수 있는 버그를 수정했습니다.

  • 의 버그를 수정했습니다 TensoredOp.to_matrix() 에서 연산자의 전역 계수가 최종 행렬에 두 번 이상 곱해지던 버그를 수정했습니다. 이제 텐서화된 연산자나 상태의 수에 관계없이 전역 계수가 올바르게 적용됩니다. 수정 #9398.

  • 트랜스파일러 패스에서 전역 위상 처리를 수정했습니다 UnrollCustomDefinitions 트랜스파일러 패스의 전역 위상 처리를 수정했습니다. 해당 명령어에 전역 위상이 있지만 정의 필드에 명령어가 없는 경우.

  • 함수에 대한 유형 주석을 수정했습니다 transpile() 함수에 대한 유형 주석을 수정했습니다. 이제 반환 유형은 단일 회로 또는 회로 목록이 전달되었는지 여부에 따라 올바르게 좁혀집니다.

  • 버그 수정 IterativePhaseEstimation 가 잘못된 회로를 생성하여 간단한 경우 알고리즘이 실패하는 버그를 수정했습니다. 수정 #9280.

  • 가 초기화되었을 때 브로드캐스팅을 허용하던 버그가 수정되었습니다 PauliList 가 초기화될 때 Pauli또는 레이블로 초기화할 수 있던 버그가 수정되었습니다. 예를 들어, PauliList(["XXX", "Z"]) 코드는 이제 PauliList(["XXX", "ZZZ"]) 과 동등한 코드를 구성하는 대신 ValueError 을 생성합니다.

  • OpenQASM 2 내보내기(QuantumCircuit.qasm())는 더 이상 다른 게이트의 정의에 나타나는 게이트에 대해 중복된 정의를 내보내지 않습니다. 7771, 8086, 8402, 8558, 9805번을 참조하세요.

  • OpenQASM 2 내보내기(QuantumCircuit.qasm())는 이제 여러 개의 중첩된 정의를 처리합니다 UnitaryGate. 4623, #6712, #7772, #8222를 참조하세요.

  • OpenQASM 2 내보내기(QuantumCircuit.qasm())는 이제 다른 게이트의 정의에서만 사용되는 게이트에 대한 정의를 올바른 순서로 출력합니다. 77697773번을 참조하세요.

  • 다음과 같이 키스킷에서 정의한 표준 게이트는 이제 RZXGate와 같이 정의된 표준 게이트는 이제 OpenQASM 2 내보내기(QuantumCircuit.qasm()). 7172를 참고한다.

  • 양자 볼륨 회로(QuantumVolume)는 이제 OpenQASM 2 내보내기(QuantumCircuit.qasm()). 6466#7051을 참조하세요.

  • 이제 OpenQASM 2 내보내기는 실패하지 않고 opaque 문을 사용하여 알려진 정의가 없는 게이트를 출력합니다. 5036번을 참조하세요.

  • 객체 목록을 전달할 때 transpile() 이 작동하지 않던 문제가 수정되었습니다 CouplingMap 객체 목록을 전달할 때 작동하지 않는 문제가 수정되었습니다. 이러한 커플링 맵 목록을 전달하는 것은 더 이상 사용되지 않으며 키스킷 테라 0.25 부터는 불가능하다는 점에 유의하세요. 수정 #9885.

  • 이 릴리스 이전에는 figsize 인수의 plot_bloch_multivector() 인수는 시각화에서 사용되지 않았기 때문에 크기를 변경할 수 없었습니다(예: 단일 큐비트 상태의 경우 크기를 축소하는 것). 이번 릴리스에서는 figsize 인수의 사용을 도입하여 이 문제를 해결했습니다.

  • 의 문제를 수정했습니다 transpile() 의 문제를 수정했습니다( optimization_level=1 (뿐만 아니라 사전 설정 패스 관리자에서 반환된 generate_preset_pass_manager()level_1_pass_manager()) 이전에는 routing_methodlayout_method 인수가 설정되지 않았고 회로에 제어 흐름 연산이 없는 경우 라우팅이 필요한 경우 VF2PostLayout 트랜스파일러 패스가 실행되지 않았습니다. 이는 예상했던 동작과 반대되는 결과였습니다 VF2PostLayout 는 휴리스틱 레이아웃 패스와 라우팅이 실행된 후 잠재적으로 더 나은 성능의 레이아웃을 찾기 위한 것입니다. 수정 #9936

  • 건설 Statevector 에서 QuantumCircuit 에서 0-쿼비트 연산을 포함하는 a를 구성하면 더 이상 오류가 발생하지 않습니다. 이러한 연산은 결과 상태벡터에 전역 위상을 부여합니다.

  • 패딩 지연을 위한 트랜파일러 패스에서 타깃의 제약 조건을 존중하지 않고, 명령어를 지원하지 않는 큐비트에 대해서도 지연을 삽입하던 문제를 수정했습니다 Delay 인스트럭션을 지원하지 않는 큐비트에도 지연을 삽입하던 문제를 수정했습니다. PadDelayPadDynamicalDecoupling 는 큐비트의 유휴 시간을 채우지 않도록 수정되어 타겟이 큐비트에 대한 Delay 명령을 지원하지 않도록 합니다. 또한 내부적으로 지연을 유발하는 레거시 스케줄링 패스 ASAPScheduleALAPSchedule 도 같은 방식으로 수정됩니다. transpile() 또한 target 객체로 PadDelay 을 호출하도록 수정되어 scheduling_method 옵션으로 호출할 때 올바르게 작동합니다. 수정 #9993

  • 메서드의 타입 어노테이션을 수정하여 QuantumCircuit.assign_parameters() 메서드의 유형 주석이 inplace 인수의 값에 따라 반환 유형이 변경되는 것을 올바르게 반영하도록 수정했습니다.

  • 의 성능 확장 문제를 수정했습니다 VF2LayoutVF2PostLayout 패스와 사전 설정된 패스 관리자 및 transpile()를 사용하여 대형 디바이스에서 연결된 구성 요소가 많은 회로를 트랜스파일링할 때 발생할 수 있는 성능 확장 문제를 수정했습니다. 이제 트랜스파일러 패스는 평가할 잠재적 레이아웃의 수에 상한선을 설정합니다.

  • state_to_latex() 함수에서 의도하지 않은 계수 반올림으로 인해 잠재적으로 잘못된 LaTeX 을 생성할 수 있는 문제를 수정했습니다. state_drawer() 호출 시 오류가 발생할 수도 있습니다. 수정 #9297.

에어 0.12.0

변경 없음

IBM Q 제공자 0.20.2

변경 없음

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