Skip to main content
IBM Quantum Platform

Qiskit 0.44 リリースノート


バージョン履歴

これは、 qiskit がいくつかの異なる「要素」を含む「メタ・パッケージ」であった最終リリースである。 本リリースノート(および以前のリリースノート)で「Qiskit Terra」と呼ばれているものは、主に現在単に「Qiskit」と呼ばれているものです。

この表は、インストールされたメタパッケージのバージョンと各レガシーQiskit要素のバージョンを追跡します:

Qiskitメタパッケージ版
キスキットテラ
キスキット
キスキット・イグニス
qiskit-ibmq-provider
キスキット・アクア
リリース日付
0.44.10.25.12023-08-17
0.44.00.25.02023-07-27
0.43.30.24.20.12.20.20.22023-07-19
0.43.20.24.10.12.10.20.22023-06-28
0.43.10.24.10.12.00.20.22023-06-02
0.43.00.24.00.12.00.20.22023-05-04
0.42.10.23.30.12.00.20.22023-03-21
0.42.00.23.20.12.00.20.22023-03-10
0.41.10.23.20.11.20.20.12023-02-23
0.41.00.23.10.11.20.20.02023-01-31
0.40.00.23.00.11.20.19.22023-01-26
0.39.50.22.40.11.20.19.22023-01-17
0.39.40.22.30.11.20.19.22022-12-08
0.39.30.22.30.11.10.19.22022-11-25
0.39.20.22.20.11.10.19.22022-11-03
0.39.10.22.10.11.10.19.22022-11-02
0.39.00.22.00.11.00.19.22022-10-13
0.38.00.21.20.11.00.19.22022-09-14
0.37.20.21.20.10.40.19.22022-08-23
0.37.10.21.10.10.40.19.22022-07-28
0.37.00.21.00.10.40.19.22022-06-30
0.36.20.20.20.10.40.7.10.19.12022-05-18
0.36.10.20.10.10.40.7.00.19.12022-04-21
0.36.00.20.00.10.40.7.00.19.02022-04-06
0.35.00.20.00.10.30.7.00.18.32022-03-31
0.34.20.19.20.10.30.7.00.18.32022-02-09
0.34.10.19.10.10.20.7.00.18.32022-01-05
0.34.00.19.10.10.10.7.00.18.32021-12-20
0.33.10.19.10.9.10.7.00.18.22021-12-10
0.33.00.19.00.9.10.7.00.18.12021-12-06
0.32.10.18.30.9.10.6.00.18.10.9.52021-11-22
0.32.00.18.30.9.10.6.00.18.00.9.52021-11-10
0.31.00.18.30.9.10.6.00.17.00.9.52021-10-12
0.30.10.18.30.9.00.6.00.16.00.9.52021-09-29
0.30.00.18.20.9.00.6.00.16.00.9.52021-09-16
0.29.10.18.20.8.20.6.00.16.00.9.52021-09-10
0.29.00.18.10.8.20.6.00.16.00.9.42021-08-02
0.28.00.18.00.8.20.6.00.15.00.9.42021-07-13
0.27.00.17.40.8.20.6.00.14.00.9.22021-06-15
0.26.20.17.40.8.20.6.00.13.10.9.12021-05-19
0.26.10.17.40.8.20.6.00.13.10.9.12021-05-18
0.26.00.17.30.8.20.6.00.13.10.9.12021-05-11
0.25.40.17.20.8.20.6.00.12.30.9.12021-05-05
0.25.30.17.10.8.20.6.00.12.30.9.12021-04-29
0.25.20.17.10.8.10.6.00.12.30.9.12021-04-21
0.25.10.17.10.8.10.6.00.12.20.9.12021-04-15
0.25.00.17.00.8.00.6.00.12.20.9.02021-04-02
0.24.10.16.40.7.60.5.20.12.20.8.22021-03-24
0.24.00.16.40.7.60.5.20.12.10.8.22021-03-04
0.23.60.16.40.7.50.5.20.11.10.8.22021-02-18
0.23.50.16.40.7.40.5.20.11.10.8.22021-02-08
0.23.40.16.30.7.30.5.10.11.10.8.12021-01-28
0.23.30.16.20.7.30.5.10.11.10.8.12021-01-26
0.23.20.16.10.7.20.5.10.11.10.8.12020-12-15
0.23.10.16.10.7.10.5.10.11.10.8.12020-11-12
0.23.00.16.00.7.00.5.00.11.00.8.02020-10-16
0.22.00.15.20.6.10.4.00.10.00.7.52020 年 10 月 5 日
0.21.00.15.20.6.10.4.00.9.00.7.52020-09-16
0.20.10.15.20.6.10.4.00.8.00.7.52020-09-08
0.20.00.15.10.6.10.4.00.8.00.7.52020-08-10
0.19.60.14.20.5.20.3.30.7.20.7.32020-06-25
0.19.50.14.20.5.20.3.20.7.20.7.32020 年 6 月 19 日
0.19.40.14.20.5.20.3.00.7.20.7.22020-06-16
0.19.30.14.10.5.20.3.00.7.20.7.12020-06-02
0.19.20.14.10.5.10.3.00.7.10.7.12020-05-14
0.19.10.14.10.5.10.3.00.7.00.7.02020-05-01
0.19.00.14.00.5.10.3.00.7.00.7.02020-04-30
0.18.30.13.00.5.10.3.00.6.10.6.62020-04-24
0.18.20.13.00.5.00.3.00.6.10.6.62020-04-23
0.18.10.13.00.5.00.3.00.6.00.6.62020-04-20
0.18.00.13.00.5.00.3.00.6.00.6.52020-04-09
0.17.00.12.00.4.10.2.00.6.00.6.52020-04-01
0.16.20.12.00.4.10.2.00.5.00.6.52020-03-20
0.16.10.12.00.4.10.2.00.5.00.6.42020-03-05
0.16.00.12.00.4.00.2.00.5.00.6.42020-02-27
0.15.00.12.00.4.00.2.00.4.60.6.42020-02-06
0.14.10.11.10.3.40.2.00.4.50.6.22020-01-07
0.14.00.11.00.3.40.2.00.4.40.6.12019-12-10
0.13.00.10.00.3.20.2.00.3.30.6.12019-10-17
0.12.20.9.10.3.00.2.00.3.30.6.02019-10-11
0.12.10.9.00.3.00.2.00.3.30.6.02019-09-30
0.12.00.9.00.3.00.2.00.3.20.6.02019-08-22
0.11.20.8.20.2.30.1.10.3.20.5.52019-08-20
0.11.10.8.20.2.30.1.10.3.10.5.32019-07-24
0.11.00.8.20.2.30.1.10.3.00.5.22019-07-15
0.10.50.8.20.2.10.1.10.2.20.5.22019-06-27
0.10.40.8.20.2.10.1.10.2.20.5.12019-06-17
0.10.30.8.10.2.10.1.10.2.20.5.12019-05-29
0.10.20.8.00.2.10.1.10.2.20.5.12019-05-24
0.10.10.8.00.2.00.1.10.2.20.5.02019-05-07
0.10.00.8.00.2.00.1.10.2.10.5.02019-05-06
0.9.00.8.00.2.00.1.10.1.10.5.02019-05-02
0.8.10.7.20.1.10.1.02019-05-01
0.8.00.7.10.1.10.1.02019-03-05
0.7.3>=0.7,<0.8>=0.1,<0.22019-02-19
0.7.2>=0.7,<0.8>=0.1,<0.22019-01-22
0.7.1>=0.7,<0.8>=0.1,<0.22019-01-17
0.7.0>=0.7,<0.8>=0.1,<0.22018-12-14
Note

