{
  "cells": [
    {
      "cell_type": "markdown",
      "id": "008d2ceb-f6fa-42f6-a7df-6bd604775278",
      "metadata": {},
      "source": [
        "---\n",
        "title: \"サンプラーのクイックスタート\"\n",
        "description: \"IBM Quantum のサンプラープリミティブの使用方法に関するクイックスタートガイド。\"\n",
        "---\n",
        "\n",
        "<span id=\"sampler-quickstart\" />\n",
        "\n",
        "# サンプラーのクイックスタート\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "b7e96291-0925-4d7f-81a8-a7738549477c",
      "metadata": {},
      "source": [
        "サンプラーの主な役割は、1つまたは複数の量子回路の実行結果を出力レジスタからサンプリングすることです。 [動的回路](/docs/guides/execute-dynamic-circuits)およびパラメータ化された回路を入力として受け付けます（パラメータ化された回路を提出する場合は、パラメータ値も併せて提供する必要があります）。 Samplerは[、エラー抑制](/docs/guides/error-mitigation-and-suppression-techniques)のための組み込みの動的デカップリングおよびツイリング機能もサポートしています。\n",
        "\n",
        "このトピックの手順では、Sampler のセットアップ方法、設定に使用できるオプションの確認方法、およびプログラム内での呼び出し方法について説明します。\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "818a2b3d-3950-4a28-8e37-39959c56484b",
      "metadata": {
        "tags": [
          "version-info"
        ]
      },
      "source": [
        "{/*\n",
        "  DO NOT EDIT THIS CELL!!!\n",
        "  This cell's content is generated automatically by a script. Anything you add\n",
        "  here will be removed next time the notebook is run. To add new content, create\n",
        "  a new cell before or after this one.\n",
        "  */}\n",
        "\n",
        "<Accordion>\n",
        "  <AccordionItem title=\"パッケージ・バージョン\">\n",
        "    このページのコードは、以下の要件に基づいて開発されました。\n",
        "    これらのバージョン以降のご利用をお勧めします。\n",
        "\n",
        "    ```\n",
        "    qiskit[all]~=2.5.1\n",
        "    qiskit-ibm-runtime~=0.47.0\n",
        "    ```\n",
        "  </AccordionItem>\n",
        "</Accordion>\n",
        "\n"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "64e2e09f-8528-4088-897b-1529b451ab1e",
      "metadata": {},
      "source": [
        "<span id=\"steps-to-use-the-sampler-primitive\" />\n",
        "\n",
        "## サンプラープリミティブの使用手順\n",
        "\n",
        "<span id=\"1-initialize-the-account\" />\n",
        "\n",
        "### 1. アカウントを初期化する\n",
        "\n",
        "まず、アカウントを初期化する必要があります。 その後、期待値の計算に使用するQPUを選択できます。\n",
        "\n",
        "まだアカウントをお持ちでない場合は、 「[ IBM Cloud アカウントの設定](/docs/guides/cloud-setup) 」のトピックに記載されている手順に従ってください。\n",
        "\n",
        "<Admonition type=\"note\" title=\"部分ゲート\">\n",
        "  新たにサポートされた[フラクショナル・ゲート](/docs/guides/fractional-gates)を使用するには、インスタンス `QiskitRuntimeService` からバックエンドをリクエストする際に を `use_fractional_gates=True` 設定してください。 例:\n",
        "\n",
        "  ```python\n",
        "  service = QiskitRuntimeService()\n",
        "  fractional_gate_backend = service.least_busy(use_fractional_gates=True)\n",
        "  ```\n",
        "\n",
        "  これは実験的な機能であり、今後変更される可能性があります。\n",
        "</Admonition>\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 1,
      "id": "b40504d7-aee5-4b30-98b1-265e70bece8d",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import QiskitRuntimeService\n",
        "\n",
        "service = QiskitRuntimeService()\n",
        "backend = service.least_busy(\n",
        "    operational=True, simulator=False, min_num_qubits=127\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "73374fbc-d3b6-4d2d-84c6-edf85b43ea25",
      "metadata": {},
      "source": [
        "<span id=\"2-create-a-circuit\" />\n",
        "\n",
        "### 2. 回路を作成する\n",
        "\n",
        "サンプラープリミティブの入力として、少なくとも1つの回路が必要です。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 2,
      "id": "dfe23a34-2ea9-48af-bd1d-c7e3185aa80c",
      "metadata": {},
      "outputs": [],
      "source": [
        "import numpy as np\n",
        "from qiskit.circuit.library import efficient_su2\n",
        "\n",
        "circuit = efficient_su2(127, entanglement=\"linear\")\n",
        "circuit.measure_all()\n",
        "# The circuit is parametrized, so we will define the parameter values for execution\n",
        "param_values = np.random.rand(circuit.num_parameters)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "6cf08ef6-34d3-42e6-8cb3-391b60217289",
      "metadata": {},
      "source": [
        "回路と観測量は、QPUがサポートする命令のみを使用するように変換する必要があります（ *これは命令セットアーキテクチャ（ISA）* 回路と呼ばれます）。 これを行うには、トランスパイラーを使用してください。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 3,
      "id": "062bd89b-b13e-46d0-96b6-6c84b2131415",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            ">>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])\n"
          ]
        }
      ],
      "source": [
        "from qiskit.transpiler import generate_preset_pass_manager\n",
        "\n",
        "pm = generate_preset_pass_manager(optimization_level=1, backend=backend)\n",
        "isa_circuit = pm.run(circuit)\n",
        "print(f\">>> Circuit ops (ISA): {isa_circuit.count_ops()}\")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "cf0f2c0a-8574-45c6-a43b-1a99eac81279",
      "metadata": {},
      "source": [
        "<span id=\"3-initialize-the-ibm-quantum-sampler\" />\n",
        "\n",
        "### 3. 「 IBM Quantum 」サンプラーを初期化する\n",
        "\n",
        "Sampler を初期化する際は、 `mode` パラメータを使用して、実行したいモードを指定してください。  取り得る値は `batch`、バッチ実行モード、セッション実行モード、ジョブ実行モードに対して、それぞれ、 `session`、または `backend` オブジェクトです。 詳細については、 [「 IBM Quantum Compute Service の実行モードの概要」](/docs/guides/execution-modes) を参照してください。 なお、Open Planのユーザーはセッションジョブを送信することはできません。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 4,
      "id": "a2b80dca-dff8-49f9-8154-e2cb0b768507",
      "metadata": {},
      "outputs": [],
      "source": [
        "from qiskit_ibm_runtime import SamplerV2 as Sampler\n",
        "\n",
        "sampler = Sampler(mode=backend)"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "f35972bf-17d3-40be-852b-9e56615c7c3c",
      "metadata": {},
      "source": [
        "<span id=\"4-invoke-sampler-and-get-results\" />\n",
        "\n",
        "### 4. サンプラーを実行して結果を取得する\n",
        "\n",
        "次に、出力を作成するためにメソッド `run()` を呼び出します。 回路およびオプションのパラメータ値セットは\\*、プリミティブ統一ブロック\\* （ PUB ）のタプルとして入力されます。\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "id": "e52e6a96-dc23-4f76-8152-b54514a99dfb",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            ">>> Job ID: d9mq9og8csec73fagt7g\n"
          ]
        },
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            ">>> Job Status: QUEUED\n"
          ]
        }
      ],
      "source": [
        "job = sampler.run([(isa_circuit, param_values)])\n",
        "print(f\">>> Job ID: {job.job_id()}\")\n",
        "print(f\">>> Job Status: {job.status()}\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "id": "4543fac5-abdc-4440-a1a2-d32aabe135d6",
      "metadata": {},
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "First ten results for the 'meas' output register: ['1010011011000000000000000000000000001111111111001010101010001110011000011101100100011100111111111010010110000011010100110111100', '0111100001100000011011101000000111111001011010110000101100011000000011010001000100000111001110011001111010100001100010100000000', '0111010101001110000110100000000110011000011011001111000110101101010100010010111111101011000000010000101111000001010110001000000', '1100111011000010011001100100001101111000101111110110011001011001100110000000000110111100110011000001100000100100001000000000000', '0011111010101101001111111110011000111000000010100011011111111011100110101010111111111101111110100011101101011100110010011010100', '1011111111011010000000000111000000010101001001000110011101100010010001100110100101111111110010001000001000101111100100011000000', '1110101101101011111111000010101010111100110011001010101111110110101010101111110000001110001111101101010100111011110001000000000', '1001010011111010000001010100011000101110111110111101100001010100011110000001000001000110000000000001101010110010110000011001000', '0000101010100000111000100001010101100101011101010110000001100110011001111011111110111010101000011001000011001001101101001010110', '1001001011000000010011101100010011101100010001001100100110011101100100000000111101010010000101011011011110110110001000111101100']\n"
          ]
        }
      ],
      "source": [
        "result = job.result()\n",
        "\n",
        "# Get results for the first (and only) PUB\n",
        "pub_result = result[0]\n",
        "print(\n",
        "    f\"First ten results for the 'meas' output register: \"\n",
        "    f\"{pub_result.data.meas.get_bitstrings()[:10]}\"\n",
        ")"
      ]
    },
    {
      "cell_type": "markdown",
      "id": "d38dd409-e0d8-4749-bb22-58ae9a53d26a",
      "metadata": {},
      "source": [
        "<span id=\"next-steps\" />\n",
        "\n",
        "## 次のステップ\n",
        "\n",
        "<Admonition type=\"tip\" title=\"推奨事項\">\n",
        "  * 量子コンピュータで実行する前に、 [ローカル環境でテスト](local-testing-mode)する方法をご紹介します。\n",
        "  * 具体的な[例](sampler-examples)を確認してください。\n",
        "  * IBM Quantum Learning の「 [Cost関数](/learning/courses/variational-algorithm-design/cost-functions) 」のレッスンに取り組んで、プリミティブ型の扱い方を練習しましょう。\n",
        "  * 「[トランスパイル](transpile/) 」のセクションで、ローカルでのトランスパイル方法について学びましょう。\n",
        "  * [「トランスパイラ設定の比較」](/docs/guides/circuit-transpilation-settings#compare-transpiler-settings) ガイドをお試しください。\n",
        "  * [プリミティブ・オプション](/docs/guides/runtime-options-overview)の使い方を学びましょう。\n",
        "  * [サンプラーの](/docs/api/qiskit-ibm-runtime/options-sampler-options)オプションに関するAPIをご覧ください。\n",
        "</Admonition>\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": 4
}