{ "cells": [ { "cell_type": "markdown", "id": "3cf7d67e-254c-4550-8c54-f7729a9a59f1", "metadata": {}, "source": [ "# 04-Finance Tutorial- Pricing European Put Options\n", "### Modified for Quantum Rings toolkit for Qiskit 2.x" ] }, { "cell_type": "code", "execution_count": 1, "id": "cf1d0da1-929b-47dc-bc25-78331e2e2f75", "metadata": {}, "outputs": [], "source": [ "# This tutorial is from:\n", "# https://qiskit-community.github.io/qiskit-finance/tutorials/04_european_put_option_pricing.html\n", "\n", "# Modified for use with Quantum Rings toolkit" ] }, { "cell_type": "code", "execution_count": 2, "id": "82334a02-7f17-46dc-bba0-5ccc62787c05", "metadata": {}, "outputs": [], "source": [ "#\n", "# Setup your account\n", "# You can also save your account locally using the class method QrRuntimeService.save_account(...) and\n", "# invoke the QrRuntimeService class constructor without any arguments.\n", "#\n", "\n", "import os\n", "\n", "my_token = os.environ[\"QR_TOKEN\"]\n", "my_name = os.environ[\"QR_ACCOUNT\"]\n", "\n", "#\n", "# Set the backend of your choice, depending upon the task and your hardware configuration.\n", "# See SDK documentation for additional help.\n", "#\n", "\n", "my_backend = \"scarlet_quantum_rings\"" ] }, { "cell_type": "code", "execution_count": 3, "id": "50038d4a-63bf-45a5-b9d6-bfe64ecd7357", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "%matplotlib inline\n", "import numpy as np\n", "\n", "from qiskit_algorithms import IterativeAmplitudeEstimation, EstimationProblem\n", "from qiskit.circuit.library import LinearAmplitudeFunction\n", "#from qiskit_aer.primitives import Sampler\n", "from qiskit_finance.circuit.library import LogNormalDistribution" ] }, { "cell_type": "code", "execution_count": 4, "id": "e201e0ab-b3a2-4730-a93d-f30e63156ca7", "metadata": {}, "outputs": [], "source": [ "from quantumrings.toolkit.qiskit import QrRuntimeService\n", "from quantumrings.toolkit.qiskit import QrSamplerV2 as Sampler\n", "\n", "qr_services = QrRuntimeService(name = my_name, token = my_token)\n", "qr_backend = qr_services.backend(name = my_backend, precision = \"single\")\n", "\n", "# If using qiskit-ibm-runtime<0.24.0, change `mode=` to `backend=`\n", "sampler = Sampler(backend=qr_backend)" ] }, { "cell_type": "code", "execution_count": 5, "id": "392230c7-1572-403b-99f1-3d940f31510f", "metadata": {}, "outputs": [], "source": [ "# number of qubits to represent the uncertainty\n", "num_uncertainty_qubits = 3\n", "\n", "# parameters for considered random distribution\n", "S = 2.0 # initial spot price\n", "vol = 0.4 # volatility of 40%\n", "r = 0.05 # annual interest rate of 4%\n", "T = 40 / 365 # 40 days to maturity\n", "\n", "# resulting parameters for log-normal distribution\n", "mu = (r - 0.5 * vol**2) * T + np.log(S)\n", "sigma = vol * np.sqrt(T)\n", "mean = np.exp(mu + sigma**2 / 2)\n", "variance = (np.exp(sigma**2) - 1) * np.exp(2 * mu + sigma**2)\n", "stddev = np.sqrt(variance)\n", "\n", "# lowest and highest value considered for the spot price; in between, an equidistant discretization is considered.\n", "low = np.maximum(0, mean - 3 * stddev)\n", "high = mean + 3 * stddev\n", "\n", "# construct A operator for QAE for the payoff function by\n", "# composing the uncertainty model and the objective\n", "uncertainty_model = LogNormalDistribution(\n", " num_uncertainty_qubits, mu=mu, sigma=sigma**2, bounds=(low, high)\n", ")" ] }, { "cell_type": "code", "execution_count": 6, "id": "7bccc2e0-34e9-48f3-8815-fb435128bdd9", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "<>:8: SyntaxWarning: invalid escape sequence '\\$'\n", "<>:9: SyntaxWarning: invalid escape sequence '\\%'\n", "<>:8: SyntaxWarning: invalid escape sequence '\\$'\n", "<>:9: SyntaxWarning: invalid escape sequence '\\%'\n", "C:\\Users\\vkasi\\AppData\\Local\\Temp\\ipykernel_5868\\3596282585.py:8: SyntaxWarning: invalid escape sequence '\\$'\n", " plt.xlabel(\"Spot Price at Maturity $S_T$ (\\$)\", size=15)\n", "C:\\Users\\vkasi\\AppData\\Local\\Temp\\ipykernel_5868\\3596282585.py:9: SyntaxWarning: invalid escape sequence '\\%'\n", " plt.ylabel(\"Probability ($\\%$)\", size=15)\n" ] }, { "data": { "image/png": "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8hZ6v3Da0LkMAxEREVG8BFnOZQowIg8TNse2dAIRERGRv/MpiSi6sgdEREREgeyxlHAgIiIiCjSx6slCDhaS3THKD7Wj8H9v4X4YaUhEREQUCGIVZJ04cUKvzarn5v+JiIiIyIcgKyIiItr/ExEREdH/YU4WERERkQUYZBERERElhMT3uGLiOxEREQWSOCW+ExEREZGFie9ERERE5B5zsoiIiIgswCCLiIiIyAIMsoiIiIgswGl1iIiIiCzAaXWIiIiILMBpdYiIiIgswJwsIiIiIgswyCIiIiJ60qcLvXHt2jW9Tps2rSa7ExEREQWieOnJmj9/vtSqVUtSpkwpGTJk0EuqVKl02bx58+JjF0RERESBE2QZhiFt27aVxo0ba1mHu3fvSpo0afSCv7GsSZMm0qZNG70tERERUaDwKcgaMWKETJo0SbJkySJjx46V69evy9WrV/Vy48YNGTdunK6bPHmy3paIiIgoUPgUZP3444+SPHlyWbdunbz//vuSOnVqxzqcLnzvvfd0XbJkyfS2RERERIHCpyDr+PHjUqNGDa3+7gnW4Ta4LREREVGg8Gl0YcaMGSVJkiQx3i5x4sSaDE9EsZe76yJLtx8aYsjg8iLFei+VsHDrRgSfGFjPsm0TEfldTxYS3v/66y9H2QZ3kJ+F2zRq1MiXXREREREFTpDVv39/nSS6evXqGki5WrVqldSsWVPy5csn33zzjS+7IiIiIvLf04UIplzhdOGOHTs0mEqfPr3kypVLl586dUquXLmif1esWFF7slauXBlfx01ERETkP0HW6tWrPa5DHSwEVWZg5WzTpk2s/k5EREQBJVZBFkcIEhEREVkQZJmnAomIiIjoMcxdSERERETxWCfLzMX67bffdCLof//9V27duuV2nkLkZB09etTX3RERERH5f5D14MEDqVevnpZv8DQBNIIrTg5NREREgcan04VDhw7VsgyvvPKK9mK1atVKg6qwsDA5cOCA9O7dW1KkSCGff/65RERE+Hyw9+7dk169eknBggUladKkkjVrVmnbtq2cPXs2VttZs2aN9OnTRwNEVK3HMefOnTva+7Rp00Zv5+mCybCJiIiI4qUna9q0aVob6/fff9dgKjg42DGNTqFChTQgevHFF/WC/yMgiqv79+9rna7NmzdLlixZpGHDhnLixAmZOHGiLFy4UJejMKo3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ERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREZEFGGQRERERWYBBFhEREVGgB1n37t2TXr16ScGCBSVp0qSSNWtWadu2rZw9ezbW27p27Zp07NhRcuXKJaGhoXrdqVMnuX79utvbt2nTRoKCgjxexo0bFw8tJCIiIn+RSGzi/v37Ur16ddm8ebNkyZJFGjZsKCdOnJCJEyfKwoULdXnevHm92tbly5elUqVKcuTIEb1Po0aNZP/+/TJixAj5888/ZdOmTZI+fXq3961du7Zkzpw5yvJChQr53EYiIiLyH7YJsvr376+BFIKjZcuWScqUKXX5sGHD5NNPP9UerdWrV3u1LfRYIcBq0qSJTJs2TRIl+r+H4eOPP5aRI0dK586dZdKkSW7v27VrV6lWrVo8toyIiIj8kS1OFz548EBGjRqlf48ePdoRYAECohIlSsiaNWtkx44dMW7r/PnzMnXqVEmSJImMGTPGEWDBt99+KxkzZpQpU6bIf//9Z1FriIiIKBDYIsjasGGD3LhxQ/LlyyelS5eOsr5Zs2Z6vWDBghi3tWTJEomIiJAqVapIpkyZIq1Dblb9+vUlPDxcFi9eHI8tICIiokBji9OFu3fv1usyZcq4XW8u37NnT7xsa8KECR63NXv2bJk1a5YGYnny5NGgrHDhwl63hYiIiAKDLYKsU6dO6XX27NndrjeXnzx50vJtIWfL2RdffCHt2rXTpHnnU4/uhIWF6cV08+ZNvX748KFe7MQ8Xrsdtx3bGBpiWLv9YCPStVWiexzZRv9oYyC1MxA+e6z00OZt9Pa4bRFk3b59W6+TJ0/udn2KFCn0+tatW5ZtC6cpkXSPEY4IxC5cuKAjEXv06KG5XcjxGj58eLT7HjBggPTp0yfKciTyezqehG758uXi7550GweXfzz76VcuwtLtR3cKnm30jzYGUjsD4bPncVhu0zbevXvXf4KshAA1tZzhVOGHH34oVatW1VOMSMxHEn6OHDk8bqNbt256G+eeLNy+Vq1akjp1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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot probability distribution\n", "x = uncertainty_model.values\n", "y = uncertainty_model.probabilities\n", "plt.bar(x, y, width=0.2)\n", "plt.xticks(x, size=15, rotation=90)\n", "plt.yticks(size=15)\n", "plt.grid()\n", "plt.xlabel(\"Spot Price at Maturity $S_T$ (\\$)\", size=15)\n", "plt.ylabel(\"Probability ($\\%$)\", size=15)\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "e1384fe4-0be6-4762-83f4-41c18f72a616", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\vkasi\\AppData\\Local\\Temp\\ipykernel_5868\\2114397473.py:13: DeprecationWarning: The class ``qiskit.circuit.library.arithmetic.linear_amplitude_function.LinearAmplitudeFunction`` is deprecated as of Qiskit 2.2. It will be removed in Qiskit 3.0. Use the class qiskit.circuit.library.LinearAmplitudeFunctionGate instead.\n", " european_put_objective = LinearAmplitudeFunction(\n" ] } ], "source": [ "# set the strike price (should be within the low and the high value of the uncertainty)\n", "strike_price = 2.126\n", "\n", "# set the approximation scaling for the payoff function\n", "rescaling_factor = 0.25\n", "\n", "# setup piecewise linear objective fcuntion\n", "breakpoints = [low, strike_price]\n", "slopes = [-1, 0]\n", "offsets = [strike_price - low, 0]\n", "f_min = 0\n", "f_max = strike_price - low\n", "european_put_objective = LinearAmplitudeFunction(\n", " num_uncertainty_qubits,\n", " slopes,\n", " offsets,\n", " domain=(low, high),\n", " image=(f_min, f_max),\n", " breakpoints=breakpoints,\n", " rescaling_factor=rescaling_factor,\n", ")\n", "\n", "# construct A operator for QAE for the payoff function by\n", "# composing the uncertainty model and the objective\n", "european_put = european_put_objective.compose(uncertainty_model, front=True)" ] }, { "cell_type": "code", "execution_count": 8, "id": "ddd2767d-4210-4b3e-912a-314718c47f22", "metadata": {}, "outputs": [ { "data": { "image/png": "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iJf4gqSOHTuai1yml14Cli7l+izWCBJvp0L9JxERkXAQtiNIEmbsddquugpYtw54/HEtaisiIq6lAEmSLn9+K0hiPSnmJX3wgdMtEhERSRUKkCR57rgDePll63aXLixK5XSLREREgk4BkiRf9+4sQsUVfK18JBXZFBERl1GAJMnHU2wffwwULw5s22aWJMHFi063SkREJGgUIMnlueIKq4gk16f74gtgyBCnWyQiIhI0CpAkZYvacjkSYgXz+fOdbpGIiEhQKECSlOGCtm3bWqfYWrYE/CqZi4iIRCIFSJIyadIAb78NXH89sG8fcN99wPnzTrdKREQkRRQgScqxovZnnwHZslmn2Xr3drpFIiIiKaIASYKjTBngww+t26++aiVui4iIRCgFSBI8zZsDTz1l3WZe0tatTrdIRETksihAkuB67TWgcmXgyBGriOTp0063SEREJNkUIElwpU8PTJkC5M4NrFr134iSiIhIBFGAJMFXqBAwYYI1w+2996yFbUVERCKIAiRJHXXqAP36WbcfewxYt87pFomIiCSZAiRJPZzuX68ecOoU0KwZcPSo0y0SERFJEgVIkrqL2o4fDxQuDGzaBDz4IODzOd0qERGRRClAktTFZO2pU4F06azFbe2120RERMKYAiRJfbfeCgwbZt1+9llg8WKnWyQiIpIgBUgSGp06WYvZcp22Fi2A/fudbpGIiEi8FCBJaHDK//vvA2XLAnv2AK1bAxcuON0qERGRgBQgSehwMVvmIXFx27lzgQEDnG6RiIhIQAqQJLSuu84qHkkDBwLffut0i0REROJQgCShd//9wOOPW1P+eXvnTqdbJCIicgkFSOKM4cOBihWBgweB5s2Bs2edbpGIiEgMBUjijAwZrPpIV1wBLF8OPPOM0y0SERGJoQBJnFOsGDBunHV71CizwG2a+fNRcMECc61ZbiIi4hQFSOKsBg2Anj2t223aILpOHVQcNsxcmwBq+nSnWygiIh6kAEmcV768de2/ThvrJd17r4IkEREJOQVI4iyeRnv66cD32QFT16463SYiIiGlAEmctXAhsHt3/PczSNq1y3qciIhIiChAEmft3Rvcx4mIiASBAiRxVv78wX2ciIhIEChAEmdVqwYUKmQtZhufwoWtx4mIiISIAiRxVlQUMHKkdTu+IInBER8nIiISIgqQxHlNmwLTpgEF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b/ny5b5MmTKZbfyDufLKK2Meww8INxwH9qVEiRK+Pn36+DZu3OjzIi8HCfzd33LLLZds45cC9o9/+19//XWcLxMNGjQw94f6AyK1sC8dOnSIs/2OO+4w91199dW+0aNH+2bPnu2bPHmyr3nz5mY7A2c3/M3Y73mXc2FQEem+/PJLcwz45fehhx7yPf744+a9nu/9H3zwgbnvySef9P3888++bdu2mc9M/m2w/wsWLAhZOxUghdiPP/4YMyrCCHru3Lm+VatW+aZPnx7zJvjyyy/7zpw545s/f77v3nvvNdsqVqxovl27wdNPP2361LRpU9N3Xpo0aWL+QP73v//5cuXKZY7HhQsXzOM3b95stvO48ZhFuthBIS8cLRs1apRv//79Pq/wcpDAD4GWLVtesq13797mtRDfCMnJkyfNl4pSpUr53Bog8f2O26+99lrf8ePH4zynX79+5v4nnnjCF+nYDwY6xYoVS/Bif5H23x7p7rrrLtMvfiG2rV271hwTjhR27tw5znMYLPO43X///SFrpwKkELvzzjvNyMiSJUsC3s+omS+SNWvWxGzjSANfTCNGjPC5Ab8dFihQwASBttOnT/vy589v+slhVn+HDx/25c6d23f99df7Ih3/yG+//XbzIclvxHawlD59ejO0PHXqVHM83MzLQQK/CPD3HNujjz5q+n706NF4n8cvFHzvcGuA1LdvX3MMOLoQCL8g8vdfpkwZX6TjFz4eg/r16/u2bt0a7+M4osZj4jZ58+Y1pw/9VatWzfT3t99+C/i8a665xny5ChVlvoYYE09vu+02cwmkW7duuHjxIqZNmxazrU+fPsiXLx8+/fRTuMGOHTtQqVIlk5hn44rNt956q7l95513xnlOjhw5zDHbtm0b3ODqq6/GpEmTzAyVDz/8EHfccYdJxJw1axZatmxpft8PP/ww5s+fDzfKlCkTTp06dck2JmNSrVq14n0OXyO7du1CJLvuuuuwePFinDlzJmabnazN10N8mLDMvwO3svvO94ZAoqOjcdNNN2H37t2IdHPnzsWYMWPw888/4/rrr8fgwYNNYrJXHDp0CMWKFYuzvUiRIua6VKlSAZ9XpkwZ83cQKgqQQuzkyZMJvsllz57dXHP2ji0qKgqVK1fGhg0b4AYpmZHG4NFNsmXLhg4dOuD77783MxlfeeUV8wF65MgREzgx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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# plot exact payoff function (evaluated on the grid of the uncertainty model)\n", "x = uncertainty_model.values\n", "y = np.maximum(0, strike_price - x)\n", "plt.plot(x, y, \"ro-\")\n", "plt.grid()\n", "plt.title(\"Payoff Function\", size=15)\n", "plt.xlabel(\"Spot Price\", size=15)\n", "plt.ylabel(\"Payoff\", size=15)\n", "plt.xticks(x, size=15, rotation=90)\n", "plt.yticks(size=15)\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 9, "id": "acc3167d-ed57-43e7-9ecf-47982de6adf9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "exact expected value:\t0.1709\n", "exact delta value: \t-0.8193\n" ] } ], "source": [ "# evaluate exact expected value (normalized to the [0, 1] interval)\n", "exact_value = np.dot(uncertainty_model.probabilities, y)\n", "exact_delta = -sum(uncertainty_model.probabilities[x <= strike_price])\n", "print(\"exact expected value:\\t%.4f\" % exact_value)\n", "print(\"exact delta value: \\t%.4f\" % exact_delta)" ] }, { "cell_type": "code", "execution_count": 10, "id": "103a5192-406e-4c64-b96d-2ac2952e887c", "metadata": {}, "outputs": [], "source": [ "# set target precision and confidence level\n", "epsilon = 0.01\n", "alpha = 0.05\n", "\n", "problem = EstimationProblem(\n", " state_preparation=european_put,\n", " objective_qubits=[num_uncertainty_qubits],\n", " post_processing=european_put_objective.post_processing,\n", ")\n", "# construct amplitude estimation\n", "ae = IterativeAmplitudeEstimation(\n", " epsilon_target=epsilon, alpha=alpha, sampler=Sampler(run_options={\"shots\": 100, \"seed\": 75})\n", ")" ] }, { "cell_type": "code", "execution_count": 11, "id": "fb4ead1d-b945-4e5e-abec-c398ef917171", "metadata": {}, "outputs": [], "source": [ "result = ae.estimate(problem)" ] }, { "cell_type": "code", "execution_count": 12, "id": "b307b340-b138-40d8-a5fb-dc68b09cd2dc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact value: \t0.1709\n", "Estimated value: \t0.1768\n", "Confidence interval:\t[0.1559, 0.1978]\n" ] } ], "source": [ "conf_int = np.array(result.confidence_interval_processed)\n", "print(\"Exact value: \\t%.4f\" % exact_value)\n", "print(\"Estimated value: \\t%.4f\" % (result.estimation_processed))\n", "print(\"Confidence interval:\\t[%.4f, %.4f]\" % tuple(conf_int))" ] }, { "cell_type": "code", "execution_count": 13, "id": "de321e4a-e5f5-4b70-af1b-4bbaef13c8b8", "metadata": {}, "outputs": [], "source": [ "# Example Output:\n", "# Exact value: \t0.1709\n", "# Estimated value: \t0.1861\n", "# Confidence interval:\t[0.1720, 0.2002]" ] }, { "cell_type": "code", "execution_count": 14, "id": "b3363232-df54-4f0a-be03-b9fd2ade085a", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "C:\\Users\\vkasi\\AppData\\Local\\Temp\\ipykernel_5868\\2152573025.py:8: DeprecationWarning: The class ``qiskit.circuit.library.arithmetic.linear_amplitude_function.LinearAmplitudeFunction`` is deprecated as of Qiskit 2.2. It will be removed in Qiskit 3.0. Use the class qiskit.circuit.library.LinearAmplitudeFunctionGate instead.\n", " european_put_delta_objective = LinearAmplitudeFunction(\n" ] } ], "source": [ "# setup piecewise linear objective fcuntion\n", "breakpoints = [low, strike_price]\n", "slopes = [0, 0]\n", "offsets = [1, 0]\n", "f_min = 0\n", "f_max = 1\n", "\n", "european_put_delta_objective = LinearAmplitudeFunction(\n", " num_uncertainty_qubits,\n", " slopes,\n", " offsets,\n", " domain=(low, high),\n", " image=(f_min, f_max),\n", " breakpoints=breakpoints,\n", ")\n", "\n", "# construct circuit for payoff function\n", "european_put_delta = european_put_delta_objective.compose(uncertainty_model, front=True)\n", "\n", "# set target precision and confidence level\n", "epsilon = 0.01\n", "alpha = 0.05\n", "\n", "problem = EstimationProblem(\n", " state_preparation=european_put_delta, objective_qubits=[num_uncertainty_qubits]\n", ")\n", "# construct amplitude estimation\n", "ae_delta = IterativeAmplitudeEstimation(\n", " epsilon_target=epsilon, alpha=alpha, sampler=Sampler(run_options={\"shots\": 100, \"seed\": 75})\n", ")" ] }, { "cell_type": "code", "execution_count": 15, "id": "90261e30-cb5e-4327-b788-d7233c7d4aa5", "metadata": {}, "outputs": [], "source": [ "result_delta = ae_delta.estimate(problem)" ] }, { "cell_type": "code", "execution_count": 16, "id": "8e74d1dc-c5d4-45b5-9111-7b0e87d55698", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Exact delta: \t-0.8193\n", "Estimated value: \t-0.8228\n", "Confidence interval: \t[-0.8291, -0.8166]\n" ] } ], "source": [ "conf_int = -np.array(result_delta.confidence_interval)[::-1]\n", "print(\"Exact delta: \\t%.4f\" % exact_delta)\n", "print(\"Estimated value: \\t%.4f\" % -result_delta.estimation)\n", "print(\"Confidence interval: \\t[%.4f, %.4f]\" % tuple(conf_int))" ] }, { "cell_type": "code", "execution_count": 17, "id": "71b48df8-b802-4447-93d2-ff0aa372ee6e", "metadata": {}, "outputs": [], "source": [ "# Example Output:\n", "# Exact delta: \t-0.8193\n", "# Estimated value: \t-0.8200\n", "# Confidence interval: \t[-0.8239, -0.8160]" ] }, { "cell_type": "code", "execution_count": 18, "id": "42606bc3-71a6-46ce-b7db-aeef4d472e74", "metadata": {}, "outputs": [ { "data": { "text/html": [ "

Version Information

SoftwareVersion
qiskit2.2.1
qiskit_ibm_runtime0.40.1
qiskit_finance0.4.1
qiskit_aer0.17.1
qiskit_algorithms0.4.0
System information
Python version3.12.9
OSWindows
Thu Oct 16 11:16:48 2025 Mountain Daylight Time
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

Quantum Rings Version Information

SoftwareVersion
QuantumRingsLib0.11.0
quantumrings-toolkit-qiskit0.1.10
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "

This code is a part of a Qiskit project

© Copyright IBM 2017, 2025.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

Modifications Copyright Quantum Rings Inc, 2025
Modified from the originals
Added support for Quantum Rings QrEstimatorV2 class.

" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%quantumrings_version_table\n", "%qiskit_copyright" ] }, { "cell_type": "code", "execution_count": null, "id": "2deffe75-1c5d-4cc7-b89d-bd9d02ffddf3", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.12.9" } }, "nbformat": 4, "nbformat_minor": 5 }