diff --git a/docs/api/functions/_toc.json b/docs/api/functions/_toc.json
index 0f60f4f4f1b..a22b3e7d9e7 100644
--- a/docs/api/functions/_toc.json
+++ b/docs/api/functions/_toc.json
@@ -9,11 +9,6 @@
"title": "Circuit functions",
"untranslatable": true,
"children": [
- {
- "title": "IBM Circuit function",
- "url": "/docs/api/functions/ibm-circuit-function",
- "untranslatable": true
- },
{
"title": "Algorithmiq Tensor-network error mitigation",
"url": "/docs/api/functions/algorithmiq-tem",
diff --git a/docs/api/functions/ibm-circuit-function.mdx b/docs/api/functions/ibm-circuit-function.mdx
deleted file mode 100644
index 92befda8829..00000000000
--- a/docs/api/functions/ibm-circuit-function.mdx
+++ /dev/null
@@ -1,201 +0,0 @@
----
-title: IBM Circuit function API reference
-description: API reference for the IBM Circuit function, one of the Qiskit Functions
----
-# IBM Circuit function API reference
-
-
-
-
-
-## Inputs
-
-See the following list for all input parameters the IBM Circuit function accepts. The subsequent [Options](#options) section goes into more details about the available `options`.
-
-### `backend_name`
-
-Name of the backend to make the query.
-- Required: Yes
-- Example: `ibm_fez`
-
-
-### `pubs`
-
-An iterable of abstract PUB-like (primitive unified bloc) objects, such as tuples `(circuit, observables)` or `(circuit, observables, parameter_values)`. See [Overview of PUBs](/docs/guides/primitive-input-output#overview-of-pubs) for more information. The circuits can be abstract (non-ISA).
-- Required: Yes
-- Example: `(circuit, observables, parameter_values)`
-
-
-### `instance`
-
-The cloud resource name of the instance to use in that format.
-- Required: No
-- Example: `CRN`
-
-
-### Options
-
-
-Input options. See the [Options list](#options-list) for more details.
-- Required:No
-- Example: `{"optimization_level": 3}`
-
-#### Structure
-
-Similar to Qiskit Runtime primitives, options for IBM Circuit function can be specified as a nested dictionary. Commonly used options, such as ``optimization_level`` and ``mitigation_level``, are at the first level. Other, more advanced options are grouped into different categories, such as ``resilience``.
-
-#### Defaults
-
-If you do not specify a value for an option, the default value specified by the service is used.
-
-#### Mitigation level
-
-IBM Circuit function also supports `mitigation_level`. The mitigation level specifies how much error suppression and mitigation to apply to the job. Higher levels generate more accurate results, at the expense of longer processing times. The degree of error reduction depends on the method applied. The mitigation level abstracts the detailed choice of error mitigation and suppression methods to allow users to reason about the cost/accuracy trade-off appropriate to their application. The following table shows the corresponding methods for each level.
-
-
-While the names are similar, `mitigation_level` applies different techniques than the ones used by Estimator's `resilience_level`.
-
-
-Similar to ``resilience_level`` in Qiskit Runtime Estimator, ``mitigation_level`` specifies a base set of curated options. Any options you manually specify in addition to the mitigation level are applied on top of the base set of options defined by the mitigation level. Therefore, in principle, you could set the mitigation level to 1, but then turn off measurement mitigation, although this is not advised.
-
-| **Mitigation Level** | **Technique** |
-|---|---|
-| 1 [Default] | Dynamical decoupling + measurement twirling + TREX |
-| 2 | Level 1 + gate twirling + ZNE via gate folding |
-| 3 | Level 1 + gate twirling + ZNE via PEA |
-
-
-
-While the names are similar, `mitigation_level` applies different techniques than the ones used by Estimator's `resilience_level`.
-
-
-
-#### Options list
-
-In addition to `mitigation_level`, the IBM Circuit function also provides a select number of advanced options that allow you to fine-tune the cost/accuracy trade-off.
-
-##### `default_precision`
-
-The default precision to use for any PUB or `run()` call that does not specify one. Each input PUB can specify its own precision. If the `run()` method is given a precision, then that value is used for all PUBs in the `run()` call that do not specify their own.
-- Choices: `float > 0`
-
-
-##### `max_execution_time`
-
-Maximum execution time in seconds, which is based on QPU usage (not wall clock time). QPU usage is the amount of time that the QPU is dedicated to processing your job. If a job exceeds this time limit, it is forcibly canceled.
-- Choices: Integer number of seconds in the range `[1, 10800]`
-
-
-##### `mitigation_level`
-
-How much error suppression and mitigation to apply. Refer to the [Mitigation level](#mitigation-level) section for more information about the methods used at each level.
-- Choices: 1 / 2 / 3
-
-
-##### `optimization_level`
-
-How much optimization to perform on the circuits. [Higher levels](/docs/guides/set-optimization) generate more optimized circuits, at the expense of longer transpilation time.
-- Choices: 1 / 2 / 3
-
-
-##### `dynamical_decoupling`
-
- `enable`
-
- Whether to enable dynamical decoupling. Refer to [Error suppression and mitigation techniques](/docs/guides/error-mitigation-and-suppression-techniques#dynamical-decoupling) for the explanation of the method.
- - Choices: True/False
-
- `sequence_type`
-
- Which dynamical decoupling sequence to use.
- - `XX`: use the sequence `tau/2 - (+X) - tau - (+X) - tau/2`
- - `XpXm`: use the sequence `tau/2 - (+X) - tau - (-X) - tau/2`
- - `XY4`: use the sequence `tau/2 - (+X) - tau - (+Y) - tau (-X) - tau - (-Y) - tau/2`
- - Choices: 'XX'/'XpXm'/'XY4'
-
-
-
-
-##### `twirling`
-
- `enable_gates`
-
- Whether to apply two-qubit Clifford gate twirling.
- - Choices: True/False
-
- `enable_measure`
-
- Whether to enable twirling of measurements.
- - Choices: True/False
-
-
-
-##### `resilience`
-
- `measure_mitigation`
-
- Whether to enable TREX measurement error mitigation method. Refer to [Error suppression and mitigation techniques](/docs/guides/error-mitigation-and-suppression-techniques#twirled-readout-error-extinction-trex) for the explanation of the method.
- - Choices: True/False
-
- `zne`
-
- `amplifier`
-
- Which technique to use for amplifying noise. One of:
- - `gate_folding` (default) uses two-qubit gate folding to amplify noise. If the noise factor requires amplifying only a subset of the gates, then these gates are chosen randomly.
- - `gate_folding_front` uses two-qubit gate folding to amplify noise. If the noise factor requires amplifying only a subset of the gates, then these gates are selected from the front of the topologically ordered DAG circuit.
- - `gate_folding_back` uses two-qubit gate folding to amplify noise. If the noise factor requires amplifying only a subset of the gates, then these gates are selected from the back of the topologically ordered DAG circuit.
- - `pea` uses a technique called Probabilistic error amplification (PEA) to amplify noise. Refer to [Error suppression and mitigation techniques](/docs/guides/error-mitigation-and-suppression-techniques#probabilistic-error-amplification-pea) for the explanation of the method.
- - Choices: `gate_folding` / `gate_folding_front` / `gate_folding_back` / `pea`
-
- `noise_factors`
-
- Noise factors to use for noise amplification.
- - Choices: list of floats; each float >= 1
-
- `extrapolator`
-
- Noise factors at which to evaluate the fit extrapolation models. This option does not affect execution or model fitting in any way; it only determines the points at which the `extrapolator` objects are evaluated to be returned in the data fields called `evs_extrapolated` and `stds_extrapolated`.
- - Choices: One or more of `exponential`,`linear`, `double_exponential`,`polynomial_degree_(1 <= k <= 7)`
-
-
- `pec_mitigation`
-
- Whether to turn on Probabilistic Error Cancellation error mitigation method. Refer to [Error suppression and mitigation techniques](/docs/guides/error-mitigation-and-suppression-techniques#probabilistic-error-cancellation-pec) for the explanation of the method.
- - Choices: True/False
-
- `pec`
-
- `max_overhead`
-
- The maximum circuit sampling overhead allowed, or `None` for no maximum.
- - Choices: `None`/ integer > 1
-
-
- `zne_mitigation`
-
- Whether to turn on Zero Noise Extrapolation error mitigation method. Refer to [Error suppression and mitigation techniques](/docs/guides/error-mitigation-and-suppression-techniques#zero-noise-extrapolation-zne) for the explanation of the method.
- - Choices: True/False
-
-
-
-
-## Outputs
-
-The output of a Circuit function is a [PrimitiveResult](/docs/api/qiskit/qiskit.primitives.PrimitiveResult), which contains two fields:
-
-- One or more [PubResult](/docs/api/qiskit/qiskit.primitives.PubResult) objects. These can be indexed directly from the `PrimitiveResult`.
-
-- Job-level metadata.
-
-Each `PubResult` contains a `data` and a `metadata` field.
-
-- The `data` field contains at least an array of expectation values (`PubResult.data.evs`) and an array of standard errors (`PubResult.data.stds`). It can also contain more data, depending on the options used.
-
-- The `metadata` field contains PUB-level metadata (`PubResult.metadata`).
\ No newline at end of file
diff --git a/docs/guides/_toc.json b/docs/guides/_toc.json
index 1451aae40dc..82aea357e2c 100644
--- a/docs/guides/_toc.json
+++ b/docs/guides/_toc.json
@@ -767,10 +767,6 @@
{
"title": "Circuit functions",
"children": [
- {
- "title": "IBM Circuit function",
- "url": "/docs/guides/ibm-circuit-function"
- },
{
"title": "Algorithmiq Tensor-network error mitigation",
"url": "/docs/guides/algorithmiq-tem"
diff --git a/docs/guides/functions.ipynb b/docs/guides/functions.ipynb
index 3ea266afab9..d273f123aa0 100644
--- a/docs/guides/functions.ipynb
+++ b/docs/guides/functions.ipynb
@@ -520,7 +520,7 @@
"\n",
"\n",
"\n",
- "- [Explore circuit functions](/docs/guides/ibm-circuit-function) to build new algorithms and applications, without needing to manage transpilation or error handling.\n",
+ "- [Explore circuit functions](/docs/guides/algorithmiq-tem) to build new algorithms and applications, without needing to manage transpilation or error handling.\n",
"- [Explore application functions](/docs/guides/q-ctrl-optimization-solver) to solve domain-specific tasks, with classical inputs and outputs.\n",
"- See the [API reference documentation](/docs/api/functions/index) for Qiskit Functions.\n",
"- For hands-on experience, try out some [tutorials](/docs/tutorials/index#leverage-qiskit-capabilities) that demonstrate Qiskit Functions.\n",
diff --git a/docs/guides/ibm-circuit-function.ipynb b/docs/guides/ibm-circuit-function.ipynb
deleted file mode 100644
index 80563cb011f..00000000000
--- a/docs/guides/ibm-circuit-function.ipynb
+++ /dev/null
@@ -1,364 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "dde95705",
- "metadata": {},
- "source": [
- "---\n",
- "title: IBM Circuit function\n",
- "description: Explore how to use the IBM Circuit function, with AI-driven transpilation and advanced error mitigation (TREX, ZNE, PEA)\n",
- "---\n",
- "\n",
- "\n",
- "# IBM Circuit function\n",
- "\n",
- "*See the [API reference](/docs/api/functions/ibm-circuit-function)*"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "904dadeb",
- "metadata": {
- "tags": [
- "version-info"
- ]
- },
- "source": []
- },
- {
- "cell_type": "markdown",
- "id": "64b16815",
- "metadata": {},
- "source": [
- "\n",
- "* Qiskit Functions are an experimental feature available only to IBM Quantum® Premium Plan, Flex Plan, and On-Prem (via IBM Quantum Platform API) Plan users. They are in preview release status and subject to change.\n",
- "\n",
- "\n",
- "## Overview\n",
- "\n",
- "The IBM® Circuit function takes [abstract PUBs](/docs/guides/primitive-input-output#pubs) as inputs, and returns mitigated expectation values as outputs. This circuit function includes an automated and customized pipeline to enable researchers to focus on algorithm and application discovery."
- ]
- },
- {
- "cell_type": "markdown",
- "id": "5f761442",
- "metadata": {},
- "source": [
- "## Description\n",
- "\n",
- "After submitting your PUB, your abstract circuits and observables are automatically transpiled, executed on hardware, and post-processed to return mitigated expectation values. To do so, this combines the following tools:\n",
- "\n",
- "- [AI-powered transpiler](/docs/guides/ai-transpiler-passes), including auto-selection of AI-driven and heuristic transpilation passes to translate your abstract circuits to hardware-optimized ISA circuits\n",
- "- [Error suppression and mitigation required for utility-scale computation](/docs/guides/error-mitigation-and-suppression-techniques), including measurement and gate twirling, dynamical decoupling, Twirled Readout Error eXtinction (TREX), Zero-Noise Extrapolation (ZNE), and Probabilistic Error Amplification (PEA)\n",
- "- [Qiskit Runtime Estimator](/docs/guides/get-started-with-estimator), to execute ISA PUBs on hardware and return mitigated expectation values\n",
- "\n",
- ""
- ]
- },
- {
- "cell_type": "markdown",
- "id": "73390a19",
- "metadata": {},
- "source": [
- "## Get started"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "f46c531c",
- "metadata": {},
- "source": [
- "Authenticate using your [API key](http://quantum.cloud.ibm.com/) and select the Qiskit Function as follows. (This snippet assumes you've already [saved your account](/docs/guides/functions#install-qiskit-functions-catalog-client) to your local environment.)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 1,
- "id": "95a715d2",
- "metadata": {},
- "outputs": [],
- "source": [
- "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
- "\n",
- "catalog = QiskitFunctionsCatalog(channel=\"ibm_quantum_platform\")\n",
- "\n",
- "function = catalog.load(\"ibm/circuit-function\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "e8837f5f",
- "metadata": {},
- "source": [
- "## Examples\n",
- "\n",
- "To get started, try this basic example:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "d56e1440",
- "metadata": {},
- "outputs": [],
- "source": [
- "from qiskit.circuit.random import random_circuit\n",
- "from qiskit_ibm_runtime import QiskitRuntimeService\n",
- "\n",
- "# You can skip this step if you have a target backend,\n",
- "# e.g. backend_name = \"ibm_brisbane\"\n",
- "# You'll need to specify the credentials when initializing QiskitRuntimeService,\n",
- "# if they were not previously saved.\n",
- "service = QiskitRuntimeService()\n",
- "backend = service.least_busy(operational=True, simulator=False)\n",
- "\n",
- "circuit = random_circuit(num_qubits=2, depth=2, seed=42)\n",
- "observable = \"Z\" * circuit.num_qubits\n",
- "pubs = [(circuit, observable)]\n",
- "\n",
- "job = function.run(\n",
- " # Use `backend_name=backend_name` if you didn't initialize a backend object\n",
- " backend_name=backend.name,\n",
- " pubs=pubs,\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "03998691",
- "metadata": {},
- "source": [
- "Check your Qiskit Function workload's [status](/docs/guides/functions#check-job-status) or return [results](/docs/guides/functions#retrieve-results) as follows:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "856fe992",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "QUEUED\n"
- ]
- }
- ],
- "source": [
- "print(job.status())\n",
- "result = job.result()"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "eda36356",
- "metadata": {},
- "source": [
- "The results have the same format as an [Estimator result](/docs/guides/estimator-input-output):"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "765f3207",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "The result of the submitted job had 1 PUB\n",
- "\n",
- "The associated PubResult of this job has the following DataBins:\n",
- " DataBin(evs=np.ndarray(), stds=np.ndarray(), ensemble_standard_error=np.ndarray())\n",
- "\n",
- "And this DataBin has attributes: dict_keys(['evs', 'stds', 'ensemble_standard_error'])\n",
- "The expectation values measured from this PUB are: \n",
- "1.02116704805492\n"
- ]
- }
- ],
- "source": [
- "print(f\"The result of the submitted job had {len(result)} PUB\\n\")\n",
- "print(\n",
- " f\"The associated PubResult of this job has the following DataBins:\\n \"\n",
- " f\"{result[0].data}\\n\"\n",
- ")\n",
- "print(f\"And this DataBin has attributes: {result[0].data.keys()}\")\n",
- "print(\n",
- " f\"The expectation values measured from this PUB are: \\n{result[0].data.evs}\"\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "a1072bd6",
- "metadata": {},
- "source": [
- "### Mitigation level examples\n",
- "\n",
- "The following example demonstrates setting the mitigation level:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "13443be4",
- "metadata": {},
- "outputs": [],
- "source": [
- "options = {\"mitigation_level\": 2}\n",
- "\n",
- "job = function.run(backend_name=backend.name, pubs=pubs, options=options)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "c823d7b3",
- "metadata": {},
- "source": [
- "In the following example, setting the mitigation level to 1 initially turns off ZNE mitigation, but setting `zne_mitigation` to `True` overrides the relevant setup from `mitigation_level`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "id": "b2632bd9",
- "metadata": {},
- "outputs": [],
- "source": [
- "options = {\"mitigation_level\": 1, \"resilience\": {\"zne_mitigation\": True}}"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "75d7cbba",
- "metadata": {},
- "source": [
- "### Output example\n",
- "\n",
- "The following code snippet describes the `PrimitiveResult` (and associated `PubResult`) format."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "6e3f86aa",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "The result of the submitted job had 1 PUB\n",
- "The expectation values measured from this PUB are: \n",
- "1.02116704805492\n",
- "And the associated metadata is: \n",
- "{'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32}\n"
- ]
- }
- ],
- "source": [
- "print(f\"The result of the submitted job had {len(result)} PUB\")\n",
- "print(\n",
- " f\"The expectation values measured from this PUB are: \\n{result[0].data.evs}\"\n",
- ")\n",
- "print(f\"And the associated metadata is: \\n{result[0].metadata}\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "02295f5d",
- "metadata": {},
- "source": [
- "### Fetch error messages\n",
- "\n",
- "If your workload status is `ERROR`, use `job.result()` to fetch the error message to help debug as follows:"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "4070e592",
- "metadata": {
- "tags": [
- "raises-exception"
- ]
- },
- "outputs": [
- {
- "ename": "QiskitServerlessException",
- "evalue": "\"Traceback (most recent call last):\\n File \\\"/runner/runner.py\\\", line 10, in run\\n func = CircuitFunction(**arguments)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/runner/circuit_function/circuit_function.py\\\", line 87, in __init__\\n self._backend = self._service.backend(\\n ^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/usr/local/lib/python3.11/site-packages/qiskit_ibm_runtime/qiskit_runtime_service.py\\\", line 754, in backend\\n backends = self.backends(name, instance=instance, use_fractional_gates=use_fractional_gates)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/usr/local/lib/python3.11/site-packages/qiskit_ibm_runtime/qiskit_runtime_service.py\\\", line 497, in backends\\n raise QiskitBackendNotFoundError(\\\"No backend matches the criteria.\\\")\\nqiskit.providers.exceptions.QiskitBackendNotFoundError: 'No backend matches the criteria.'\\n\"",
- "output_type": "error",
- "traceback": [
- "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
- "\u001b[0;31mQiskitServerlessException\u001b[0m Traceback (most recent call last)",
- "Cell \u001b[0;32mIn[8], line 5\u001b[0m\n\u001b[1;32m 1\u001b[0m job \u001b[38;5;241m=\u001b[39m function\u001b[38;5;241m.\u001b[39mrun(\n\u001b[1;32m 2\u001b[0m backend_name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbad_backend_name\u001b[39m\u001b[38;5;124m\"\u001b[39m, pubs\u001b[38;5;241m=\u001b[39mpubs, options\u001b[38;5;241m=\u001b[39moptions\n\u001b[1;32m 3\u001b[0m )\n\u001b[0;32m----> 5\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[43mjob\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mresult\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m)\n",
- "File \u001b[0;32m~/work/documentation/documentation/.tox/py311/lib/python3.11/site-packages/qiskit_serverless/core/job.py:189\u001b[0m, in \u001b[0;36mJob.result\u001b[0;34m(self, wait, cadence, verbose, maxwait)\u001b[0m\n\u001b[1;32m 186\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_job_service\u001b[38;5;241m.\u001b[39mresult(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mjob_id)\n\u001b[1;32m 188\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstatus() \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mERROR\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m--> 189\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m QiskitServerlessException(results)\n\u001b[1;32m 191\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(results, \u001b[38;5;28mstr\u001b[39m):\n\u001b[1;32m 192\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n",
- "\u001b[0;31mQiskitServerlessException\u001b[0m: \"Traceback (most recent call last):\\n File \\\"/runner/runner.py\\\", line 10, in run\\n func = CircuitFunction(**arguments)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/runner/circuit_function/circuit_function.py\\\", line 87, in __init__\\n self._backend = self._service.backend(\\n ^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/usr/local/lib/python3.11/site-packages/qiskit_ibm_runtime/qiskit_runtime_service.py\\\", line 754, in backend\\n backends = self.backends(name, instance=instance, use_fractional_gates=use_fractional_gates)\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \\\"/usr/local/lib/python3.11/site-packages/qiskit_ibm_runtime/qiskit_runtime_service.py\\\", line 497, in backends\\n raise QiskitBackendNotFoundError(\\\"No backend matches the criteria.\\\")\\nqiskit.providers.exceptions.QiskitBackendNotFoundError: 'No backend matches the criteria.'\\n\""
- ]
- }
- ],
- "source": [
- "job = function.run(\n",
- " backend_name=\"bad_backend_name\", pubs=pubs, options=options\n",
- ")\n",
- "\n",
- "print(job.result())"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "32db1269",
- "metadata": {},
- "source": [
- "## Get support\n",
- "\n",
- "Reach out to [IBM Quantum support](/docs/guides/support), and include the following information:\n",
- "\n",
- "- Qiskit Function Job ID (`qiskit-ibm-catalog`), `job.job_id`\n",
- "- A detailed description of the issue\n",
- "- Any relevant error messages or codes\n",
- "- Steps to reproduce the issue"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "0439eef4",
- "metadata": {},
- "source": [
- "## Next steps\n",
- "\n",
- "\n",
- "\n",
- "- Try the [Error mitigation with the IBM Circuit function](/docs/tutorials/error-mitigation-with-qiskit-functions) tutorial.\n",
- "- Visit the [API reference](/docs/api/functions/ibm-circuit-function) for this Qiskit Function.\n",
- "\n",
- ""
- ]
- }
- ],
- "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
-}
diff --git a/docs/guides/qiskit-function-templates.mdx b/docs/guides/qiskit-function-templates.mdx
index f0cf2b5abaa..30b40068032 100644
--- a/docs/guides/qiskit-function-templates.mdx
+++ b/docs/guides/qiskit-function-templates.mdx
@@ -26,8 +26,7 @@ Resources to get started with these two templates are available at the following
The *base templates* are references for developing your own original Qiskit Function. They are designed to help you kickstart the development process by illustrating best practices in interface development, code formatting, I/O handling, error messages, checkpoints, unit testing, and more. The repository is exposed as a [GitHub template](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-template-repository) so that the CI/CD implementation can be easily extended.
-There are currently two templates: a [circuit function template](https://github.com/qiskit-community/qiskit-function-templates/blob/main/base_templates/circuit_function_template.py) and an [application function template](https://github.com/qiskit-community/qiskit-function-templates/blob/main/base_templates/application_function_template.py). The circuit function template is built similarly to the [IBM Circuit function](/docs/guides/ibm-circuit-function) and the application function template illustrates how to structure a typical application workflow.
-
+There are currently two templates: a [circuit function template](https://github.com/qiskit-community/qiskit-function-templates/blob/main/base_templates/circuit_function_template.py) and an [application function template](https://github.com/qiskit-community/qiskit-function-templates/blob/main/base_templates/application_function_template.py).
## Next steps
diff --git a/docs/tutorials/_toc.json b/docs/tutorials/_toc.json
index c7377069c49..047161a9c0c 100644
--- a/docs/tutorials/_toc.json
+++ b/docs/tutorials/_toc.json
@@ -135,10 +135,6 @@
"title": "Dynamic portfolio optimization with Global Data Quantum's Portfolio Optimizer",
"url": "/docs/tutorials/global-data-quantum-optimizer"
},
- {
- "title": "Error mitigation with the IBM Circuit function",
- "url": "/docs/tutorials/error-mitigation-with-qiskit-functions"
- },
{
"title": "Higher-order binary optimization with Q-CTRL's Optimization Solver",
"url": "/docs/tutorials/solve-higher-order-binary-optimization-problems-with-q-ctrls-optimization-solver"
diff --git a/docs/tutorials/error-mitigation-with-qiskit-functions.ipynb b/docs/tutorials/error-mitigation-with-qiskit-functions.ipynb
deleted file mode 100644
index c5a7dc92fe3..00000000000
--- a/docs/tutorials/error-mitigation-with-qiskit-functions.ipynb
+++ /dev/null
@@ -1,507 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "id": "bb523f27-586e-4c9c-b641-1f1db71396ef",
- "metadata": {},
- "source": [
- "---\n",
- "title: Error mitigation with the IBM Circuit function\n",
- "description: Walk through an example of building and running a workflow using the IBM Circuit function.\n",
- "---\n",
- "\n",
- "\n",
- "# Error mitigation with the IBM Circuit function\n",
- "\n",
- "Qiskit Functions are an experimental feature available only to IBM Quantum® Premium Plan, Flex Plan, and On-Prem (via IBM Quantum Platform API) Plan users. They are in preview release status and subject to change.\n",
- "\n",
- "\n",
- "*Usage estimate: 26 minutes on an Eagle processor (NOTE: This is an estimate only. Your runtime might vary.)*"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "34260848-be4c-45f7-914f-9d9bcc2be504",
- "metadata": {},
- "source": [
- "This tutorial walks through an example of building and running a workflow using the IBM Circuit function. This function takes [Primitive Unified Blocs](/docs/guides/primitive-input-output) (PUBs) as inputs and returns error-mitigated expectation values as outputs. It provides an automated and customized pipeline to optimize circuits and execute on quantum hardware so that researchers can focus on algorithm and application discovery.\n",
- "\n",
- "Visit the documentation for an [introduction to Qiskit Functions](/docs/guides/functions) and learn how to get started with the [IBM Circuit function](/docs/guides/ibm-circuit-function)."
- ]
- },
- {
- "cell_type": "markdown",
- "id": "8e5dd434-2a6a-4e85-8391-2c29139c5e4a",
- "metadata": {},
- "source": [
- "## Background\n",
- "\n",
- "This tutorial considers a general hardware-efficient Trotterized time evolution circuit for the 2D transverse-field Ising model and computes the global magnetization. Such a circuit is useful in different application domains such as condensed matter physics, chemistry, and machine learning. For more information on the structure of this model, refer to [Nature 618, 500–505 (2023)](https://www.nature.com/articles/s41586-023-06096-3).\n",
- "\n",
- "The IBM Circuit function combines capabilities from the Qiskit transpiler service and Qiskit Runtime Estimator to provide a simplified interface for running circuits. The function performs transpilation, error suppression, error mitigation, and circuit execution within a single managed service so that we can focus on mapping the problem to circuits rather than building out each step of the pattern ourselves."
- ]
- },
- {
- "cell_type": "markdown",
- "id": "56319c83-641a-4c62-872f-f0563c4e3fcc",
- "metadata": {},
- "source": [
- "## Requirements\n",
- "\n",
- "Before starting this tutorial, be sure you have the following installed:\n",
- "\n",
- "- Qiskit SDK v1.2 or later (`pip install qiskit`)\n",
- "- Qiskit Runtime v0.28 or later (`pip install qiskit-ibm-runtime`)\n",
- "- IBM Qiskit Functions Catalog client v0.0.0 or later (`pip install qiskit-ibm-catalog`)\n",
- "- Qiskit Aer v0.15.0 or later (`pip install qiskit-aer`)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "1160c9eb",
- "metadata": {},
- "source": [
- "## Setup"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "f27af69d",
- "metadata": {},
- "outputs": [],
- "source": [
- "import rustworkx\n",
- "from collections import defaultdict\n",
- "from numpy import pi, mean\n",
- "\n",
- "from qiskit_ibm_runtime import QiskitRuntimeService\n",
- "\n",
- "from qiskit_ibm_catalog import QiskitFunctionsCatalog\n",
- "\n",
- "from qiskit.circuit import QuantumCircuit, Parameter\n",
- "from qiskit.quantum_info import SparsePauliOp"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "16099381-e335-43ea-8756-94024eba10d0",
- "metadata": {},
- "source": [
- "## Step 1: Map classical inputs to a quantum problem\n",
- "\n",
- "
\n",
- "
Input: Parameters to create the quantum circuit
\n",
- "
Output: Abstract circuit and observables
\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "aba33d31-2417-4cd9-a3a6-a79b285d5f0d",
- "metadata": {},
- "source": [
- "#### Construct the circuit"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "cece07d0-0a68-4c34-899d-03948e34a5fb",
- "metadata": {},
- "source": [
- "The circuit we will create is a hardware-efficient, Trotterized time evolution circuit for the 2D transverse-field Ising model. We start with selecting a backend. Properties of this backend (that is, its coupling map) will be used to define the quantum problem and ensure it is hardware-efficient."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "4cb57a1f-4a9e-4c5f-bd30-bf2c914a5191",
- "metadata": {},
- "outputs": [],
- "source": [
- "service = QiskitRuntimeService()\n",
- "backend = service.least_busy(\n",
- " operational=True, simulator=False, min_num_qubits=127\n",
- ")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "f1e2e925-3c8a-4e34-a5bc-0ddb32b0b9a1",
- "metadata": {},
- "source": [
- "Next, we get the coupling map from the backend."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "2f7541c9-782d-46df-bc6c-6bd0dbb30759",
- "metadata": {},
- "outputs": [],
- "source": [
- "coupling_graph = backend.coupling_map.graph.to_undirected(multigraph=False)\n",
- "layer_couplings = defaultdict(list)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "70ae3888-4672-4d3f-9ef2-c5590d4601b2",
- "metadata": {},
- "source": [
- "We want to be careful in how we design the layers of our circuit. We will do this by coloring the edges of the coupling map (that is, grouping the disjoint edges) and use that coloring to more efficiently place gates in the circuit. This will lead to a shallower circuit with layers of gates that can be executed simultaneously on the hardware."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "id": "9a8c57e4-e5c6-410f-aeea-4a84d02e4fb6",
- "metadata": {},
- "outputs": [],
- "source": [
- "edge_coloring = rustworkx.graph_bipartite_edge_color(coupling_graph)\n",
- "\n",
- "for edge_idx, color in edge_coloring.items():\n",
- " layer_couplings[color].append(\n",
- " coupling_graph.get_edge_endpoints_by_index(edge_idx)\n",
- " )\n",
- "layer_couplings = [\n",
- " sorted(layer_couplings[i]) for i in sorted(layer_couplings.keys())\n",
- "]"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "bfbe498d-f3bf-4af4-b52f-02423fa87c29",
- "metadata": {},
- "source": [
- "Next, we write a simple helper function that implements the hardware-efficient, Trotterized time evolution circuit for the 2D transverse-field Ising model using the edge coloring obtained above."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "f028123a-80ac-48fc-8847-f7a242be7462",
- "metadata": {},
- "outputs": [],
- "source": [
- "def construct_trotter_circuit(\n",
- " num_qubits: int,\n",
- " num_trotter_steps: int,\n",
- " layer_couplings: list,\n",
- " barrier: bool = True,\n",
- ") -> QuantumCircuit:\n",
- " theta, phi = Parameter(\"theta\"), Parameter(\"phi\")\n",
- " circuit = QuantumCircuit(num_qubits)\n",
- "\n",
- " for _ in range(num_trotter_steps):\n",
- " circuit.rx(theta, range(num_qubits))\n",
- " for layer in layer_couplings:\n",
- " for edge in layer:\n",
- " if edge[0] < num_qubits and edge[1] < num_qubits:\n",
- " circuit.rzz(phi, edge[0], edge[1])\n",
- " if barrier:\n",
- " circuit.barrier()\n",
- "\n",
- " return circuit"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "77cfb8f3-7425-403a-962d-e9f1975830b2",
- "metadata": {},
- "source": [
- "We will choose the number of qubits and trotter steps and then construct the circuit."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "id": "18eefa99-f1c4-41b5-90b8-7fd8723cac84",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- ""
- ]
- },
- "execution_count": 5,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "num_qubits = 100\n",
- "num_trotter_steps = 2\n",
- "\n",
- "circuit = construct_trotter_circuit(\n",
- " num_qubits, num_trotter_steps, layer_couplings\n",
- ")\n",
- "circuit.draw(\"mpl\", fold=-1)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "e7201b96-0ebd-4707-b1fe-d85877537d2c",
- "metadata": {},
- "source": [
- "In order to benchmark the quality of the execution, we need to compare it with the ideal outcome. The circuit of choice is beyond brute force classical simulation. So, we fix the parameters of all the `Rx` gates in the circuit to $0$, and that of all `Rzz` gates to $\\pi$. This makes the circuit Clifford, which makes it possible to perform the ideal simulation and obtain the ideal outcome for comparison. In this case, we know that outcome will be `1.0`."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "314bdcc9-a9e6-4448-b67a-8af3c53b8527",
- "metadata": {},
- "outputs": [],
- "source": [
- "parameters = [0, pi]"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "c3ab06fa-fc25-46d9-9db9-b73ce180af3c",
- "metadata": {},
- "source": [
- "#### Construct the observable"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "1f240bb6-21e6-48b3-bdf8-09d8e74e1c67",
- "metadata": {},
- "source": [
- "First, compute the global magnetization along $\\hat{z}$ for the $N$-qubit problem: $M_z = \\sum_{i=1}^N \\langle Z_i \\rangle / N$. This requires first computing the single-site magnetization $\\langle Z_i \\rangle$ for each qubit $i$, which is defined in the following code."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "dbcb7a27-abdb-4b1f-a765-c6144df675e2",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "SparsePauliOp(['ZIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII'],\n",
- " coeffs=[1.+0.j])\n"
- ]
- }
- ],
- "source": [
- "observables = []\n",
- "for i in range(num_qubits):\n",
- " obs = \"I\" * (i) + \"Z\" + \"I\" * (num_qubits - i - 1)\n",
- " observables.append(SparsePauliOp(obs))\n",
- "\n",
- "print(observables[0])"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "99a7e860-709d-4860-94d0-76e6c6426b96",
- "metadata": {},
- "source": [
- "## Steps 2 and 3: Optimize problem for quantum hardware execution and execute with the IBM Circuit function\n",
- "\n",
- "
\n",
- "
Input: Abstract circuit and observables
\n",
- "
Output: Mitigated expectation values
\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "34f5d0f9-f3ac-4362-ac8c-fd4d02fec265",
- "metadata": {},
- "source": [
- "Now, we can pass the abstract circuit and observables to the IBM Circuit function. It will handle transpilation and execution on quantum hardware for us and return mitigated expectation values. First, we load the function from the [IBM Qiskit Functions Catalog](/docs/guides/functions)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "1bc95a78-71b3-4404-b867-8fb708b48434",
- "metadata": {},
- "outputs": [],
- "source": [
- "catalog = QiskitFunctionsCatalog(\n",
- " token=\"\"\n",
- ") # Use the 44-character API_KEY you created and saved from the IBM Quantum Platform Home dashboard\n",
- "function = catalog.load(\"ibm/circuit-function\")"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "282e957a-d542-43f5-b4b1-0213f5327789",
- "metadata": {},
- "source": [
- "The IBM Circuit function takes `pubs`, `backend_name`, as well as optional inputs for configuring transpilation, error mitigation, and so on. We create the `pub` from the abstract circuit, observables, and circuit paramters. The name of the backend should be specified as a string."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "3021bd3e-c7f9-4dfa-8358-3bdf695ae28e",
- "metadata": {},
- "outputs": [],
- "source": [
- "pubs = [(circuit, observables, parameters)]\n",
- "backend_name = backend.name"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "082883fc-22fa-4539-a4e2-9f3ef97d7334",
- "metadata": {},
- "source": [
- "We can also configure the `options` for transpilation, error suppression, and error mitigation. Default settings will be used if we don't wish to specify these. The IBM Circuit function comes with commonly used options for `optimization_level`, which controls how much circuit optimization to perform, and `mitigation_level`, which specifies how much error suppression and mitigation to apply. Note that the `mitigation_level` of the IBM Circuit function is distinct from the `resilience_level` used in the [Qiskit Runtime Estimator](/docs/guides/error-mitigation-and-suppression-techniques). For a detailed description of these commonly used options as well as other advanced options, visit the [documentation for the IBM Circuit function](/docs/guides/ibm-circuit-function).\n",
- "\n",
- "In this tutorial, we will set the `default_precision`, `optimization_level: 3` and `mitigation_level: 3`, which will turn on gate twirling and Zero Noise Extrapolation (ZNE) via Probabilistic Error Amplification (PEA) on top of the default level 1 settings."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "3845e8fa-0fb5-4a43-a859-d8038e2a440c",
- "metadata": {},
- "outputs": [],
- "source": [
- "options = {\n",
- " \"default_precision\": 0.011,\n",
- " \"optimization_level\": 3,\n",
- " \"mitigation_level\": 3,\n",
- "}"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "f2e3d1c1-c7f5-4084-bb21-e8f6479bea3a",
- "metadata": {},
- "source": [
- "With the inputs specified, we submit the job to the IBM Circuit function for optimization and execution."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "id": "94bb07bc-c392-4ee6-9982-9fbcb2196e97",
- "metadata": {},
- "outputs": [],
- "source": [
- "job = function.run(backend_name=backend_name, pubs=pubs, options=options)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "41917db3-039f-4940-b4bd-76be6e23af61",
- "metadata": {},
- "source": [
- "## Step 4: Post-process and return result in desired classical format\n",
- "\n",
- "
\n",
- "
Input: Results from the IBM Circuit function
\n",
- "
Output: Global magnetization
\n",
- "
"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "958dd045-9eaa-40ce-8039-55cdbe882f10",
- "metadata": {},
- "source": [
- "#### Compute the global magnetization"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "e510ff6e-7022-48c6-b146-6e48611d7d12",
- "metadata": {},
- "source": [
- "The result from running the function has the same format as the [Estimator](/docs/guides/estimator-input-output)."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "id": "12aec700-7ee1-4729-bd67-c3fe7ae5ecd7",
- "metadata": {},
- "outputs": [],
- "source": [
- "result = job.result()[0]"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "18411ce9-5003-40b0-bda1-f2bba6509ec2",
- "metadata": {},
- "source": [
- "We obtain the mitigated and non-mitigated expectation values from this result. These expectation values represent the single-site magnetization along the $\\hat{z}$ direction. We average these to arrive at the global magnetization and compare against the ideal value of `1.0` for this problem instance."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "id": "4048098a-29b9-4bb7-b0a1-2a440061ee5d",
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "mitigated: 0.9749883476088692\n",
- "unmitigated: 0.7832977198447583\n"
- ]
- }
- ],
- "source": [
- "mitigated_expvals = result.data.evs\n",
- "magnetization_mitigated = mean(mitigated_expvals)\n",
- "\n",
- "print(\"mitigated:\", magnetization_mitigated)\n",
- "\n",
- "unmitigated_expvals = [\n",
- " result.data.evs_extrapolated[i][0][1] for i in range(num_qubits)\n",
- "]\n",
- "magnetization_unmitigated = mean(unmitigated_expvals)\n",
- "\n",
- "print(\"unmitigated:\", magnetization_unmitigated)"
- ]
- },
- {
- "cell_type": "markdown",
- "id": "d1717a9d",
- "metadata": {},
- "source": [
- "## Tutorial survey\n",
- "\n",
- "Please take this short survey to provide feedback on this tutorial. Your insights will help us improve our content offerings and user experience.\n",
- "\n",
- "[Link to survey](https://your.feedback.ibm.com/jfe/form/SV_cCNiGkGX5xZMzoG)"
- ]
- }
- ],
- "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
-}
diff --git a/docs/tutorials/index.mdx b/docs/tutorials/index.mdx
index b0c8480e8a6..8c56e092116 100644
--- a/docs/tutorials/index.mdx
+++ b/docs/tutorials/index.mdx
@@ -103,8 +103,6 @@ Qiskit Functions are a collection of pre-packaged error management and applicati
- Design new algorithms with **Circuit functions** — with pre-built transpilation, error suppression, and error mitigation pipelines.
- * [Error mitigation with the IBM Circuit function](/docs/tutorials/error-mitigation-with-qiskit-functions)
-
* [Transverse-Field Ising Model with Q-CTRL's Performance Management](/docs/tutorials/transverse-field-ising-model)
* [Quantum Phase Estimation with Q-CTRL's Qiskit Functions](/docs/tutorials/quantum-phase-estimation-qctrl)
diff --git a/public/docs/images/guides/ibm-circuit-function/ibm-circuit-function.svg b/public/docs/images/guides/ibm-circuit-function/ibm-circuit-function.svg
deleted file mode 100644
index e30c459a452..00000000000
--- a/public/docs/images/guides/ibm-circuit-function/ibm-circuit-function.svg
+++ /dev/null
@@ -1,34 +0,0 @@
-
diff --git a/public/docs/images/guides/ibm-circuit-function/ibm-circuit-function@dark.svg b/public/docs/images/guides/ibm-circuit-function/ibm-circuit-function@dark.svg
deleted file mode 100644
index a194cd1ee69..00000000000
--- a/public/docs/images/guides/ibm-circuit-function/ibm-circuit-function@dark.svg
+++ /dev/null
@@ -1,37 +0,0 @@
-
diff --git a/public/docs/images/tutorials/error-mitigation-with-qiskit-functions/extracted-outputs/18eefa99-f1c4-41b5-90b8-7fd8723cac84-0.avif b/public/docs/images/tutorials/error-mitigation-with-qiskit-functions/extracted-outputs/18eefa99-f1c4-41b5-90b8-7fd8723cac84-0.avif
deleted file mode 100644
index 42de52481f1..00000000000
Binary files a/public/docs/images/tutorials/error-mitigation-with-qiskit-functions/extracted-outputs/18eefa99-f1c4-41b5-90b8-7fd8723cac84-0.avif and /dev/null differ
diff --git a/qiskit_bot.yaml b/qiskit_bot.yaml
index d2683e9a982..60531ff8260 100644
--- a/qiskit_bot.yaml
+++ b/qiskit_bot.yaml
@@ -32,14 +32,6 @@ notifications:
- "@pandasa123"
- "@HuangJunye"
- "@manuelmartin3"
- "docs/api/functions/ibm-circuit-function":
- - "`@abbycross`"
- - "`@kaelynj`"
- - "@pandasa123"
- - "@jenglick"
- - "@garrison"
- - "@HuangJunye"
- - "@ElePT"
"docs/api/functions/index":
- "`@abbycross`"
- "`@kaelynj`"
@@ -584,14 +576,6 @@ notifications:
- "@jenglick"
- "@garrison"
- "@HuangJunye"
- "docs/guides/ibm-circuit-function":
- - "@kaelynj"
- - "`@abbycross`"
- - "@pandasa123"
- - "@jenglick"
- - "@garrison"
- - "@HuangJunye"
- - "@ElePT"
"docs/guides/q-ctrl-optimization-solver":
- "@kaelynj"
- "`@abbycross`"
@@ -731,9 +715,6 @@ notifications:
"docs/tutorials/wire-cutting":
- "`@nathanearnestnoble`"
- "`@ritajitmajumdar1`"
- "docs/tutorials/error-mitigation-with-qiskit-functions":
- - "`@nathanearnestnoble`"
- - "@ritajitmajumdar1"
"docs/tutorials/qunova-hivqe":
- "`@nathanearnestnoble`"
- "@aidanpellow"
diff --git a/scripts/config/notebook-testing.toml b/scripts/config/notebook-testing.toml
index 555510e41e7..6e0c304dfb8 100644
--- a/scripts/config/notebook-testing.toml
+++ b/scripts/config/notebook-testing.toml
@@ -73,7 +73,6 @@ notebooks = [
"docs/guides/debug-qiskit-runtime-jobs.ipynb",
"docs/guides/fractional-gates.ipynb",
"docs/guides/functions.ipynb",
- "docs/guides/ibm-circuit-function.ipynb",
"docs/guides/sampler-examples.ipynb",
"docs/guides/estimator-examples.ipynb",
"docs/guides/executor-examples.ipynb",