0.7.00.7.10.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() を修正。これまでは、 2n2^n のファクターで状態係数を減衰させていた。 nn は量子ビット数。 Tr(σρ)\mathrm{Tr}(\sigma\rho) ここで、 ρ\rho はプロットされる状態であり、 σ\sigma はシングル量子ビットPaulisのすべての可能なテンソル積を反復している。

  • OpenQASM 2 エクスポーター (QuantumCircuit.qasm()) の角度は、 1.e-5 のように、常に小数点を含むようになりました。 これは、 OpenQASM 2における浮動小数点リテラル指定の厳格な解釈によって要求されている。 Qiskitの OpenQASM 2パーサー(qasm2.load()loads())はデフォルトではより寛容で、 strict モードでない限り小数点なしの 1e-5 を許可します。

  • のセッターは SparsePauliOp.paulis のセッターは、無効なオブジェクトが作成されるのを黙って許すのではなく、不正な形のデータで属性を設定しようとする試みを正しく拒否するようになりました。 10384を参照。

  • におけるパフォーマンスのリグレッションを修正した。 SabreLayoutSabreSwap トランスパイラ・パスの 修正 #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:

  • nature
  • machine-learning
  • finance
  • optimization
  • experiments

パッケージのインストールにエクストラを使用している場合は、エクストラの代わりにパッケージを直接使用するように移行してください。 たとえば、以前 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.conditionSwitchCaseOp.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は操作を追加しました:

    これらは、 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 に更新する必要がある。 この新しいパッケージには、 opflowQuantumInstance をベースとしたアルゴリズムなど、すでに非推奨となっているアルゴリズムのコードは含まれていないことに注意してください。 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_layerscollect_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) は、循環パウリ関係 X=iYZX = iYZY=iZXY = iZXZ=iXYZ = iXY を教えている。これにより、制約のある、潜在的に不完全な基底セットへのトランスパイルがより信頼できるものになるはずです。 詳細は #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量子ビット RXR_XRYR_YRZR_Z ゲート間、および2量子ビット RXXR_{XX}RYYR_{YY}RZZR_{ZZ} ゲート間で、より多くのパウリ回転等価性を教えてきた。 これにより、特に YY ローテーションを使用する回路など、単純な基底変換の信頼性が高まるはずだ。 7332を参照。

  • コントロールフロー操作は、セイバー・トランスパイラ・パスのレイアウト・パス SabreLayout とルーティングパス SabreSwap. 機能 transpile() キーワード引数 layout_methodrouting_method は、以前はサポートされていなかった、制御フローを持つ回路用のオプション "sabre" を受け付けるようになった。

