Qiskit 0.44 リリースノート
バージョン履歴
これは、 qiskit がいくつかの異なる「要素」を含む「メタ・パッケージ」であった最終リリースである。 本リリースノート(および以前のリリースノート)で「Qiskit Terra」と呼ばれているものは、主に現在単に「Qiskit」と呼ばれているものです。
この表は、インストールされたメタパッケージのバージョンと各レガシーQiskit要素のバージョンを追跡します:
Qiskitメタパッケージ版 | キスキットテラ | キスキット | キスキット・イグニス | qiskit-ibmq-provider | キスキット・アクア | リリース日付 |
|---|---|---|---|---|---|---|
| 0.44.1 | 0.25.1 | 2023-08-17 | ||||
| 0.44.0 | 0.25.0 | 2023-07-27 | ||||
| 0.43.3 | 0.24.2 | 0.12.2 | 0.20.2 | 2023-07-19 | ||
| 0.43.2 | 0.24.1 | 0.12.1 | 0.20.2 | 2023-06-28 | ||
| 0.43.1 | 0.24.1 | 0.12.0 | 0.20.2 | 2023-06-02 | ||
| 0.43.0 | 0.24.0 | 0.12.0 | 0.20.2 | 2023-05-04 | ||
| 0.42.1 | 0.23.3 | 0.12.0 | 0.20.2 | 2023-03-21 | ||
| 0.42.0 | 0.23.2 | 0.12.0 | 0.20.2 | 2023-03-10 | ||
| 0.41.1 | 0.23.2 | 0.11.2 | 0.20.1 | 2023-02-23 | ||
| 0.41.0 | 0.23.1 | 0.11.2 | 0.20.0 | 2023-01-31 | ||
| 0.40.0 | 0.23.0 | 0.11.2 | 0.19.2 | 2023-01-26 | ||
| 0.39.5 | 0.22.4 | 0.11.2 | 0.19.2 | 2023-01-17 | ||
| 0.39.4 | 0.22.3 | 0.11.2 | 0.19.2 | 2022-12-08 | ||
| 0.39.3 | 0.22.3 | 0.11.1 | 0.19.2 | 2022-11-25 | ||
| 0.39.2 | 0.22.2 | 0.11.1 | 0.19.2 | 2022-11-03 | ||
| 0.39.1 | 0.22.1 | 0.11.1 | 0.19.2 | 2022-11-02 | ||
| 0.39.0 | 0.22.0 | 0.11.0 | 0.19.2 | 2022-10-13 | ||
| 0.38.0 | 0.21.2 | 0.11.0 | 0.19.2 | 2022-09-14 | ||
| 0.37.2 | 0.21.2 | 0.10.4 | 0.19.2 | 2022-08-23 | ||
| 0.37.1 | 0.21.1 | 0.10.4 | 0.19.2 | 2022-07-28 | ||
| 0.37.0 | 0.21.0 | 0.10.4 | 0.19.2 | 2022-06-30 | ||
| 0.36.2 | 0.20.2 | 0.10.4 | 0.7.1 | 0.19.1 | 2022-05-18 | |
| 0.36.1 | 0.20.1 | 0.10.4 | 0.7.0 | 0.19.1 | 2022-04-21 | |
| 0.36.0 | 0.20.0 | 0.10.4 | 0.7.0 | 0.19.0 | 2022-04-06 | |
| 0.35.0 | 0.20.0 | 0.10.3 | 0.7.0 | 0.18.3 | 2022-03-31 | |
| 0.34.2 | 0.19.2 | 0.10.3 | 0.7.0 | 0.18.3 | 2022-02-09 | |
| 0.34.1 | 0.19.1 | 0.10.2 | 0.7.0 | 0.18.3 | 2022-01-05 | |
| 0.34.0 | 0.19.1 | 0.10.1 | 0.7.0 | 0.18.3 | 2021-12-20 | |
| 0.33.1 | 0.19.1 | 0.9.1 | 0.7.0 | 0.18.2 | 2021-12-10 | |
| 0.33.0 | 0.19.0 | 0.9.1 | 0.7.0 | 0.18.1 | 2021-12-06 | |
| 0.32.1 | 0.18.3 | 0.9.1 | 0.6.0 | 0.18.1 | 0.9.5 | 2021-11-22 |
| 0.32.0 | 0.18.3 | 0.9.1 | 0.6.0 | 0.18.0 | 0.9.5 | 2021-11-10 |
| 0.31.0 | 0.18.3 | 0.9.1 | 0.6.0 | 0.17.0 | 0.9.5 | 2021-10-12 |
| 0.30.1 | 0.18.3 | 0.9.0 | 0.6.0 | 0.16.0 | 0.9.5 | 2021-09-29 |
| 0.30.0 | 0.18.2 | 0.9.0 | 0.6.0 | 0.16.0 | 0.9.5 | 2021-09-16 |
| 0.29.1 | 0.18.2 | 0.8.2 | 0.6.0 | 0.16.0 | 0.9.5 | 2021-09-10 |
| 0.29.0 | 0.18.1 | 0.8.2 | 0.6.0 | 0.16.0 | 0.9.4 | 2021-08-02 |
| 0.28.0 | 0.18.0 | 0.8.2 | 0.6.0 | 0.15.0 | 0.9.4 | 2021-07-13 |
| 0.27.0 | 0.17.4 | 0.8.2 | 0.6.0 | 0.14.0 | 0.9.2 | 2021-06-15 |
| 0.26.2 | 0.17.4 | 0.8.2 | 0.6.0 | 0.13.1 | 0.9.1 | 2021-05-19 |
| 0.26.1 | 0.17.4 | 0.8.2 | 0.6.0 | 0.13.1 | 0.9.1 | 2021-05-18 |
| 0.26.0 | 0.17.3 | 0.8.2 | 0.6.0 | 0.13.1 | 0.9.1 | 2021-05-11 |
| 0.25.4 | 0.17.2 | 0.8.2 | 0.6.0 | 0.12.3 | 0.9.1 | 2021-05-05 |
| 0.25.3 | 0.17.1 | 0.8.2 | 0.6.0 | 0.12.3 | 0.9.1 | 2021-04-29 |
| 0.25.2 | 0.17.1 | 0.8.1 | 0.6.0 | 0.12.3 | 0.9.1 | 2021-04-21 |
| 0.25.1 | 0.17.1 | 0.8.1 | 0.6.0 | 0.12.2 | 0.9.1 | 2021-04-15 |
| 0.25.0 | 0.17.0 | 0.8.0 | 0.6.0 | 0.12.2 | 0.9.0 | 2021-04-02 |
| 0.24.1 | 0.16.4 | 0.7.6 | 0.5.2 | 0.12.2 | 0.8.2 | 2021-03-24 |
| 0.24.0 | 0.16.4 | 0.7.6 | 0.5.2 | 0.12.1 | 0.8.2 | 2021-03-04 |
| 0.23.6 | 0.16.4 | 0.7.5 | 0.5.2 | 0.11.1 | 0.8.2 | 2021-02-18 |
| 0.23.5 | 0.16.4 | 0.7.4 | 0.5.2 | 0.11.1 | 0.8.2 | 2021-02-08 |
| 0.23.4 | 0.16.3 | 0.7.3 | 0.5.1 | 0.11.1 | 0.8.1 | 2021-01-28 |
| 0.23.3 | 0.16.2 | 0.7.3 | 0.5.1 | 0.11.1 | 0.8.1 | 2021-01-26 |
| 0.23.2 | 0.16.1 | 0.7.2 | 0.5.1 | 0.11.1 | 0.8.1 | 2020-12-15 |
| 0.23.1 | 0.16.1 | 0.7.1 | 0.5.1 | 0.11.1 | 0.8.1 | 2020-11-12 |
| 0.23.0 | 0.16.0 | 0.7.0 | 0.5.0 | 0.11.0 | 0.8.0 | 2020-10-16 |
| 0.22.0 | 0.15.2 | 0.6.1 | 0.4.0 | 0.10.0 | 0.7.5 | 2020 年 10 月 5 日 |
| 0.21.0 | 0.15.2 | 0.6.1 | 0.4.0 | 0.9.0 | 0.7.5 | 2020-09-16 |
| 0.20.1 | 0.15.2 | 0.6.1 | 0.4.0 | 0.8.0 | 0.7.5 | 2020-09-08 |
| 0.20.0 | 0.15.1 | 0.6.1 | 0.4.0 | 0.8.0 | 0.7.5 | 2020-08-10 |
| 0.19.6 | 0.14.2 | 0.5.2 | 0.3.3 | 0.7.2 | 0.7.3 | 2020-06-25 |
| 0.19.5 | 0.14.2 | 0.5.2 | 0.3.2 | 0.7.2 | 0.7.3 | 2020 年 6 月 19 日 |
| 0.19.4 | 0.14.2 | 0.5.2 | 0.3.0 | 0.7.2 | 0.7.2 | 2020-06-16 |
| 0.19.3 | 0.14.1 | 0.5.2 | 0.3.0 | 0.7.2 | 0.7.1 | 2020-06-02 |
| 0.19.2 | 0.14.1 | 0.5.1 | 0.3.0 | 0.7.1 | 0.7.1 | 2020-05-14 |
| 0.19.1 | 0.14.1 | 0.5.1 | 0.3.0 | 0.7.0 | 0.7.0 | 2020-05-01 |
| 0.19.0 | 0.14.0 | 0.5.1 | 0.3.0 | 0.7.0 | 0.7.0 | 2020-04-30 |
| 0.18.3 | 0.13.0 | 0.5.1 | 0.3.0 | 0.6.1 | 0.6.6 | 2020-04-24 |
| 0.18.2 | 0.13.0 | 0.5.0 | 0.3.0 | 0.6.1 | 0.6.6 | 2020-04-23 |
| 0.18.1 | 0.13.0 | 0.5.0 | 0.3.0 | 0.6.0 | 0.6.6 | 2020-04-20 |
| 0.18.0 | 0.13.0 | 0.5.0 | 0.3.0 | 0.6.0 | 0.6.5 | 2020-04-09 |
| 0.17.0 | 0.12.0 | 0.4.1 | 0.2.0 | 0.6.0 | 0.6.5 | 2020-04-01 |
| 0.16.2 | 0.12.0 | 0.4.1 | 0.2.0 | 0.5.0 | 0.6.5 | 2020-03-20 |
| 0.16.1 | 0.12.0 | 0.4.1 | 0.2.0 | 0.5.0 | 0.6.4 | 2020-03-05 |
| 0.16.0 | 0.12.0 | 0.4.0 | 0.2.0 | 0.5.0 | 0.6.4 | 2020-02-27 |
| 0.15.0 | 0.12.0 | 0.4.0 | 0.2.0 | 0.4.6 | 0.6.4 | 2020-02-06 |
| 0.14.1 | 0.11.1 | 0.3.4 | 0.2.0 | 0.4.5 | 0.6.2 | 2020-01-07 |
| 0.14.0 | 0.11.0 | 0.3.4 | 0.2.0 | 0.4.4 | 0.6.1 | 2019-12-10 |
| 0.13.0 | 0.10.0 | 0.3.2 | 0.2.0 | 0.3.3 | 0.6.1 | 2019-10-17 |
| 0.12.2 | 0.9.1 | 0.3.0 | 0.2.0 | 0.3.3 | 0.6.0 | 2019-10-11 |
| 0.12.1 | 0.9.0 | 0.3.0 | 0.2.0 | 0.3.3 | 0.6.0 | 2019-09-30 |
| 0.12.0 | 0.9.0 | 0.3.0 | 0.2.0 | 0.3.2 | 0.6.0 | 2019-08-22 |
| 0.11.2 | 0.8.2 | 0.2.3 | 0.1.1 | 0.3.2 | 0.5.5 | 2019-08-20 |
| 0.11.1 | 0.8.2 | 0.2.3 | 0.1.1 | 0.3.1 | 0.5.3 | 2019-07-24 |
| 0.11.0 | 0.8.2 | 0.2.3 | 0.1.1 | 0.3.0 | 0.5.2 | 2019-07-15 |
| 0.10.5 | 0.8.2 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.2 | 2019-06-27 |
| 0.10.4 | 0.8.2 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.1 | 2019-06-17 |
| 0.10.3 | 0.8.1 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.1 | 2019-05-29 |
| 0.10.2 | 0.8.0 | 0.2.1 | 0.1.1 | 0.2.2 | 0.5.1 | 2019-05-24 |
| 0.10.1 | 0.8.0 | 0.2.0 | 0.1.1 | 0.2.2 | 0.5.0 | 2019-05-07 |
| 0.10.0 | 0.8.0 | 0.2.0 | 0.1.1 | 0.2.1 | 0.5.0 | 2019-05-06 |
| 0.9.0 | 0.8.0 | 0.2.0 | 0.1.1 | 0.1.1 | 0.5.0 | 2019-05-02 |
| 0.8.1 | 0.7.2 | 0.1.1 | 0.1.0 | 2019-05-01 | ||
| 0.8.0 | 0.7.1 | 0.1.1 | 0.1.0 | 2019-03-05 | ||
| 0.7.3 | >=0.7,<0.8 | >=0.1,<0.2 | 2019-02-19 | |||
| 0.7.2 | >=0.7,<0.8 | >=0.1,<0.2 | 2019-01-22 | |||
| 0.7.1 | >=0.7,<0.8 | >=0.1,<0.2 | 2019-01-17 | |||
| 0.7.0 | >=0.7,<0.8 | >=0.1,<0.2 | 2018-12-14 |
0.7.0、 0.7.1、 0.7.2 メタパッケージリリースでは、メタパッケージのバージョニング戦略はまだ正式化されていない。
0.44.1
Terra 0.25.1
前奏曲
Qiskit Terra 0.25.1 はバグフィックスリリースで、 0.25.1 リリース以降に確認されたいくつかの問題に対処しています。
バグ修正
-
QPYシリアライゼーション(
qiskit.qpy)で、回路内の複数の制御されたカスタム・ゲートが無効なQPYファイルとなり、解析できないことがあるバグを修正しました。 修正 #9746。 -
Tweedledumが返す順序で非レジスタレス合成にラベルを付けることにより、 #9363を修正。 例えば、修正前と修正後を比較してみよう:
from qiskit.circuit import QuantumCircuit from qiskit.circuit.classicalfunction import BooleanExpression 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") from qiskit.circuit.classicalfunction import classical_function from qiskit.circuit.classicalfunction.types import Int1 @classical_function def grover_oracle(a: Int1, b: Int1, c: Int1) -> Int1: return (a and b and not c) quantum_circuit = grover_oracle.synth(registerless=False) print(quantum_circuit.draw())どちらが印刷されるか
Before After c: ──■── a: ──■── │ │ b: ──■── b: ──■── │ │ a: ──o── c: ──o── ┌─┴─┐ ┌─┴─┐ return: ┤ X ├ return: ┤ X ├ └───┘ └───┘ -
plot_state_paulivec()を修正。これまでは、 のファクターで状態係数を減衰させていた。 は量子ビット数。 ここで、 はプロットされる状態であり、 はシングル量子ビットPaulisのすべての可能なテンソル積を反復している。 -
OpenQASM 2 エクスポーター (
QuantumCircuit.qasm()) の角度は、1.e-5のように、常に小数点を含むようになりました。 これは、 OpenQASM 2における浮動小数点リテラル指定の厳格な解釈によって要求されている。 Qiskitの OpenQASM 2パーサー(qasm2.load()とloads())はデフォルトではより寛容で、strictモードでない限り小数点なしの1e-5を許可します。 -
のセッターは
SparsePauliOp.paulisのセッターは、無効なオブジェクトが作成されるのを黙って許すのではなく、不正な形のデータで属性を設定しようとする試みを正しく拒否するようになりました。 10384を参照。 -
におけるパフォーマンスのリグレッションを修正した。
SabreLayoutとSabreSwapトランスパイラ・パスの 修正 #10650
0.44.0
このリリースは、Qiskit IBMQ Providerパッケージのサポート終了と、QiskitメタパッケージからのQiskit Aerの削除を公式に示すものです。 このリリース以降、メタパッケージにはQiskit Terraしか含まれませんので、QiskitメタパッケージとQiskit Terraは別物として扱うことにします。 次のリリースからQiskit 0.45.0 Qiskitパッケージは以前はQiskit Terraだったものだけになり、両者の間に分離はなくなります。
もしまだ qiskit-ibmq-provider パッケージを使用しているのであれば、それは現在引退しており、サポートは終了しています。 新しい代替パッケージ qiskit-ibm-provider, qiskit-ibm-runtime, qiskit-ibm-experiment への移行方法については、そのパッケージの README にある移行ガイドへのリンクに従ってください:
https://github.com/Qiskit/qiskit-ibmq-provider#migration-guides
Qiskit Aerプロジェクトはまだ活動中であり、 qiskit パッケージの一部として含まれなくなっただけです。 qiskit-aer の使用を継続するには、 qiskit-aer を明示的にインストールし、 qiskit_aer からパッケージをインポートする必要がある。
これはQiskitメタパッケージの最終リリースなので、オプションの依存関係をインストールするために使用される以下のsetuptoolsエクストラは、次のリリースのQiskitでは動作しなくなります。 0.45.0:
naturemachine-learningfinanceoptimizationexperiments
パッケージのインストールにエクストラを使用している場合は、エクストラの代わりにパッケージを直接使用するように移行してください。 たとえば、以前 pip install qiskit[experiments] を使用していた場合は、 pip install qiskit qiskit-experiments に切り替えて両方のパッケージをインストールする必要があります。 同様に、 all エクストラ ( pip install "qiskit[all]" 経由でインストールされるもの) は、Qiskit 0.45.0 にこれらのパッケージが含まれなくなります。
Terra 0.25.0
前奏曲
Qiskit Terra 0.25.0 リリースのハイライトは以下の通り:
-
制御フロー操作は、レベル2と3を含むすべての最適化レベルにおいて、トランスパイラでサポートされるようになった(例えば
transpile()またはgenerate_preset_pass_manager()をキーワード引数optimization_levelに2または3を指定して呼び出すことがサポートされるようになりました)。 -
フィールド
IfElseOp.condition,WhileLoopOp.conditionとSwitchCaseOp.targetは、新しい実行時古典表現型expr.Expr. これはParameterExpressionなぜなら、このような操作をサポートするバックエンドでは、 実行時に評価されるからである。これらの新しい表現は、古典的な条件を供給する古い2タプルの形式よりもはるかに強力である。 例えば、2つの異なる古典レジスタ間の等号制約や、2つの古典ビットの論理 "or "を表現できるようになった。 この2つの例は次のようになる:
from qiskit.circuit import QuantumCircuit, ClassicalRegister, QuantumRegister from qiskit.circuit.classical import expr qr = QuantumRegister(4) cr1 = ClassicalRegister(2) cr2 = ClassicalRegister(2) qc = QuantumCircuit(qr, cr1, cr2) qc.h(0) qc.cx(0, 1) qc.h(2) qc.cx(2, 3) qc.measure([0, 1, 2, 3], [0, 1, 2, 3]) # If the two registers are equal to each other. with qc.if_test(expr.equal(cr1, cr2)): qc.x(0) # While either of two bits are set. with qc.while_loop(expr.logic_or(cr1[0], cr1[1])): qc.reset(0) qc.reset(1) qc.measure([0, 1], cr1)その他の例については
qiskit.circuit.classical.この機能は、Qiskitにとっても、Qiskitが使用可能な量子ハードウェアにとっても新しいものです。 機能はまだ開発中なので、予期せぬエッジケースが発生する可能性があり、その解決には時間がかかるだろう。 古典表現のサポートや使用方法に関する問題が発生した場合は、Qiskitまたはハードウェアベンダーに問題を提起してください。
今回の初回リリースでは、Qiskitは操作を追加しました:
bit_not()logic_not()bit_and()bit_or()bit_xor()logic_and()logic_or()equal()not_equal()less()less_equal()greater()greater_equal()
これらは、 Python 整数およびブールリテラル、または
ClassicalRegisterおよびClbitインスタンスに作用します。これらの古典的な式はすべて、Qiskitトランスパイラースタック、QPYシリアライゼーション(
qiskit.qpy)および OpenQASM 3へのエクスポート(qiskit.qasm3). OpenQASM 3からのインポートは現在別のパッケージで管理されています。qiskit.qasm3で再公開されます)で管理されていますが、Qiskitの新機能に合わせて拡張されることを期待しています。 -
この
qiskit.algorithmsモジュールは非推奨となり、将来のリリースで削除される予定です。 このライブラリは新しいスタンドアロン・ライブラリqiskit-algorithmsに取って代わられた。 PyPi または Github にある:https://github.com/qiskit-community/qiskit-algorithms
この
qiskit.algorithmsモジュールは以前と同じように動作し続け、将来削除されるまでバグ修正も行われるが、新機能の積極的な開発は新しいパッケージに移った。 もしあなたがqiskit.algorithmsに依存している場合は、 Python の要件を更新してqiskit-algorithmsも含めるようにし、qiskit.algorithmsからのインポートをqiskit_algorithmsに更新する必要がある。 この新しいパッケージには、opflowやQuantumInstanceをベースとしたアルゴリズムなど、すでに非推奨となっているアルゴリズムのコードは含まれていないことに注意してください。QuantumInstance-based から primitives-based アルゴリズムにまだ移行していない場合は、 https://qisk.it/algo の移行ガイドラインに従ってください。 を別パッケージに移行することを決定した。algorithmsモジュールを別のパッケージに移行することにしたのは、Qiskitの目的を明確にし、その上に構築されるツールとライブラリを区別するためである。
Qiskit Terra 0.25 は、Qiskit Terra 0.23 で開始された非推奨の警告に従い、 Python 3.7 のサポートを停止しました。 これは、 Python 3.7’s 2023年6月27日の使用終了と一致している。 Qiskitの使用を継続するには、 Python の最新バージョンにアップグレードする必要があります。
新機能
- このリリースでは以下の機能が追加されました。
トランスパイラ機能
-
BlockCollectorに2つの新しいオプションを追加した。最初の新しいオプション
split_layers、収集したブロックを不連続な量子ビット部分集合上のサブブロック、すなわち depth-1 サブブロックに分割することができる。2つ目の新しいオプション
collect_from_back、回路の出力からブロックを貪欲に収集することができる。 これは、ゲートを早いブロックよりも遅いブロックに置くことを好むALAPスケジューリングパスとの組み合わせにおいて重要である。 -
に新しいオプション
split_layersとcollect_from_backを追加した。CollectLinearFunctionsおよびCollectCliffordsトランスパイラパスを追加した。split_layersがTrueの場合、収集されたブロックは、不連続な量子ビットサブセット上のサブブロック、すなわち depth-1 サブブロックに分割される。 次の例を考えてみましょう。from qiskit.circuit import QuantumCircuit from qiskit.transpiler.passes import CollectLinearFunctions circuit = QuantumCircuit(5) circuit.cx(0, 2) circuit.cx(1, 4) circuit.cx(2, 0) circuit.cx(0, 3) circuit.swap(3, 2) circuit.swap(4, 1) # Collect all linear gates, without splitting into layers qct = CollectLinearFunctions(split_blocks=False, min_block_size=1, split_layers=False)(circuit) assert qct.count_ops()["linear_function"] == 1 # Collect all linear gates, with splitting into layers qct = CollectLinearFunctions(split_blocks=False, min_block_size=1, split_layers=True)(circuit) assert qct.count_ops()["linear_function"] == 4元の回路は線形である。 レイヤーに分けずにリニアゲートを集めると、最終的には1つのリニア関数になるはずだ。 しかし、リニアゲートを集めてレイヤーに分割すると、最終的には4つのリニア関数になるはずだ。
collect_from_backがTrueの場合、ブロックは出力から回路の入力に向かって貪欲に集められる。 次の例を考えてみましょう。from qiskit.circuit import QuantumCircuit from qiskit.transpiler.passes import CollectLinearFunctions circuit = QuantumCircuit(3) circuit.cx(1, 2) circuit.cx(1, 0) circuit.h(2) circuit.swap(1, 2) # This combines the CX(1, 2) and CX(1, 0) gates into a single linear function qct = CollectLinearFunctions(collect_from_back=False)(circuit) # This combines the CX(1, 0) and SWAP(1, 2) gates into a single linear function qct = CollectLinearFunctions(collect_from_back=True)(circuit)元の回路にはハダマード・ゲートが含まれているため、CX(1, 0)ゲートはCX(1, 2)かSWAP(1, 2)のどちらかと組み合わせることができるが、両方と組み合わせることはできない。
collect_from_backが偽の場合、線形ブロックは回路の最初から貪欲に収集されるため、CX(1, 0)はCX(1, 2)と結合される。collect_from_backが真のとき、線形ブロックは回路の端から貪欲に集められるので、CX(1, 0)はSWAP(1, 2)と組み合わされる。 -
追加
DAGCircuit.classical_predecessors()とDAGCircuit.classical_successors()を追加した。古典的なワイヤを選択する代わりに、DAGノードの内部グラフに直接アクセスする必要がない。 次の例は新機能を説明するものである:from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister from qiskit.converters import circuit_to_dag from qiskit.circuit.library import RZGate q = QuantumRegister(3, 'q') c = ClassicalRegister(3, 'c') circ = QuantumCircuit(q, c) circ.h(q[0]) circ.cx(q[0], q[1]) circ.measure(q[0], c[0]) circ.rz(0.5, q[1]).c_if(c, 2) circ.measure(q[1], c[0]) dag = circuit_to_dag(circ) rz_node = dag.op_nodes(RZGate)[0] # Contains the "measure" on clbit 0, and the "wire start" nodes for clbits 1 and 2. classical_predecessors = list(dag.classical_predecessors(rz_node)) # Contains the "measure" on clbit 0, and the "wire end" nodes for clbits 1 and 2. classical_successors = list(dag.classical_successors(rz_node)) -
のサポートが可能になった。
ControlFlowOpパスでのCommutativeCancellationパス。 以前は、コントロールフロー操作のブロックはこのパスでスキップされていた。 -
のサポートが可能になった。
ControlFlowOpパスでのConsolidateBlocksパス。 -
追加
DAGCircuit.quantum_causal_cone()における量子ビットの因果円錐を得るために、以下のように追加した。DAGCircuit. 次の例は正しい使い方を示している:from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister from qiskit.circuit.library import CXGate, CZGate from qiskit.dagcircuit import DAGCircuit # Build a DAGCircuit dag = DAGCircuit() qreg = QuantumRegister(5) creg = ClassicalRegister(5) dag.add_qreg(qreg) dag.add_creg(creg) dag.apply_operation_back(CXGate(), qreg[[1, 2]], []) dag.apply_operation_back(CXGate(), qreg[[0, 3]], []) dag.apply_operation_back(CZGate(), qreg[[1, 4]], []) dag.apply_operation_back(CZGate(), qreg[[2, 4]], []) dag.apply_operation_back(CXGate(), qreg[[3, 4]], []) # Get the causal cone of qubit at index 0 result = dag.quantum_causal_cone(qreg[0]) -
新しいメソッド
find_bit()メソッドが追加された。DAGCircuitこのメソッドは、与えられたQubitまたはClbitのビット位置を、回路内のビットの位置インデックスと、回路のレジスタ内のビットの位置を示すタプルのリストのタプルとして返します。 -
トランスパイラのビルトイン
EquivalenceLibrary(qiskit.circuit.equivalence_library.SessionEquivalenceLibrary) は、循環パウリ関係 、 、 を教えている。これにより、制約のある、潜在的に不完全な基底セットへのトランスパイルがより信頼できるものになるはずです。 詳細は #10293を参照。 -
制御フロー操作は、レベル2と3を含むすべての最適化レベルにおいて、トランスパイラでサポートされるようになった(例えば
transpile()またはgenerate_preset_pass_manager()をキーワード引数optimization_level=3で呼び出すなど)。 -
DAGCircuit.substitute_node()の同じ引数に類似したpropagate_conditionキーワード引数を得た。substitute_node_with_dag(). これをFalseに設定すると、nodeの条件を、それを置き換える新しいopにコピーするというレガシーな動作から外れる。このオプションは、一般的な制御フロー操作では無視され、条件を伝播することも、他のノードからの条件を受け入れることもない。
-
新しいメソッドを導入、
DAGCircuit.separable_circuits()このメソッドはDAGCircuitオブジェクトのリストを返す。このメソッドが返す各
DAGCircuitこのメソッドによって返される各インスタンスには、selfと同じ数の clbits が含まれる。 このメソッドはDAGCircuitインスタンスを返さない。 -
属性
Target.concurrent_measurementsこれは、同時に測定される量子ビットのハードウェア制約を表します。 この制約はネストされたリスト形式で提供され、各要素は一緒に測定される量子ビットグループを表す。 以下に例を挙げる:[[0, 1], [2, 3, 4]]量子ビット0と1、2、3、4はデバイス上で一緒に測定される。 この制約は個々の量子ビットの計測をブロックするものではありませんが、 Qiskit Pulseスケジューラで作業するときや、タイミングを意識した新しいトランスパイラパス(スケジューリングを実行するパスなど)をオーサリングするときに、これらの量子ビットの計測操作のアライメントを考慮する必要があるかもしれません。
-
トランスパイラのパス
SetLayoutは、量子回路がマッピングされる物理量子ビットを表す整数のリストで構成されます。 つまり、回路内の最初の量子ビットは、リストの0番目の物理量子ビットに割り当てられ、以下同様となる。 -
トランスパイラの組み込み
EquivalenceLibraryは、1量子ビット 、 、 ゲート間、および2量子ビット 、 、 ゲート間で、より多くのパウリ回転等価性を教えてきた。 これにより、特に ローテーションを使用する回路など、単純な基底変換の信頼性が高まるはずだ。 7332を参照。 -
コントロールフロー操作は、セイバー・トランスパイラ・パスのレイアウト・パス
SabreLayoutとルーティングパスSabreSwap. 機能transpile()キーワード引数layout_methodとrouting_methodは、以前はサポートされていなかった、制御フローを持つ回路用のオプション"sabre"を受け付けるようになった。
回路の特徴
-
フィールド
IfElseOp.condition,WhileLoopOp.conditionとSwitchCaseOp.targetは、新しい実行時古典表現型expr.Expr. これはParameterExpressionなぜなら、このような操作をサポートするバックエンドでは、 実行時に評価されるからである。これらの新しい表現は、古典的な条件を供給する古い2タプルの形式よりもはるかに強力である。 例えば、2つの異なる古典レジスタ間の等号制約や、2つの古典ビットの論理 "or "を表現できるようになった。 この2つの例は次のようになる:
from qiskit.circuit import QuantumCircuit, ClassicalRegister, QuantumRegister from qiskit.circuit.classical import expr qr = QuantumRegister(4) cr1 = ClassicalRegister(2) cr2 = ClassicalRegister(2) qc = QuantumCircuit(qr, cr1, cr2) qc.h(0) qc.cx(0, 1) qc.h(2) qc.cx(2, 3) qc.measure([0, 1, 2, 3], [0, 1, 2, 3]) # If the two registers are equal to each other. with qc.if_test(expr.equal(cr1, cr2)): qc.x(0) # While either of two bits are set. with qc.while_loop(expr.logic_or(cr1[0], cr1[1])): qc.reset(0) qc.reset(1) qc.measure([0, 1], cr1)その他の例については
qiskit.circuit.classical.この機能は、Qiskitにとっても、Qiskitが使用可能な量子ハードウェアにとっても新しいものです。 機能はまだ開発中なので、予期せぬエッジケースが発生する可能性があり、その解決には時間がかかるだろう。 古典表現のサポートや使用方法に関する問題が発生した場合は、Qiskitまたはハードウェアベンダーに問題を提起してください。
今回の初回リリースでは、Qiskitは操作を追加しました:
bit_not()logic_not()bit_and()bit_or()bit_xor()logic_and()logic_or()equal()not_equal()less()less_equal()greater()greater_equal()
これらは、 Python 整数およびブールリテラル、または
ClassicalRegisterおよびClbitインスタンスに作用します。これらの古典的な式はすべて、Qiskitトランスパイラースタック、QPYシリアライゼーション(
qiskit.qpy)および OpenQASM 3へのエクスポート(qiskit.qasm3). OpenQASM 3からのインポートは現在別のパッケージで管理されています。qiskit.qasm3で再公開されます)で管理されていますが、Qiskitの新機能に合わせて拡張されることを期待しています。 -
古典的な実行時表現の新しい表現を扱うためのツールが追加された。 一般的な
ExprVisitorは、これらの式のコンシューマがサブクラス化するために提供される。 この構造に基づく2つのユーティリティ、iter_vars()とstructurally_equivalent()という2つのユーティリティも提供されている。Varノードを通るイテレータを生成しExprインスタンスが構造的に同じかどうかをチェックする。Varが提供されている。 -
関数
lift_legacy_condition()を追加した。Exprノードを追加した。 これらの式ノードは、古いスタイルのInstruction.conditionフィールドでは許可されていないことに注意してください。IfElseOp. -
の絶対値の取り方をサポートした。
ParameterExpressions. 例えば、次のようなことが可能になった:from qiskit.circuit import QuantumCircuit, Parameter x = Parameter("x") circuit = QuantumCircuit(1) circuit.rx(abs(x), 0) bound = circuit.bind_parameters({x: -1}) -
のパフォーマンス
QuantumCircuit.assign_parameters()とbind_parameters()の性能は、アプリケーションの典型的な構造を持つ大規模回路で著しく向上している。 のような構造に基づくほとんどの回路が含まれる。NLocal構造、例えばEfficientSU2. 詳細は #10282を参照。 -
メソッド
QuantumCircuit.assign_parameters()は新たに2つのキーワード引数を得た:flat_inputとstrict。 これらは、パラメータバインディングを辞書として渡す際に、メソッドを高速化するために使用できる高度なオプションです。flat_input=Trueは、辞書のキーに含まれるのはParameterインスタンスのみを含むことを保証します。ParameterVectorでない)、strict=Falseは回路に存在しないパラメータを辞書に含めることができます。 これら2つのオプションを使うことで、この関数での入力正規化のオーバーヘッドを減らすことができる。 -
以下のクラスのコンストラクタに新しいキーワード引数
flattenを追加:この引数を
Trueに設定するとQuantumCircuitに実装をラップしません。GateまたはInstructionオブジェクトにラップしません。 これは視覚化には最適ではないが、特にQuantumCircuit.bind_parameters()とQuantumCircuit.assign_parameters()では、ネストされたラップされたデフォルトの出力と比較して、平坦化された出力で実行時間が部分的に改善されます。 -
より一般的な量子回路から
LinearFunctionを含む、より一般的な量子回路の構築をサポートした:- 障壁(
Barrier)と遅延(Delay)は単に無視される - 順列
PermutationGate) - その他の線形関数
- クリフォード(型
Clifford型)、クリフォードが一次関数を表す場合(そうでない場合はCircuitError例外が発生する) - この形式の入れ子量子回路
- 障壁(
-
LinearFunction.__eq__()メソッドを追加。 型の2つのオブジェクトはLinearFunction型の2つのオブジェクトが等しいとみなされるのは、それらの2値可逆行列としての表現が等しいときである。 -
追加された
LinearFunction.extend_with_identity()これは、kqubits上の一次関数を、n >= kqubits上の一次関数に拡張するもので、元のqubitsの新しい位置を指定し、残りのqubits上のidentityでパディングする。 -
プリティ・プリント用の2つのメソッドを追加
LinearFunctionメソッドを追加した:LinearFunction.mat_str()これは、0/1エントリーを持つ行列として見た一次関数の文字列表現を返します。LinearFunction.function_str()これは、線形関数を線形変換として見た場合の文字列表現を返します。 -
インストラクション
StatePreparationおよびInitialize、およびそれらに関連する回路方式QuantumCircuit.prepare_state()およびinitialize()は、キーワード引数normalizeを持ち、これをTrueに設定することで、配列ターゲットを自動的に正規化することができる。 デフォルトではFalse、正規化されていない入力が与えられたときに例外を発生させる現在の動作が維持される。
アルゴリズムの特徴
- にコールバックを渡すオプションを追加した。
UMDAオプティマイザにコールバックを渡すオプションが追加され、関数の評価回数、現在のパラメータ、最適な関数値を追跡できるようになりました。
OpenQASM 特徴
- OpenQASM 3輸出企業(
qasm3.dump(),dumps()およびExporter)には新しいallow_aliasing引数があり、最終的にはalias_classical_registers引数に置き換わる。 これは、エイリアシングを古典ビットと量子ビットのどちらに許可するかを制御するもので、古典ビットにのみ有効なオプションではない。
量子情報の特徴
-
量子状態の負のエンタングルメントの測定値を計算する新しい関数
negativity()を追加。 上記の関数の使用例を以下に示す:from qiskit.quantum_info.states.densitymatrix import DensityMatrix from qiskit.quantum_info.states.statevector import Statevector from qiskit.quantum_info import negativity import numpy as np # Constructing a two-qubit bell state vector state = np.array([0, 1/np.sqrt(2), -1/np.sqrt(2), 0]) # Calculating negativity of statevector negv = negativity(Statevector(state), [1]) # Creating the Density Matrix (DM) rho = DensityMatrix.from_label("10+") # Calculating negativity of DM negv2 = negativity(rho, [0, 1]) -
関数を追加
schmidt_decomposition(). この関数はStatevectorとDensityMatrixクラスで動作する。 -
オブジェクトの乗算をサポートする
SparsePauliOpオブジェクトとParameterオブジェクトとの乗算をサポートします:from qiskit.circuit import Parameter from qiskit.quantum_info import SparsePauliOp param = Parameter("a") op = SparsePauliOp("X") param * op
パルス機能
-
図書館が拡張された。
SymbolicPulseライブラリーが拡張された。 ライブラリーの新しいパルス関数は以下の通り:新しい関数は
ScalableSymbolicPulseインスタンスを返し、離散パルス・ライブラリの対応する関数の機能と一致する。Square()ただし、 の位相が1サイクル分シフトします(離散パルスのsquare()では、 の位相によってそのようなシフトが誘発された)。 -
メソッド
filter()はScheduleBlockクラスで有効になります。 この方法によって、ユーザーはInstructionオブジェクトを保持することができます。 組み込みのフィルタ条件として、パルスChannelサブクラスのインスタンスとInstructionサブクラス・タイプを指定できます。 ユーザー定義のコールバックInstructionインスタンスを取るユーザー定義のコールバックをフィルターに追加することもできる。 -
メソッド
exclude()はScheduleBlockクラスで有効になります。 この方法によって、ユーザーはInstructionオブジェクトを保持することができます。 組み込みのフィルタ条件として、パルスChannelサブクラスのインスタンスとInstructionサブクラス・タイプを指定できます。 ユーザー定義のコールバックInstructionインスタンスを取るユーザー定義のコールバックをフィルターに追加することもできる。 このメソッドはfilter()の補数であるため、次の条件が常に満たされる。block.filter(*filters) + block.exclude(*filters) == blockは含まれる命令の観点から、blockはインスタンスである。ScheduleBlockインスタンスである。 -
パルス・ライブラリに新関数
gaussian_square_echo()を追加した。 返されたパルスは3つのパルスで構成される。GaussianSquareパルスで構成される。 最初の2つは持続時間が全体の半分のエコー・パルスで、ロータリー・トーンである。 第3のパルスは、パルスの全時間持続するキャンセル・トーンで、単一量子ビットの回転を補正する。 -
QPYは
Discriminator、Kernelオブジェクトをサポートしています。 この機能により、ユーザーはQPYを使用して、これらのオブジェクトを持つ命令をシリアライズおよびデシリアライズできる。Acquire命令のシリアライズとデシリアライズが可能になります。
合成機能
-
新しい合成機能
synth_cx_cz_depth_line_my()これは、CX回路と位相ゲート(S、SdgまたはZ)を使用して、最大 5n の2量子ビットの深さの線形最近傍(LNN)接続に対して、CX回路の後にCZ回路が続く回路形式を生成する。 合成アルゴリズムは、マスロフとヤンの論文に基づいている、 arXiv:2210.16195.このアルゴリズムは、CX回路を表す2値可逆行列
mat_x、CZ回路を表す2値対称行列mat_z、CX回路とCZ回路の合成を計算する、最大でも 5n、2量子ビットの深さを持つ量子回路を返す。 次の例は新機能を説明するものである:import numpy as np from qiskit.synthesis.linear_phase import synth_cx_cz_depth_line_my mat_x = np.array([[0, 1], [1, 1]]) mat_z = np.array([[0, 1], [1, 0]]) qc = synth_cx_cz_depth_line_my(mat_x, mat_z)この関数は、LNN接続の2量子ビット深度を最適化するクリフォード合成アルゴリズ ムでデフォルトで使われるようになった。
synth_clifford_depth_lnn()で使われるようになり、2量子ビット深度が 9n+4 から 7n+2 に改善されました。 クリフォード合成アルゴリズムは以下のように使用できる:from qiskit.quantum_info import random_clifford from qiskit.synthesis import synth_clifford_depth_lnn cliff = random_clifford(3) qc = synth_clifford_depth_lnn(cliff)上記の合成は、マスロフとヤンの論文にあるように、2量子ビット層間の局所最適化を用いてさらに改良することができる。 この改善については、追試に委ねる。
可視化機能
-
QuantumCircuit.draw()および関数circuit_drawer()オプションoutput='mpl'を使用した場合、ネストされた回路ブロックの描画がサポートされるようになった。ControlFlowOpif、else、while、for、switch/caseを含む。 回路ブロックは、回路を区切るためのボックスで包まれている。 -
サーキットドロワーで
wire_orderを使用する際のいくつかの制限が緩和された。 さて、wire_orderは量子ビットだけをリストアップすることができる。その場合、cregbundle=Trueと一緒に使うことができる。古典的なビットに影響を与えないからだ。from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister qr = QuantumRegister(4, "q") cr = ClassicalRegister(4, "c") cr2 = ClassicalRegister(2, "ca") circuit = QuantumCircuit(qr, cr, cr2) circuit.h(0) circuit.h(3) circuit.x(1) circuit.x(3).c_if(cr, 10) circuit.draw('text', wire_order=[2, 3, 0, 1], cregbundle=True)q_2: ──────────── ┌───┐ ┌───┐ q_3: ┤ H ├─┤ X ├─ ├───┤ └─╥─┘ q_0: ┤ H ├───╫─── ├───┤ ║ q_1: ┤ X ├───╫─── └───┘┌──╨──┐ c: 4/═════╡ 0xa ╞ └─────┘ ca: 2/════════════
各種 機能
-
新しい遅延インポートテスターです、
HAS_PYGMENTSは、 Pygments シンタックスハイライティングライブラリの存在をテストするために利用可能です。 -
qiskit.tools.jupyterからのマジック%qiskit_version_tableは、qiskitを名前に持つインポートモジュールをすべて含むようになった。
アップグレードの注意
-
Qiskit Terra 0.25 は、Qiskit Terra 0.23 で開始された非推奨の警告に従い、 Python 3.7 のサポートを停止しました。 これは、 Python 3.7’s 2023年6月27日の使用終了と一致している。 Qiskitの使用を継続するには、 Python の最新バージョンにアップグレードする必要があります。
-
Qiskit Terra 0.25 は
rustworkxのバージョン 0.13.0 を必要とします。 -
デフォルトでQiskitは、Qiskitがサポートする Python の最も古いバージョン(現在は 3.8 )までサポートする Python Stable ABIを使用してコンパイルされた拡張機能をビルドします。 これは、今後、リリース時に出荷される、Qiskitがサポートするすべての Python バージョンで動作する単一のコンパイル済みホイールが存在することを意味します。 限定的なAPIを使用しても、期待されるランタイム・パフォーマンスの違いはないので、現在はすべてのビルドでデフォルトで有効になっている。 以前は、コンパイルされた拡張機能はバージョン固有のAPIを使用してビルドされ、単一の Python バージョンでのみ動作していた。 この変更は、各リリースのビルドと公開に必要なパッケージファイルの数を減らすために行われました。 Qiskitをソースからビルドする場合、限定的なAPIの使用を反映するために出力ファイル名のデフォルトタグが異なることを除けば、ビルドプロセスに必要な変更はありません。
トランスパイラ アップグレード ノート
-
引数値のリストを
transpile()関数のサポートは削除された。 この機能は、 0.23.0 のリリースの一部として非推奨となった。 最初の位置引数にQuantumCircuitオブジェクトのリストを渡すことができる。 削除されたのは、入力リストにある各回路の他の引数のリスト放送である。 一度に複数の回路をトランスパイルする並列実行のオーバーヘッドを大幅に削減するためには、この機能を削除する必要があった。 現在この機能を使用している場合は、代わりにtranspile()を複数回呼び出すことができます。 例えば、以前はこんなことをしていたとする:from qiskit.transpiler import CouplingMap from qiskit import QuantumCircuit from qiskit import transpile qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() cmaps = [CouplingMap.from_heavy_hex(d) for d in range(3, 15, 2)] results = transpile([qc] * 6, coupling_map=cmaps)その代わりに、次のように実行する:
from qiskit.transpiler import CouplingMap from qiskit import QuantumCircuit from qiskit import transpile qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() cmaps = [CouplingMap.from_heavy_hex(d) for d in range(3, 15, 2)] results = [transpile(qc, coupling_map=cm) for cm in cmap]を活用することもできる。
parallel_map()または Python 標準ライブラリのmultiprocessingを利用することもできる。 -
トランスパイラー・パスのセイバー・ファミリー(すなわち
SabreLayoutおよびSabreSwap)は、最適化レベル1でトランスパイラを呼び出す場合、すべての回路でデフォルトで使用されます。transpile()またはgenerate_preset_pass_manager()をキーワード引数optimization_level=1) で呼び出す場合、すべての回路でデフォルトで使用されます。 以前は、制御フロー演算を行う回路ではDenseLayoutとStochasticSwapを使用していた。
回路アップグレードに関する注意事項
-
OpenQASM 2 のコンストラクタ・メソッドは
QuantumCircuit(from_qasm_str()とfrom_qasm_file()) のコンストラクタのメソッドは、Qiskit Terra 0.24 で追加された Rust ベースのパーサーを使うように変更されました。 その結果、解析時間が大幅に短縮され(10倍以上も珍しくない)、中間メモリーの使用量も大幅に削減されるはずだ。これらの
QuantumCircuitOpenQASM 2インポーターにアクセスする望ましい方法はqasm2.load()とqasm2.loads()を使うことで、解析と構築を制御するための拡張インターフェイスを提供します。 -
クラスのコンストラクタの
circuit_cregs引数は廃止されました。InstructionSetクラスのコンストラクタへの引数は削除されました。 0.19.0、非推奨となった。 この引数を使って手動でInstructionSetオブジェクトを手動で構築する場合(内部的に使われることがほとんどなので、ほとんどないだろうが)、代わりにresource_requesterキーワード引数に callable を渡すべきである。 例:from qiskit.circuit import Clbit, ClassicalRegister, InstructionSet from qiskit.circuit.exceptions import CircuitError def my_requester(bits, registers): bits_set = set(bits) bits_flat = tuple(bits) registers_set = set(registers) def requester(specifier): if isinstance(specifer, Clbit) and specifier in bits_set: return specifier if isinstance(specifer, ClassicalRegster) and specifier in register_set: return specifier if isinstance(specifier, int) and 0 <= specifier < len(bits_flat): return bits_flat[specifier] raise CircuitError(f"Unknown resource: {specifier}") return requester my_bits = [Clbit() for _ in [None]*5] my_registers = [ClassicalRegister(n) for n in range(3)] InstructionSet(resource_requester=my_requester(my_bits, my_registers))
OpenQASM アップグレードに関する注意事項
-
OpenQASM 2 のコンストラクタ・メソッドは
QuantumCircuit(from_qasm_str()とfrom_qasm_file()) のコンストラクタのメソッドは、Qiskit Terra 0.24 で追加された Rust ベースのパーサーを使うように変更されました。 その結果、解析時間が大幅に短縮され(10倍以上も珍しくない)、中間メモリーの使用量も大幅に削減されるはずだ。これらの
QuantumCircuitOpenQASM 2インポーターにアクセスする望ましい方法はqasm2.load()とqasm2.loads()を使うことで、解析と構築を制御するための拡張インターフェイスを提供します。 -
OpenQASM 3輸出企業(
qasm3.dump(),dumps()およびExporter)の出力に使用される "register alias "定義が少なくなった。 記述された回路に変化はないが、_loose_bitsレジスタを生成し、ここからさらにレジスタをエイリアスするのではなく、bit、qubit、qubit[n]タイプを直接エクスポートすることを優先するようになった。 これは、 OpenQASM 3 の高度な機能の使用数を最小限に抑え、不要な配列構造を必要としないプログラムに導入しないようにするためである。
量子情報アップグレードに関する注意事項
Clifford.from_circuit()フィールドが他のオブジェクトと相互に再帰的なdefinitionフィールドが他のオブジェクトと相互に再帰的である命令の解決を試みなくなった。 このような再帰的な定義は、すでにこのフィールドが要求する厳密に階層的な順序付けに違反している。definitionフィールドが要求する厳密な階層順序の違反である。 (相互)サイクルを持つことが許される等価性を定義したい場合はEquivalenceLibrary.
可視化アップグレードに関する注意事項
-
内部
~qiskit.visualization.circuit.matplotlib.MatplotlibDrawerオブジェクトにおいて、引数layout、global_phase、qregs、cregsが削除された。 これらはもともとQiskit Terra 0.20 で非推奨とされていた。 これらのオブジェクトは、単に与えられたcircuit。これは視覚化ルーチンの内部ワーカークラスである。 コードを変更する必要はほとんどないだろう。
各種 アップグレードの注意
- Qiskit Terra 0.17 以降、非推奨となっていた
qiskit.utilのインポート先が削除されました。 ユーザーは、新しいインポート先であるqiskit.utilsを使用する必要があります。
非推奨のメモ
-
外部パッケージによる
qiskitおよびqiskit.providers名前空間の拡張は非推奨となり、これを可能にするフック・ポイントは将来のリリースで削除される予定です。 かつてQiskitプロジェクトは、共有された名前空間を拡張する要素で構成されており、これらのフックポイントがそれを可能にしていた。 しかし、これらのインターフェイスが他のパッケージで使われることは想定されていなかった。 Qiskitパッケージ全体がそのパッケージングモデルを使わなくなった今、これらの拡張の可能性を残しておくことは、利点よりもリスクの方が大きいため、将来の削除のために非推奨となっています。 Qiskit名前空間を拡張するパッケージを保守している場合(つまり、ユーザーがqiskit.xまたはqiskit.providers.yからインポートする場合)、あなたのパッケージにはスタンドアロンの Python 名前空間を使用するように移行する必要があります。 外部パッケージにこの変更を警告するために必要な、パッケージングレベルでの警告を注入する方法がないため、この一部として警告は発生しない。 -
Qiskitは単一のパッケージ(
qiskit-terra)で定義されているため、辞書qiskit.__qiskit_version__は非推奨です。将来的には、qiskit.__version__が標準文字列としてQiskitのバージョンを問い合わせる単一のポイントになるでしょう。
トランスパイラ非推奨機能
- モジュール
qiskit.transpiler.preset_passmanagers.commonから利用可能だった関数get_vf2_call_limitは非推奨となった。 この関数は明示的にエクスポートされたものでも、文書化されたものでもないため、おそらくほとんどユーザーに影響はないだろう。 その機能は、同じモジュール内の機能によって置き換えられ、拡張された。
回路の廃止予定
- メソッド
qasm()および :class:~qiskit.circuit.Instruction のサブクラスのすべてのオーバーライド・メソッドは非推奨です。 通常、1つの命令オブジェクトは、有効な OpenQASM2 文字列を完全に生成するにはコンテキストが不十分であるため、孤立した命令に対して OpenQASM2 文字列を生成するための代替手段はありません。 現在このメソッドに頼っている場合は、代わりに OpenQASM2 エクスポーターに頼らなければならない:QuantumCircuit.qasm()を使って回路オブジェクト全体の OpenQASM2。
アルゴリズムの廃止
-
この
qiskit.algorithmsモジュールは非推奨となり、将来のリリースで削除される予定です。 このライブラリは新しいスタンドアロン・ライブラリqiskit-algorithmsに取って代わられた。 PyPi または Github にある:https://github.com/qiskit-community/qiskit-algorithms
この
qiskit.algorithmsモジュールは以前と同じように動作し続け、将来削除されるまでバグ修正も行われるが、新機能の積極的な開発は新しいパッケージに移った。 もしあなたがqiskit.algorithmsに依存している場合は、 Python の要件を更新してqiskit-algorithmsも含めるようにし、qiskit.algorithmsからのインポートをqiskit_algorithmsに更新する必要がある。 この新しいパッケージには、opflowやQuantumInstanceをベースとしたアルゴリズムなど、すでに非推奨となっているアルゴリズムのコードは含まれていないことに注意してください。QuantumInstance-based から primitives-based アルゴリズムにまだ移行していない場合は、 https://qisk.it/algo の移行ガイドラインに従ってください。 を別パッケージに移行することを決定した。algorithmsモジュールを別のパッケージに移行することにしたのは、Qiskitの目的を明確にし、その上に構築されるツールとライブラリを区別するためである。
パルスの廃止
-
ampの複素数値でScalableSymbolicPulseを初期化する。 この変更は、以下のライブラリパルスにも影響する:amp、複雑な値で初期化することも非推奨となった。代わりに、
ampとangleパラメータを指定する際に、2つの浮動小数点数を使用する。ここで、ampは複素振幅の大きさを表し、angle は複素振幅の角度を表す。 すなわち、複素振幅は で与えられる。 -
この
Call命令は非推奨であり、将来のリリースで削除される予定である。 代わりに、関数call()モジュールからqiskit.pulse.builderを使う。
各種 非推奨
-
Jupyter magic
%circuit_library_info、qiskit.tools.jupyter.libraryのオブジェクトを順番に呼び出す:circuit_data_tableproperties_widgetqasm_widgetcircuit_digram_widgetcircuit_library_widget
は非推奨であり、将来のリリースで削除される予定です。 これらのオブジェクトは、ドキュメントのビルドでのみ使用されることを意図していた。 もうそこでは使われていないので、サポートやメンテナンスもされていない。
既知の問題
- モジュールで作成された古典的な式を含む回路は、回路ビジュアライザーではまだサポートされていません。
exprモジュールで作られた古典式を含む回路は、回路ビジュアライザーではまだサポートされていません。
バグ修正
-
のバグを修正した。
Channelにおいて、インデックスの検証が正しく行われず、インデックスが非整数かつ負である場合にのみエラーが発生するバグを修正した。 -
の問題を修正しました。
transpile()関数とgenerate_preset_pass_manager()を介して生成されたQuantumCircuitオブジェクトのlayout属性が無効なTranspileLayout.final_layout属性が無効になっていた問題を修正しました。 これはVF2PostLayoutパスが実行され、報告されたエラー率がより低い代替の初期レイアウトが見つかる。 初期レイアウトを変更する際にfinal_layout属性が更新されることはなかった。 これは、final_layout、ルーティング・ステージによる出力の順列が常に正しく反映されるように修正された。 修正 #10457 -
OpenQASM 2 パーサー (
qasm2.load()とloads()) がstrictモードで動作している場合、barrierステートメントに引数がない場合に正しくエラーを発するようになりました。 (デフォルトの)より寛容なモードで実行されている場合、引数なしのbarrierステートメントは、現在スコープ内にあるすべての量子ビット(ゲート定義が影響する量子ビット、またはステートメントがゲートボディ内またはグローバルスコープ内にある場合、それぞれプログラムによって定義されたすべての量子ビット)にバリアを引き起こし続けます。 -
OpenQASM 2 エクスポーター(
QuantumCircuit.qasm()) は、barrierステートメントを出力しようとしなくなりました。 このようなバリアステートメントはQiskitでも効果がないが、無効である OpenQASM 2。 -
Qiskitは、ゼロ量子ビット、またはゼロでない数の古典ビットに作用するカスタム命令を表すことができる。 これらは OpenQASM 2にエクスポートできないが、以前は
QuantumCircuit.qasm()は試してみたが、無効な OpenQASM 2を出力していた。 代わりにQASM2ExportErrorが正しく発生するようになった。 7351と #10435を参照。 -
マップをカップリングせずに
TargetマップをFullAncillaAllocationtranspilerパスで この場合FullAncillaAllocationの量子ビットの数が のものと一致するように、アンシラ量子ビットを追加します。DAGCircuitTarget.num_qubitsの量子ビット数と一致させる。 -
DAGCircuit.substitute_node()は、与えられた置換opの既存の条件を黙って上書きすることはなくなった。propagate_conditionがTrue(デフォルト)に設定されている場合、代わりにDAGCircuitErrorが発生する。 -
定義にパラメトリック・グローバル・フェーズがあるカスタム・ゲートを含むパラメトリック回路で、内側のグローバル・フェーズのパラメータを正常にバインドできるようになりました。 詳細は #10283を参照。
-
の構築
StatevectorからQuantumCircuitからゼロ量子ビット演算を含むものを構築してもエラーは発生しなくなった。 これらの操作は、結果として得られる状態ベクトルに大域的な位相を与える。 -
コントロール・フロー・ビルダー・インターフェースが、ネストしたswitch文のリソースを回路スコープに正しく含めるようになった。
ClassicalRegisterリソースを含めるようになりました。 10398を参照。 -
の問題を修正しました。
QuantumCircuit.decompose()で、複合ゲート名にマッチする回路名を関数に渡すと、そのゲートにラベルも割り当てられている場合、そのゲートが分解されないという問題を修正しました。 修正 #9136 -
の問題を修正しました。
qiskit.visualization.plot_histogram()で,与えられたデータセットの最初の位置にゼロの値があると,相対的な凡例が表示されない問題を修正した. 詳細は #10158を参照。 -
メソッド
Target.update_from_instruction_schedule_map()を含む与えられたinst_map。Scheduleを含むメソッドで発生する失敗を修正しました。 -
パラメータ
conditional=Trueがrandom_circuit()にパラメータ が指定された場合、結果の回路における条件演算の前に、回路途中の完全な測定が行われるようになります。 9016を修正 -
メソッドの型アノテーションを改善した。
QuantumCircuit.assign_parameters()メソッドの型アノテーションを改善し、inplace引数による戻り値の型の変化を反映するようにした。 -
OpenQASM 2 回路構成法 (
QuantumCircuit.from_qasm_str()およびfrom_qasm_file()) は、UまたはCX命令を含むgate定義に遭遇してもエラーにならなくなりました。 5536を参照。 -
のオーバーヘッドを削減した。
ConsolidateBlocksのインスタンスを作成し、そのインスタンスに渡す代わりに、すべての2量子ビットブロックに対して行列演算を実行することで、パスのオーバーヘッドを削減した。QuantumCircuitのインスタンスを作成しOperator. このスピードアップは、2量子ビットのブロックを統合する場合にのみ適用される。 それ以上のものは、やはりOperatorクラスで処理されます。 詳細は #8779をチェック。 -
OpenQASM 3 エクスポーター (
qiskit.qasm3) は、非単位インスタンスに対して無効な OpenQASM 3 を出力しなくなった。Instructionを出力しなくなりました。QASM3ExporterErrorを発生させます。 この機能は、Qiskitの後のリリースで、ライブラリ全体に古典的な処理機能がもっと充実する予定である。 -
問題 #10185 を修正しました。
-
関数
state_to_latex()の問題を修正した。 以前は、意図しない係数の丸めを伴う無効な LaTeX が生成され、state_drawer()を呼び出す際にエラーが発生していた。 修正 #9297。