{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6d5b6baf",
   "metadata": {},
   "source": [
    "# Price European options using Monte Carlo integration\n",
    "**Apply Fire Opal's MCI function to financial modeling**\n",
    "\n",
    "Expectation value estimation over a stochastic process is a computational task where the objective is to evaluate the mean outcome of a system governed by underlying probability distributions. \n",
    "It arises in a wide range of real-world applications, including derivative pricing, portfolio risk modeling, and chemical reaction dynamics. \n",
    "One example is European option pricing, where estimating the expected payoff of an option contract at maturity requires evaluating an integral over a price distribution—a task ideally suited for Monte Carlo integration on quantum devices.\n",
    "In this application note, we demonstrate how to price a European option using Fire Opal's MCI function, allowing practitioners to compute high-precision expected values without requiring low-level circuit compilation expertise.\n",
    "\n",
    "We demonstrate the workflow on instances with directly calculable classical references. This notebook covers the following:\n",
    "\n",
    "* An introduction to Monte Carlo integration\n",
    "* An introduction to European option pricing \n",
    "* Hardware demonstrations employing Fire Opal's Monte Carlo function using (1) quantum circuit construction, and (2) high-level finance helper functions\n",
    "\n",
    "***\n",
    "*Some cells in this notebook require an account with IBM Quantum Platform to execute correctly. If you want to run them, please go to the [IBM Quantum Platform](https://quantum.cloud.ibm.com/) to set up an account.*\n",
    "***\n",
    "\n",
    "## 1. Introduction to Monte Carlo integration\n",
    "\n",
    "Monte Carlo integration is widely used to estimate the expected values of complex random processes across many fields such as chemistry, biology, finance, and cryptography. \n",
    "For example, in finance, Monte Carlo methods are fundamental for pricing derivatives, computing Value-at-Risk (VaR), and assessing portfolio risks. \n",
    "However, Monte Carlo approaches converge to the true expected value relatively slowly. \n",
    "To reduce the error in the estimate by one decimal place, the number of samples must be increased by a factor of 100X. \n",
    "This means a large number of samples are required to drive the error sufficiently low, and makes high-precision estimates costly in time and resources.\n",
    "To mitigate this cost, a wide array of variance reduction techniques (such as importance sampling and control variates) have been extensively studied and applied. \n",
    "These methods aim to lower the variance of estimators and therefore reduce the number of required samples without compromising accuracy.\n",
    "\n",
    "Quantum computing adds a unique and compelling contribution to this toolbox. \n",
    "Specifically, quantum amplitude estimation (QAE), a quantum algorithm based on amplitude amplification, provides a quadratic improvement in the convergence rate of Monte Carlo integration. \n",
    "Rather than 100X more samples to reduce the error of the expected value by one decimal place, only 10X more samples are needed. \n",
    "For applications where accuracy and speed are critical, QAE has the potential to be a valuable addition to the set of tools available to practitioners seeking to improve the performance of expected value estimation, both in finance and beyond.\n",
    "\n",
    "### 1.1 How Fire Opal solves execution challenges\n",
    "\n",
    "The traditional QAE implementation requires the use of [quantum phase estimation](https://docs.q-ctrl.com/fire-opal/execute/run-algorithms/improve-the-results-of-quantum-phase-estimation).\n",
    "Modern QAE variants replace phase estimation with sequences of shallower circuits combined with classical post-processing. \n",
    "Fire Opal's approach leverages Quantum Signal Processing (QSP) for amplitude estimation, which reduces circuit depth and ancilla qubit requirements. \n",
    "It preserves the core advantage of quantum quadratic speedup while significantly reducing the quantum hardware requirements, making interesting problems tractable on near-term quantum devices. \n",
    "Fire Opal's core error suppression workflow also enhances circuit deployment performance, protecting QSP phase signals to enable reliable, high-fidelity convergence to true expectation values on physical quantum hardware.\n",
    "\n",
    "## 2. Introduction to European option pricing \n",
    "\n",
    "European options are among the most fundamental financial derivatives in quantitative risk management and trading. \n",
    "A European option grants the holder the right to buy or sell an underlying asset at a predetermined strike price on a specific expiration date. \n",
    "To determine the fair market price of an option today, quantitative models calculate the expected payoff at maturity under a modeled probability distribution of future asset prices (typically a log-normal distribution), and discount that value back to the present day. \n",
    "\n",
    "In this demonstration, we consider a European digital range option.\n",
    "Instead of having a payoff that changes continuously with the asset price, a digital range option yields a fixed binary payoff based on whether the asset price finishes inside a target strike window:\n",
    "* Payoff = 1: If the asset price at maturity ($S_T$) falls within the strike window ($K_{\\text{low}} \\le S_T \\le K_{\\text{high}}$).\n",
    "* Payoff = 0: If the asset price finishes outside the strike window.\n",
    "\n",
    "Pricing this option requires evaluating the expected payoff, which is equivalent to calculating the probability that the final asset price lands within the strike window under a modeled log-normal price distribution. \n",
    "\n",
    "For implementation convenience and to allow a closed-form option price calculation for comparison, we model the asset price at maturity directly using a log-normal distribution and define the strike window to be between the 50-75th percentile of possible stock prices with respect to the price-at-maturity distribution.\n",
    "This simple example serves as a representative use case for quantum amplitude estimation in finance, and provides a benchmark for evaluating the performance of our Monte Carlo function.\n",
    "\n",
    "## 3. Imports and initialization\n",
    "Install the required packages in the active notebook environment. Restart the kernel after installation when necessary."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5cd4823c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# %pip install fire-opal qiskit_ibm_runtime qiskit qiskit-finance scipy matplotlib numpy qctrl-visualizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "e7d33695",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from dataclasses import dataclass\n",
    "from scipy.integrate import quad\n",
    "from qiskit import QuantumCircuit, QuantumRegister\n",
    "from qiskit.qasm2 import dumps\n",
    "import qctrlvisualizer as qv\n",
    "import fireopal as fo\n",
    "from qctrlvisualizer import QCTRL_STYLE_COLORS\n",
    "from matplotlib.axes import Axes\n",
    "from matplotlib.figure import Figure\n",
    "from qctrlvisualizer.utils import create_figure\n",
    "from qctrlvisualizer.style import qctrl_style\n",
    "from qiskit_finance.circuit.library import LogNormalDistribution\n",
    "\n",
    "\n",
    "plt.style.use(qv.get_qctrl_style())\n",
    "\n",
    "import warnings\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "de49b2a3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Authenticate your Q-CTRL account.\n",
    "api_key = \"YOUR_Q-CTRL_API_KEY\"\n",
    "fo.authenticate_qctrl_account(api_key=api_key)\n",
    "\n",
    "token = \"YOUR_IBM_CLOUD_API_KEY\"\n",
    "instance = \"YOUR_IBM_CRN\"\n",
    "\n",
    "credentials = fo.credentials.make_credentials_for_ibm_cloud(\n",
    "    token=token, instance=instance\n",
    ")\n",
    "\n",
    "# Replace with a backend available to your IBM Quantum instance.\n",
    "backend_name = \"desired_backend\""
   ]
  },
  {
   "cell_type": "markdown",
   "id": "50957309",
   "metadata": {},
   "source": [
    "## 4. Defining and visualizing the pricing problem\n",
    "\n",
    "Here, we characterize a European digital range option.\n",
    "The parameters determine the problem size, and the final spot price distribution.\n",
    "This distribution is used to obtain maximum and minimum price values (the high and low), and we highlight that the strike window is selected dynamically (within the user-defined price distribution) to enable a low-depth quantum oracle (or marker) circuit.\n",
    "More general strike windows or thresholds can be selected, noting that deeper circuits are more susceptible to hardware errors.\n",
    "\n",
    "We also plot the probability distribution and payoff function corresponding to the spot price at maturity.\n",
    "The tick markers and grid display the discretized price values represented by the qubits; the grid is finer with more data qubits."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7462a192",
   "metadata": {},
   "outputs": [],
   "source": [
    "@dataclass\n",
    "class EuropeanOptionPricing:\n",
    "    spot_price: float\n",
    "    volatility: float\n",
    "    interest_rate: float\n",
    "    maturity_years: float\n",
    "\n",
    "    @property\n",
    "    def mu(self) -> float:\n",
    "        return (\n",
    "            self.interest_rate - 0.5 * self.volatility**2\n",
    "        ) * self.maturity_years + np.log(self.spot_price)\n",
    "\n",
    "    @property\n",
    "    def sigma(self) -> float:\n",
    "        return self.volatility * np.sqrt(self.maturity_years)\n",
    "\n",
    "    @property\n",
    "    def mean(self) -> float:\n",
    "        return np.exp(self.mu + self.sigma**2 / 2)\n",
    "\n",
    "    @property\n",
    "    def variance(self) -> float:\n",
    "        return (np.exp(self.sigma**2) - 1) * np.exp(2 * self.mu + self.sigma**2)\n",
    "\n",
    "    @property\n",
    "    def stddev(self) -> float:\n",
    "        return np.sqrt(self.variance)\n",
    "\n",
    "    def get_high_low(self) -> tuple[float, float]:\n",
    "        low = round(np.maximum(0, self.mean - 3 * self.stddev), 3)\n",
    "        high = round(self.mean + 3 * self.stddev, 3)\n",
    "        return high, low\n",
    "\n",
    "    def get_strike_window(self) -> tuple[float, float]:\n",
    "        high, low = self.get_high_low()\n",
    "\n",
    "        strike_low = (high - low) / 2 + low\n",
    "        strike_high = (high - low) / 4 + strike_low\n",
    "\n",
    "        strike_window = (strike_low, strike_high)\n",
    "\n",
    "        return strike_window\n",
    "\n",
    "    def get_uncertainty_model(self, num_qubits: int) -> LogNormalDistribution:\n",
    "        high, low = self.get_high_low()\n",
    "        uncertainty_model = LogNormalDistribution(\n",
    "            num_qubits=num_qubits, mu=self.mu, sigma=self.sigma**2, bounds=(low, high)\n",
    "        )\n",
    "        return uncertainty_model\n",
    "\n",
    "    def get_exact_solution(self, return_error: bool = False):\n",
    "        def lognormal_pdf(x, mu, sigma):\n",
    "            if x <= 0:\n",
    "                return 0\n",
    "            return (1 / (x * sigma * np.sqrt(2 * np.pi))) * np.exp(\n",
    "                -((np.log(x) - mu) ** 2) / (2 * sigma**2)\n",
    "            )\n",
    "\n",
    "        strike_window = self.get_strike_window()\n",
    "\n",
    "        result, error = quad(\n",
    "            lognormal_pdf,\n",
    "            strike_window[0],\n",
    "            strike_window[1],\n",
    "            args=(self.mu, self.sigma),\n",
    "        )\n",
    "        if return_error:\n",
    "            return result, error\n",
    "\n",
    "        else:\n",
    "            return result\n",
    "\n",
    "    def get_exact_solution_with_discretized_values(self, num_qubits) -> float:\n",
    "        uncertainty_model = self.get_uncertainty_model(num_qubits=num_qubits)\n",
    "        low, high = self.get_strike_window()\n",
    "        values = uncertainty_model.values\n",
    "        probabilities = uncertainty_model.probabilities\n",
    "\n",
    "        return np.sum(\n",
    "            np.where((values >= low) & (values <= high), 1, 0) * probabilities\n",
    "        ).item()\n",
    "\n",
    "    def get_instance_parameters(self) -> dict:\n",
    "        parameters = {}\n",
    "        parameters[\"Spot price\"] = self.spot_price\n",
    "        parameters[\"Interest rate\"] = self.interest_rate\n",
    "        parameters[\"Maturity years\"] = self.maturity_years\n",
    "        parameters[\"Volatility\"] = self.volatility\n",
    "        return parameters\n",
    "\n",
    "\n",
    "def visualize_option_pricing_problem(num_qubits: int, problem: EuropeanOptionPricing):\n",
    "    uncertainty_model = problem.get_uncertainty_model(num_qubits=num_qubits)\n",
    "    strike_window = problem.get_strike_window()\n",
    "\n",
    "    # Plot distribution\n",
    "    x = list(uncertainty_model.values)\n",
    "    y = uncertainty_model.probabilities\n",
    "\n",
    "    if len(x) > 20:\n",
    "        for i in range(1, 10):\n",
    "            if len(x[::i]) <= 20:\n",
    "                x_ticks = x[::i]\n",
    "                break\n",
    "    else:\n",
    "        x_ticks = x\n",
    "\n",
    "    plt.plot(x, y)\n",
    "    plt.xticks(x_ticks, size=15, rotation=90)\n",
    "    plt.yticks(size=15)\n",
    "    plt.xlabel(\"Spot price at maturity $S_T$ (\\$)\", size=15)\n",
    "    plt.ylabel(\"Probability\", size=15)\n",
    "    plt.ylim((0, max(uncertainty_model.probabilities) * 1.1))\n",
    "    plt.xlim((x[0], x[-1]))\n",
    "    plt.tick_params(axis=\"y\", labelcolor=QCTRL_STYLE_COLORS[0])\n",
    "    plt.vlines(\n",
    "        x=x,\n",
    "        ymax=max(uncertainty_model.probabilities) * 1.1,\n",
    "        ymin=0,\n",
    "        color=\"lightgray\",\n",
    "        linewidth=1,\n",
    "        zorder=1,\n",
    "    )\n",
    "\n",
    "    # Create payoff window\n",
    "    y = [\n",
    "        1 if value >= strike_window[0] and value < strike_window[-1] else 0\n",
    "        for value in x\n",
    "    ]\n",
    "    first = y.index(1)\n",
    "    last = len(y) - y[::-1].index(1) - 1\n",
    "    y.insert(last + 1, 0)\n",
    "    y.insert(first, 0)\n",
    "    x.insert(last, x[last])\n",
    "    x.insert(first, x[first])\n",
    "\n",
    "    plt.twinx()\n",
    "    plt.plot(x, y, \"r-\")\n",
    "    plt.tick_params(axis=\"y\", labelcolor=QCTRL_STYLE_COLORS[1])\n",
    "    plt.ylabel(\"Payoff\", size=15)\n",
    "    plt.xticks(x_ticks, size=15, rotation=90)\n",
    "\n",
    "    plt.yticks(size=15)\n",
    "    plt.ylim((0, 1.1))\n",
    "    plt.fill_between(x, y, 0, alpha=0.2, color=QCTRL_STYLE_COLORS[1])\n",
    "    plt.yticks([0, 1])\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "a9c7208a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x360 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "num_uncertainty_qubits = 5  # Number of qubits to discretize the distribution\n",
    "S = 2.0  # Initial spot price\n",
    "vol = 0.6  # Annualized volatility of 60%\n",
    "r = 0.01  # Annual interest rate of 1%\n",
    "T = 10 / 365  # 10 days to maturity\n",
    "\n",
    "problem = EuropeanOptionPricing(\n",
    "    spot_price=S, volatility=vol, interest_rate=r, maturity_years=T\n",
    ")\n",
    "visualize_option_pricing_problem(num_qubits=num_uncertainty_qubits, problem=problem)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73756e01",
   "metadata": {},
   "source": [
    "## 5. Hardware demonstrations\n",
    "To support different operational needs, Fire Opal offers two flexible execution configurations:\n",
    "\n",
    "* **Quantum circuit workflow**: Ideal for developers who want to provide their own state preparation circuit, as we demonstrate for this use case by combining the distribution loading and payoff marking circuits.\n",
    "\n",
    "* **Domain expert workflow**: Ideal for quantitative analysts who want to select probability distribution and objective function options directly without working with quantum circuits.\n",
    "\n",
    "### 5.1 Run the function using the quantum circuit workflow\n",
    "Our Monte Carlo integration function aims to estimate the probability of a particular outcome, which is encoded in a quantum state. Given a quantum state prepared by an operator $\\mathcal{A}$ such that \n",
    "$$\n",
    "\\mathcal{A} \\ket{0}^{\\otimes n}\\ket{0} = \n",
    "    \\sqrt{1-p}\\ket{\\psi_0}\\ket{0} + \\sqrt{p}\\ket{\\psi_1}\\ket{1},\n",
    "$$\n",
    "the function estimates the value $p$ which corresponds to the probability of measuring the ancilla qubit in state $\\ket{1}$. Here $n$ denotes the number of bits to discretize the random variable, and $\\braket{\\psi_0\\vert \\psi_1} = 0$.  \n",
    "\n",
    "To apply the function, you can provide the state preparation circuit that implements the operator $\\mathcal{A}$. For our pricing problem example, we construct this circuit using distribution loading and payoff marking circuits. We use the ```LogNormalDistribution``` object from ```qiskit``` and a customized payoff marking circuit."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c1ee8215",
   "metadata": {},
   "outputs": [],
   "source": [
    "def oracle(\n",
    "    num_qubits: int, strike_window: tuple[float, float], high: float, low: float\n",
    ") -> QuantumCircuit:\n",
    "    \"\"\"\n",
    "    Creates the payoff marking circuit for our option pricing use case.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    num_qubits : int\n",
    "        The number of data qubits.\n",
    "    strike_window : tuple[float, float]\n",
    "        The low and high asset price for the option to pay out.\n",
    "    high : float\n",
    "        The maximum asset price to encode.\n",
    "    low : float\n",
    "        The minimum asset price to encode.\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    QuantumCircuit\n",
    "        The quantum circuit to compute U|x>|y> = |x>|y + f(x) mod 2>,\n",
    "        with n+1 qubits.\n",
    "    \"\"\"\n",
    "    if strike_window[1] < high:\n",
    "        is_window = True\n",
    "\n",
    "    else:\n",
    "        is_window = False\n",
    "\n",
    "    slope = (2**num_qubits - 1) / (high - low)\n",
    "    strike_window = [\n",
    "        int(np.ceil(slope * (strike_price - low))) for strike_price in strike_window\n",
    "    ]\n",
    "    min_strike_bin = format(strike_window[0], f\"0{num_qubits}b\")[::-1]\n",
    "    max_strike_bin = format(strike_window[1], f\"0{num_qubits}b\")[::-1]\n",
    "\n",
    "    if is_window:\n",
    "        flip_qubits = [\n",
    "            i\n",
    "            for i in range(len(max_strike_bin))\n",
    "            if max_strike_bin[i] != min_strike_bin[i]\n",
    "        ]\n",
    "    else:\n",
    "        flip_qubits = []\n",
    "\n",
    "    control_qubits = [i for i in range(len(min_strike_bin)) if min_strike_bin[i] == \"1\"]\n",
    "\n",
    "    qc = QuantumCircuit(num_qubits + 1)\n",
    "    if is_window:\n",
    "        qc.x(flip_qubits)\n",
    "    qc.mcx(control_qubits + flip_qubits, num_qubits)\n",
    "    if is_window:\n",
    "        qc.x(flip_qubits)\n",
    "    qc.name = \"f(x)\"\n",
    "    return qc\n",
    "\n",
    "\n",
    "def get_preparation_circuit(\n",
    "    num_qubits: int, problem: EuropeanOptionPricing\n",
    ") -> QuantumCircuit:\n",
    "    \"\"\"\n",
    "    Construct the circuit to encode the target probability, for the MCI function input.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    num_qubits: int\n",
    "        Number of qubits to discretize the probability distribution.\n",
    "    problem: EuropeanOptionPricing\n",
    "        European option pricing problem.\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    QuantumCircuit\n",
    "        State preparation circuit.\n",
    "    \"\"\"\n",
    "\n",
    "    uncertainty_model = problem.get_uncertainty_model(num_qubits=num_qubits)\n",
    "    high, low = problem.get_high_low()\n",
    "    strike_window = problem.get_strike_window()\n",
    "\n",
    "    spot_price = QuantumRegister(num_qubits, name=\"spot_price\")\n",
    "    output_qubit = QuantumRegister(1, name=\"output\")\n",
    "    circuit = QuantumCircuit(spot_price, output_qubit)\n",
    "\n",
    "    circuit.compose(uncertainty_model, qubits=spot_price, inplace=True)\n",
    "    circuit.barrier()\n",
    "    circuit.compose(\n",
    "        oracle(num_qubits=num_qubits, strike_window=strike_window, high=high, low=low),\n",
    "        qubits=spot_price[:] + output_qubit[:],\n",
    "        inplace=True,\n",
    "    )\n",
    "    circuit.barrier()\n",
    "\n",
    "    return circuit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8a8a04b2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "This function performs multiple consecutive runs. Wait time may vary depending on hardware queues.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "max_iteration_count = 20\n",
    "\n",
    "preparation_circuit = get_preparation_circuit(\n",
    "    num_qubits=num_uncertainty_qubits, problem=problem\n",
    ")\n",
    "\n",
    "results_scenario_1 = fo.integrate_monte_carlo(\n",
    "    problem={\"preparation_circuit\": dumps(preparation_circuit.decompose(reps=5))},\n",
    "    integrator_options={\n",
    "        \"max_iteration_count\": max_iteration_count,\n",
    "        \"full_output\": True,\n",
    "    },\n",
    "    credentials=credentials,\n",
    "    backend_name=backend_name,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "id": "f41abf45",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'status_message': 'Job has been submitted to Q-CTRL.',\n",
       " 'action_status': 'STARTED'}"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results_scenario_1.status()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "52f2b8b9",
   "metadata": {},
   "outputs": [],
   "source": [
    "estimates = [\n",
    "    result[\"estimate\"]\n",
    "    for result in results_scenario_1.result()[\"metadata\"][\"iterations\"]\n",
    "]\n",
    "variance = [\n",
    "    result[\"variance\"]\n",
    "    for result in results_scenario_1.result()[\"metadata\"][\"iterations\"]\n",
    "]\n",
    "iteration_count = [\n",
    "    result[\"iteration_count\"]\n",
    "    for result in results_scenario_1.result()[\"metadata\"][\"iterations\"]\n",
    "]\n",
    "evaluation_count = [\n",
    "    result[\"evaluation_count\"]\n",
    "    for result in results_scenario_1.result()[\"metadata\"][\"iterations\"]\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1f925a84",
   "metadata": {},
   "outputs": [],
   "source": [
    "@qctrl_style()\n",
    "def plot_estimation_history(\n",
    "    histories: dict,\n",
    "    figure: Figure | None = None,\n",
    "    known_value: float | None = None,\n",
    "    x_axis_log: bool = False,\n",
    ") -> None:\n",
    "    \"\"\"\n",
    "    Plot the history of estimates and confidence intervals.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    histories : dict[str, Any]\n",
    "        A dictionary where keys are labels for different integrators\n",
    "        and values are tuples of evaluation_counts, estimates, and variance.\n",
    "    figure : Figure or None, optional\n",
    "        A matplotlib Figure object for the plot. If None, a new figure is created,\n",
    "        by default None.\n",
    "    known_value : float or None, optional\n",
    "        The known value of the integral, if known. If provided, a horizontal\n",
    "        dashed line will be drawn at this value, by default None.\n",
    "    x_axis_log : bool, optional\n",
    "        If True, the x-axis will be set to a logarithmic scale, by default False.\n",
    "    \"\"\"\n",
    "    figure = create_figure(figure)\n",
    "    axes = figure.subplots(nrows=1, ncols=1)\n",
    "    assert isinstance(axes, Axes)\n",
    "\n",
    "    if known_value is not None:\n",
    "        axes.axhline(\n",
    "            known_value, linestyle=\"dashed\", color=\"black\", alpha=0.2, label=\"Known\"\n",
    "        )\n",
    "\n",
    "    for label, (eval_count, estimate, variance) in histories.items():\n",
    "        std_err = 1.96 * np.sqrt(variance)\n",
    "        axes.fill_between(eval_count, estimate - std_err, estimate + std_err, alpha=0.1)\n",
    "        axes.plot(eval_count, estimate, \"o-\", label=label, markersize=2, linewidth=1)\n",
    "\n",
    "    axes.legend()\n",
    "    if x_axis_log:\n",
    "        axes.set_xscale(\"log\")\n",
    "\n",
    "    axes.set_xlabel(\"Evaluation count\")\n",
    "    axes.set_ylabel(\"Estimate\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "eb0fb6b9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_estimation_history(\n",
    "    histories={\"QMCI\": (evaluation_count, estimates, variance)},\n",
    "    known_value=problem.get_exact_solution_with_discretized_values(\n",
    "        num_uncertainty_qubits\n",
    "    ),\n",
    ")\n",
    "plt.title(\n",
    "    f'Data Qubits: {num_uncertainty_qubits+1} | 2Q gate counts: {preparation_circuit.decompose(reps=5).count_ops()[\"cx\"]} \\nmax iterations: {max_iteration_count} | backend: {backend_name}'\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "212a86cb",
   "metadata": {},
   "source": [
    "### 5.2 Run the function using the high-level domain expert workflow\n",
    "For quantitative analysts, Fire Opal also accepts high-level specification objects directly. \n",
    "The function automatically synthesizes the operator $\\mathcal{A}$ behind the scenes.\n",
    "\n",
    "Fire Opal natively supports constructors for modeling diverse problem settings:\n",
    "\n",
    "**Distribution constructors**:\n",
    "\n",
    "* ```fireopal.make_lognormal_distribution```\n",
    "* ```fireopal.make_normal_distribution```\n",
    "* ```fireopal.make_uniform_distribution```\n",
    "* ```fireopal.make_gci_model_distribution```\n",
    "\n",
    "**Objective function constructors**:\n",
    "\n",
    "* ```fireopal.make_european_call_delta_objective```\n",
    "* ```fireopal.make_european_call_pricing_objective```\n",
    "* ```fireopal.make_fixed_income_pricing_objective```\n",
    "\n",
    "In this demonstration, we build the estimation problem using ```fireopal.make_lognormal_distribution``` to load the distribution and ```fireopal.make_european_call_delta_objective``` for the payoff marking."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "582f5d69",
   "metadata": {},
   "outputs": [],
   "source": [
    "high, low = problem.get_high_low()\n",
    "strike_price = 2.05\n",
    "num_uncertainty_qubits = 3\n",
    "distribution = fo.make_lognormal_distribution(\n",
    "    uncertainty=num_uncertainty_qubits,\n",
    "    mu=problem.mu,\n",
    "    sigma=problem.sigma**2,\n",
    "    bounds=(low, high),\n",
    ")\n",
    "payoff_function = fo.make_european_call_delta_objective(\n",
    "    bounds=(low, high), strike_price=strike_price\n",
    ")\n",
    "\n",
    "\n",
    "def get_exact_solution_delta_objective(\n",
    "    num_qubits: int, problem: EuropeanOptionPricing, strike_price: float\n",
    "):\n",
    "    uncertainty_model = problem.get_uncertainty_model(num_qubits)\n",
    "    return (\n",
    "        np.exp(-problem.interest_rate * problem.maturity_years)\n",
    "        * np.sum(\n",
    "            uncertainty_model.probabilities[uncertainty_model.values > strike_price]\n",
    "        ).item()\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "7af9d190",
   "metadata": {},
   "outputs": [],
   "source": [
    "results_scenario_2 = fo.integrate_monte_carlo(\n",
    "    problem=fo.make_monte_carlo_problem(\n",
    "        objective_function_parameters=payoff_function,\n",
    "        distribution_parameters=distribution,\n",
    "    ),\n",
    "    credentials=credentials,\n",
    "    backend_name=backend_name,\n",
    "    integrator_options={\n",
    "        \"max_iteration_count\": max_iteration_count,\n",
    "        \"full_output\": True,\n",
    "    },\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e5c5030f",
   "metadata": {},
   "outputs": [],
   "source": [
    "estimates = [\n",
    "    result[\"estimate\"]\n",
    "    for result in results_scenario_2.result()[\"metadata\"][\"iterations\"]\n",
    "]\n",
    "variance = [\n",
    "    result[\"variance\"]\n",
    "    for result in results_scenario_2.result()[\"metadata\"][\"iterations\"]\n",
    "]\n",
    "iteration_count = [\n",
    "    result[\"iteration_count\"]\n",
    "    for result in results_scenario_2.result()[\"metadata\"][\"iterations\"]\n",
    "]\n",
    "evaluation_count = [\n",
    "    result[\"evaluation_count\"]\n",
    "    for result in results_scenario_2.result()[\"metadata\"][\"iterations\"]\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "7df43671",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_estimation_history(\n",
    "    histories={\"QMCI\": (evaluation_count, estimates, variance)},\n",
    "    known_value=get_exact_solution_delta_objective(\n",
    "        num_qubits=num_uncertainty_qubits, problem=problem, strike_price=strike_price\n",
    "    ),\n",
    ")\n",
    "plt.title(\n",
    "    f\"Data Qubits: {num_uncertainty_qubits*2} \\nmax iterations: {max_iteration_count} | backend: {backend_name}\"\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "26838623",
   "metadata": {},
   "source": [
    "This notebook demonstrates the application of our quantum Monte Carlo integration solver to financial option pricing.\n",
    "Our hardware-aware algorithm design and error suppression enable estimation of target values at novel problem scales and precision.\n",
    "Fire Opal unlocks the application of quantum Monte Carlo for interesting use cases, and accelerates the advent of quantum-enhanced convergence in practical workflows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "id": "4b730dfa",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "| Package               | Version     |\n",
      "| --------------------- | ----------- |\n",
      "| Python                | 3.11.15     |\n",
      "| matplotlib            | 3.11.1      |\n",
      "| networkx              | 3.6.1       |\n",
      "| numpy                 | 2.4.6       |\n",
      "| qiskit                | 2.4.1.post1 |\n",
      "| qiskit-ibm-runtime    | 0.47.0      |\n",
      "| sympy                 | 1.14.0      |\n",
      "| fire-opal             | 12.1.1rc2   |\n",
      "| qctrl-visualizer      | 10.1.0      |\n",
      "| qctrl-workflow-client | 10.0.1      |\n"
     ]
    }
   ],
   "source": [
    "from fireopal import print_package_versions\n",
    "\n",
    "print_package_versions()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "fo-qmci-solver",
   "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.11.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