回路の特徴
  • フィールド IfElseOp.condition, WhileLoopOp.conditionSwitchCaseOp.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は操作を追加しました:

    これらは、 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_inputstrict。 これらは、パラメータバインディングを辞書として渡す際に、メソッドを高速化するために使用できる高度なオプションです。 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() これは、 k qubits上の一次関数を、 n >= k qubits上の一次関数に拡張するもので、元の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(). この関数は StatevectorDensityMatrix クラスで動作する。

  • オブジェクトの乗算をサポートする SparsePauliOp オブジェクトと Parameter オブジェクトとの乗算をサポートします:

    from qiskit.circuit import Parameter
    from qiskit.quantum_info import SparsePauliOp
    
    param = Parameter("a")
    op = SparsePauliOp("X")
    param * op
パルス機能
  • 図書館が拡張された。 SymbolicPulse ライブラリーが拡張された。 ライブラリーの新しいパルス関数は以下の通り:

    新しい関数は ScalableSymbolicPulse インスタンスを返し、離散パルス・ライブラリの対応する関数の機能と一致する。 Square() ただし、 2π2\pi の位相が1サイクル分シフトします(離散パルスの square() では、 π\pi の位相によってそのようなシフトが誘発された)。

  • メソッド 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は DiscriminatorKernel オブジェクトをサポートしています。 この機能により、ユーザーは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' を使用した場合、ネストされた回路ブロックの描画がサポートされるようになった。 ControlFlowOpifelsewhileforswitch/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/════════════
各種 機能

アップグレードの注意

  • 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) で呼び出す場合、すべての回路でデフォルトで使用されます。 以前は、制御フロー演算を行う回路では DenseLayoutStochasticSwap を使用していた。

回路アップグレードに関する注意事項
  • 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 レジスタを生成し、ここからさらにレジスタをエイリアスするのではなく、 bitqubitqubit[n] タイプを直接エクスポートすることを優先するようになった。 これは、 OpenQASM 3 の高度な機能の使用数を最小限に抑え、不要な配列構造を必要としないプログラムに導入しないようにするためである。

