{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "ad686dca",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"Orbit - Quantum Elements による Qiskit 関数\"\n",
        "description: \"Quantum Elements社のQiskit関数「Orbit」は、最適化されたトランスパイレーション、動的デカップリング、および測定誤差の低減により、回路の実行性能を向上させます\"\n",
        "---\n",
        "\n",
        "{/* cspell:ignore QAOA, MEM, Bernstein, Vazirani, bitstring, bitstrings, transpiler, transpilation, decoupling, mid-circuit, QEC, Mitiq, M3 */}\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "527f0ffe",
      "metadata": {},
      "source": [
        "<span id=\"orbit---a-qiskit-function-by-quantum-elements\" />\n",
        "\n",
        "# Orbit - Quantum Elements による Qiskit 関数\n",
        "\n",
        "*[APIリファレンス](/docs/api/functions/quantum-elements-orbit)を参照してください*\n",
        "\n",
        "<Admonition type=\"note\" title=\"注\">\n",
        "  Qiskit Functions これらは、 IBM Quantum® Premium Plan、Flex Plan、および On-Prem （ IBM Quantum Platform API経由）プランのユーザーのみが利用できる実験的な機能です。 これらはプレビュー版の状態で、変更される可能性があります。\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "86fcdc03",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "dcaba271",
      "metadata": {},
      "source": [
        "<span id=\"overview\" />\n",
        "\n",
        "## 概要\n",
        "\n",
        "量子ハードウェアは進歩を続けていますが、ノイズやデコヒーレンスが依然として、実用的な量子回路の処理深度や信頼性を制限しています。 利用可能なアプローチのうち、動的デカップリング（DD）、最適化トランスパイレーション、および測定誤差の低減（MEM）という3つの相互に補完的な手法により、これらの制限を大幅に軽減することができる。 最適化されたトランスパイレーションにより、回路の深さが低減され、ターゲットハードウェアの接続性に回路をより適切に適合させることができます。また、DDは綿密に設計された制御シーケンスを通じてアイドル時のノイズを抑制し、MEMは読み出しエラーの影響を軽減し、後処理の段階で適用することが可能です。\n",
        "\n",
        "利用可能な配列ファミリーは数多く存在し、ある回路やノイズ環境では良好な性能を発揮する配列でも、別の回路やノイズ環境では良好な性能を発揮しない可能性があるため、効果的なDD戦略の選定はとりわけ容易ではない。 トランスパイレーション、DD、MEMのメリットは、問題、ハードウェア、およびワークロードによって異なります。これらを単独で、あるいは組み合わせて使用することでパフォーマンスを向上させることができますが、あらゆる構成において常に有益であるとは限りません。\n",
        "\n",
        "Quantum Elements社が開発したQiskit関数「Orbit」は、これら3つのコンポーネントをシームレスに統合した統一ワークフローを実現しており、 IBM Quantum ハードウェア上での回路実行の最適化に容易に活用できます。 Orbitの基本形態では、元の回路ロジックを維持しつつ、アイドル期間中に量子状態を保護するアクティブなエラー抑制戦略が自動的に適用されます。 特に注目すべきは、これによって量子処理や古典処理の事前処理時間が一切増加しないため、ワークフロー内で不必要な追加コストや待ち時間が発生しない点である。\n",
        "\n",
        "Orbitは、いわゆる「ブラックボックス」として動作するのではなく、ユーザーが特定の実験に合わせてその最適化コンポーネントを評価・微調整できるようにしています。 ユーザーは、最適化されたトランスパイル、DD、およびMEMを個別に有効化または無効化したり、自動選択されたDDとユーザー指定のシーケンスを比較したり、同じワークフロー内で複数の設定を実行したりすることができます。 各設定を元の回路と比較することで、ユーザーは、どの手法が自身の回路やバックエンドに測定可能なメリットをもたらすかを判断し、異なる最適化手法間の相互作用を特定し、実験の目的に最も適した設定を選択することができます。 このプロセスにより、ユーザーはパフォーマンス向上の要因を把握し、特定のワークロード向けに量子回路を最適化する際に、より的確な判断を下せるようになります。\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f38cda0b",
      "metadata": {},
      "source": [
        "<span id=\"description\" />\n",
        "\n",
        "## 説明\n",
        "\n",
        "Orbitは、 IBM Quantum のバックエンド上での量子回路の実行を強化するように設計されています。 自動モードでは、ユーザーは手動で選択や設定を行うことなく、高次で堅牢なDDシーケンスをシームレスに適用することができます。 上級ユーザーは、代わりに利用可能な高次シーケンスを試して、特定の回路に対して最高のパフォーマンスを発揮する手法を特定し、最適化することができます。\n",
        "\n",
        "また、Orbitは、通常、個別のキャリブレーションや緩和ワークフローに必要な追加のジョブを必要とせずに、瞬時にMEMを提供します。 回路構造を変更してはならないワークロード（例えば、回路途中で測定を行う量子誤り訂正回路や動的回路など）の場合、Orbitは、ユーザーの既存のトランスパイレーション戦略を妨げることなく、DDおよびMEMを適用することができます。 まだ特定の方法を定めていないユーザーのために、Orbitには、エラー抑制や読み出し影響軽減の手法を適用する前に、ターゲットハードウェア向けに回路を最適化する組み込みのトランスパイラーも搭載されています。\n",
        "\n",
        "追加の回路サンプリングや外挿、あるいは大規模な従来の事後処理に依存するアプローチとは異なり、Orbitは実行中の誤差の抑制に重点を置いています。 この関数は、元の回路ロジックを維持しつつ、オーバーヘッドを最小限に抑えるように設計されています。 ユーザーは、生成された回路を確認し、Orbitによって最適化された実行結果と標準的な実行結果を直接比較することができます。\n",
        "\n",
        "Orbitの実用的なワークフローは以下の通りです：\n",
        "\n",
        "1. 量子回路を定義し、「 [Qiskit Functions Catalog](/functions) 」から「Orbit」を選択します。\n",
        "2. 「Raw」モードを使用して、Orbitを含まない回路を含め、生回路のベースラインを確立します。\n",
        "3. 適用する最適化戦略を選択します。これには、自動またはユーザー指定のDDシーケンス、MEM、および最適化されたトランスパイレーションが含まれます。\n",
        "4. 個々のメソッドを有効または無効にしたり、複数の設定を送信したりして、それぞれの効果や組み合わせた効果を評価します。\n",
        "\n",
        "Orbitは、クビットがゲートに積極的に関与していないアイドル期間やスケジューリングの空き時間がある回路において、特に有用です。 静的回路および動的回路に対応しており、回路動作中の測定を伴うワークフローや、フォールトトレラントな量子コンピューティング実験なども含みます。 代表的な応用例としては、量子エラー訂正、正方形格子およびヘビーヘックス格子におけるサーフェスコード実験、バーンスタイン・ヴァジラニなどのオラクルアルゴリズム、フーリエ変換回路、変分量子アルゴリズム、ハミルトニアンシミュレーション、ベンチマーク実験、およびハードウェアを意識した回路最適化などが挙げられる。\n",
        "\n",
        "フォールトトレランス（耐障害性）の時代を見据え、Orbitは量子エラー訂正とシームレスに組み合わせることができるため、フォールトトレラントな量子コンピューティングワークフローにも対応しています。 長期的には、Orbitは、論理量子ビットを保護するための将来を見据えた道筋として、論理レベルでの動的デカップリング [\\[1\\]](#references) を提唱している。 以下の例では、2つの論理量子ビットをもつれ合わせ、量子エラー検出の下で論理ベル状態を作り出しました。 量子エラー検出のみの場合、ベル状態の忠実度は数十マイクロ秒の間に約44％まで低下したが、QEDとOrbit方式の保護を組み合わせた場合、論理的なベル状態の忠実度はスケールの最上位付近を維持し、同じ時間窓において約 95.3 ％に達した。\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "070af466",
      "metadata": {},
      "source": [
        "![Orbit 量子回路開発プラットフォーム](https://quantum.cloud.ibm.com/docs/images/guides/quantum-elements-orbit/orbit-quantum-circuit-development-platform.avif)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "5ea6918e",
      "metadata": {},
      "source": [
        "<span id=\"benchmarks\" />\n",
        "\n",
        "## ベンチマーク\n",
        "\n",
        "以下の結果は、 IBM Quantum ハードウェア上で実行された代表的なOrbitの実行結果をまとめたものです。 他のハードウェアベンチマークと同様、結果は選択したデバイス、キャリブレーションの状態、回路、および実行設定によって異なります。\n",
        "\n",
        "| 例                            | メトリック           | 量子ビット              | QPU                    | 追加の詳細                                                                      | 軌道改善                        |\n",
        "| ---------------------------- | --------------- | ------------------ | ---------------------- | -------------------------------------------------------------------------- | --------------------------- |\n",
        "| バーンスタイン・ヴァジラニ                | 隠しビット列の忠実度      | 266070<br /><br /> | ヘロン r3                 | 「Raw」対「Full Orbit」、<br />「トランスパイレーションのみ」対「Full Orbit」、「<br />Full Orbitのみ」 | 75×66×N/A<br /><br />       |\n",
        "| QFT（ユニタリー）                   | 身元保証            | 10                 | Heron <br />r2Heron r3 | Orbit 対 raw：<br /> 約44％ 対 約35<br /> ％　約67％ 対 約61％                          | 1.<br />26×1.09×            |\n",
        "| QFT（動的回路）                    | 身元保証            | 1020<br />         | ヘロン r3                 | Orbit 対 raw：<br /> 約55％ 対 約2<br /> ％　約10％ 対 約0％                            | 27.<br />51×N/A             |\n",
        "| 長距離ベル状態（動的回路）                | 身元保証            | 3060<br />         | ヘロン r2                 | 該当なし                                                                       | 1.<br />78×1.11×            |\n",
        "| 表面コード<br />（正方格子）            | 論理誤り確率          | 25 GB              | ナイトホーク r1              | 1ラウンド<br /> 5ラウンド<br /> 10ラウンド                                             | 1.<br />01×1.<br />15×1.12× |\n",
        "| サーフェスコード<br />（ヘビー・ヘックス）     | 論理誤り確率          | 65                 | ヘロン r3                 | 1ラウンド<br /> 5ラウンド<br /> 10ラウンド                                             | 4.<br />11×2.<br />04×1.39× |\n",
        "| VQE                          | 理想エネルギーに対する絶対誤差 | 8                  | ヘロン r3                 | Orbit 対 raw：<br />56mHa 対 1342 mHa                                         | 24x                         |\n",
        "| QAOA                         | 成功確率            | 5                  | ヘロン r2                 | 該当なし                                                                       | 1.46x                       |\n",
        "| `[[4,2,2]]` コード（論理レベルのエラー抑制） | もつれたベル状態の論理的忠実度 | 4                  | ヘロン r2                 | 55 μsにわたる平均忠実度                                                             | 1.63x                       |\n",
        "\n",
        "<span id=\"metric-definitions\" />\n",
        "\n",
        "### メトリックの定義\n",
        "\n",
        "* **バーンスタイン・ヴァジラニの隠されたビット列の忠実度：** 正しい隠されたビット列が測定される確率。 この指標は、回路規模が大きくなるにつれて、アルゴリズムが意図した解をどの程度確実に復元できるかを示すものである。 この表は、3つの異なる構成の下で正常に評価された、最大規模の3つの隠れビット列を示しています。(i) Orbitを使用しない生の回路（26キュービット）、(ii) トランスパイレーションのみを用いた回路（60キュービット）、および (iii) Orbitのワークフローをフルに活用した回路（70キュービット）です。 未改良回路（i）について、改善係数は、DDおよびMEMによって、未改良回路と比較して達成された性能向上を表しています。 トランスパイレーションのみの構成（ii）については、これは、最適にトランスパイリングされた回路にDDおよびMEMを追加することで達成された改善度を示しています。 Orbitの完全な構成（iii）については、すべてのOrbitコンポーネント（トランスパイレーション、DD、およびMEM）を有効にした場合にのみ、ゼロ以外の成功確率が得られたため、ベースラインに対する改善係数は報告されていない。 以下に、その具体例を示します。\n",
        "\n",
        "* **量子フーリエ変換のフィデリティ：** ユニタリーおよび動的回路による量子フーリエ変換（QFT）の実装 [\\[2\\]](#references) のいずれにおいても、フィデリティは、20種類の異なる入力状態について、実験的に実装された変換と理想的なQFTプロセスとの一致度を測定するものである。 動的回路では、回路中間での測定や従来のフィードフォワードにより、かなりのアイドル時間が生じますが、その間、動的デカップリングによってデコヒーレンスを抑制することができます。 報告されている改善度は、Orbitを用いて得られた忠実度と、未処理の忠実度とを比較したものです。\n",
        "\n",
        "* **長距離ベル状態の生成：** 最大60個の中間量子ビットを介して分離された2つの量子ビット間で、動的回路とフィードフォワード演算を用いてベル状態を生成し、局所的に接続された量子ハードウェア上で効率的な長距離エンタングルメントを実証した [\\[3\\]](#references)。 Orbitは、最適な量子ビットのルーティングを特定し、フィードフォワード測定中に量子ビットの状態を維持し、MEMを適用して読み出しエラーを低減します。\n",
        "\n",
        "* **サーフェスコードの論理誤り確率：** ヘビー・ヘックス・サーフェスコード [\\[4\\]](#references) および正方格子サーフェスコード [\\[5\\]](#references) について、符号化された論理状態が繰り返し行われる誤り訂正の過程を通じて維持されることを確認する量子メモリ実験が行われた。 論理誤り確率は、蓄積された誤りによって符号化された情報が誤って復元される確率を表します（誤り率が低いほど良い）。 報告されている改善点は、未処理の回路から算出された論理誤り確率と、Orbitを用いて算出された論理誤り確率とを比較したものです。\n",
        "\n",
        "* **VQEの絶対誤差：** 最適化されたユニタリー結合クラスター近似を用いたVQEにより、 LiH の基底状態エネルギーを推定した [\\[6\\]](#references)。 測定されたエネルギーを、ノイズのない回路から得られた対応する理想エネルギーと比較する。 この指標は、測定値と理想値のエネルギーの絶対差を表しています（値が小さいほど良い）。 報告されている改善点は以下の通りです：\n",
        "\n",
        "$$\n",
        "\\text{Improvement factor}\n",
        "=\n",
        "\\frac{|E_{\\mathrm{raw}}-E_{\\mathrm{ideal}}|}\n",
        "{|E_{\\mathrm{Orbit}}-E_{\\mathrm{ideal}}|}.\n",
        "$$\n",
        "\n",
        "1より大きい値は、Orbitが動的デカップリングを行わない場合と比較して、エネルギー誤差を低減していることを示しています。\n",
        "\n",
        "* **QAOAの成功確率：** バタフライグラフ上で定義された最適化問題の最適解に対応するビット列が測定される確率。 報告されている改善点は、Orbitを用いて得られた成功確率と、未処理の回路から得られた成功確率とを比較したものです。\n",
        "\n",
        "* **論理的忠実度：** \\[ \\[4,2,2] ]の論理的動的デカップリング\\[実験1] において、2つの論理量子ビットが4つの物理量子ビットに符号化され、もつれた論理ベル状態として準備された。 論理的忠実度は、復元された符号化状態と目標となる論理ベル状態との一致度を測定するものである。 報告されている改善点は、Orbitとエラー検出（コードの機能）を併用して得られた平均論理忠実度と、コードのみを使用した際に得られた平均論理忠実度とを比較したものです。\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "38e15b38",
      "metadata": {},
      "source": [
        "<span id=\"get-started\" />\n",
        "\n",
        "## 使用を開始する\n",
        "\n",
        "[IBM Quantum Platform](http://quantum.cloud.ibm.com/) のAPIキーを使用して認証を行い、次のようにOrbit関数を選択してください。 このスニペットでは[、アカウントが](/docs/guides/functions-get-started#install-qiskit-functions-catalog-client)すでにローカル環境に保存されていることを前提としています。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "6a4e3d93",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[QiskitFunction(quantum-elements/orbit)]"
            ]
          },
          "execution_count": 1,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
        "from qiskit import QuantumCircuit\n",
        "\n",
        "catalog = QiskitFunctionsCatalog(channel=\"ibm_quantum_platform\")\n",
        "# Verify that you have access to the function.\n",
        "catalog.list()"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "15114161",
      "metadata": {},
      "outputs": [],
      "source": [
        "# Load the function.\n",
        "orbit = catalog.load(\"quantum-elements/orbit\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "46a39ed8",
      "metadata": {},
      "source": [
        "<span id=\"example\" />\n",
        "\n",
        "## 例\n",
        "\n",
        "次の例では、バーンスタイン・ヴァジラニ回路を構築し、1つのジョブ内で2つの方法（生の実行とOrbitのデフォルト設定）でOrbitに送信します。\n",
        "\n",
        "「Raw」と「Orbit」を直接比較したい場合は、このパターンをご利用ください。\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "8708dcb1",
      "metadata": {},
      "source": [
        "<span id=\"build-a-bernstein-vazirani-circuit\" />\n",
        "\n",
        "### バーンスタイン・ヴァジラニ回路を構築する\n",
        "\n",
        "隠されたビット列を選び、論理回路を構築してください。 追加の量子ビットがオラクルのターゲットとなり、一方、入力量子ビットは測定される。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "3366889b",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "OrderedDict([('h', 102),\n",
              "             ('cx', 50),\n",
              "             ('measure', 50),\n",
              "             ('x', 1),\n",
              "             ('barrier', 1)])"
            ]
          },
          "execution_count": 3,
          "metadata": {},
          "output_type": "execute_result"
        }
      ],
      "source": [
        "def create_bv_circuit(hidden_bitstring: str) -> QuantumCircuit:\n",
        "    width = len(hidden_bitstring)\n",
        "    circuit = QuantumCircuit(width + 1, width)\n",
        "\n",
        "    circuit.x(width)\n",
        "    circuit.h(range(width + 1))\n",
        "\n",
        "    for input_qubit, bit in enumerate(reversed(hidden_bitstring)):\n",
        "        if bit == \"1\":\n",
        "            circuit.cx(input_qubit, width)\n",
        "\n",
        "    circuit.barrier()\n",
        "    circuit.h(range(width + 1))\n",
        "    circuit.measure(range(width), range(width))\n",
        "    return circuit\n",
        "\n",
        "\n",
        "circuit_width = 50\n",
        "hidden_bitstring = \"1\" * circuit_width\n",
        "shots = 4096\n",
        "\n",
        "bv_circuit = create_bv_circuit(hidden_bitstring)\n",
        "bv_circuit.count_ops()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a047bbc5",
      "metadata": {},
      "source": [
        "<span id=\"prepare-the-orbit-workload\" />\n",
        "\n",
        "### Orbitのワークロードを準備する\n",
        "\n",
        "「 PUB 」という名前のサンプラーを1つ作成し、2つの比較モード用にそれを複製します。 Orbitは論理回路を受け取り、実行中にそれを選択されたバックエンドにマッピングします。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "2c6a4b83",
      "metadata": {},
      "outputs": [],
      "source": [
        "base_pub = (bv_circuit, None, shots)\n",
        "comparison_labels = [\"raw\", \"orbit\"]\n",
        "pubs = [base_pub] * len(comparison_labels)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "94ae3ab1",
      "metadata": {},
      "source": [
        "<span id=\"run-raw-and-orbit-defaults\" />\n",
        "\n",
        "### Rawモードで実行し、Orbitのデフォルト設定を使用する\n",
        "\n",
        "`pub_options` 最初の PUB をrawモードに割り当てます。これにより、Orbitの最適化、DD、およびMEMがスキップされます。また、2番目の PUB にはOrbitのデフォルト設定が割り当てられ、これには最適化されたトランスパイル、動的デカップリング（DD）の自動挿入、および測定誤差の軽減（MEM）が含まれます。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "c1a340ad",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "c0f1b99c-8dfa-4ebb-9560-d9a37c990acc\n",
            "QUEUED\n"
          ]
        }
      ],
      "source": [
        "backend_name = \"ibm_kingston\"\n",
        "\n",
        "job = orbit.run(\n",
        "    primitive=\"sampler\",\n",
        "    pubs=pubs,\n",
        "    backend_name=backend_name,\n",
        "    options={\n",
        "        \"pub_options\": [\n",
        "            {\"mode\": \"raw\"},\n",
        "            {\"mode\": \"orbit\"},\n",
        "        ],\n",
        "        \"save_backend_info\": True,\n",
        "    },\n",
        ")\n",
        "\n",
        "# Check the job ID and status\n",
        "print(job.job_id)\n",
        "print(job.status())"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d74599be",
      "metadata": {},
      "source": [
        "結果を取得し、カウント数を用いて、生の回路とOrbitで強化された回路を比較する。 サンプラーの結果については、 `get_counts()` 返された古典レジスタに出力ヒストグラムが格納されています。 `measurementErrorMitigation[\"rawCounts\"]`Orbit PUB に対して MEM が成功した場合、このヒストグラムはすでに MEM 補正済みとなります。補正前のカウント値は、Orbit メタデータの. 以下で引き続き確認できます。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "dbab207b",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "{'hidden_bitstring': '11111111111111111111111111111111111111111111111111', 'correct_counts': {'raw': 0, 'orbit': 184}, 'shots': 4096}\n"
          ]
        }
      ],
      "source": [
        "def extract_counts(pub_result) -> dict[str, int]:\n",
        "    data = getattr(pub_result, \"data\", None)\n",
        "    if data is None:\n",
        "        raise TypeError(\"pub_result.data is missing\")\n",
        "\n",
        "    for name in dir(data):\n",
        "        if name.startswith(\"_\"):\n",
        "            continue\n",
        "        register = getattr(data, name)\n",
        "        get_counts = getattr(register, \"get_counts\", None)\n",
        "        if callable(get_counts):\n",
        "            counts = get_counts()\n",
        "            if counts:\n",
        "                return counts\n",
        "\n",
        "    raise TypeError(\n",
        "        \"No classical register with get_counts() found in pub_result.data\"\n",
        "    )\n",
        "\n",
        "\n",
        "result = job.result()\n",
        "if len(result) != len(comparison_labels):\n",
        "    raise RuntimeError(\n",
        "        f\"Expected {len(comparison_labels)} PUB results, received {len(result)}.\"\n",
        "    )\n",
        "\n",
        "comparison_counts = {\n",
        "    label: extract_counts(pub_result)\n",
        "    for label, pub_result in zip(comparison_labels, result, strict=True)\n",
        "}\n",
        "correct_counts = {\n",
        "    label: counts.get(hidden_bitstring, 0)\n",
        "    for label, counts in comparison_counts.items()\n",
        "}\n",
        "\n",
        "print(\n",
        "    {\n",
        "        \"hidden_bitstring\": hidden_bitstring,\n",
        "        \"correct_counts\": correct_counts,\n",
        "        \"shots\": shots,\n",
        "    }\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "a753eaad",
      "metadata": {},
      "source": [
        "未加工の回路とOrbitで強化された回路を視覚的に比較してください。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": null,
      "id": "7656f768",
      "metadata": {},
      "outputs": [
        {
          "data": {
            "text/plain": [
              "<Image src=\"/docs/images/guides/quantum-elements-orbit/extracted-outputs/7656f768-0.avif\" alt=\"Output of the previous code cell\" />"
            ]
          },
          "metadata": {},
          "output_type": "display_data"
        }
      ],
      "source": [
        "import matplotlib.pyplot as plt\n",
        "\n",
        "labels = list(correct_counts)\n",
        "values = list(correct_counts.values())\n",
        "fig, ax = plt.subplots(figsize=(7, 4))\n",
        "bars = ax.bar(labels, values, width=0.55)\n",
        "ax.bar_label(bars, labels=[f\"{value:g}\" for value in values], padding=3)\n",
        "ax.set_xlabel(\"Circuit execution mode\")\n",
        "ax.set_ylabel(\"Correct hidden-bitstring count\")\n",
        "ax.set_title(f\"{circuit_width}-qubit Bernstein-Vazirani on {backend_name}\")\n",
        "ax.set_ylim(0, max(1, 1.15 * max(values)))\n",
        "ax.grid(axis=\"y\", alpha=0.25)\n",
        "fig.tight_layout()\n",
        "plt.show()"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "83a3bf46",
      "metadata": {},
      "source": [
        "<span id=\"get-support\" />\n",
        "\n",
        "## サポートの利用\n",
        "\n",
        "Quantum Elementsのサポートへお問い合わせください： [info@quantumelements.ai](mailto:info@quantumelements.ai)\n",
        "\n",
        "次の情報を必ずご記入ください。\n",
        "\n",
        "* Qiskit 関数ジョブ ID (`qiskit-ibm-catalog`), `job.job_id`\n",
        "* バックエンド名\n",
        "* 「Orbit `pub_options` 」は、RAWモードおよびOrbitモードで使用されます\n",
        "* 問題の詳細な説明\n",
        "* 関連するエラーメッセージやコードがあれば\n",
        "* 問題を再現する手順\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f2f1a5dd",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## 次のステップ\n",
        "\n",
        "<Admonition type=\"tip\" title=\"推奨事項\">\n",
        "  * 別のバックエンド、量子ビット数、あるいは別の隠しビット列を試してみてください。\n",
        "  * 量子フーリエ変換に関する[チュートリアル](/docs/tutorials/quantum-elements-orbit-qft-with-dynamic-circuits)をご覧いただき、軌道対応のカスタムDD戦略の定義方法や、回路途中で測定やフィードフォワード演算を行う動的回路へのDDの適用方法について学んでください。\n",
        "  * Orbitのすべてのオプションに関する詳細な説明については[、APIリファレンス](/docs/api/functions/quantum-elements-orbit)をご覧ください。\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "62092240",
      "metadata": {},
      "source": [
        "<a name=\"references\" />\n",
        "\n",
        "<span id=\"references\" />\n",
        "\n",
        "## 参照\n",
        "\n",
        "1. [論理レベルのエラー抑制と量子エラー検出の組み合わせ、『 *Nature Communications* 』（2026年）](https://www.nature.com/articles/s41467-026-70011-3)\n",
        "2. [動的回路を用いた量子フーリエ変換、『 *Physical Review Letters* 』（2024年）](https://journals.aps.org/prl/abstract/10.1103/PhysRevLett.133.150602)\n",
        "3. [動的回路を用いた効率的な長距離エンタングルメント、『 *PRX Quantum* 』（2024年）](https://journals.aps.org/prxquantum/abstract/10.1103/PRXQuantum.5.030339)\n",
        "4. [IBM のHeronモデルを用いた、ヘビーヘックス接続方式による表面コードのスケーリング実験、 arXiv:2510.18847](https://arxiv.org/abs/2510.18847)\n",
        "5. [正方格子接続を持つ IBM NighthawkにおけるSurfaceコードの実験、 arXiv:2606.11496](https://arxiv.org/abs/2606.11496)\n",
        "6. [VQEベンチマークの参考文献、『 *Nature Physics* 』（2024年）](https://www.nature.com/articles/s41567-024-02530-z)\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {},
      "id": "a1b8767d",
      "source": "© IBM Corp., 2017-2026"
    }
  ],
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 5
}