量子情報アップグレードに関する注意事項
  • Clifford.from_circuit() フィールドが他のオブジェクトと相互に再帰的な definition フィールドが他のオブジェクトと相互に再帰的である命令の解決を試みなくなった。 このような再帰的な定義は、すでにこのフィールドが要求する厳密に階層的な順序付けに違反している。 definition フィールドが要求する厳密な階層順序の違反である。 (相互)サイクルを持つことが許される等価性を定義したい場合は EquivalenceLibrary.
可視化アップグレードに関する注意事項
  • 内部 ~qiskit.visualization.circuit.matplotlib.MatplotlibDrawer オブジェクトにおいて、引数 layoutglobal_phaseqregscregs が削除された。 これらはもともと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 に更新する必要がある。 この新しいパッケージには、 opflowQuantumInstance をベースとしたアルゴリズムなど、すでに非推奨となっているアルゴリズムのコードは含まれていないことに注意してください。 QuantumInstance-based から primitives-based アルゴリズムにまだ移行していない場合は、 https://qisk.it/algo の移行ガイドラインに従ってください。 を別パッケージに移行することを決定した。 algorithms モジュールを別のパッケージに移行することにしたのは、Qiskitの目的を明確にし、その上に構築されるツールとライブラリを区別するためである。

パルスの廃止
  • amp の複素数値で ScalableSymbolicPulse を初期化する。 この変更は、以下のライブラリパルスにも影響する:

    amp 、複雑な値で初期化することも非推奨となった。

    代わりに、 ampangle パラメータを指定する際に、2つの浮動小数点数を使用する。ここで、 amp は複素振幅の大きさを表し、angle は複素振幅の角度を表す。 すなわち、複素振幅は amp×exp(i×angle)\texttt{amp} \times \exp(i \times \texttt{angle}) で与えられる。

  • この Call 命令は非推奨であり、将来のリリースで削除される予定である。 代わりに、関数 call() モジュールから qiskit.pulse.builder を使う。

各種 非推奨
  • Jupyter magic %circuit_library_infoqiskit.tools.jupyter.library のオブジェクトを順番に呼び出す:

    • circuit_data_table
    • properties_widget
    • qasm_widget
    • circuit_digram_widget
    • circuit_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マップを FullAncillaAllocation transpilerパスで この場合 FullAncillaAllocation の量子ビットの数が のものと一致するように、アンシラ量子ビットを追加します。 DAGCircuitTarget.num_qubits の量子ビット数と一致させる。

  • DAGCircuit.substitute_node() は、与えられた置換 op の既存の条件を黙って上書きすることはなくなった。 propagate_conditionTrue (デフォルト)に設定されている場合、代わりに DAGCircuitError が発生する。

  • 定義にパラメトリック・グローバル・フェーズがあるカスタム・ゲートを含むパラメトリック回路で、内側のグローバル・フェーズのパラメータを正常にバインドできるようになりました。 詳細は #10283を参照。

  • の構築 Statevector から QuantumCircuit からゼロ量子ビット演算を含むものを構築してもエラーは発生しなくなった。 これらの操作は、結果として得られる状態ベクトルに大域的な位相を与える。

  • コントロール・フロー・ビルダー・インターフェースが、ネストしたswitch文のリソースを回路スコープに正しく含めるようになった。 ClassicalRegister リソースを含めるようになりました。 10398を参照。

  • の問題を修正しました。 QuantumCircuit.decompose() で、複合ゲート名にマッチする回路名を関数に渡すと、そのゲートにラベルも割り当てられている場合、そのゲートが分解されないという問題を修正しました。 修正 #9136

  • の問題を修正しました。 qiskit.visualization.plot_histogram() で,与えられたデータセットの最初の位置にゼロの値があると,相対的な凡例が表示されない問題を修正した. 詳細は #10158を参照。

  • メソッド Target.update_from_instruction_schedule_map() を含む与えられた inst_mapSchedule を含むメソッドで発生する失敗を修正しました。

  • パラメータ conditional=Truerandom_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

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。