Repository: cda-tum/mqt-bench (language: python)

Issue:
Add pre-commit Configuration
To improve the code quality, a pre-commit configuration should be added similar to [qcec](https://github.com/cda-tum/qcec/blob/main/.pre-commit-config.yaml) which the [corresponding PR](https://github.com/cda-tum/qcec/pull/100).


Discussion / hints:

Fix patch:
diff --git a/.flake8 b/.flake8
new file mode 100644
index 000000000..62a553522
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,18 @@
+[flake8]
+extend-select = B9
+extend-ignore = E203, E231, E501, E722, W503, B950, B014, W504, E123, E126, E226, E121
+per-file-ignores = __init__.py:F401
+max-line-length = 120
+show-source = true
+exclude =
+    .git,
+    .idea,
+    .eggs,
+    __pycache__,
+    .tox,
+    docs/source/conf.py,
+    build,
+    .nox,
+    venv,
+    .venv
+application-import-names = mqt.bench
diff --git a/.github/codecov.yml b/.github/codecov.yml
index 7fae746e4..93de58578 100644
--- a/.github/codecov.yml
+++ b/.github/codecov.yml
@@ -12,4 +12,4 @@ coverage:
         threshold: 0.5%
     patch:
       default:
-        threshold: 1%
\ No newline at end of file
+        threshold: 1%
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 7839cc2fa..ecec60649 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -8,16 +8,18 @@ updates:
   - package-ecosystem: "pip" # See documentation for possible values
     directory: "/" # Location of package manifests
     schedule:
-      interval: "daily"
+      interval: "weekly"
+      day: "friday"
+      time: "06:00"
+      timezone: "Europe/Berlin"
     assignees:
       - "nquetschlich"
-    reviewers:
-      - "nquetschlich"
   - package-ecosystem: "github-actions"
-    directory:         "/"
+    directory: "/"
     schedule:
       interval: "weekly"
-      day:      "friday"
-      time:     "06:00"
+      day: "friday"
+      time: "06:00"
+      timezone: "Europe/Berlin"
     assignees:
-      - "nquetschlich"
\ No newline at end of file
+      - "nquetschlich"
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index f3ea660af..1f888c644 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -2,27 +2,27 @@ name: CodeCov
 
 on:
   push:
-    branches: [ main, master ]
+    branches: [main, master]
   pull_request:
-    branches: [ main, master ]
+    branches: [main, master]
   workflow_dispatch:
 
 jobs:
   run:
     runs-on: ubuntu-latest
     steps:
-    - uses: actions/checkout@v3
-    - name: Setup Python
-      uses: actions/setup-python@v4
-      with:
-        python-version: '3.8'
-    - name: Install MQT Bench
-      run: pip install -e .
-    - name: Generate Report
-      run: |
-        pip install pytest-cov
-        pytest -v --cov=./ --cov-report=xml
-    - name: Upload coverage to Codecov
-      uses: codecov/codecov-action@v3
-      with:
-        fail_ci_if_error: true
\ No newline at end of file
+      - uses: actions/checkout@v3
+      - name: Setup Python
+        uses: actions/setup-python@v4
+        with:
+          python-version: "3.8"
+      - name: Install MQT Bench
+        run: pip install -e .
+      - name: Generate Report
+        run: |
+          pip install pytest-cov
+          pytest -v --cov=./ --cov-report=xml
+      - name: Upload coverage to Codecov
+        uses: codecov/codecov-action@v3
+        with:
+          fail_ci_if_error: true
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index fa537b90d..b0406db38 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -2,22 +2,22 @@ name: Deploy to PyPI
 
 on:
   release:
-    types: [ published ]
+    types: [published]
   push:
-    branches: [ main, master ]
+    branches: [main, master]
   pull_request:
-    branches: [ main, master ]
+    branches: [main, master]
   workflow_dispatch:
 
 jobs:
   build_wheel:
-    name:    Build wheel
+    name: Build wheel
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
-          python-version: '3.8'
+          python-version: "3.8"
         name: Install Python
       - name: Build wheel
         run: pipx run build --wheel
@@ -32,13 +32,13 @@ jobs:
           path: dist/*.whl
 
   build_sdist:
-    name:    Build source distribution
+    name: Build source distribution
     runs-on: ubuntu-latest
     steps:
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
-          python-version: '3.8'
+          python-version: "3.8"
         name: Install Python
       - name: Build sdist
         run: pipx run build --sdist
@@ -53,9 +53,9 @@ jobs:
           path: dist/*.tar.gz
 
   upload_pypi:
-    needs: [ build_wheel, build_sdist ]
+    needs: [build_wheel, build_sdist]
     runs-on: ubuntu-latest
-    if:      github.event_name == 'release' && github.event.action == 'published'
+    if: github.event_name == 'release' && github.event.action == 'published'
     steps:
       - uses: actions/download-artifact@v3
         with:
@@ -63,9 +63,7 @@ jobs:
           path: dist
       - uses: pypa/gh-action-pypi-publish@master
         with:
-          user:          __token__
-          password:      ${{ secrets.pypi_password }}
+          user: __token__
+          password: ${{ secrets.pypi_password }}
           skip_existing: true
-          verbose:       true
-
-
+          verbose: true
diff --git a/.github/workflows/pylint.yml b/.github/workflows/pylint.yml
index 5b36faa7a..bf4595848 100644
--- a/.github/workflows/pylint.yml
+++ b/.github/workflows/pylint.yml
@@ -9,6 +9,6 @@ jobs:
       - uses: actions/checkout@v3
       - uses: actions/setup-python@v4
         with:
-          python-version: '3.8'
+          python-version: "3.8"
       - name: Black
         uses: psf/black@stable
diff --git a/.github/workflows/server_deploy.yml b/.github/workflows/server_deploy.yml
index 26e105a3c..2d8e4fd67 100644
--- a/.github/workflows/server_deploy.yml
+++ b/.github/workflows/server_deploy.yml
@@ -1,4 +1,3 @@
-
 # Based on: https://zartman.xyz/blog/gh-static-deploy/
 name: Server Deployment
 on:
@@ -19,27 +18,26 @@ jobs:
     name: Deploy
     runs-on: ubuntu-latest
     steps:
-    - name: Setup Python
-      uses: actions/setup-python@v4
-      with:
-        python-version: '3.8'
-    - name: Install wheel
-      run: pip install wheel
-    - name: Install MQT Bench
-      run: pip install .
-    - name: Run tests
-      run: |
-        pip install pytest-cov
-        pytest -v
-    - name: Setup SSH via the stored Action Secrets
-      run: |
-        mkdir -p ~/.ssh
-        echo "${KNOWN_HOSTS}" >> ~/.ssh/known_hosts
-        echo "${DEPLOY_KEY}" > ~/.ssh/my_rsync_key
-        echo "IdentityFile ~/.ssh/my_rsync_key" >> ~/.ssh/config
-        chmod -R 700 ~/.ssh
-    - name: Deployment on Webserver
-      working-directory: ${{ github.workspace }}
-      run: |
-        rsync -avz --update -e ssh --cvs-exclude --exclude "*__pycache__/" --exclude "*.qasm" . ${CDA_USER_NAME}@${CDA_HOST_NAME}:${CDA_TARGET_DIR}
-
+      - name: Setup Python
+        uses: actions/setup-python@v4
+        with:
+          python-version: "3.8"
+      - name: Install wheel
+        run: pip install wheel
+      - name: Install MQT Bench
+        run: pip install .
+      - name: Run tests
+        run: |
+          pip install pytest-cov
+          pytest -v
+      - name: Setup SSH via the stored Action Secrets
+        run: |
+          mkdir -p ~/.ssh
+          echo "${KNOWN_HOSTS}" >> ~/.ssh/known_hosts
+          echo "${DEPLOY_KEY}" > ~/.ssh/my_rsync_key
+          echo "IdentityFile ~/.ssh/my_rsync_key" >> ~/.ssh/config
+          chmod -R 700 ~/.ssh
+      - name: Deployment on Webserver
+        working-directory: ${{ github.workspace }}
+        run: |
+          rsync -avz --update -e ssh --cvs-exclude --exclude "*__pycache__/" --exclude "*.qasm" . ${CDA_USER_NAME}@${CDA_HOST_NAME}:${CDA_TARGET_DIR}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 000000000..2630a66ea
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,99 @@
+# To run all pre-commit checks, use:
+#
+#     pre-commit run -a
+#
+# To install pre-commit hooks that run every time you commit:
+#
+#     pre-commit install
+#
+
+ci:
+  autoupdate_commit_msg: "⬆️🪝 update pre-commit hooks"
+  autofix_commit_msg: "🎨 pre-commit fixes"
+
+repos:
+  # Standard hooks
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: "v4.3.0"
+    hooks:
+      - id: check-added-large-files
+      - id: check-case-conflict
+      - id: check-docstring-first
+      - id: check-merge-conflict
+      - id: check-symlinks
+      - id: check-toml
+      - id: check-yaml
+      - id: debug-statements
+      - id: end-of-file-fixer
+      - id: mixed-line-ending
+      - id: requirements-txt-fixer
+      - id: trailing-whitespace
+
+  # Handling unwanted unicode characters
+  - repo: https://github.com/sirosen/texthooks
+    rev: "0.3.1"
+    hooks:
+      - id: fix-ligatures
+      - id: fix-smartquotes
+
+  # Upgrade old Python syntax
+  - repo: https://github.com/asottile/pyupgrade
+    rev: "v2.37.3"
+    hooks:
+      - id: pyupgrade
+        args: ["--py37-plus"]
+
+  # Sort includes
+  - repo: https://github.com/pycqa/isort
+    rev: 5.10.1
+    hooks:
+      - id: isort
+        args: ["--profile", "black", "--filter-files"]
+  # Run code formatting with Black
+  - repo: https://github.com/psf/black
+    rev: "22.6.0" # Keep in sync with blacken-docs
+    hooks:
+      - id: black
+
+  # Also run Black on examples in the documentation
+  - repo: https://github.com/asottile/blacken-docs
+    rev: "v1.12.1"
+    hooks:
+      - id: blacken-docs
+        additional_dependencies:
+          - black==22.6.0 # keep in sync with black hook
+
+  # Check for common mistakes
+  - repo: https://github.com/pre-commit/pygrep-hooks
+    rev: "v1.9.0"
+    hooks:
+      - id: python-check-blanket-noqa
+      - id: python-check-blanket-type-ignore
+      - id: python-no-log-warn
+      - id: python-no-eval
+      - id: python-use-type-annotations
+      - id: rst-backticks
+      - id: rst-directive-colons
+      - id: rst-inline-touching-normal
+
+  # Run Flake8 checks
+  - repo: https://github.com/PyCQA/flake8
+    rev: "5.0.4"
+    hooks:
+      - id: flake8
+        additional_dependencies: [flake8-bugbear]
+
+  # Check for spelling
+  - repo: https://github.com/codespell-project/codespell
+    rev: "v2.2.1"
+    hooks:
+      - id: codespell
+        args: ["-L", "wille,linz"]
+        exclude: "mqt/benchviewer/templates/legal.html"
+
+  # Format configuration files with prettier
+  - repo: https://github.com/pre-commit/mirrors-prettier
+    rev: "v3.0.0-alpha.0"
+    hooks:
+      - id: prettier
+        types_or: [yaml, markdown, html, css, javascript, json]
diff --git a/LICENSE b/LICENSE
index 65b1b2448..32ad315d8 100644
--- a/LICENSE
+++ b/LICENSE
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
\ No newline at end of file
+SOFTWARE.
diff --git a/README.md b/README.md
index 666ca42eb..ae993f6b8 100644
--- a/README.md
+++ b/README.md
@@ -1,299 +1,327 @@
-[![PyPI](https://img.shields.io/pypi/v/mqt.bench?logo=pypi&style=flat-square)](https://pypi.org/project/mqt.bench/)
-[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT)
-[![CI](https://img.shields.io/github/workflow/status/cda-tum/MQTBench/CodeCov?style=flat-square&logo=github&label=coverage)](https://github.com/cda-tum/MQTBench/actions/workflows/coverage.yml)
-[![Bindings](https://img.shields.io/github/workflow/status/cda-tum/MQTBench/Deploy%20to%20PyPI?style=flat-square&logo=github&label=python)](https://github.com/cda-tum/MQTBench/actions/workflows/deploy.yml)
-[![codecov](https://img.shields.io/codecov/c/github/cda-tum/MQTBench?style=flat-square&logo=codecov)](https://codecov.io/gh/cda-tum/MQTBench)
-[![Server Deployment](https://github.com/cda-tum/MQTBench/actions/workflows/server_deployment.yml/badge.svg)](https://github.com/cda-tum/MQTBench/actions/workflows/server_deployment.yml)
-
-# MQT Bench: Benchmarking Software and Design Automation Tools for Quantum Computing
-
-MQT Bench is a quantum circuit benchmark suite with cross-level support, i.e., providing the same benchmark algorithms for different abstraction levels throughout the quantum computing
-software stack. 
-
-MQT Bench is part of the Munich Quantum Toolkit (MQT) developed by the [Chair for Design Automation](https://www.cda.cit.tum.de/) at the [Technical University of Munich](https://www.tum.de/) and is hosted at [https://www.cda.cit.tum.de/mqtbench/](https://www.cda.cit.tum.de/mqtbench/).
-
-[<img src="img/mqtbench.png" align="center" width="500" >](https://www.cda.cit.tum.de/mqtbench)
-
-This documentation explains how to use MQT Bench to create and filter benchmarks.
-
-## Abstraction Levels
-It uses the structure proposed by the openQASM 3.0 specification [[1]](https://arxiv.org/abs/2104.14722) and offers benchmarks
-on four different abstraction levels:
-1) Algorithmic Level
-2) Target-independent Level
-3) Target-dependent Native Gates Level
-4) Target-dependent Mapped Level
-
-An example is given in the following:
-
-1) Algorithmic Level
-
-<img src="img/level_1.png"  align="center" width="250">
-
-Variational Quantum Algorithms (VQAs) are an emerging class of quantum algorithms with a wide range of 
-applications. A respective circuit is shown above, it represents an example of an ansatz function 
-frequently used for Variational Quantum Eigensolvers (VQEs), a subclass of VQAs. On this abstraction 
-level, the circuit is parameterized by the angles θ<sub>i</sub> of the six single-qubit gates.
-
-2) Target-independent Level
-
-<img src="img/level_2.png"  align="center" width="250">
-
-VQAs are hybrid quantum-classical algorithms, where the parameters of the quantum ansatz are 
-iteratively updated by a classical optimizer analogous to conventional gradient-based optimization. 
-Consider again the circuit from the previous figure. Assuming these parameters have been determined, 
-e.g., θ<sub>i</sub> = −π for i = 0, ..., 5, they are now propagated and the resulting quantum circuit is 
-shown above.
-
-
-3) Target-dependent Native Gates Level
-
-<img src="img/level_3.png"  align="center" width="250"/>
-
-Different quantum computer realizations support
-different native gate-sets. In our example, we consider the
-IBMQ Manila device as the target device which natively supports I, X, √X, Rz and CX gates. 
-Consequently, the Ry gates in the previous figure have to be converted using only these native gates. In this case, 
-they are substituted by a sequence of X and Rz gates (denoted as • with a phase of −π).
-
-4) Target-dependent Mapped Level
-
-<img src="img/level_4.png"  align="center" width="300"/>
-<img src="img/arch.png"  align="right" width="100"/>
-
-The architecture of the IBMQ Manila device is shown 
-above on the right and it defines between which qubits a two-qubit operation may be performed. 
-Since the circuit shown in the previous figure contains CX gates operating between all combination of qubits, 
-there is no mapping directly matching the target architecture’s layout. As a consequence, 
-a non-trivial mapping followed by a round of optimization leads to the resulting circuit 
-shown above on the left. This is also the reason for the different sequence of CX gates compared 
-to the previous example.
-
-This circuit is now executable on the IBMQ Manila device, since all hardware induced requirements are fulfilled.
-
-## Benchmark Selection
-So far, the following benchmarks are implemented and provided:
-- Amplitude Estimation
-- Deutsch-Jozsa
-- GHZ State
-- Graph State
-- Ground State
-- Grover's (no ancilla)
-- Grover's (v-chain)
-- HHL
-- Portfolio Optimization with QAOA
-- Portfolio Optimization with VQE
-- Pricing Call Option
-- Pricing Put Option
-- Quantum Fourier Transformation (QFT)
-- QFT Entangled
-- Quantum Generative Adversarial Network (QGAN)
-- Quantum Phase Estimation (QPE) Exact
-- Quantum Phase Estimation (QPE) Inexact
-- Quantum Walk (no ancilla)
-- Quantum Walk (-chain)
-- Routing
-- Shor's
-- Travelling Salesman
-- Variational Quantum Eigensolver (VQE)
-- VQE-ansätze with random values:
-  - Efficient SU2 ansatz with Random Parameters
-  - Real Amplitudes ansatz with Random Parameters
-  - Two Local ansatz with Random Parameters
-- W-State
-
-See the [benchmark description](https://www.cda.cit.tum.de/mqtbench/benchmark_description) for further details on the individual benchmarks.
-
-## Quantum Circuit Compiler Support
-At the moment, two compilers are supported:
-1) [Qiskit](https://qiskit.org/documentation/) with the compiler settings: Optimization level 0 to 3
-2) [TKET](https://cqcl.github.io/tket/pytket/api/) with the compiler settings: Line placement and graph placement
-
-## Native Gate-Set Support
-So far, MQT Bench supports the following native gate-sets:
-1) IBMQ gate-set: *\['rz', 'sx', 'x', 'cx', 'measure'\]*
-2) Rigetti gate-set: *\['rx', 'rz', 'cz', 'measure'\]*
-3) IonQ gate-set: *\['rxx', 'rz', 'ry', 'rx', 'measure'\]*
-4) OQC gate-set: *\['rz', 'sx', 'x', 'ecr', 'measure'\]*
-
-## Device Support
-So far, MQT Bench supports the following devices:
-1) IBMQ Washington with 127 qubits
-2) IBMQ Montreal with 27 qubits
-3) Rigetti Aspen-M1 with 80 qubits
-4) IonQ with 11 qubits
-5) OQC Lucy with 8 qubits
-
-# Repository Structure
-- mqt/bench/utils: Directory for the utils.py file 
-- mqt/bench/tests: Directory for the tests for MQT Bench
-- mqt/bench/benchmarks: On the top-level, each benchmark algorithm is included as a separate file. 
-  - Additionally, folders for each IBM Qiskit application module and their respective benchmarks are listed.
-- mqt/benchviewer: This is the folder for the webpage 
-(which can be started locally and is also hosted at 
-[https://www.cda.cit.tum.de/mqtbench/](https://www.cda.cit.tum.de/mqtbench/)).
-
-```
-MQTBench/
-│ - README.md
-│
-└───mqt/bench/
-│   │───benchmark_generator.py  
-│   └───utils/
-│   │   │ - utils.py
-│   │
-│   └───tests/
-│   └───benchmarks/
-│       │ - ae.py
-│       │   ...
-│       │ - wstate.py
-│       └─── qiskit_application_finance
-│       │       ...
-│       └─── qiskit_application_ml
-│       │       ...
-│       └─── qiskit_application_nature
-│       │       ...
-│       └─── qiskit_application_optimization
-│       │       ...
-│
-│───────benchviewer/
-        │ - main.py
-        │   ...
-```
-
-# Repository Usage
-There are three ways how to use this benchmark suite:
-1) Via the webpage hosted at [https://www.cda.cit.tum.de/mqtbench/](https://www.cda.cit.tum.de/mqtbench/)
-2) Via the pip package `mqt.bench`
-3) Directly via this repository
-
-Since the first way is rather self-explanatory, the other two ways are explained in more detail in the following.
-
-## Usage via pip package
-MQT Bench is available via [PyPI](https://pypi.org/project/mqt.bench/)
-```console
-(venv) $ pip install mqt.bench
-```
-To generate a benchmark circuit on the algorithmic level, please use the `get_one_benchmark` method:
-
-```python
-get_one_benchmark(
-    benchmark_name: str,
-    level: Union[str, int],
-    circuit_size: int = None,
-    benchmark_instance_name: str = None,
-    compiler: str = "qiskit",
-    compiler_settings: dict[str, dict[str, any]] = None,
-    gate_set_name: str = "ibm",
-    device_name: str = "ibm_washington",
-):
-```
-The available parameters are:
-  - `benchmark_name`: `"ae"`, `"dj"`, `"grover-noancilla"`, `"grover-v-chain"`, `"ghz"`, `"graphstate"`, `"portfolioqaoa"`,
-                        `"portfoliovqe"`, `"qaoa"`, `"qft"`, `"qftentangled"`, `"qgan"`, `"qpeexact"`, `"qpeinexact"`,
-                        `"qwalk-noancilla"`, `"qwalk-v-chain"`, `"realamprandom"`, `"su2random"`, `"twolocalrandom"`, `"vqe"`,
-                        `"wstate"`, `"shor"`, `"hhl"`, `"pricingcall"`, `"pricingput"`, `"groundstate"`, `"routing"`,
-                        `"tsp"`
-  - `level`: `0` or `"alg"`, `1` or `"indep"`, `2` or `"nativegates"`, `3` or `"mapped"`
-  - `circuit_size`: for most of the cases this is equal to number of qubits 
-(all scalable benchmarks except `"qwalk-v-chain"` and `"grover-v-chain"`) while for all other the qubit number is higher
-  - `compiler`: `"qiskit"` or `"tket"`
-  - `compiler_settings`: Optimization level for `"qiskit"` (`0`-`3`), placement for `"tket"` (`lineplacement` or `graphplacement`), exemplary shown:
-```python
-compiler_settings = {
-            "qiskit": {"optimization_level": 1},
-        }
-```
-or 
-```python
-compiler_settings = {
-            "tket": {"placement": "lineplacement"},
-        }
-```
-
-  - `gate_set_name`: `"ibm"`, `"rigetti"`, `"ionq"`, or `"oqc"`
-  - `device_name`: `"ibm_washington"`, `"ibm_montreal"`, `"aspen_m1"`, `"ionq11"`, `"lucy"`
-
-Hereby, the mappings between shortened `benchmark_name` and actual benchmarks are:
-
-| `benchmark_name`   | Actual Benchmark                                   |
-|--------------------|----------------------------------------------------|
-| `"ae"`             | Amplitude Estimation (AE)                          |
-| `"dj"`             | Deutsch-Jozsa                                      |
-| `"grover-noancilla"` | Grover's (no ancilla)                              |
-| `"grover-v-chain"` | Grover's (v-chain)                                 |
-| `"ghz"`            | GHZ State                                          |
-| `"graphstate"`     | Graph State                                        |
-| `"portfolioqaoa"`  | Portfolio Optimization with QAOA                   |
-| `"portfoliovqe"`   | Portfolio Optimization with VQE                    |
-| `"qaoa"`           | Quantum Approximation Optimization Algorithm (QAOA) |
-| `"qft"`            | Quantum Fourier Transformation (QFT)               |
-| `"qftentangled"`   | QFT Entangled                                      |
-| `"qgan"`           | Quantum Generative Adversarial Network             |
-| `"qpeexact"`       | Quantum Phase Estimation (QPE) exact               |
-| `"qpeinexact"`     | Quantum Phase Estimation (QPE) inexact             |
-| `"qwalk-noancilla"` | Quantum Walk (no ancilla)                          |
-| `"qwalk-v-chain"`  | Quantum Walk (v-chain)                             |
-| `"realamprandom"`  | Real Amplitudes ansatz with Random Parameters      |
-| `"su2random"`      | Efficient SU2 ansatz with Random Parameters        |
-| `"twolocalrandom"` | Two Local ansatz with Random Parameters            |
-| `"vqe"`            | Variational Quantum Eigensolver (VQE)              |
-| `"wstate"`         | W-State                                            |
-| `"shor"`            | Shor's                                             |
-| `"hhl"`            | HHL                                                |
-| `"pricingcall"`          | Pricing Call Option                                |
-| `"pricingput"`          | Pricing Put Option                                 |
-| `"groundstate"`          | Ground State                                       |
-| `"routing"`          | Routing                                            |
-| `"tsp"`          | Travelling Salesman                                |
-
-
-
-For example, in order to obtain the *5*-qubit Deutsch-Josza benchmark on algorithm level, use the following:
-```python
-from mqt.bench import get_one_benchmark
-
-qc = get_one_benchmark("dj", "alg", 5)
-```
-
-### Locally hosting the MQT Bench Viewer
-Additionally, this python package includes the same webserver used for the hosting of the 
-[MQT Bench webpage](https://www.cda.cit.tum.de/mqtbench).
-
-After the `mqt.bench` Python package is installed via 
-```console
-(venv) $ pip install mqt.bench
-```
-the MQT Bench Viewer can be started from the terminal via
-```console
-(venv) $ mqt.bench
-```
-
-This first searches for the most recent version of the benchmark files on GitHub and offers to download them.
-Afterwards, the webserver is started locally.
-
-## Usage directly via this repository
-For that, the repository must be cloned and installed:
-```
-git clone https://github.com/cda-tum/MQTBench.git
-cd MQTBench
-pip install .
-```
-Afterwards, the package can be used as described [above](#Usage via pip package).
-
-# References:
-In case you are using MQT Bench in your work, we would be thankful if you referred to it by citing the following publication:
-```bibtex
-@misc{quetschlich2022mqtbench,
-  title={{{MQT Bench}}: Benchmarking Software and Design Automation Tools for Quantum Computing},
-  shorttitle = {{{MQT Bench}}},
-  author={Quetschlich, Nils and Burgholzer, Lukas and Wille, Robert},
-  year={2022},
-  eprint = {2204.13719},
-  eprinttype = {arxiv},
-  publisher = {arXiv},
-  note={{{MQT Bench}} is available at \url{https://www.cda.cit.tum.de/mqtbench/}},
-}
-````
-
-[1] A.Cross et al., OpenQASM 3: A broader and deeper quantum assembly language, [arXiv:2104.14722](https://arxiv.org/abs/2104.14722), 2021 
+[![PyPI](https://img.shields.io/pypi/v/mqt.bench?logo=pypi&style=flat-square)](https://pypi.org/project/mqt.bench/)
+[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://opensource.org/licenses/MIT)
+[![CI](https://img.shields.io/github/workflow/status/cda-tum/MQTBench/CodeCov?style=flat-square&logo=github&label=coverage)](https://github.com/cda-tum/MQTBench/actions/workflows/coverage.yml)
+[![Bindings](https://img.shields.io/github/workflow/status/cda-tum/MQTBench/Deploy%20to%20PyPI?style=flat-square&logo=github&label=python)](https://github.com/cda-tum/MQTBench/actions/workflows/deploy.yml)
+[![codecov](https://img.shields.io/codecov/c/github/cda-tum/MQTBench?style=flat-square&logo=codecov)](https://codecov.io/gh/cda-tum/MQTBench)
+[![Server Deployment](https://github.com/cda-tum/MQTBench/actions/workflows/server_deployment.yml/badge.svg)](https://github.com/cda-tum/MQTBench/actions/workflows/server_deployment.yml)
+
+# MQT Bench: Benchmarking Software and Design Automation Tools for Quantum Computing
+
+MQT Bench is a quantum circuit benchmark suite with cross-level support, i.e., providing the same benchmark algorithms for different abstraction levels throughout the quantum computing
+software stack.
+
+MQT Bench is part of the Munich Quantum Toolkit (MQT) developed by the [Chair for Design Automation](https://www.cda.cit.tum.de/) at the [Technical University of Munich](https://www.tum.de/) and is hosted at [https://www.cda.cit.tum.de/mqtbench/](https://www.cda.cit.tum.de/mqtbench/).
+
+[<img src="img/mqtbench.png" align="center" width="500" >](https://www.cda.cit.tum.de/mqtbench)
+
+This documentation explains how to use MQT Bench to create and filter benchmarks.
+
+## Abstraction Levels
+
+It uses the structure proposed by the openQASM 3.0 specification [[1]](https://arxiv.org/abs/2104.14722) and offers benchmarks
+on four different abstraction levels:
+
+1. Algorithmic Level
+2. Target-independent Level
+3. Target-dependent Native Gates Level
+4. Target-dependent Mapped Level
+
+An example is given in the following:
+
+1. Algorithmic Level
+
+<img src="img/level_1.png"  align="center" width="250">
+
+Variational Quantum Algorithms (VQAs) are an emerging class of quantum algorithms with a wide range of
+applications. A respective circuit is shown above, it represents an example of an ansatz function
+frequently used for Variational Quantum Eigensolvers (VQEs), a subclass of VQAs. On this abstraction
+level, the circuit is parameterized by the angles θ<sub>i</sub> of the six single-qubit gates.
+
+2. Target-independent Level
+
+<img src="img/level_2.png"  align="center" width="250">
+
+VQAs are hybrid quantum-classical algorithms, where the parameters of the quantum ansatz are
+iteratively updated by a classical optimizer analogous to conventional gradient-based optimization.
+Consider again the circuit from the previous figure. Assuming these parameters have been determined,
+e.g., θ<sub>i</sub> = −π for i = 0, ..., 5, they are now propagated and the resulting quantum circuit is
+shown above.
+
+3. Target-dependent Native Gates Level
+
+<img src="img/level_3.png"  align="center" width="250"/>
+
+Different quantum computer realizations support
+different native gate-sets. In our example, we consider the
+IBMQ Manila device as the target device which natively supports I, X, √X, Rz and CX gates.
+Consequently, the Ry gates in the previous figure have to be converted using only these native gates. In this case,
+they are substituted by a sequence of X and Rz gates (denoted as • with a phase of −π).
+
+4. Target-dependent Mapped Level
+
+<img src="img/level_4.png"  align="center" width="300"/>
+<img src="img/arch.png"  align="right" width="100"/>
+
+The architecture of the IBMQ Manila device is shown
+above on the right and it defines between which qubits a two-qubit operation may be performed.
+Since the circuit shown in the previous figure contains CX gates operating between all combination of qubits,
+there is no mapping directly matching the target architecture's layout. As a consequence,
+a non-trivial mapping followed by a round of optimization leads to the resulting circuit
+shown above on the left. This is also the reason for the different sequence of CX gates compared
+to the previous example.
+
+This circuit is now executable on the IBMQ Manila device, since all hardware induced requirements are fulfilled.
+
+## Benchmark Selection
+
+So far, the following benchmarks are implemented and provided:
+
+- Amplitude Estimation
+- Deutsch-Jozsa
+- GHZ State
+- Graph State
+- Ground State
+- Grover's (no ancilla)
+- Grover's (v-chain)
+- HHL
+- Portfolio Optimization with QAOA
+- Portfolio Optimization with VQE
+- Pricing Call Option
+- Pricing Put Option
+- Quantum Fourier Transformation (QFT)
+- QFT Entangled
+- Quantum Generative Adversarial Network (QGAN)
+- Quantum Phase Estimation (QPE) Exact
+- Quantum Phase Estimation (QPE) Inexact
+- Quantum Walk (no ancilla)
+- Quantum Walk (-chain)
+- Routing
+- Shor's
+- Travelling Salesman
+- Variational Quantum Eigensolver (VQE)
+- VQE-ansätze with random values:
+  - Efficient SU2 ansatz with Random Parameters
+  - Real Amplitudes ansatz with Random Parameters
+  - Two Local ansatz with Random Parameters
+- W-State
+
+See the [benchmark description](https://www.cda.cit.tum.de/mqtbench/benchmark_description) for further details on the individual benchmarks.
+
+## Quantum Circuit Compiler Support
+
+At the moment, two compilers are supported:
+
+1. [Qiskit](https://qiskit.org/documentation/) with the compiler settings: Optimization level 0 to 3
+2. [TKET](https://cqcl.github.io/tket/pytket/api/) with the compiler settings: Line placement and graph placement
+
+## Native Gate-Set Support
+
+So far, MQT Bench supports the following native gate-sets:
+
+1. IBMQ gate-set: _\['rz', 'sx', 'x', 'cx', 'measure'\]_
+2. Rigetti gate-set: _\['rx', 'rz', 'cz', 'measure'\]_
+3. IonQ gate-set: _\['rxx', 'rz', 'ry', 'rx', 'measure'\]_
+4. OQC gate-set: _\['rz', 'sx', 'x', 'ecr', 'measure'\]_
+
+## Device Support
+
+So far, MQT Bench supports the following devices:
+
+1. IBMQ Washington with 127 qubits
+2. IBMQ Montreal with 27 qubits
+3. Rigetti Aspen-M1 with 80 qubits
+4. IonQ with 11 qubits
+5. OQC Lucy with 8 qubits
+
+# Repository Structure
+
+- mqt/bench/utils: Directory for the utils.py file
+- mqt/bench/tests: Directory for the tests for MQT Bench
+- mqt/bench/benchmarks: On the top-level, each benchmark algorithm is included as a separate file.
+  - Additionally, folders for each IBM Qiskit application module and their respective benchmarks are listed.
+- mqt/benchviewer: This is the folder for the webpage
+  (which can be started locally and is also hosted at
+  [https://www.cda.cit.tum.de/mqtbench/](https://www.cda.cit.tum.de/mqtbench/)).
+
+```
+MQTBench/
+│ - README.md
+│
+└───mqt/bench/
+│   │───benchmark_generator.py
+│   └───utils/
+│   │   │ - utils.py
+│   │
+│   └───tests/
+│   └───benchmarks/
+│       │ - ae.py
+│       │   ...
+│       │ - wstate.py
+│       └─── qiskit_application_finance
+│       │       ...
+│       └─── qiskit_application_ml
+│       │       ...
+│       └─── qiskit_application_nature
+│       │       ...
+│       └─── qiskit_application_optimization
+│       │       ...
+│
+│───────benchviewer/
+        │ - main.py
+        │   ...
+```
+
+# Repository Usage
+
+There are three ways how to use this benchmark suite:
+
+1. Via the webpage hosted at [https://www.cda.cit.tum.de/mqtbench/](https://www.cda.cit.tum.de/mqtbench/)
+2. Via the pip package `mqt.bench`
+3. Directly via this repository
+
+Since the first way is rather self-explanatory, the other two ways are explained in more detail in the following.
+
+## Usage via pip package
+
+MQT Bench is available via [PyPI](https://pypi.org/project/mqt.bench/)
+
+```console
+(venv) $ pip install mqt.bench
+```
+
+To generate a benchmark circuit on the algorithmic level, please use the `get_one_benchmark` method:
+
+```python3
+def get_one_benchmark(
+    benchmark_name: str,
+    level: Union[str, int],
+    circuit_size: int = None,
+    benchmark_instance_name: str = None,
+    compiler: str = "qiskit",
+    compiler_settings: dict[str, dict[str, any]] = None,
+    gate_set_name: str = "ibm",
+    device_name: str = "ibm_washington",
+):
+```
+
+The available parameters are:
+
+- `benchmark_name`: `"ae"`, `"dj"`, `"grover-noancilla"`, `"grover-v-chain"`, `"ghz"`, `"graphstate"`, `"portfolioqaoa"`,
+  `"portfoliovqe"`, `"qaoa"`, `"qft"`, `"qftentangled"`, `"qgan"`, `"qpeexact"`, `"qpeinexact"`,
+  `"qwalk-noancilla"`, `"qwalk-v-chain"`, `"realamprandom"`, `"su2random"`, `"twolocalrandom"`, `"vqe"`,
+  `"wstate"`, `"shor"`, `"hhl"`, `"pricingcall"`, `"pricingput"`, `"groundstate"`, `"routing"`,
+  `"tsp"`
+- `level`: `0` or `"alg"`, `1` or `"indep"`, `2` or `"nativegates"`, `3` or `"mapped"`
+- `circuit_size`: for most of the cases this is equal to number of qubits
+  (all scalable benchmarks except `"qwalk-v-chain"` and `"grover-v-chain"`) while for all other the qubit number is higher
+- `compiler`: `"qiskit"` or `"tket"`
+- `compiler_settings`: Optimization level for `"qiskit"` (`0`-`3`), placement for `"tket"` (`lineplacement` or `graphplacement`), exemplary shown:
+
+```python
+compiler_settings = {
+    "qiskit": {"optimization_level": 1},
+}
+```
+
+or
+
+```python
+compiler_settings = {
+    "tket": {"placement": "lineplacement"},
+}
+```
+
+- `gate_set_name`: `"ibm"`, `"rigetti"`, `"ionq"`, or `"oqc"`
+- `device_name`: `"ibm_washington"`, `"ibm_montreal"`, `"aspen_m1"`, `"ionq11"`, `"lucy"`
+
+Hereby, the mappings between shortened `benchmark_name` and actual benchmarks are:
+
+| `benchmark_name`     | Actual Benchmark                                    |
+| -------------------- | --------------------------------------------------- |
+| `"ae"`               | Amplitude Estimation (AE)                           |
+| `"dj"`               | Deutsch-Jozsa                                       |
+| `"grover-noancilla"` | Grover's (no ancilla)                               |
+| `"grover-v-chain"`   | Grover's (v-chain)                                  |
+| `"ghz"`              | GHZ State                                           |
+| `"graphstate"`       | Graph State                                         |
+| `"portfolioqaoa"`    | Portfolio Optimization with QAOA                    |
+| `"portfoliovqe"`     | Portfolio Optimization with VQE                     |
+| `"qaoa"`             | Quantum Approximation Optimization Algorithm (QAOA) |
+| `"qft"`              | Quantum Fourier Transformation (QFT)                |
+| `"qftentangled"`     | QFT Entangled                                       |
+| `"qgan"`             | Quantum Generative Adversarial Network              |
+| `"qpeexact"`         | Quantum Phase Estimation (QPE) exact                |
+| `"qpeinexact"`       | Quantum Phase Estimation (QPE) inexact              |
+| `"qwalk-noancilla"`  | Quantum Walk (no ancilla)                           |
+| `"qwalk-v-chain"`    | Quantum Walk (v-chain)                              |
+| `"realamprandom"`    | Real Amplitudes ansatz with Random Parameters       |
+| `"su2random"`        | Efficient SU2 ansatz with Random Parameters         |
+| `"twolocalrandom"`   | Two Local ansatz with Random Parameters             |
+| `"vqe"`              | Variational Quantum Eigensolver (VQE)               |
+| `"wstate"`           | W-State                                             |
+| `"shor"`             | Shor's                                              |
+| `"hhl"`              | HHL                                                 |
+| `"pricingcall"`      | Pricing Call Option                                 |
+| `"pricingput"`       | Pricing Put Option                                  |
+| `"groundstate"`      | Ground State                                        |
+| `"routing"`          | Routing                                             |
+| `"tsp"`              | Travelling Salesman                                 |
+
+For example, in order to obtain the _5_-qubit Deutsch-Josza benchmark on algorithm level, use the following:
+
+```python
+from mqt.bench import get_one_benchmark
+
+qc = get_one_benchmark("dj", "alg", 5)
+```
+
+### Locally hosting the MQT Bench Viewer
+
+Additionally, this python package includes the same webserver used for the hosting of the
+[MQT Bench webpage](https://www.cda.cit.tum.de/mqtbench).
+
+After the `mqt.bench` Python package is installed via
+
+```console
+(venv) $ pip install mqt.bench
+```
+
+the MQT Bench Viewer can be started from the terminal via
+
+```console
+(venv) $ mqt.bench
+```
+
+This first searches for the most recent version of the benchmark files on GitHub and offers to download them.
+Afterwards, the webserver is started locally.
+
+## Usage directly via this repository
+
+For that, the repository must be cloned and installed:
+
+```
+git clone https://github.com/cda-tum/MQTBench.git
+cd MQTBench
+pip install .
+```
+
+Afterwards, the package can be used as described [above](#Usage via pip package).
+
+# References:
+
+In case you are using MQT Bench in your work, we would be thankful if you referred to it by citing the following publication:
+
+```bibtex
+@misc{quetschlich2022mqtbench,
+  title={{{MQT Bench}}: Benchmarking Software and Design Automation Tools for Quantum Computing},
+  shorttitle = {{{MQT Bench}}},
+  author={Quetschlich, Nils and Burgholzer, Lukas and Wille, Robert},
+  year={2022},
+  eprint = {2204.13719},
+  eprinttype = {arxiv},
+  publisher = {arXiv},
+  note={{{MQT Bench}} is available at \url{https://www.cda.cit.tum.de/mqtbench/}},
+}
+```
+
+[1] A.Cross et al., OpenQASM 3: A broader and deeper quantum assembly language, [arXiv:2104.14722](https://arxiv.org/abs/2104.14722), 2021
diff --git a/adding_url.ipynb b/adding_url.ipynb
deleted file mode 100644
index b2738d3c7..000000000
--- a/adding_url.ipynb
+++ /dev/null
@@ -1,74 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "markdown",
-   "id": "8baef7d5",
-   "metadata": {},
-   "source": [
-    "# Adding URL information to all already created files"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 17,
-   "id": "12a6b364",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# read and store first line\n",
-    "# delete first line\n",
-    "# add first line + new text\n",
-    "url_info = (\n",
-    "    \"// For more information about MQT Bench, please visit https://www.cda.cit.tum.de/mqtbench/\"\n",
-    "    + \"\\n\"\n",
-    ")\n",
-    "\n",
-    "import os\n",
-    "\n",
-    "# assign directory\n",
-    "directory = \"/Users/nils/Desktop/qasm_with_url\"\n",
-    "\n",
-    "# iterate over files in\n",
-    "# that directory\n",
-    "for filename in os.listdir(directory):\n",
-    "    path = os.path.join(directory, filename)\n",
-    "    # print(path)\n",
-    "    # checking if it is a file\n",
-    "    if \".qasm\" in path:\n",
-    "        with open(path, \"r\") as f:\n",
-    "            lines = f.readlines()\n",
-    "        with open(path, \"w\") as f:\n",
-    "            for line in lines:\n",
-    "                if \"Benchmark was created by MQT Bench\" in line.strip(\"\\n\"):\n",
-    "                    first_line = line.strip(\"\\n\")\n",
-    "                else:\n",
-    "                    f.write(line)\n",
-    "        with open(path, \"r\") as original:\n",
-    "            data = original.read()\n",
-    "        with open(path, \"w\") as modified:\n",
-    "            modified.write(first_line + \"\\n\" + url_info + data)"
-   ]
-  }
- ],
- "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.9.7"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/config.json b/config.json
index a0904ebb5..54cc454d6 100644
--- a/config.json
+++ b/config.json
@@ -177,4 +177,4 @@
     "stepsize": 1
   }
 ]
-}
\ No newline at end of file
+}
diff --git a/mqt/bench/__init__.py b/mqt/bench/__init__.py
index ebe64771d..138544811 100644
--- a/mqt/bench/__init__.py
+++ b/mqt/bench/__init__.py
@@ -1,4 +1,4 @@
 from mqt.bench.benchmark_generator import (
-    get_one_benchmark,
     create_benchmarks_from_config,
+    get_one_benchmark,
 )
diff --git a/mqt/bench/benchmark_generator.py b/mqt/bench/benchmark_generator.py
index b5b4ab360..e002c985d 100644
--- a/mqt/bench/benchmark_generator.py
+++ b/mqt/bench/benchmark_generator.py
@@ -1,28 +1,17 @@
-from qiskit import QuantumCircuit, transpile
-
-import json
+import argparse
 import importlib
+import json
 import signal
-import argparse
-import numpy as np
-import multiprocessing
-
+from os import mkdir, path
 from typing import Union
-from os import path, mkdir, remove
+
 from joblib import Parallel, delayed
+from qiskit import QuantumCircuit
 
-from mqt.bench.benchmarks import (
-    shor,
-    hhl,
-)
-from mqt.bench.benchmarks.qiskit_application_optimization import routing, tsp
-from mqt.bench.benchmarks.qiskit_application_finance import (
-    pricingcall,
-    pricingput,
-)
+from mqt.bench.benchmarks import hhl, shor
+from mqt.bench.benchmarks.qiskit_application_finance import pricingcall, pricingput
 from mqt.bench.benchmarks.qiskit_application_nature import groundstate
-
-
+from mqt.bench.benchmarks.qiskit_application_optimization import routing, tsp
 from mqt.bench.utils import qiskit_helper, tket_helper, utils
 
 
@@ -54,7 +43,7 @@ def init_module_paths():
 def create_benchmarks_from_config(cfg_path: str):
     init_module_paths()
 
-    with open(cfg_path, "r") as jsonfile:
+    with open(cfg_path) as jsonfile:
         cfg = json.load(jsonfile)
         print("Read config successful")
 
@@ -249,7 +238,7 @@ def generate_circuits_on_all_levels(qc, num_qubits, file_precheck):
     succes_generated_circuits_t_dep = generate_target_dep_level_circuit(
         qc, num_qubits, file_precheck
     )
-    return True
+    return succes_generated_circuits_t_indep or succes_generated_circuits_t_dep
 
 
 def generate_target_indep_level_circuit(
@@ -381,7 +370,7 @@ def create_scalable_qc(benchmark, num_qubits, ancillary_mode=None):
         return qc, n, file_precheck
 
     except Exception as e:
-        print("\n Problem occured in outer loop: ", benchmark, num_qubits, e)
+        print("\n Problem occurred in outer loop: ", benchmark, num_qubits, e)
 
 
 def create_shor_qc(choice: str):
@@ -399,7 +388,7 @@ def create_shor_qc(choice: str):
 
     except Exception as e:
         print(
-            "\n Problem occured in outer loop: ", "create_shor_benchmarks: ", choice, e
+            "\n Problem occurred in outer loop: ", "create_shor_benchmarks: ", choice, e
         )
 
 
@@ -411,7 +400,7 @@ def create_hhl_qc(index: int):
         return qc, qc.num_qubits, False
 
     except Exception as e:
-        print("\n Problem occured in outer loop: ", "create_hhl_benchmarks", index, e)
+        print("\n Problem occurred in outer loop: ", "create_hhl_benchmarks", index, e)
 
 
 def create_routing_qc(nodes: int):
@@ -422,7 +411,7 @@ def create_routing_qc(nodes: int):
 
     except Exception as e:
         print(
-            "\n Problem occured in outer loop: ", "create_routing_benchmarks", nodes, e
+            "\n Problem occurred in outer loop: ", "create_routing_benchmarks", nodes, e
         )
 
 
@@ -433,7 +422,7 @@ def create_tsp_qc(nodes: int):
         return qc, qc.num_qubits, False
 
     except Exception as e:
-        print("\n Problem occured in outer loop: ", "create_tsp_benchmarks", nodes, e)
+        print("\n Problem occurred in outer loop: ", "create_tsp_benchmarks", nodes, e)
 
 
 def create_groundstate_qc(choice: str):
@@ -446,7 +435,7 @@ def create_groundstate_qc(choice: str):
 
     except Exception as e:
         print(
-            "\n Problem occured in outer loop: ",
+            "\n Problem occurred in outer loop: ",
             "create_groundstate_benchmarks",
             choice,
             e,
@@ -462,7 +451,7 @@ def create_pricingcall_qc(num_uncertainty: int):
 
     except Exception as e:
         print(
-            "\n Problem occured in outer loop: ",
+            "\n Problem occurred in outer loop: ",
             "create_pricingcall_benchmarks",
             num_uncertainty,
             e,
@@ -478,7 +467,7 @@ def create_pricingput_qc(num_uncertainty: int):
 
     except Exception as e:
         print(
-            "\n Problem occured in outer loop: ",
+            "\n Problem occurred in outer loop: ",
             "create_pricingput_benchmarks",
             num_uncertainty,
             e,
@@ -499,7 +488,7 @@ def get_one_benchmark(
 
     Keyword arguments:
     benchmark_name -- name of the to be generated benchmark
-    level -- Choice of level, either as a string ("alg", "indep", "gates" or "mapped") or as a number between 0-3 where 0 corresponds to "alg" level and 3 to "mapped" leve
+    level -- Choice of level, either as a string ("alg", "indep", "gates" or "mapped") or as a number between 0-3 where 0 corresponds to "alg" level and 3 to "mapped" level
     circuit_size -- Input for the benchmark creation, in most cases this is equal to the qubit number
     benchmark_instance_name -- Input selection for some benchmarks, namely "groundstate" and "shor"
     compiler -- "qiskit" or "tket"
@@ -557,7 +546,7 @@ def get_one_benchmark(
         lib = importlib.import_module(benchmarks_module_paths_dict[benchmark_name])
         qc = lib.create_circuit(circuit_size)
 
-    if compiler_settings == None:
+    if compiler_settings is None:
         compiler_settings = {
             "qiskit": {"optimization_level": 1},
             "tket": {"placement": "lineplacement"},
diff --git a/mqt/bench/benchmarks/dj.py b/mqt/bench/benchmarks/dj.py
index 43386df6c..8ca3a0fb3 100644
--- a/mqt/bench/benchmarks/dj.py
+++ b/mqt/bench/benchmarks/dj.py
@@ -1,7 +1,7 @@
 # Code from https://qiskit.org/textbook/ch-algorithms/deutsch-jozsa.html
 
-from qiskit import QuantumCircuit
 import numpy as np
+from qiskit import QuantumCircuit
 
 
 def dj_oracle(case, n):
diff --git a/mqt/bench/benchmarks/graphstate.py b/mqt/bench/benchmarks/graphstate.py
index e70564e54..865df8080 100644
--- a/mqt/bench/benchmarks/graphstate.py
+++ b/mqt/bench/benchmarks/graphstate.py
@@ -1,8 +1,7 @@
+import networkx as nx
 from qiskit import QuantumCircuit, QuantumRegister
 from qiskit.circuit.library import GraphState
 
-import networkx as nx
-
 
 def create_circuit(num_qubits: int, degree: int = 2):
     """Returns a quantum circuit implementing a graph state.
diff --git a/mqt/bench/benchmarks/grover.py b/mqt/bench/benchmarks/grover.py
index 64305f74f..5b490e834 100644
--- a/mqt/bench/benchmarks/grover.py
+++ b/mqt/bench/benchmarks/grover.py
@@ -1,7 +1,7 @@
-from qiskit import QuantumCircuit, QuantumRegister, AncillaRegister
-from qiskit.circuit.library import GroverOperator
-from qiskit.algorithms import Grover
 import numpy as np
+from qiskit import AncillaRegister, QuantumCircuit, QuantumRegister
+from qiskit.algorithms import Grover
+from qiskit.circuit.library import GroverOperator
 
 
 def create_circuit(num_qubits: int, ancillary_mode: str = "noancilla"):
diff --git a/mqt/bench/benchmarks/hhl.py b/mqt/bench/benchmarks/hhl.py
index 5fa7e8199..07977de1b 100644
--- a/mqt/bench/benchmarks/hhl.py
+++ b/mqt/bench/benchmarks/hhl.py
@@ -1,10 +1,10 @@
 # Code based on https://qiskit.org/textbook/ch-applications/hhl_tutorial.html
 
 import numpy as np
+from qiskit.algorithms.linear_solvers.hhl import HHL
 from qiskit.algorithms.linear_solvers.matrices.tridiagonal_toeplitz import (
     TridiagonalToeplitz,
 )
-from qiskit.algorithms.linear_solvers.hhl import HHL
 
 
 def create_circuit(num_qubits: int):
diff --git a/mqt/bench/benchmarks/qaoa.py b/mqt/bench/benchmarks/qaoa.py
index 662956ff8..e6dca4ec5 100644
--- a/mqt/bench/benchmarks/qaoa.py
+++ b/mqt/bench/benchmarks/qaoa.py
@@ -1,10 +1,9 @@
 # Code from https://github.com/qiskit-community/qiskit-application-modules-demo-sessions/blob/main/qiskit-optimization/qiskit-optimization-demo.ipynb
 
 from qiskit import Aer
-from qiskit.utils import QuantumInstance
-from qiskit_optimization.algorithms import MinimumEigenOptimizer
 from qiskit.algorithms import QAOA
 from qiskit.algorithms.optimizers import SLSQP
+from qiskit.utils import QuantumInstance
 
 from mqt.bench.utils.utils import get_examplary_max_cut_qp
 
diff --git a/mqt/bench/benchmarks/qft.py b/mqt/bench/benchmarks/qft.py
index a82f9711a..7eeb3f609 100644
--- a/mqt/bench/benchmarks/qft.py
+++ b/mqt/bench/benchmarks/qft.py
@@ -1,4 +1,4 @@
-from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
+from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
 from qiskit.circuit.library import QFT
 
 
diff --git a/mqt/bench/benchmarks/qftentangled.py b/mqt/bench/benchmarks/qftentangled.py
index 9cf10566f..5538ec86b 100644
--- a/mqt/bench/benchmarks/qftentangled.py
+++ b/mqt/bench/benchmarks/qftentangled.py
@@ -1,5 +1,5 @@
-from qiskit.circuit.library import QFT
 from qiskit import QuantumCircuit, QuantumRegister
+from qiskit.circuit.library import QFT
 
 
 def create_circuit(num_qubits: int):
diff --git a/mqt/bench/benchmarks/qiskit_application_finance/portfolioqaoa.py b/mqt/bench/benchmarks/qiskit_application_finance/portfolioqaoa.py
index 48d4e2161..d87121d97 100644
--- a/mqt/bench/benchmarks/qiskit_application_finance/portfolioqaoa.py
+++ b/mqt/bench/benchmarks/qiskit_application_finance/portfolioqaoa.py
@@ -1,10 +1,14 @@
 # Code based on https://qiskit.org/documentation/tutorials/finance/01_portfolio_optimization.html
 
+import datetime
+
 from qiskit import Aer
-from qiskit.utils import QuantumInstance
 from qiskit.algorithms import QAOA
 from qiskit.algorithms.optimizers import COBYLA
-import datetime
+from qiskit.utils import QuantumInstance
+from qiskit_finance.applications import PortfolioOptimization
+from qiskit_finance.data_providers import RandomDataProvider
+from qiskit_optimization.converters import QuadraticProgramToQubo
 
 
 def create_circuit(num_qubits: int):
@@ -13,19 +17,6 @@ def create_circuit(num_qubits: int):
     Keyword arguments:
     num_qubits -- number of qubits of the returned quantum circuit
     """
-    try:
-        from qiskit_finance.applications import PortfolioOptimization
-        from qiskit_finance.data_providers import RandomDataProvider
-
-    except:
-        print("Please install qiskit_finance.")
-        return None
-
-    try:
-        from qiskit_optimization.converters import QuadraticProgramToQubo
-    except:
-        print("Please install qiskit_optimization.")
-        return None
 
     # set number of assets (= number of qubits)
     num_assets = num_qubits
@@ -43,7 +34,6 @@ def create_circuit(num_qubits: int):
 
     q = 0.5  # set risk factor
     budget = num_assets // 2  # set budget
-    penalty = num_assets  # set parameter to scale the budget penalty term
 
     portfolio = PortfolioOptimization(
         expected_returns=mu, covariances=sigma, risk_factor=q, budget=budget
diff --git a/mqt/bench/benchmarks/qiskit_application_finance/portfoliovqe.py b/mqt/bench/benchmarks/qiskit_application_finance/portfoliovqe.py
index 1a50511bb..45c7f0cec 100644
--- a/mqt/bench/benchmarks/qiskit_application_finance/portfoliovqe.py
+++ b/mqt/bench/benchmarks/qiskit_application_finance/portfoliovqe.py
@@ -1,12 +1,15 @@
 # Code based on https://qiskit.org/documentation/tutorials/finance/01_portfolio_optimization.html
 
+import datetime
+
 from qiskit import Aer
-from qiskit.circuit.library import TwoLocal
-from qiskit.utils import QuantumInstance
 from qiskit.algorithms import VQE
 from qiskit.algorithms.optimizers import COBYLA
-
-import datetime
+from qiskit.circuit.library import TwoLocal
+from qiskit.utils import QuantumInstance
+from qiskit_finance.applications import PortfolioOptimization
+from qiskit_finance.data_providers import RandomDataProvider
+from qiskit_optimization.converters import QuadraticProgramToQubo
 
 
 def create_circuit(num_qubits: int):
@@ -15,19 +18,6 @@ def create_circuit(num_qubits: int):
     Keyword arguments:
     num_qubits -- number of qubits of the returned quantum circuit
     """
-    try:
-        from qiskit_finance.applications import PortfolioOptimization
-        from qiskit_finance.data_providers import RandomDataProvider
-
-    except:
-        print("Please install qiskit_finance.")
-        return None
-
-    try:
-        from qiskit_optimization.converters import QuadraticProgramToQubo
-    except:
-        print("Please install qiskit_optimization.")
-        return None
 
     # set number of assets (= number of qubits)
     num_assets = num_qubits
@@ -45,7 +35,6 @@ def create_circuit(num_qubits: int):
 
     q = 0.5  # set risk factor
     budget = num_assets // 2  # set budget
-    penalty = num_assets  # set parameter to scale the budget penalty term
 
     portfolio = PortfolioOptimization(
         expected_returns=mu, covariances=sigma, risk_factor=q, budget=budget
diff --git a/mqt/bench/benchmarks/qiskit_application_finance/pricingcall.py b/mqt/bench/benchmarks/qiskit_application_finance/pricingcall.py
index fb5304c5d..5f509dda0 100644
--- a/mqt/bench/benchmarks/qiskit_application_finance/pricingcall.py
+++ b/mqt/bench/benchmarks/qiskit_application_finance/pricingcall.py
@@ -2,6 +2,8 @@
 
 import numpy as np
 from qiskit.algorithms import IterativeAmplitudeEstimation
+from qiskit_finance.applications.estimation import EuropeanCallPricing
+from qiskit_finance.circuit.library import LogNormalDistribution
 
 
 def create_circuit(num_uncertainty_qubits: int = 5):
@@ -11,13 +13,6 @@ def create_circuit(num_uncertainty_qubits: int = 5):
     Keyword arguments:
     num_uncertainty_qubits -- number of qubits to measure uncertainty
     """
-    try:
-        from qiskit_finance.applications.estimation import EuropeanCallPricing
-        from qiskit_finance.circuit.library import LogNormalDistribution
-
-    except:
-        print("Please install qiskit_finance.")
-        return None
 
     num_uncertainty_qubits = num_uncertainty_qubits
 
diff --git a/mqt/bench/benchmarks/qiskit_application_finance/pricingput.py b/mqt/bench/benchmarks/qiskit_application_finance/pricingput.py
index 8e8be96f4..084a652d8 100644
--- a/mqt/bench/benchmarks/qiskit_application_finance/pricingput.py
+++ b/mqt/bench/benchmarks/qiskit_application_finance/pricingput.py
@@ -1,8 +1,9 @@
 # Code based on https://qiskit.org/documentation/tutorials/finance/04_european_put_option_pricing.html
 
 import numpy as np
-from qiskit.algorithms import IterativeAmplitudeEstimation, EstimationProblem
+from qiskit.algorithms import EstimationProblem, IterativeAmplitudeEstimation
 from qiskit.circuit.library import LinearAmplitudeFunction
+from qiskit_finance.circuit.library import LogNormalDistribution
 
 
 def create_circuit(num_uncertainty_qubits: int = 5):
@@ -12,12 +13,6 @@ def create_circuit(num_uncertainty_qubits: int = 5):
     num_uncertainty_qubits -- number of qubits to measure uncertainty
     """
 
-    try:
-        from qiskit_finance.circuit.library import LogNormalDistribution
-    except:
-        print("Please install qiskit_finance.")
-        return None
-
     num_uncertainty_qubits = num_uncertainty_qubits
 
     # parameters for considered random distribution
diff --git a/mqt/bench/benchmarks/qiskit_application_ml/qgan.py b/mqt/bench/benchmarks/qiskit_application_ml/qgan.py
index 9f8e7b4db..749577900 100644
--- a/mqt/bench/benchmarks/qiskit_application_ml/qgan.py
+++ b/mqt/bench/benchmarks/qiskit_application_ml/qgan.py
@@ -4,6 +4,8 @@
 from qiskit import Aer
 from qiskit.circuit.library import TwoLocal
 from qiskit.utils import QuantumInstance, algorithm_globals
+from qiskit_finance.circuit.library import UniformDistribution
+from qiskit_machine_learning.algorithms import QGAN, NumPyDiscriminator
 
 
 def create_circuit(num_qubits: int):
@@ -12,17 +14,6 @@ def create_circuit(num_qubits: int):
     Keyword arguments:
     num_qubits -- number of qubits of the returned quantum circuit
     """
-    try:
-        from qiskit_finance.circuit.library import UniformDistribution
-    except:
-        print("Please install qiskit_finance.")
-        return None
-
-    try:
-        from qiskit_machine_learning.algorithms import NumPyDiscriminator, QGAN
-    except:
-        print("Please install qiskit_machine_learning.")
-        return None
 
     seed = 10
     np.random.seed = seed
@@ -86,7 +77,7 @@ def create_circuit(num_qubits: int):
     discriminator = NumPyDiscriminator(len(num_qubits))
     qgan.set_discriminator(discriminator)
 
-    result = qgan.run(quantum_instance)
+    qgan.run(quantum_instance)
 
     param_values = qgan.generator.parameter_values
     qc = qgan.generator.construct_circuit(params=param_values)
diff --git a/mqt/bench/benchmarks/qiskit_application_nature/groundstate.py b/mqt/bench/benchmarks/qiskit_application_nature/groundstate.py
index 04e2953fb..c61a64fb6 100644
--- a/mqt/bench/benchmarks/qiskit_application_nature/groundstate.py
+++ b/mqt/bench/benchmarks/qiskit_application_nature/groundstate.py
@@ -2,10 +2,17 @@
 
 
 from qiskit import Aer
-from qiskit.utils import QuantumInstance
-from qiskit.circuit.library import TwoLocal
 from qiskit.algorithms import VQE
 from qiskit.algorithms.optimizers import COBYLA
+from qiskit.circuit.library import TwoLocal
+from qiskit.utils import QuantumInstance
+from qiskit_nature.converters.second_quantization import QubitConverter
+from qiskit_nature.drivers.second_quantization import (
+    ElectronicStructureDriverType,
+    ElectronicStructureMoleculeDriver,
+)
+from qiskit_nature.mappers.second_quantization import JordanWignerMapper
+from qiskit_nature.problems.second_quantization import ElectronicStructureProblem
 
 
 def create_circuit(molecule, basis: str = "sto3g"):
@@ -15,22 +22,6 @@ def create_circuit(molecule, basis: str = "sto3g"):
     molecule -- Molecule for which the ground state shall be estimated.
     """
 
-    try:
-        from qiskit_nature.drivers import Molecule
-        from qiskit_nature.drivers.second_quantization import (
-            ElectronicStructureDriverType,
-            ElectronicStructureMoleculeDriver,
-        )
-        from qiskit_nature.problems.second_quantization import (
-            ElectronicStructureProblem,
-        )
-        from qiskit_nature.converters.second_quantization import QubitConverter
-        from qiskit_nature.mappers.second_quantization import JordanWignerMapper
-        from qiskit_nature.algorithms import GroundStateEigensolver
-    except:
-        print("Please install qiskit_nature.")
-        return None
-
     driver = ElectronicStructureMoleculeDriver(
         molecule, basis=basis, driver_type=ElectronicStructureDriverType.PYSCF
     )
diff --git a/mqt/bench/benchmarks/qiskit_application_optimization/routing.py b/mqt/bench/benchmarks/qiskit_application_optimization/routing.py
index d03c128e3..6fa11237c 100644
--- a/mqt/bench/benchmarks/qiskit_application_optimization/routing.py
+++ b/mqt/bench/benchmarks/qiskit_application_optimization/routing.py
@@ -1,11 +1,12 @@
 # Code based on https://qiskit.org/documentation/tutorials/optimization/7_examples_vehicle_routing.html
 
 import numpy as np
-
 from qiskit import Aer
-from qiskit.utils import QuantumInstance, algorithm_globals
 from qiskit.algorithms import VQE
 from qiskit.algorithms.optimizers import SLSQP
+from qiskit.utils import QuantumInstance, algorithm_globals
+from qiskit_optimization import QuadraticProgram
+from qiskit_optimization.algorithms import MinimumEigenOptimizer
 
 
 class Initializer:
@@ -92,17 +93,12 @@ def binary_representation(self, x_sol=0):
                 + c
             )
             cost = fun(x_sol)
-        except:
+        except Exception:
             cost = 0
 
         return q, g, c, cost
 
     def construct_problem(self, q, g, c):
-        try:
-            from qiskit_optimization import QuadraticProgram
-        except:
-            print("Please install qiskit_optimization.")
-            return None
 
         qp = QuadraticProgram()
         for i in range(self.n * (self.n - 1)):
@@ -114,12 +110,6 @@ def construct_problem(self, q, g, c):
 
     def solve_problem(self, qp):
 
-        try:
-            from qiskit_optimization.algorithms import MinimumEigenOptimizer
-        except:
-            print("Please install qiskit_optimization.")
-            return None
-
         algorithm_globals.random_seed = 10
         quantum_instance = QuantumInstance(
             Aer.get_backend("aer_simulator"),
diff --git a/mqt/bench/benchmarks/qiskit_application_optimization/tsp.py b/mqt/bench/benchmarks/qiskit_application_optimization/tsp.py
index 2d3ff581b..6c9373d51 100644
--- a/mqt/bench/benchmarks/qiskit_application_optimization/tsp.py
+++ b/mqt/bench/benchmarks/qiskit_application_optimization/tsp.py
@@ -1,10 +1,12 @@
 # Code based on https://qiskit.org/documentation/optimization/tutorials/06_examples_max_cut_and_tsp.html
 
 from qiskit import Aer
-from qiskit.circuit.library import TwoLocal
 from qiskit.algorithms import VQE
 from qiskit.algorithms.optimizers import SPSA
-from qiskit.utils import algorithm_globals, QuantumInstance
+from qiskit.circuit.library import TwoLocal
+from qiskit.utils import QuantumInstance, algorithm_globals
+from qiskit_optimization.applications import Tsp
+from qiskit_optimization.converters import QuadraticProgramToQubo
 
 
 def create_circuit(num_nodes: int):
@@ -14,14 +16,6 @@ def create_circuit(num_nodes: int):
     num_nodes -- number of to be visited nodes
     """
 
-    try:
-        from qiskit_optimization.algorithms import MinimumEigenOptimizer
-        from qiskit_optimization.converters import QuadraticProgramToQubo
-        from qiskit_optimization.applications import Tsp
-    except:
-        print("Please install qiskit_optimization.")
-        return None
-
     # Generating a graph of 3 nodes
     n = num_nodes
     tsp = Tsp.create_random_instance(n, seed=10)
diff --git a/mqt/bench/benchmarks/qpeexact.py b/mqt/bench/benchmarks/qpeexact.py
index cf78574ae..5d8e1c2c5 100644
--- a/mqt/bench/benchmarks/qpeexact.py
+++ b/mqt/bench/benchmarks/qpeexact.py
@@ -1,9 +1,8 @@
 import random
-import numpy as np
-
 from fractions import Fraction
 
-from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
+import numpy as np
+from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
 from qiskit.circuit.library import QFT
 
 
diff --git a/mqt/bench/benchmarks/qpeinexact.py b/mqt/bench/benchmarks/qpeinexact.py
index 128512412..ce7391a69 100644
--- a/mqt/bench/benchmarks/qpeinexact.py
+++ b/mqt/bench/benchmarks/qpeinexact.py
@@ -1,9 +1,8 @@
 import random
-import numpy as np
-
 from fractions import Fraction
 
-from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
+import numpy as np
+from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
 from qiskit.circuit.library import QFT
 
 
diff --git a/mqt/bench/benchmarks/qwalk.py b/mqt/bench/benchmarks/qwalk.py
index 76e83e031..c06991b98 100644
--- a/mqt/bench/benchmarks/qwalk.py
+++ b/mqt/bench/benchmarks/qwalk.py
@@ -1,4 +1,4 @@
-from qiskit import QuantumCircuit, QuantumRegister, AncillaRegister
+from qiskit import AncillaRegister, QuantumCircuit, QuantumRegister
 
 
 def create_circuit(
diff --git a/mqt/bench/benchmarks/realamprandom.py b/mqt/bench/benchmarks/realamprandom.py
index 0a56805f6..f3b49ce39 100644
--- a/mqt/bench/benchmarks/realamprandom.py
+++ b/mqt/bench/benchmarks/realamprandom.py
@@ -1,5 +1,5 @@
-from qiskit.circuit.library import RealAmplitudes
 import numpy as np
+from qiskit.circuit.library import RealAmplitudes
 
 
 def create_circuit(num_qubits: int):
diff --git a/mqt/bench/benchmarks/su2random.py b/mqt/bench/benchmarks/su2random.py
index e7757fffb..25cb00d67 100644
--- a/mqt/bench/benchmarks/su2random.py
+++ b/mqt/bench/benchmarks/su2random.py
@@ -1,5 +1,5 @@
-from qiskit.circuit.library import EfficientSU2
 import numpy as np
+from qiskit.circuit.library import EfficientSU2
 
 
 def create_circuit(num_qubits: int):
diff --git a/mqt/bench/benchmarks/twolocalrandom.py b/mqt/bench/benchmarks/twolocalrandom.py
index d5c782515..6aaae19f0 100644
--- a/mqt/bench/benchmarks/twolocalrandom.py
+++ b/mqt/bench/benchmarks/twolocalrandom.py
@@ -1,5 +1,5 @@
-from qiskit.circuit.library import TwoLocal
 import numpy as np
+from qiskit.circuit.library import TwoLocal
 
 
 def create_circuit(num_qubits: int):
diff --git a/mqt/bench/benchmarks/vqe.py b/mqt/bench/benchmarks/vqe.py
index 784d78276..0f53759f7 100644
--- a/mqt/bench/benchmarks/vqe.py
+++ b/mqt/bench/benchmarks/vqe.py
@@ -1,13 +1,13 @@
 # Code based on https://github.com/qiskit-community/qiskit-application-modules-demo-sessions/blob/main/qiskit-optimization/qiskit-optimization-demo.ipynb
 
-from mqt.bench.utils.utils import get_examplary_max_cut_qp
+from qiskit import Aer
 from qiskit.algorithms import VQE
 from qiskit.algorithms.optimizers import SLSQP
-from qiskit_optimization.algorithms import MinimumEigenOptimizer
 from qiskit.circuit.library import RealAmplitudes
-from qiskit import Aer
 from qiskit.utils import QuantumInstance
 
+from mqt.bench.utils.utils import get_examplary_max_cut_qp
+
 
 def create_circuit(num_qubits: int):
     """Returns a quantum circuit implementing the Variational Quantum Eigensolver Algorithm for a specific max-cut
diff --git a/mqt/bench/benchmarks/wstate.py b/mqt/bench/benchmarks/wstate.py
index 6ff8acdd6..fbad4d809 100644
--- a/mqt/bench/benchmarks/wstate.py
+++ b/mqt/bench/benchmarks/wstate.py
@@ -1,5 +1,5 @@
 import numpy as np
-from qiskit import QuantumRegister, QuantumCircuit
+from qiskit import QuantumCircuit, QuantumRegister
 
 
 def create_circuit(num_qubits: int):
diff --git a/mqt/bench/utils/qiskit_helper.py b/mqt/bench/utils/qiskit_helper.py
index 0bd5887dc..85c5a7beb 100644
--- a/mqt/bench/utils/qiskit_helper.py
+++ b/mqt/bench/utils/qiskit_helper.py
@@ -1,8 +1,8 @@
-from qiskit import QuantumCircuit, __qiskit_version__
-from qiskit.compiler import transpile
-
 from os import path
 
+from qiskit import QuantumCircuit
+from qiskit.compiler import transpile
+
 from mqt.bench.utils import utils
 
 
diff --git a/mqt/bench/utils/tket_helper.py b/mqt/bench/utils/tket_helper.py
index c67b0df44..423b84d38 100644
--- a/mqt/bench/utils/tket_helper.py
+++ b/mqt/bench/utils/tket_helper.py
@@ -1,21 +1,18 @@
-from pytket.passes import auto_rebase_pass
+from os import path
 
-from pytket import OpType
+from pytket import OpType, architecture, circuit
+from pytket.extensions.qiskit import qiskit_to_tk
 from pytket.passes import (
+    FullPeepholeOptimise,
     PlacementPass,
     RoutingPass,
-    FullPeepholeOptimise,
     auto_rebase_pass,
 )
 from pytket.placement import GraphPlacement, LinePlacement
-from pytket.qasm import circuit_to_qasm_str, circuit_from_qasm_str
-from pytket import architecture, circuit
+from pytket.qasm import circuit_to_qasm_str
+from qiskit import QuantumCircuit, transpile
 
 from mqt.bench.utils import utils
-from os import path
-from pytket.extensions.qiskit import qiskit_to_tk
-
-from qiskit import QuantumCircuit, transpile
 
 
 def get_rebase(gate_set_name: str, get_gatenames: bool = False):
@@ -103,7 +100,7 @@ def get_indep_level(
     ):
 
         try:
-            gates = list(set(utils.get_openqasm_gates()) - set(["rccx"]))
+            gates = list(set(utils.get_openqasm_gates()) - {"rccx"})
             qc = transpile(
                 qc,
                 basis_gates=gates,
@@ -168,7 +165,7 @@ def get_native_gates_level(
     ):
 
         try:
-            gates = list(set(utils.get_openqasm_gates()) - set(["rccx"]))
+            gates = list(set(utils.get_openqasm_gates()) - {"rccx"})
             qc = transpile(
                 qc,
                 basis_gates=gates,
@@ -255,7 +252,7 @@ def get_mapped_level(
     ):
         cmap = utils.get_cmap_from_devicename(device_name)
         try:
-            gates = list(set(utils.get_openqasm_gates()) - set(["rccx"]))
+            gates = list(set(utils.get_openqasm_gates()) - {"rccx"})
             qc = transpile(
                 qc,
                 basis_gates=gates,
diff --git a/mqt/bench/utils/utils.py b/mqt/bench/utils/utils.py
index f8f584a27..3af47825a 100644
--- a/mqt/bench/utils/utils.py
+++ b/mqt/bench/utils/utils.py
@@ -1,23 +1,13 @@
-from qiskit import QuantumCircuit, __qiskit_version__
-from qiskit.algorithms import EstimationProblem
-
-from pytket import *
-
+import os
+import subprocess
 from datetime import date
 
-
-from zipfile import ZipFile, ZIP_LZMA
-
-
 import networkx as nx
 import numpy as np
-import os
-import subprocess
-
-from qiskit.test.mock import (
-    FakeMontreal,
-    FakeWashington,
-)
+from pytket import __version__ as __tket_version__
+from qiskit import QuantumCircuit, __qiskit_version__
+from qiskit.algorithms import EstimationProblem
+from qiskit.test.mock import FakeMontreal, FakeWashington
 
 qasm_path = "mqt/benchviewer/static/files/qasm_output/"
 
@@ -41,7 +31,7 @@ def get_examplary_max_cut_qp(n_nodes: int, degree: int = 2):
     """
     try:
         from qiskit_optimization.applications import Maxcut
-    except:
+    except Exception:
 
         print("Please install qiskit_optimization.")
         return None
@@ -247,7 +237,7 @@ def save_as_qasm(
         if "qiskit" in filename:
             f.write("// Qiskit version: " + str(__qiskit_version__) + "\n")
         elif "tket" in filename:
-            f.write("// TKET version: " + str(pytket.__version__) + "\n")
+            f.write("// TKET version: " + str(__tket_version__) + "\n")
 
         if gate_set:
             f.write("// Used Gate Set: " + str(gate_set) + "\n")
@@ -288,7 +278,7 @@ def get_molecule(benchmark_instance_name: str):
     """Returns a Molecule object depending on the parameter value."""
     try:
         from qiskit_nature.drivers import Molecule
-    except:
+    except Exception:
         print("Please install qiskit_nature.")
         return None
     m_1 = Molecule(
@@ -321,7 +311,7 @@ def postprocess_ocr_qasm_files():
         f = os.path.join(directory, filename)
         # checking if it is a file
         if "oqc_lucy_qiskit" in f or "oqc_qiskit" in f:
-            with open(f, "r") as f:
+            with open(f) as f:
                 lines = f.readlines()
             new_name = os.path.join(directory, filename)
             with open(new_name, "w") as f:
@@ -338,11 +328,11 @@ def postprocess_ocr_qasm_files():
                             "gate ecr q0,q1 { rzx(pi/4) q0,q1; x q0; rzx(-pi/4) q0,q1; }\n"
                         )
 
-            qc = QuantumCircuit.from_qasm_file(new_name)
+            assert QuantumCircuit.from_qasm_file(new_name)
             print("New qasm file for: ", new_name)
 
         elif "oqc_lucy_tket" in f or "oqc_tket" in f:
-            with open(f, "r") as f:
+            with open(f) as f:
                 lines = f.readlines()
             new_name = os.path.join(directory, filename)
             with open(new_name, "w") as f:
@@ -357,7 +347,7 @@ def postprocess_ocr_qasm_files():
                         f.write(
                             "gate ecr q0,q1 { rzx(pi/4) q0,q1; x q0; rzx(-pi/4) q0,q1; }\n"
                         )
-            qc = QuantumCircuit.from_qasm_file(new_name)
+            assert QuantumCircuit.from_qasm_file(new_name)
             print("New qasm file for: ", new_name)
 
 
diff --git a/mqt/benchviewer/main.py b/mqt/benchviewer/main.py
index 522e76839..4fad354bb 100644
--- a/mqt/benchviewer/main.py
+++ b/mqt/benchviewer/main.py
@@ -1,8 +1,11 @@
-from flask import Flask, jsonify, render_template, request, send_from_directory, cli
-from mqt.benchviewer.src.backend import *
-from datetime import datetime
 import logging
+import os
 import sys
+from datetime import datetime
+
+from flask import Flask, cli, jsonify, render_template, request, send_from_directory
+
+from mqt.benchviewer.src import backend
 
 app = Flask(__name__)
 PREFIX = "/mqtbench/"
@@ -19,11 +22,11 @@ def init(
         print("target_location is not writable. Please specify a different path.")
         return False
 
-    res_zip = read_mqtbench_all_zip(skip_question, target_location)
+    res_zip = backend.read_mqtbench_all_zip(skip_question, target_location)
     if not res_zip:
         return False
 
-    res_db = init_database()
+    res_db = backend.init_database()
     if not res_db:
         return False
 
@@ -45,8 +48,8 @@ def index():
 
     return render_template(
         "index.html",
-        benchmarks=benchmarks,
-        nonscalable_benchmarks=nonscalable_benchmarks,
+        benchmarks=backend.benchmarks,
+        nonscalable_benchmarks=backend.nonscalable_benchmarks,
     )
 
 
@@ -76,8 +79,8 @@ def download_data():
     """Triggers the downloading process of all benchmarks according to the user's input."""
     if request.method == "POST":
         data = request.form
-        prepared_data = prepareFormInput(data)
-        file_paths = get_selected_file_paths(prepared_data)
+        prepared_data = backend.prepareFormInput(data)
+        file_paths = backend.get_selected_file_paths(prepared_data)
         timestamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
 
         if ACTIVATE_LOGGING:
@@ -90,7 +93,7 @@ def download_data():
 
         if file_paths:
             return app.response_class(
-                generate_zip_ephemeral_chunks(file_paths),
+                backend.generate_zip_ephemeral_chunks(file_paths),
                 mimetype="application/zip",
                 headers={
                     "Content-Disposition": 'attachment; filename="MQTBench_{}.zip"'.format(
@@ -102,8 +105,8 @@ def download_data():
 
     return render_template(
         "index.html",
-        benchmarks=benchmarks,
-        nonscalable_benchmarks=nonscalable_benchmarks,
+        benchmarks=backend.benchmarks,
+        nonscalable_benchmarks=backend.nonscalable_benchmarks,
     )
 
 
@@ -135,8 +138,8 @@ def get_num_benchmarks():
 
     if request.method == "POST":
         data = request.form
-        prepared_data = prepareFormInput(data)
-        file_paths = get_selected_file_paths(prepared_data)
+        prepared_data = backend.prepareFormInput(data)
+        file_paths = backend.get_selected_file_paths(prepared_data)
         num = len(file_paths)
         data = {"num_selected": num}
         return jsonify(data)
diff --git a/mqt/benchviewer/src/backend.py b/mqt/benchviewer/src/backend.py
index 727dc032d..77c759f78 100644
--- a/mqt/benchviewer/src/backend.py
+++ b/mqt/benchviewer/src/backend.py
@@ -1,15 +1,15 @@
 import io
 import os
 import re
+import sys
 from pathlib import Path
-from typing import List, Iterable
-from zipfile import ZipFile, ZIP_DEFLATED
+from typing import Iterable, List
+from zipfile import ZIP_DEFLATED, ZipFile
 
 import pandas as pd
 import requests
-import sys
-from tqdm import tqdm
 from packaging import version
+from tqdm import tqdm
 
 if sys.version_info < (3, 10, 0):
     import importlib_metadata as metadata
@@ -168,7 +168,7 @@ def read_mqtbench_all_zip(
 
     try:
         mqtbench_module_version = metadata.version("mqt.bench")
-    except Exception as e:
+    except Exception:
         print(
             "'mqt.bench' is most likely not installed. Please run 'pip install . or pip install mqt.bench'."
         )
@@ -267,7 +267,7 @@ def handle_downloading_benchmarks(target_location: str, download_url: str):
         for data in r.iter_content(chunk_size=1024):
             size = f.write(data)
             bar.update(size)
-    print("Download completed to {}. Server is starting now.".format(fname))
+    print(f"Download completed to {fname}. Server is starting now.")
 
 
 def get_tket_settings(filename: str):
@@ -406,13 +406,13 @@ def filterDatabase(filterCriteria: tuple, database: pd.DataFrame):
 
         if indep_qiskit_compiler:
             db_tmp1 = db_tmp.loc[
-                (db_tmp["indep_flag"] == True) & (db_tmp["compiler"] == "qiskit")
+                (db_tmp["indep_flag"]) & (db_tmp["compiler"] == "qiskit")
             ]
             db_filtered = pd.concat([db_filtered, db_tmp1])
 
         if indep_tket_compiler:
             db_tmp2 = db_tmp.loc[
-                (db_tmp["indep_flag"] == True) & (db_tmp["compiler"] == "tket")
+                (db_tmp["indep_flag"]) & (db_tmp["compiler"] == "tket")
             ]
             db_filtered = pd.concat([db_filtered, db_tmp2])
 
@@ -420,7 +420,7 @@ def filterDatabase(filterCriteria: tuple, database: pd.DataFrame):
             for gate_set in native_gatesets:
                 for opt_lvl in native_qiskit_opt_lvls:
                     db_tmp3 = db_tmp.loc[
-                        (db_tmp["nativegates_flag"] == True)
+                        (db_tmp["nativegates_flag"])
                         & (db_tmp["gate_set"] == gate_set)
                         & (db_tmp["compiler"] == "qiskit")
                         & (db_tmp["compiler_settings"] == opt_lvl)
@@ -430,7 +430,7 @@ def filterDatabase(filterCriteria: tuple, database: pd.DataFrame):
         if nativegates_tket_compiler:
             for gate_set in native_gatesets:
                 db_tmp4 = db_tmp.loc[
-                    (db_tmp["nativegates_flag"] == True)
+                    (db_tmp["nativegates_flag"])
                     & (db_tmp["gate_set"] == gate_set)
                     & (db_tmp["compiler"] == "tket")
                 ]
@@ -440,7 +440,7 @@ def filterDatabase(filterCriteria: tuple, database: pd.DataFrame):
             for opt_lvl in mapped_qiskit_opt_lvls:
                 for device in mapped_devices:
                     db_tmp5 = db_tmp.loc[
-                        (db_tmp["mapped_flag"] == True)
+                        (db_tmp["mapped_flag"])
                         & (db_tmp["target_device"] == device)
                         & (db_tmp["compiler"] == "qiskit")
                         & (db_tmp["compiler_settings"] == opt_lvl)
@@ -451,7 +451,7 @@ def filterDatabase(filterCriteria: tuple, database: pd.DataFrame):
             for placement in mapped_tket_placements:
                 for device in mapped_devices:
                     db_tmp6 = db_tmp.loc[
-                        (db_tmp["mapped_flag"] == True)
+                        (db_tmp["mapped_flag"])
                         & (db_tmp["target_device"] == device)
                         & (db_tmp["compiler"] == "tket")
                         & (db_tmp["compiler_settings"] == placement)
@@ -563,7 +563,7 @@ def init_database():
 
     print("Initiating database...")
     database = createDatabase(MQTBENCH_ALL_ZIP)
-    print("... done: {} benchmarks.".format(len(database)))
+    print(f"... done: {len(database)} benchmarks.")
 
     if not database.empty:
         return True
diff --git a/mqt/benchviewer/static/TUM_Logo_blau_rgb_s.svg b/mqt/benchviewer/static/TUM_Logo_blau_rgb_s.svg
index 2b3f9fe7e..82e109275 100644
--- a/mqt/benchviewer/static/TUM_Logo_blau_rgb_s.svg
+++ b/mqt/benchviewer/static/TUM_Logo_blau_rgb_s.svg
@@ -9,4 +9,4 @@
             <path d="M405,9.13352234e-15 L370,2.70412665e-15 L370,320 L290,320 L290,1.5562918e-14 L255,9.13352234e-15 L0,1.35206332e-15 L0,70 L70,70 L70,390 L140,390 L140,70 L220,70 L220,390 L255,390 L405,390 L440,390 L440,70 L520,70 L520,390 L590,390 L590,70 L670,70 L670,390 L740,390 L740,35 L740,1.35206332e-15 L405,1.35206332e-15 Z" id="Rectangle-1" sketch:type="MSShapeGroup"></path>
         </g>
     </g>
-</svg>
\ No newline at end of file
+</svg>
diff --git a/mqt/benchviewer/templates/benchmark_description.html b/mqt/benchviewer/templates/benchmark_description.html
index f112855ce..1a48b1e19 100644
--- a/mqt/benchviewer/templates/benchmark_description.html
+++ b/mqt/benchviewer/templates/benchmark_description.html
@@ -1,327 +1,434 @@
 <!doctype html>
 <html lang="en">
-<head>
+  <head>
     <!-- Required meta tags -->
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta charset="utf-8" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1, shrink-to-fit=no"
+    />
 
     <!-- Bootstrap CSS -->
-    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
-          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
+    <link
+      href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
+      rel="stylesheet"
+      integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
+      crossorigin="anonymous"
+    />
 
-    <style>
-
-    </style>
+    <style></style>
 
     <title>MQT Bench</title>
-    <link rel="shortcut icon" href="../static/favicon.ico">
-</head>
-<body>
-<!-- Image and text -->
-<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
-    <a class="navbar-brand" href="/mqtbench">
-
-        <img src="../static/TUM_Logo_blau_rgb_s.svg" alt="" width="50" height="24"
-             class="d-inline-block align-text-top">
+    <link rel="shortcut icon" href="../static/favicon.ico" />
+  </head>
+  <body>
+    <!-- Image and text -->
+    <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
+      <a class="navbar-brand" href="/mqtbench">
+        <img
+          src="../static/TUM_Logo_blau_rgb_s.svg"
+          alt=""
+          width="50"
+          height="24"
+          class="d-inline-block align-text-top"
+        />
         MQT Bench
-    </a>
-    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
-            aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
+      </a>
+      <button
+        class="navbar-toggler"
+        type="button"
+        data-toggle="collapse"
+        data-target="#navbarNavAltMarkup"
+        aria-controls="navbarNavAltMarkup"
+        aria-expanded="false"
+        aria-label="Toggle navigation"
+      >
         <span class="navbar-toggler-icon"></span>
-    </button>
-    <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
+      </button>
+      <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
         <div class="navbar-nav">
-            <a class="nav-item nav-link " href="index">Benchmarks</span></a>
-            <a class="nav-item nav-link " href="description ">Level and File Descriptions</a>
-            <a class="nav-item nav-link active" href="benchmark_description ">Benchmark Description</a>
-            <a class="nav-item nav-link " href="https://www.cda.cit.tum.de/research/quantum/" target="_blank">More on
-                our Work</a>
-            <a class="nav-item nav-link " href="legal">Legal Information</a>
+          <a class="nav-item nav-link" href="index">Benchmarks</a>
+          <a class="nav-item nav-link" href="description "
+            >Level and File Descriptions</a
+          >
+          <a class="nav-item nav-link active" href="benchmark_description "
+            >Benchmark Description</a
+          >
+          <a
+            class="nav-item nav-link"
+            href="https://www.cda.cit.tum.de/research/quantum/"
+            target="_blank"
+            >More on our Work</a
+          >
+          <a class="nav-item nav-link" href="legal">Legal Information</a>
         </div>
-    </div>
-</nav>
+      </div>
+    </nav>
 
-<div class="col-xs-12" style="height:80px;"></div>
+    <div class="col-xs-12" style="height: 80px"></div>
 
-<div class="container">
-    <h1>MQT Bench: Brief Description of Benchmarks</h1>
+    <div class="container">
+      <h1>MQT Bench: Brief Description of Benchmarks</h1>
 
-
-    <table class="table-sm">
+      <table class="table-sm">
         <thead>
-        <tr>
+          <tr>
             <th scope="col" style="width: 20%">Benchmark Algorithm</th>
             <th scope="col" style="width: 70%">Description</th>
             <th scope="col" style="width: 10%">Available Qubit Range</th>
-        </tr>
+          </tr>
         </thead>
         <tbody>
-        <tr>
-            <td style="vertical-align:top">Amplitude Estimation (AE)</td>
-            <td style="vertical-align:top">AE aims to find an estimation for the amplitude of a certain quantum state.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Deutsch-Jozsa</td>
-            <td style="vertical-align:top">This algorithms determines, whether an unknown oracle mapping input values
-                either to 0 or 1 is constant
-                (always output 1 or always 0)
-                or balanced (both outputs are equally likely).
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">GHZ State</td>
-            <td style="vertical-align:top">The Greenberger-Horne-Zeilinger state is an entangled quantum state with a
-                certain type of entanglement.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Graph State</td>
-            <td style="vertical-align:top">Graph states in quantum computing represent a graph with vertices and edges
-                through a quantum circuit.
-            </td>
-            <td style="vertical-align:top">3 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Ground State</td>
-            <td style="vertical-align:top">A famous application of quantum computing and specifically of VQE algorithms
-                is the ground state
-                estimation
-                of molecules. Here, we provide two different molecules, H2 ("small") and LiH ("medium"), and estimate their ground state
-                using
-                VQE with a TwoLocal ansatz. The source code for the algorithmic level originates from
-                <a href="https://qiskit.org/documentation/nature/tutorials/03_ground_state_solvers.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">4 -> 12</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Grover's (no ancilla)</td>
-            <td style="vertical-align:top">One of the most famous quantum algorithm known so far, Grover's algorithm
-                finds a certain goal quantum
-                state determined by an oracle. In our case, the oracle is implemented by a
-                multi-controlled Toffoli gate over all input qubits. In this no ancilla version, no ancilla qubits are used
-                during
-                its
-                realization.
-            </td>
-            <td style="vertical-align:top">2 -> 14</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Grover's (v-chain)</td>
-            <td style="vertical-align:top">Similar to the algorithm above with the difference, that the ancillary mode
-                is a v-chain in this
-                algorithm.
-            </td>
-            <td style="vertical-align:top">2 -> 23</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">HHL</td>
-            <td style="vertical-align:top">The Harrow-Hassadim-Lloyd algorithm is used to solve linear system of
-                equations. Here, we use a specific
-                system of equations.
-            </td>
-            <td style="vertical-align:top">5 -> 14</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Portfolio Optimization with QAOA</td>
-            <td style="vertical-align:top">This algorithms solves the mean-variance portfolio optimization problem for
-                different assets. In this
-                case, a QAOA algorithm instance is used. The source code for the algorithmic level originates from
-                <a href="https://qiskit.org/documentation/finance/tutorials/01_portfolio_optimization.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">3 -> 19</td>
-        </tr>
-        <td style="vertical-align:top">Portfolio Optimization with VQE</td>
-        <td style="vertical-align:top">This algorithms solves the mean-variance portfolio optimization problem for
-            different assets. In this case,
-            a VQE algorithm instance is used. The source code for the algorithmic level originates from
-            <a href="https://qiskit.org/documentation/finance/tutorials/01_portfolio_optimization.html" target="_blank">this
-                page</a>.
-        </td>
-        <td style="vertical-align:top">3 -> 19</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Pricing Call Option</td>
-            <td style="vertical-align:top">This algorithm estimates the fair price of a european call option using
-                iterative amplitude estimation.
-                The source code for the algorithmic level originates from
-                <a href="https://qiskit.org/documentation/finance/tutorials/03_european_call_option_pricing.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">5 -> 27</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Pricing Put Option</td>
-            <td style="vertical-align:top">This algorithm estimates the fair price of a european put option using
-                iterative amplitude estimation.
-                The source code for the algorithmic level originates from
-                <a href="https://qiskit.org/documentation/finance/tutorials/04_european_put_option_pricing.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">5 -> 27</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Quantum Approximation Optimization Algorithm (QAOA)</td>
-            <td style="vertical-align:top">One of the most famous algorithm from the algorithmic class of variational
-                quantum algorithms. It is a
-                parameterizable quantum algorithms to solve optimization problems. Here, it solves a max-cut problem
-                instance.
-            </td>
-            <td style="vertical-align:top">3 -> 24</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Quantum Fourier Transformation (QFT)</td>
-            <td style="vertical-align:top">QFT embodies the quantum equivalent of the discrete Fourier transform and is
-                a very important building
-                block
-                in many quantum algorithms.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Entangled QFT</td>
-            <td style="vertical-align:top">Applies regular QFT to entangled qubits.</td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
+          <tr>
+            <td style="vertical-align: top">Amplitude Estimation (AE)</td>
+            <td style="vertical-align: top">
+              AE aims to find an estimation for the amplitude of a certain
+              quantum state.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Deutsch-Jozsa</td>
+            <td style="vertical-align: top">
+              This algorithms determines, whether an unknown oracle mapping
+              input values either to 0 or 1 is constant (always output 1 or
+              always 0) or balanced (both outputs are equally likely).
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">GHZ State</td>
+            <td style="vertical-align: top">
+              The Greenberger-Horne-Zeilinger state is an entangled quantum
+              state with a certain type of entanglement.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Graph State</td>
+            <td style="vertical-align: top">
+              Graph states in quantum computing represent a graph with vertices
+              and edges through a quantum circuit.
+            </td>
+            <td style="vertical-align: top">3 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Ground State</td>
+            <td style="vertical-align: top">
+              A famous application of quantum computing and specifically of VQE
+              algorithms is the ground state estimation of molecules. Here, we
+              provide two different molecules, H2 ("small") and LiH ("medium"),
+              and estimate their ground state using VQE with a TwoLocal ansatz.
+              The source code for the algorithmic level originates from
+              <a
+                href="https://qiskit.org/documentation/nature/tutorials/03_ground_state_solvers.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">4 -> 12</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Grover's (no ancilla)</td>
+            <td style="vertical-align: top">
+              One of the most famous quantum algorithm known so far, Grover's
+              algorithm finds a certain goal quantum state determined by an
+              oracle. In our case, the oracle is implemented by a
+              multi-controlled Toffoli gate over all input qubits. In this no
+              ancilla version, no ancilla qubits are used during its
+              realization.
+            </td>
+            <td style="vertical-align: top">2 -> 14</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Grover's (v-chain)</td>
+            <td style="vertical-align: top">
+              Similar to the algorithm above with the difference, that the
+              ancillary mode is a v-chain in this algorithm.
+            </td>
+            <td style="vertical-align: top">2 -> 23</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">HHL</td>
+            <td style="vertical-align: top">
+              The Harrow-Hassadim-Lloyd algorithm is used to solve linear system
+              of equations. Here, we use a specific system of equations.
+            </td>
+            <td style="vertical-align: top">5 -> 14</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Portfolio Optimization with QAOA
+            </td>
+            <td style="vertical-align: top">
+              This algorithms solves the mean-variance portfolio optimization
+              problem for different assets. In this case, a QAOA algorithm
+              instance is used. The source code for the algorithmic level
+              originates from
+              <a
+                href="https://qiskit.org/documentation/finance/tutorials/01_portfolio_optimization.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">3 -> 19</td>
+          </tr>
+          <td style="vertical-align: top">Portfolio Optimization with VQE</td>
+          <td style="vertical-align: top">
+            This algorithms solves the mean-variance portfolio optimization
+            problem for different assets. In this case, a VQE algorithm instance
+            is used. The source code for the algorithmic level originates from
+            <a
+              href="https://qiskit.org/documentation/finance/tutorials/01_portfolio_optimization.html"
+              target="_blank"
+              >this page</a
+            >.
+          </td>
+          <td style="vertical-align: top">3 -> 19</td>
+          <tr>
+            <td style="vertical-align: top">Pricing Call Option</td>
+            <td style="vertical-align: top">
+              This algorithm estimates the fair price of a european call option
+              using iterative amplitude estimation. The source code for the
+              algorithmic level originates from
+              <a
+                href="https://qiskit.org/documentation/finance/tutorials/03_european_call_option_pricing.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">5 -> 27</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Pricing Put Option</td>
+            <td style="vertical-align: top">
+              This algorithm estimates the fair price of a european put option
+              using iterative amplitude estimation. The source code for the
+              algorithmic level originates from
+              <a
+                href="https://qiskit.org/documentation/finance/tutorials/04_european_put_option_pricing.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">5 -> 27</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Quantum Approximation Optimization Algorithm (QAOA)
+            </td>
+            <td style="vertical-align: top">
+              One of the most famous algorithm from the algorithmic class of
+              variational quantum algorithms. It is a parameterizable quantum
+              algorithms to solve optimization problems. Here, it solves a
+              max-cut problem instance.
+            </td>
+            <td style="vertical-align: top">3 -> 24</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Quantum Fourier Transformation (QFT)
+            </td>
+            <td style="vertical-align: top">
+              QFT embodies the quantum equivalent of the discrete Fourier
+              transform and is a very important building block in many quantum
+              algorithms.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Entangled QFT</td>
+            <td style="vertical-align: top">
+              Applies regular QFT to entangled qubits.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
 
-        <tr>
-            <td style="vertical-align:top">Quantum Generative Adversarial Network (QGAN)</td>
-            <td style="vertical-align:top">This algorithm class is the quantum equivalent to classical GAN and learns
-                the underlying distribution
-                of
-                input data. The source code for the algorithmic level originates from
-                <a href="https://qiskit.org/documentation/machine-learning/tutorials/04_qgans_for_loading_random_distributions.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">2 -> 14</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Quantum Phase Estimation (QPE) exact</td>
-            <td style="vertical-align:top">QPE estimates the phase of a quantum operation and is a very important
-                building block
-                in many quantum algorithms. In the exact case, the applied phase is exactly representable by the number
-                of qubits.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Quantum Phase Estimation (QPE) inexact</td>
-            <td style="vertical-align:top">Similar to QPE exact with the difference, that the applied phase is not
-                exactly representable by the
-                number
-                of qubits.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Quantum Walk (no ancilla)</td>
-            <td style="vertical-align:top">Quantum walks are the quantum equivalent to classical random walks. In this
-                no ancilla version, no
-                ancilla qubits are used during its realization.
-            </td>
-            <td style="vertical-align:top">3 -> 17</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Quantum Walk (v-chain)</td>
-            <td style="vertical-align:top">Similar to the algorithm above with the difference, that the ancillary mode
-                is a v-chain in this
-                algorithm.
-            </td>
-            <td style="vertical-align:top">3 -> 95</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Routing</td>
-            <td style="vertical-align:top">This problem is similar to the travelling salesman problem with the
-                difference, that more than one
-                vehicle
-                may be used to travel between those to be visited points, such that each point is visited at least once.
-                The source code for the algorithmic level originates from
-                <a href="https://qiskit.org/documentation/optimization/tutorials/07_examples_vehicle_routing.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">2 -> 12</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Shor's</td>
-            <td style="vertical-align:top">This algorithm is one of the most famous quantum algorithms and used to find
-                prime factors of integers.
-                Here, we provide quantum algorithms solving this problem for the integers 9, 15, and 821.
-                The filename, e.g., shor_821_4_t-indep_42.qasm includes also the to be factorized number (821) and
-                the period used, namely 4.
-            </td>
-            <td style="vertical-align:top">18 -> 42</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Travelling Salesman</td>
-            <td style="vertical-align:top">The travelling salesman problem is a very prominent optimization problem of
-                calculation the shortest
-                path of a number of to be visited points. Here, this is formulated as a quadratic problem and solved
-                using VQE with a TwoLocal ansatz. The source code for the algorithmic level originates from
-                <a href="https://qiskit.org/documentation/optimization/tutorials/06_examples_max_cut_and_tsp.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">4 -> 16</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Variational Quantum Eigensolver (VQE)</td>
-            <td style="vertical-align:top">VQE is also one of the most famous algorithm from the class of variational quantum algorithms.
-                It is a parameterizable quantum algorithms with different possible choices of an ansatz function. Here,
-                a TwoLocal ansatz is chosen and applied to the same max-cut problem instance as in QAOA.
-            </td>
-            <td style="vertical-align:top">3 -> 21</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Efficient SU2 ansatz with Random Parameters</td>
-            <td style="vertical-align:top">VQE ansatz with randomly initialized values. Detailed information can be found on
-                <a href="https://qiskit.org/documentation/stubs/qiskit.circuit.library.EfficientSU2.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Real Amplitudes ansatz with Random Parameters</td>
-            <td style="vertical-align:top">VQE ansatz with randomly initialized values. Detailed information can be found on
-                <a href="https://qiskit.org/documentation/stubs/qiskit.circuit.library.RealAmplitudes.html"
-                   target="_blank">this page</a>.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Two Local ansatz with random parameters</td>
-            <td style="vertical-align:top">VQE ansatz with randomly initialized values. Detailed information can be found on
-                <a href="https://qiskit.org/documentation/stubs/qiskit.circuit.library.TwoLocal.html" target="_blank">this
-                    page</a>.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">W-State</td>
-            <td style="vertical-align:top">The W state is an entangled quantum state with a certain type of entanglement.
-            </td>
-            <td style="vertical-align:top">2 -> 130</td>
-        </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Quantum Generative Adversarial Network (QGAN)
+            </td>
+            <td style="vertical-align: top">
+              This algorithm class is the quantum equivalent to classical GAN
+              and learns the underlying distribution of input data. The source
+              code for the algorithmic level originates from
+              <a
+                href="https://qiskit.org/documentation/machine-learning/tutorials/04_qgans_for_loading_random_distributions.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">2 -> 14</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Quantum Phase Estimation (QPE) exact
+            </td>
+            <td style="vertical-align: top">
+              QPE estimates the phase of a quantum operation and is a very
+              important building block in many quantum algorithms. In the exact
+              case, the applied phase is exactly representable by the number of
+              qubits.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Quantum Phase Estimation (QPE) inexact
+            </td>
+            <td style="vertical-align: top">
+              Similar to QPE exact with the difference, that the applied phase
+              is not exactly representable by the number of qubits.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Quantum Walk (no ancilla)</td>
+            <td style="vertical-align: top">
+              Quantum walks are the quantum equivalent to classical random
+              walks. In this no ancilla version, no ancilla qubits are used
+              during its realization.
+            </td>
+            <td style="vertical-align: top">3 -> 17</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Quantum Walk (v-chain)</td>
+            <td style="vertical-align: top">
+              Similar to the algorithm above with the difference, that the
+              ancillary mode is a v-chain in this algorithm.
+            </td>
+            <td style="vertical-align: top">3 -> 95</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Routing</td>
+            <td style="vertical-align: top">
+              This problem is similar to the travelling salesman problem with
+              the difference, that more than one vehicle may be used to travel
+              between those to be visited points, such that each point is
+              visited at least once. The source code for the algorithmic level
+              originates from
+              <a
+                href="https://qiskit.org/documentation/optimization/tutorials/07_examples_vehicle_routing.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">2 -> 12</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Shor's</td>
+            <td style="vertical-align: top">
+              This algorithm is one of the most famous quantum algorithms and
+              used to find prime factors of integers. Here, we provide quantum
+              algorithms solving this problem for the integers 9, 15, and 821.
+              The filename, e.g., shor_821_4_t-indep_42.qasm includes also the
+              to be factorized number (821) and the period used, namely 4.
+            </td>
+            <td style="vertical-align: top">18 -> 42</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Travelling Salesman</td>
+            <td style="vertical-align: top">
+              The travelling salesman problem is a very prominent optimization
+              problem of calculation the shortest path of a number of to be
+              visited points. Here, this is formulated as a quadratic problem
+              and solved using VQE with a TwoLocal ansatz. The source code for
+              the algorithmic level originates from
+              <a
+                href="https://qiskit.org/documentation/optimization/tutorials/06_examples_max_cut_and_tsp.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">4 -> 16</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Variational Quantum Eigensolver (VQE)
+            </td>
+            <td style="vertical-align: top">
+              VQE is also one of the most famous algorithm from the class of
+              variational quantum algorithms. It is a parameterizable quantum
+              algorithms with different possible choices of an ansatz function.
+              Here, a TwoLocal ansatz is chosen and applied to the same max-cut
+              problem instance as in QAOA.
+            </td>
+            <td style="vertical-align: top">3 -> 21</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Efficient SU2 ansatz with Random Parameters
+            </td>
+            <td style="vertical-align: top">
+              VQE ansatz with randomly initialized values. Detailed information
+              can be found on
+              <a
+                href="https://qiskit.org/documentation/stubs/qiskit.circuit.library.EfficientSU2.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Real Amplitudes ansatz with Random Parameters
+            </td>
+            <td style="vertical-align: top">
+              VQE ansatz with randomly initialized values. Detailed information
+              can be found on
+              <a
+                href="https://qiskit.org/documentation/stubs/qiskit.circuit.library.RealAmplitudes.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Two Local ansatz with random parameters
+            </td>
+            <td style="vertical-align: top">
+              VQE ansatz with randomly initialized values. Detailed information
+              can be found on
+              <a
+                href="https://qiskit.org/documentation/stubs/qiskit.circuit.library.TwoLocal.html"
+                target="_blank"
+                >this page</a
+              >.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">W-State</td>
+            <td style="vertical-align: top">
+              The W state is an entangled quantum state with a certain type of
+              entanglement.
+            </td>
+            <td style="vertical-align: top">2 -> 130</td>
+          </tr>
         </tbody>
-    </table>
-    <div class="col-xs-12" style="height:50px;"></div>
-
+      </table>
+    </div>
+    <div class="col-xs-12" style="height: 50px"></div>
 
     <!-- Optional JavaScript -->
     <!-- jQuery first, then Popper.js, then Bootstrap JS -->
-    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
-            integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
-            crossorigin="anonymous"></script>
-    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
-            integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
-            crossorigin="anonymous"></script>
-    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
-            integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
-            crossorigin="anonymous"></script>
-
-    <script>
-        </body>
-        </html>
+    <script
+      src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
+      integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
+      integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
+      integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
+      crossorigin="anonymous"
+    ></script>
+  </body>
+</html>
diff --git a/mqt/benchviewer/templates/description.html b/mqt/benchviewer/templates/description.html
index 87a92759c..a83aacfd2 100644
--- a/mqt/benchviewer/templates/description.html
+++ b/mqt/benchviewer/templates/description.html
@@ -1,144 +1,195 @@
 <!doctype html>
 <html lang="en">
-<head>
+  <head>
     <!-- Required meta tags -->
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta charset="utf-8" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1, shrink-to-fit=no"
+    />
 
     <!-- Bootstrap CSS -->
-    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
-          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
+    <link
+      href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
+      rel="stylesheet"
+      integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
+      crossorigin="anonymous"
+    />
 
-    <style>
-
-    </style>
+    <style></style>
 
     <title>MQT Bench</title>
-    <link rel="shortcut icon" href="../static/favicon.ico">
-</head>
-<body>
-<!-- Image and text -->
-<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
-    <a class="navbar-brand" href="/mqtbench">
-
-        <img src="../static/TUM_Logo_blau_rgb_s.svg" alt="" width="50" height="24"
-             class="d-inline-block align-text-top">
+    <link rel="shortcut icon" href="../static/favicon.ico" />
+  </head>
+  <body>
+    <!-- Image and text -->
+    <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
+      <a class="navbar-brand" href="/mqtbench">
+        <img
+          src="../static/TUM_Logo_blau_rgb_s.svg"
+          alt=""
+          width="50"
+          height="24"
+          class="d-inline-block align-text-top"
+        />
         MQT Bench
-    </a>
-    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
-            aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
+      </a>
+      <button
+        class="navbar-toggler"
+        type="button"
+        data-toggle="collapse"
+        data-target="#navbarNavAltMarkup"
+        aria-controls="navbarNavAltMarkup"
+        aria-expanded="false"
+        aria-label="Toggle navigation"
+      >
         <span class="navbar-toggler-icon"></span>
-    </button>
-    <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
+      </button>
+      <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
         <div class="navbar-nav">
-            <a class="nav-item nav-link " href="index">Benchmarks</span></a>
-            <a class="nav-item nav-link active" href="description ">Level and File Descriptions</a>
-            <a class="nav-item nav-link " href="benchmark_description ">Benchmark Description</a>
-            <a class="nav-item nav-link " href="https://www.cda.cit.tum.de/research/quantum/" target="_blank">More on
-                our Work</a>
-            <a class="nav-item nav-link " href="legal">Legal Information</a>
+          <a class="nav-item nav-link" href="index">Benchmarks</a>
+          <a class="nav-item nav-link active" href="description "
+            >Level and File Descriptions</a
+          >
+          <a class="nav-item nav-link" href="benchmark_description "
+            >Benchmark Description</a
+          >
+          <a
+            class="nav-item nav-link"
+            href="https://www.cda.cit.tum.de/research/quantum/"
+            target="_blank"
+            >More on our Work</a
+          >
+          <a class="nav-item nav-link" href="legal">Legal Information</a>
         </div>
-    </div>
-</nav>
-<div class="col-xs-12" style="height:80px;"></div>
-
-<div class="container">
-    <h1>MQT Bench: Level Description and File Format</h1>
-    <p>
-        Benchmarks are provided on four different abstraction levels:
-    </p>
-    <ul>
-        <li><i>Algorithmic Level</i>: Circuits are described in a textbook-like fashion using high-level constructs.</li>
-        <li><i>Target-Independent Level</i>: Circuits are unfolded and unrolled representations of the circuits from the
-            algorithmic level.
+      </div>
+    </nav>
+    <div class="col-xs-12" style="height: 80px"></div>
+
+    <div class="container">
+      <h1>MQT Bench: Level Description and File Format</h1>
+      <p>Benchmarks are provided on four different abstraction levels:</p>
+      <ul>
+        <li>
+          <i>Algorithmic Level</i>: Circuits are described in a textbook-like
+          fashion using high-level constructs.
         </li>
-        <li><i>Native-Gates Level</i>: Circuits are synthesized to a particular native gate-set.</li>
-        <li><i>Mapped Level</i>: Circuits are mapped to a particular architecture.</li>
-    </ul>
-    <p>
-        Used File Format:
-    </p>
-    <ul>
         <li>
-            Until openQASM 3.0 is widely supported, all circuits (except those on the algorithmic level) are
-            provided as <i>.qasm</i> files following the openQASM 2.0 standard.
-            Circuits on the algorithmic level can directly be generated (as IBM Qiskit QuantumCircuit objects)
-            using the <i>mqt.bench</i> python package.
-            Instructions on how to use the package are included in the downloaded <i>.zip</i> file whenever an
-            algorithmic level circuit is requested. More details on openQASM 2.0 can be found <a href="https://arxiv.org/abs/1707.03429">here</a>,
-    and on openQASM 3.0 <a href="https://arxiv.org/abs/2104.14722">here</a>.
-
+          <i>Target-Independent Level</i>: Circuits are unfolded and unrolled
+          representations of the circuits from the algorithmic level.
         </li>
         <li>
-            Not every benchmark is necessarily available for every possible configuration of the available
-            options. For example, not all qubit counts in a given range might be available for a selected benchmark.
+          <i>Native-Gates Level</i>: Circuits are synthesized to a particular
+          native gate-set.
         </li>
         <li>
-            Mapped benchmarks are only available up to the biggest available architecture. That is, for IBM
-            (for Rigetti) mapped benchmarks are available only for instances with up to 127 qubits (80 qubits).
+          <i>Mapped Level</i>: Circuits are mapped to a particular architecture.
         </li>
-        <li>Since the <i>.zip</i> file may be composed of numerous files (currently, we offer more than 30.000
-            benchmark circuits), the following naming convention is used for the respective files:
+      </ul>
+      <p>Used File Format:</p>
+      <ul>
+        <li>
+          Until openQASM 3.0 is widely supported, all circuits (except those on
+          the algorithmic level) are provided as <i>.qasm</i> files following
+          the openQASM 2.0 standard. Circuits on the algorithmic level can
+          directly be generated (as IBM Qiskit QuantumCircuit objects) using the
+          <i>mqt.bench</i> python package. Instructions on how to use the
+          package are included in the downloaded <i>.zip</i> file whenever an
+          algorithmic level circuit is requested. More details on openQASM 2.0
+          can be found <a href="https://arxiv.org/abs/1707.03429">here</a>, and
+          on openQASM 3.0 <a href="https://arxiv.org/abs/2104.14722">here</a>.
         </li>
-    </ul>
-
-
-
-</div>
-
-
+        <li>
+          Not every benchmark is necessarily available for every possible
+          configuration of the available options. For example, not all qubit
+          counts in a given range might be available for a selected benchmark.
+        </li>
+        <li>
+          Mapped benchmarks are only available up to the biggest available
+          architecture. That is, for IBM (for Rigetti) mapped benchmarks are
+          available only for instances with up to 127 qubits (80 qubits).
+        </li>
+        <li>
+          Since the <i>.zip</i> file may be composed of numerous files
+          (currently, we offer more than 30.000 benchmark circuits), the
+          following naming convention is used for the respective files:
+        </li>
+      </ul>
+    </div>
 
-<div class="container">
-    <table class="table-sm">
+    <div class="container">
+      <table class="table-sm">
         <thead>
-        <tr>
+          <tr>
             <th scope="col" style="width: 15%">Level</th>
             <th scope="col" style="width: 80%">Filename</th>
             <th scope="col" style="width: 5%">Example</th>
-        </tr>
+          </tr>
         </thead>
         <tbody>
-        <tr>
-            <td style="vertical-align:top">Algorithmic Level</td>
-            <td style="vertical-align:top">For this level, dedicated <i>.qasm</i> files cannot be provided yet, since
-                openQASM 2.0 supports only a
-                set of quantum gates. Thus, we provide those benchmarks using our pypi package which is accessible via
-                <i>pip</i>.
+          <tr>
+            <td style="vertical-align: top">Algorithmic Level</td>
+            <td style="vertical-align: top">
+              For this level, dedicated <i>.qasm</i> files cannot be provided
+              yet, since openQASM 2.0 supports only a set of quantum gates.
+              Thus, we provide those benchmarks using our pypi package which is
+              accessible via <i>pip</i>.
+            </td>
+            <td style="vertical-align: top">
+              Python <i>Qiskit::QuantumCircuit</i> Object
+            </td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Target-independent Level</td>
+            <td style="vertical-align: top">
+              &lt;benchmark_identifier&gt;_indep_&lt;compiler&gt;_&lt;number_of_qubits&gt;.qasm
+            </td>
+            <td style="vertical-align: top">qft_indep_tket_5.qasm</td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">
+              Target-dependent Native Gates Level
             </td>
-            <td style="vertical-align:top">Python <i>Qiskit::QuantumCircuit</i> Object</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Target-independent Level</td>
-            <td style="vertical-align:top">&lt;benchmark_identifier&gt;_indep_&lt;compiler&gt;_&lt;number_of_qubits&gt;.qasm</td>
-            <td style="vertical-align:top">qft_indep_tket_5.qasm</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Target-dependent Native Gates Level</td>
-            <td style="vertical-align:top">&lt;benchmark_identifier&gt;_nativegates_&lt;native_gate_set&gt;_&lt;compiler&gt;_&lt;optional: compiler settings&gt;_&lt;number_of_qubits&gt;.qasm</td>
-            <td style="vertical-align:top">qft_nativegates_ibm_qiskit_opt3_5.qasm</td>
-        </tr>
-        <tr>
-            <td style="vertical-align:top">Target-dependent Mapped Level</td>
-            <td style="vertical-align:top">&lt;benchmark_identifier&gt;_mapped_&lt;device&gt;_&lt;compiler&gt;_&lt;compiler settings>_&lt;number_of_qubits&gt;.qasm</td>
-            <td style="vertical-align:top">qft_nativegates_rigetti_aspen_m1_qiskit_opt3_5.qasm</td>
-        </tr>
+            <td style="vertical-align: top">
+              &lt;benchmark_identifier&gt;_nativegates_&lt;native_gate_set&gt;_&lt;compiler&gt;_&lt;optional:
+              compiler settings&gt;_&lt;number_of_qubits&gt;.qasm
+            </td>
+            <td style="vertical-align: top">
+              qft_nativegates_ibm_qiskit_opt3_5.qasm
+            </td>
+          </tr>
+          <tr>
+            <td style="vertical-align: top">Target-dependent Mapped Level</td>
+            <td style="vertical-align: top">
+              &lt;benchmark_identifier&gt;_mapped_&lt;device&gt;_&lt;compiler&gt;_&lt;compiler
+              settings>_&lt;number_of_qubits&gt;.qasm
+            </td>
+            <td style="vertical-align: top">
+              qft_nativegates_rigetti_aspen_m1_qiskit_opt3_5.qasm
+            </td>
+          </tr>
         </tbody>
-    </table>
-</div>
-
-<div class="col-xs-12" style="height:50px;"></div>
-
-<!-- Optional JavaScript -->
-<!-- jQuery first, then Popper.js, then Bootstrap JS -->
-<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
-        integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
-        crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
-        integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
-        crossorigin="anonymous"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
-        integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
-        crossorigin="anonymous"></script>
+      </table>
+    </div>
 
-</body>
+    <div class="col-xs-12" style="height: 50px"></div>
+
+    <!-- Optional JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <script
+      src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
+      integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
+      integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
+      integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
+      crossorigin="anonymous"
+    ></script>
+  </body>
 </html>
diff --git a/mqt/benchviewer/templates/index.html b/mqt/benchviewer/templates/index.html
index 268e5de46..55bd003bc 100644
--- a/mqt/benchviewer/templates/index.html
+++ b/mqt/benchviewer/templates/index.html
@@ -1,431 +1,690 @@
 <!doctype html>
 <html lang="en">
-<head>
+  <head>
     <!-- Required meta tags -->
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta charset="utf-8" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1, shrink-to-fit=no"
+    />
 
     <!-- Bootstrap CSS -->
-    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
-          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
+    <link
+      href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
+      rel="stylesheet"
+      integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
+      crossorigin="anonymous"
+    />
 
-    <style>
-
-    </style>
+    <style></style>
 
     <title>MQT Bench</title>
-    <link rel="shortcut icon" href="../static/favicon.ico">
-</head>
-<body>
-<!-- Image and text -->
-<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
-    <a class="navbar-brand" href="/mqtbench">
-
-        <img src="../static/TUM_Logo_blau_rgb_s.svg" alt="" width="50" height="24"
-             class="d-inline-block align-text-top">
+    <link rel="shortcut icon" href="../static/favicon.ico" />
+  </head>
+  <body>
+    <!-- Image and text -->
+    <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
+      <a class="navbar-brand" href="/mqtbench">
+        <img
+          src="../static/TUM_Logo_blau_rgb_s.svg"
+          alt=""
+          width="50"
+          height="24"
+          class="d-inline-block align-text-top"
+        />
         MQT Bench
-    </a>
-    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
-            aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
+      </a>
+      <button
+        class="navbar-toggler"
+        type="button"
+        data-toggle="collapse"
+        data-target="#navbarNavAltMarkup"
+        aria-controls="navbarNavAltMarkup"
+        aria-expanded="false"
+        aria-label="Toggle navigation"
+      >
         <span class="navbar-toggler-icon"></span>
-    </button>
-    <div class="collapse navbar-collapse " id="navbarNavAltMarkup">
+      </button>
+      <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
         <div class="navbar-nav">
-            <a class="nav-item nav-link active" href="index">Benchmarks</a>
-            <a class="nav-item nav-link " href="description">Level and File Descriptions</a>
-            <a class="nav-item nav-link " href="benchmark_description">Benchmark Description</a>
-            <a class="nav-item nav-link " href="https://www.cda.cit.tum.de/research/quantum/" target="_blank">More on
-                our Work</a>
-            <a class="nav-item nav-link " href="legal">Legal Information</a>
+          <a class="nav-item nav-link active" href="index">Benchmarks</a>
+          <a class="nav-item nav-link" href="description"
+            >Level and File Descriptions</a
+          >
+          <a class="nav-item nav-link" href="benchmark_description"
+            >Benchmark Description</a
+          >
+          <a
+            class="nav-item nav-link"
+            href="https://www.cda.cit.tum.de/research/quantum/"
+            target="_blank"
+            >More on our Work</a
+          >
+          <a class="nav-item nav-link" href="legal">Legal Information</a>
         </div>
-    </div>
-</nav>
-
+      </div>
+    </nav>
 
-<div class="col-12" style="height:80px;"></div>
-<div class="container">
-    <h1>
+    <div class="col-12" style="height: 80px"></div>
+    <div class="container">
+      <h1>
         Welcome to the Munich Quantum Toolkit Benchmark Library (MQT Bench)!
-    </h1>
-    <p>Quantum software tools for a wide variety of design
-        tasks on and across different levels of abstraction are crucial for
-        eventually realizing useful quantum applications. This requires
-        practical and relevant benchmarks in order for new software
-        tools or design automation methods to be empirically evaluated and compared to the current
-        state of the art. Since these tools and methods operate on and across different
-        levels of abstraction, it is beneficial having benchmarks consistently available across those levels. The
-        MQT Benchmark Library (MQT Bench) provides a single benchmark suite which offers the same benchmark
-        algorithms on different levels of abstractions. At the moment, MQT Bench comprises more than 30.000
-        benchmark
-        circuits ranging from 2 up to 130 qubits on four abstraction levels.</p>
-
-    <p>In order to create a benchmark set according to your needs, simply use to form below to choose
-    <ul>
-        <li>the desired benchmark,
-        <li>the qubit range,
-        <li>the abstraction level (we currently consider an algorithmic level, a target-independent level, a
-            target-dependent native gates level, and a target-dependent mapped level),
-        <li>a native gate-set considered by the compiler (we currently consider the gate-sets provided by machines
-            from IBM and Rigetti),
-        <li>the architecture considered by the compiler (we currently consider the smallest and the biggest
-            architecture possible for the respective benchmark), as well as
-        <li>the optimization level used by the compiler to generate results for the target-dependent native gates
-            level and the target-dependent mapped level (<i>O0</i> to <i>O3</i>, similar to the optimization levels
-            of classical compilers).
-    </ul>
-    Afterwards, push the "Download Benchmarks"-button to download all benchmark instances based on the selection as
-    a <i>.zip</i> file.</p>
-
-    <p>For a brief description of the benchmarks, we are referring to <a href="benchmark_description">this page</a>.
-    </p>
-
-    <p>For a brief description of the file format of the resulting instances, we are referring to <a
-            href="description">this page</a>.</p>
-
-    <p>For a more detailed description of MQT Bench, we are referring to the corresponding paper
-        <a href="https://arxiv.org/pdf/2204.13719.pdf" target="_blank">"MQT Bench: Benchmarking Software and
-            Design Automation Tools for Quantum Computing"</a>. Our implementation is available on
-        <a href="https://github.com/cda-tum/MQTBench" target="_blank">Github</a>.
-    </p>
-
-    <p><strong>In case you are using MQT Bench in your work, we would be thankful if you referred to it by citing
-        the following publication:</strong>
-    <p>
-        @misc{quetschlich2022mqtbench, <br>
-        &nbsp; title=&#123;&#123;&#123;MQT Bench}}: Benchmarking Software and Design Automation Tools for Quantum
-        Computing},<br>
-        &nbsp; shorttitle = &#123;&#123;&#123;MQT Bench}}},<br>
-        &nbsp; author={Quetschlich, Nils and Burgholzer, Lukas and Wille, Robert},<br>
-        &nbsp; year={2022},<br>
-        &nbsp; eprint = {2204.13719},<br>
-        &nbsp; eprinttype = {arxiv},<br>
-        &nbsp; publisher = {arXiv},<br>
-        &nbsp; note=&#123;&#123;&#123;MQT Bench}} is available at \url{https://www.cda.cit.tum.de/mqtbench/}},<br>
+      </h1>
+      <p>
+        Quantum software tools for a wide variety of design tasks on and across
+        different levels of abstraction are crucial for eventually realizing
+        useful quantum applications. This requires practical and relevant
+        benchmarks in order for new software tools or design automation methods
+        to be empirically evaluated and compared to the current state of the
+        art. Since these tools and methods operate on and across different
+        levels of abstraction, it is beneficial having benchmarks consistently
+        available across those levels. The MQT Benchmark Library (MQT Bench)
+        provides a single benchmark suite which offers the same benchmark
+        algorithms on different levels of abstractions. At the moment, MQT Bench
+        comprises more than 30.000 benchmark circuits ranging from 2 up to 130
+        qubits on four abstraction levels.
+      </p>
+
+      <p>
+        In order to create a benchmark set according to your needs, simply use
+        to form below to choose
+      </p>
+      <ul>
+        <li>the desired benchmark,</li>
+        <li>the qubit range,</li>
+        <li>
+          the abstraction level (we currently consider an algorithmic level, a
+          target-independent level, a target-dependent native gates level, and a
+          target-dependent mapped level),
+        </li>
+
+        <li>
+          a native gate-set considered by the compiler (we currently consider
+          the gate-sets provided by machines from IBM and Rigetti),
+        </li>
+
+        <li>
+          the architecture considered by the compiler (we currently consider the
+          smallest and the biggest architecture possible for the respective
+          benchmark), as well as
+        </li>
+
+        <li>
+          the optimization level used by the compiler to generate results for
+          the target-dependent native gates level and the target-dependent
+          mapped level (<i>O0</i> to <i>O3</i>, similar to the optimization
+          levels of classical compilers).
+        </li>
+      </ul>
+
+      Afterwards, push the "Download Benchmarks"-button to download all
+      benchmark instances based on the selection as a <i>.zip</i> file.
+
+      <p>
+        For a brief description of the benchmarks, we are referring to
+        <a href="benchmark_description">this page</a>.
+      </p>
+
+      <p>
+        For a brief description of the file format of the resulting instances,
+        we are referring to <a href="description">this page</a>.
+      </p>
+
+      <p>
+        For a more detailed description of MQT Bench, we are referring to the
+        corresponding paper
+        <a href="https://arxiv.org/pdf/2204.13719.pdf" target="_blank"
+          >"MQT Bench: Benchmarking Software and Design Automation Tools for
+          Quantum Computing"</a
+        >. Our implementation is available on
+        <a href="https://github.com/cda-tum/MQTBench" target="_blank">Github</a
+        >.
+      </p>
+
+      <p>
+        <strong
+          >In case you are using MQT Bench in your work, we would be thankful if
+          you referred to it by citing the following publication:</strong
+        >
+      </p>
+
+      <p>
+        @misc{quetschlich2022mqtbench, <br />
+        &nbsp; title=&#123;&#123;&#123;MQT Bench}}: Benchmarking Software and
+        Design Automation Tools for Quantum Computing},<br />
+        &nbsp; shorttitle = &#123;&#123;&#123;MQT Bench}}},<br />
+        &nbsp; author={Quetschlich, Nils and Burgholzer, Lukas and Wille,
+        Robert},<br />
+        &nbsp; year={2022},<br />
+        &nbsp; eprint = {2204.13719},<br />
+        &nbsp; eprinttype = {arxiv},<br />
+        &nbsp; publisher = {arXiv},<br />
+        &nbsp; note=&#123;&#123;&#123;MQT Bench}} is available at
+        \url{https://www.cda.cit.tum.de/mqtbench/}},<br />
         }
-
-    </p>
-    </p>
-
-    <p>In case you have any problems or questions feel free to contact us via <a
-            href="mailto:quantum.cda@xcit.tum.de">quantum.cda@xcit.tum.de</a>. More on our work on quantum
-        computation is summarized on <a href="https://www.cda.cit.tum.de/research/quantum" target="_blank">this
-            page</a>.</p>
-
-</div>
-<form method="POST" class="form-inline" role="form" action="download" id="benchmark_form" onchange="checks_on_change()">
-    <div class="container">
+      </p>
+
+      <p>
+        In case you have any problems or questions feel free to contact us via
+        <a href="mailto:quantum.cda@xcit.tum.de">quantum.cda@xcit.tum.de</a>.
+        More on our work on quantum computation is summarized on
+        <a href="https://www.cda.cit.tum.de/research/quantum" target="_blank"
+          >this page</a
+        >.
+      </p>
+    </div>
+    <form
+      method="POST"
+      class="form-inline"
+      role="form"
+      action="download"
+      id="benchmark_form"
+      onchange="checks_on_change()"
+    >
+      <div class="container">
         <h4>Benchmark Selection</h4>
 
         <div class="row border border-secondary">
-
-            <div class="row d-flex">
-                <div class="col-md-6">
-                    <input class="form-check-input" type="checkbox" value="true" id="all_benchmarks"
-                           name="all_benchmarks"
-                           onchange="toggleAllSelection()">
-                    Select all
-                </div>
-            </div>
+          <div class="row d-flex">
             <div class="col-md-6">
-
-
-                <h5>Scalable Benchmarks:</h5>
-                <div class="d-flex text-center">
-                    <input type="number" class="form-control form-control-sm" min="2" max="130" value="2"
-                           id="minQubits" name="minQubits" placeholder="Min Qubits (2)">
-                    <input type="number" class="form-control form-control-sm" min="2" max="130" value="130"
-                           id="maxQubits" name="maxQubits" placeholder="Max Qubits (130)">
-                </div>
-                {% for benchmark in benchmarks %}
-
-                <div>
-                    <div class="col-md-12">
-                        <input class="form-check-input" type="checkbox" value="{{ benchmark.name }}"
-                               id="selectBench_{{ benchmark.id }}" name="selectBench_{{ benchmark.id }}">
-                        {{ benchmark.name }}
-                    </div>
-                </div>
-                {% endfor %}
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="all_benchmarks"
+                name="all_benchmarks"
+                onchange="toggleAllSelection()"
+              />
+              Select all
             </div>
-
-
-            <div class="col-md-5">
-                <h5>Non-Scalable Benchmarks:</h5>
-
-                (Fixed Number of Qubits)
-                {% for nonscalable_benchmark in nonscalable_benchmarks %}
-
-
-                <div>
-                    <div class="col-md-5">
-                        <input class="form-check-input" type="checkbox" value="{{ nonscalable_benchmark.name }}"
-                               id="selectBench_{{ nonscalable_benchmark.id }}"
-                               name="selectBench_{{ nonscalable_benchmark.id }}">
-                        {{ nonscalable_benchmark.name }}
-                    </div>
-                </div>
-
-                {% endfor %}
+          </div>
+          <div class="col-md-6">
+            <h5>Scalable Benchmarks:</h5>
+            <div class="d-flex text-center">
+              <input
+                type="number"
+                class="form-control form-control-sm"
+                min="2"
+                max="130"
+                value="2"
+                id="minQubits"
+                name="minQubits"
+                placeholder="Min Qubits (2)"
+              />
+              <input
+                type="number"
+                class="form-control form-control-sm"
+                min="2"
+                max="130"
+                value="130"
+                id="maxQubits"
+                name="maxQubits"
+                placeholder="Max Qubits (130)"
+              />
+            </div>
+            {% for benchmark in benchmarks %}
+
+            <div>
+              <div class="col-md-12">
+                <input
+                  class="form-check-input"
+                  type="checkbox"
+                  value="{{ benchmark.name }}"
+                  id="selectBench_{{ benchmark.id }}"
+                  name="selectBench_{{ benchmark.id }}"
+                />
+                {{ benchmark.name }}
+              </div>
+            </div>
+            {% endfor %}
+          </div>
+
+          <div class="col-md-5">
+            <h5>Non-Scalable Benchmarks:</h5>
+
+            (Fixed Number of Qubits) {% for nonscalable_benchmark in
+            nonscalable_benchmarks %}
+
+            <div>
+              <div class="col-md-5">
+                <input
+                  class="form-check-input"
+                  type="checkbox"
+                  value="{{ nonscalable_benchmark.name }}"
+                  id="selectBench_{{ nonscalable_benchmark.id }}"
+                  name="selectBench_{{ nonscalable_benchmark.id }}"
+                />
+                {{ nonscalable_benchmark.name }}
+              </div>
             </div>
 
+            {% endfor %}
+          </div>
         </div>
 
-        <div class="col-12" style="height:20px;"></div>
-        <div class=" row border border-secondary">
-            <h6>Algorithm Level</h6>
-            <div class="row d-flex">
-                <div class="col-md-10">
-                    Currently only available using the python package. For details can be found on our <a
-                        href="https://github.com/cda-tum/MQTBench/blob/main/README.md#repository-usage" target="_blank">Github
-                    page</a>.
-
-                </div>
+        <div class="col-12" style="height: 20px"></div>
+        <div class="row border border-secondary">
+          <h6>Algorithm Level</h6>
+          <div class="row d-flex">
+            <div class="col-md-10">
+              Currently only available using the python package. For details can
+              be found on our
+              <a
+                href="https://github.com/cda-tum/MQTBench/blob/main/README.md#repository-usage"
+                target="_blank"
+                >Github page</a
+              >.
             </div>
+          </div>
         </div>
 
-        <div class="col-12" style="height:20px;"></div>
-        <div class=" row border border-secondary">
-            <h6>Independent Level Options</h6>
-
-            <div class="row">
-                <div class="col-3 align-items-center">
-                    <input class="form-check-input" type="checkbox"
-                           id="indep_qiskit_compiler" name="indep_qiskit_compiler" value="true">
-                    <label for="indep_qiskit_compiler">Qiskit</label>
-                </div>
+        <div class="col-12" style="height: 20px"></div>
+        <div class="row border border-secondary">
+          <h6>Independent Level Options</h6>
+
+          <div class="row">
+            <div class="col-3 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                id="indep_qiskit_compiler"
+                name="indep_qiskit_compiler"
+                value="true"
+              />
+              <label for="indep_qiskit_compiler">Qiskit</label>
             </div>
-            <div class="row">
-                <div class="col-5 align-items-center">
-                    <input class="form-check-input" type="checkbox"
-                           id="indep_tket_compiler" name="indep_tket_compiler" value="true">
-                    <label for="indep_tket_compiler">TKET</label>
-                </div>
+          </div>
+          <div class="row">
+            <div class="col-5 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                id="indep_tket_compiler"
+                name="indep_tket_compiler"
+                value="true"
+              />
+              <label for="indep_tket_compiler">TKET</label>
             </div>
+          </div>
         </div>
 
-        <div class="col-12" style="height:20px;"></div>
+        <div class="col-12" style="height: 20px"></div>
 
         <div class="row border border-secondary">
-            <h6>Target-dependent: Native-Gates Level Options</h6>
-
-            <div class="row">
-                <div class="col-2 align-items-center">
-                    <input class="form-check-input" type="checkbox" onchange="toggleNativeQiskit()"
-                           id="nativegates_qiskit_compiler" name="nativegates_qiskit_compiler" value="true">
-                    <label for="nativegates_qiskit_compiler">Qiskit</label>
-                </div>
-                <div class="col-5 align-items-center">
-                    <input class="form-check-input" type="checkbox" name="nativegates_qiskit_compiler_opt0" value="true"
-                           id="nativegates_qiskit_compiler_opt0" disabled>
-                    <label for="nativegates_qiskit_compiler_opt0">Opt. 0</label>
-                    <input class="form-check-input" type="checkbox" name="nativegates_qiskit_compiler_opt1" value="true"
-                           id="nativegates_qiskit_compiler_opt1" disabled>
-                    <label for="nativegates_qiskit_compiler_opt1">Opt. 1</label>
-                    <input class="form-check-input" type="checkbox" name="nativegates_qiskit_compiler_opt2" value="true"
-                           id="nativegates_qiskit_compiler_opt2" disabled>
-                    <label for="nativegates_qiskit_compiler_opt2">Opt. 2</label>
-                    <input class="form-check-input" type="checkbox" name="nativegates_qiskit_compiler_opt3" value="true"
-                           id="nativegates_qiskit_compiler_opt3" disabled>
-                    <label for="nativegates_qiskit_compiler_opt3">Opt. 3</label>
-                </div>
+          <h6>Target-dependent: Native-Gates Level Options</h6>
+
+          <div class="row">
+            <div class="col-2 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                onchange="toggleNativeQiskit()"
+                id="nativegates_qiskit_compiler"
+                name="nativegates_qiskit_compiler"
+                value="true"
+              />
+              <label for="nativegates_qiskit_compiler">Qiskit</label>
             </div>
-
-            <div class="row">
-                <div class="col-2 align-items-center">
-                    <input class="form-check-input" type="checkbox"
-                           id="nativegates_tket_compiler" name="nativegates_tket_compiler value="true"">
-                    <label for="nativegates_tket_compiler">TKET</label>
-                </div>
+            <div class="col-5 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                name="nativegates_qiskit_compiler_opt0"
+                value="true"
+                id="nativegates_qiskit_compiler_opt0"
+                disabled
+              />
+              <label for="nativegates_qiskit_compiler_opt0">Opt. 0</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                name="nativegates_qiskit_compiler_opt1"
+                value="true"
+                id="nativegates_qiskit_compiler_opt1"
+                disabled
+              />
+              <label for="nativegates_qiskit_compiler_opt1">Opt. 1</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                name="nativegates_qiskit_compiler_opt2"
+                value="true"
+                id="nativegates_qiskit_compiler_opt2"
+                disabled
+              />
+              <label for="nativegates_qiskit_compiler_opt2">Opt. 2</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                name="nativegates_qiskit_compiler_opt3"
+                value="true"
+                id="nativegates_qiskit_compiler_opt3"
+                disabled
+              />
+              <label for="nativegates_qiskit_compiler_opt3">Opt. 3</label>
             </div>
-            <div class="row">
-                <div class="col-2 align-items-center"> Native Gate Sets</div>
-                <div class="col-5 align-items-center">
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="nativegates_ibm" name="nativegates_ibm">
-                    <label for="nativegates_ibm">IBM</label>
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="nativegates_rigetti" name="nativegates_rigetti">
-                    <label for="nativegates_rigetti">Riggeti</label>
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="nativegates_oqc" name="nativegates_oqc">
-                    <label for="nativegates_oqc">OQC</label>
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="nativegates_ionq" name="nativegates_ionq">
-                    <label for="nativegates_ionq">IonQ</label>
-                </div>
+          </div>
+
+          <div class="row">
+            <div class="col-2 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                id="nativegates_tket_compiler"
+                name="nativegates_tket_compiler"
+                value="true"
+              />
+              <label for="nativegates_tket_compiler">TKET</label>
             </div>
-        </div>
-        <div class="col-12" style="height:20px;"></div>
-
-        <div class=" row border border-secondary">
-            <h6>Target-dependent: Mapped Level Options</h6>
-            <div class="row">
-                <div class="col-2 align-items-center">
-                    <input class="form-check-input" type="checkbox" value="true" onchange="toggleMappedQiskit()"
-                           id="mapped_qiskit_compiler" name="mapped_qiskit_compiler">
-                    <label for="mapped_qiskit_compiler">Qiskit</label>
-                </div>
-                <div class="col-5 align-items-center">
-                    <input class="form-check-input" type="checkbox" value="true" disabled
-                           id="mapped_qiskit_compiler_opt0" name="mapped_qiskit_compiler_opt0">
-                    <label for="mapped_qiskit_compiler_opt0">Opt. 0</label>
-                    <input class="form-check-input" type="checkbox" value="true" disabled
-                           id="mapped_qiskit_compiler_opt1" name="mapped_qiskit_compiler_opt1">
-                    <label for="mapped_qiskit_compiler_opt1">Opt. 1</label>
-                    <input class="form-check-input" type="checkbox" value="true" disabled
-                           id="mapped_qiskit_compiler_opt2" name="mapped_qiskit_compiler_opt2">
-                    <label for="mapped_qiskit_compiler_opt2">Opt. 2</label>
-                    <input class="form-check-input" type="checkbox" value="true" disabled
-                           id="mapped_qiskit_compiler_opt3" name="mapped_qiskit_compiler_opt3">
-                    <label for="mapped_qiskit_compiler_opt3">Opt. 3</label>
-                </div>
+          </div>
+          <div class="row">
+            <div class="col-2 align-items-center">Native Gate Sets</div>
+            <div class="col-5 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="nativegates_ibm"
+                name="nativegates_ibm"
+              />
+              <label for="nativegates_ibm">IBM</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="nativegates_rigetti"
+                name="nativegates_rigetti"
+              />
+              <label for="nativegates_rigetti">Riggeti</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="nativegates_oqc"
+                name="nativegates_oqc"
+              />
+              <label for="nativegates_oqc">OQC</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="nativegates_ionq"
+                name="nativegates_ionq"
+              />
+              <label for="nativegates_ionq">IonQ</label>
             </div>
-            <div class="row">
-                <div class="col-2 align-items-center">
-                    <input class="form-check-input" type="checkbox" value="true" onchange="toggleMappedTKET()"
-                           id="mapped_tket_compiler" name="mapped_tket_compiler">
-                    <label for="mapped_tket_compiler">TKET</label>
-                </div>
-                <div class="col-5 align-items-center">
-                    <input class="form-check-input" type="checkbox" value="true" disabled
-                           id="mapped_tket_compiler_graph" name="mapped_tket_compiler_graph">
-                    <label for="mapped_tket_compiler_graph">Graph Placement</label>
-                    <input class="form-check-input" type="checkbox" value="true" disabled
-                           id="mapped_tket_compiler_line" name="mapped_tket_compiler_line">
-                    <label for="mapped_tket_compiler_line">Line Placement</label>
-                </div>
+          </div>
+        </div>
+        <div class="col-12" style="height: 20px"></div>
 
+        <div class="row border border-secondary">
+          <h6>Target-dependent: Mapped Level Options</h6>
+          <div class="row">
+            <div class="col-2 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                onchange="toggleMappedQiskit()"
+                id="mapped_qiskit_compiler"
+                name="mapped_qiskit_compiler"
+              />
+              <label for="mapped_qiskit_compiler">Qiskit</label>
+            </div>
+            <div class="col-5 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                disabled
+                id="mapped_qiskit_compiler_opt0"
+                name="mapped_qiskit_compiler_opt0"
+              />
+              <label for="mapped_qiskit_compiler_opt0">Opt. 0</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                disabled
+                id="mapped_qiskit_compiler_opt1"
+                name="mapped_qiskit_compiler_opt1"
+              />
+              <label for="mapped_qiskit_compiler_opt1">Opt. 1</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                disabled
+                id="mapped_qiskit_compiler_opt2"
+                name="mapped_qiskit_compiler_opt2"
+              />
+              <label for="mapped_qiskit_compiler_opt2">Opt. 2</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                disabled
+                id="mapped_qiskit_compiler_opt3"
+                name="mapped_qiskit_compiler_opt3"
+              />
+              <label for="mapped_qiskit_compiler_opt3">Opt. 3</label>
             </div>
-            <div class="row">
-                <div class="col-2 align-items-center"> Devices</div>
-                <div class="col-10 align-items-center">
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="device_ibm_washington" value="true" name="device_ibm_washington">
-                    <label for="device_ibm_washington">IBM Washington (127 Qubits)</label>
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="device_ibm_montreal" value="true" name="device_ibm_montreal">
-                    <label for="device_ibm_montreal">IBM Montreal (27 Qubits)</label>
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="device_rigetti_aspen_m1" value="true" name="device_rigetti_aspen_m1">
-                    <label for="device_rigetti_aspen_m1">Riggeti Aspen-M1 (80 Qubits)</label>
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="device_oqc_lucy" value="true" name="device_oqc_lucy">
-                    <label for="device_oqc_lucy">OQC Lucy (8 Qubits)</label>
-                    <input class="form-check-input" type="checkbox" value="true"
-                           id="device_ionq_ionq11" value="true" name="device_ionq_ionq11">
-                    <label for="device_ionq_ionq11">IonQ (11 Qubits)</label>
-                </div>
+          </div>
+          <div class="row">
+            <div class="col-2 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                onchange="toggleMappedTKET()"
+                id="mapped_tket_compiler"
+                name="mapped_tket_compiler"
+              />
+              <label for="mapped_tket_compiler">TKET</label>
             </div>
+            <div class="col-5 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                disabled
+                id="mapped_tket_compiler_graph"
+                name="mapped_tket_compiler_graph"
+              />
+              <label for="mapped_tket_compiler_graph">Graph Placement</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                disabled
+                id="mapped_tket_compiler_line"
+                name="mapped_tket_compiler_line"
+              />
+              <label for="mapped_tket_compiler_line">Line Placement</label>
+            </div>
+          </div>
+          <div class="row">
+            <div class="col-2 align-items-center">Devices</div>
+            <div class="col-10 align-items-center">
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="device_ibm_washington"
+                value="true"
+                name="device_ibm_washington"
+              />
+              <label for="device_ibm_washington"
+                >IBM Washington (127 Qubits)</label
+              >
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="device_ibm_montreal"
+                value="true"
+                name="device_ibm_montreal"
+              />
+              <label for="device_ibm_montreal">IBM Montreal (27 Qubits)</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="device_rigetti_aspen_m1"
+                value="true"
+                name="device_rigetti_aspen_m1"
+              />
+              <label for="device_rigetti_aspen_m1"
+                >Riggeti Aspen-M1 (80 Qubits)</label
+              >
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="device_oqc_lucy"
+                value="true"
+                name="device_oqc_lucy"
+              />
+              <label for="device_oqc_lucy">OQC Lucy (8 Qubits)</label>
+              <input
+                class="form-check-input"
+                type="checkbox"
+                value="true"
+                id="device_ionq_ionq11"
+                value="true"
+                name="device_ionq_ionq11"
+              />
+              <label for="device_ionq_ionq11">IonQ (11 Qubits)</label>
+            </div>
+          </div>
         </div>
-        <div class="col-11" style="height:50px;"></div>
-        <div class="text-center ">
-            <div class="same_row"> # of selected benchmarks:</div>
-            <div class="same_row" id="num_benchmarks">0</div>
-            <button type="submit" class=" btn btn-primary btn-lg mx-auto text-center" id="downloadButton" disabled
-                    value="submit">
-                Download selected Benchmarks
-            </button>
+        <div class="col-11" style="height: 50px"></div>
+        <div class="text-center">
+          <div class="same_row"># of selected benchmarks:</div>
+          <div class="same_row" id="num_benchmarks">0</div>
+          <button
+            type="submit"
+            class="btn btn-primary btn-lg mx-auto text-center"
+            id="downloadButton"
+            disabled
+            value="submit"
+          >
+            Download selected Benchmarks
+          </button>
         </div>
-
-    </div>
-</form>
-
-<form method="POST" class="form-inline" role="form" action="get_pre_gen" id="preGenForm" onchange="checks_on_change()">
-    <div class="container-fluid text-center">
-        <br>
-        You can download a pre-generated <i>.zip</i> file with <i>all</i> available benchmarks here:
-        <br>
-        <button type="submit" class=" btn btn-primary btn-lg mx-auto text-center" id="downloadPreGenZip">
-            Download all Benchmarks
+      </div>
+    </form>
+
+    <form
+      method="POST"
+      class="form-inline"
+      role="form"
+      action="get_pre_gen"
+      id="preGenForm"
+      onchange="checks_on_change()"
+    >
+      <div class="container-fluid text-center">
+        <br />
+        You can download a pre-generated <i>.zip</i> file with
+        <i>all</i> available benchmarks here:
+        <br />
+        <button
+          type="submit"
+          class="btn btn-primary btn-lg mx-auto text-center"
+          id="downloadPreGenZip"
+        >
+          Download all Benchmarks
         </button>
-    </div>
-</form>
-
-
-<!-- Optional JavaScript -->
-<!-- jQuery first, then Popper.js, then Bootstrap JS -->
-<script
-        src="https://code.jquery.com/jquery-3.3.1.min.js"
-        integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
-        crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
-        integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
-        crossorigin="anonymous"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
-        integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
-        crossorigin="anonymous"></script>
-
-<script>
-    function toggleNativeQiskit() {
-        document.getElementById("nativegates_qiskit_compiler_opt0").disabled = !document.getElementById("nativegates_qiskit_compiler_opt0").disabled
-        document.getElementById("nativegates_qiskit_compiler_opt1").disabled = !document.getElementById("nativegates_qiskit_compiler_opt1").disabled
-        document.getElementById("nativegates_qiskit_compiler_opt2").disabled = !document.getElementById("nativegates_qiskit_compiler_opt2").disabled
-        document.getElementById("nativegates_qiskit_compiler_opt3").disabled = !document.getElementById("nativegates_qiskit_compiler_opt3").disabled
-    }
-
-    function toggleMappedQiskit() {
-        document.getElementById("mapped_qiskit_compiler_opt0").disabled = !document.getElementById("mapped_qiskit_compiler_opt0").disabled
-        document.getElementById("mapped_qiskit_compiler_opt1").disabled = !document.getElementById("mapped_qiskit_compiler_opt1").disabled
-        document.getElementById("mapped_qiskit_compiler_opt2").disabled = !document.getElementById("mapped_qiskit_compiler_opt2").disabled
-        document.getElementById("mapped_qiskit_compiler_opt3").disabled = !document.getElementById("mapped_qiskit_compiler_opt3").disabled
-    }
-
-    function toggleMappedTKET() {
-        document.getElementById("mapped_tket_compiler_graph").disabled = !document.getElementById("mapped_tket_compiler_graph").disabled
-        document.getElementById("mapped_tket_compiler_line").disabled = !document.getElementById("mapped_tket_compiler_line").disabled
-    }
-
-    function toggleAllSelection() {
-
-        var ids = {{benchmarks | length}}+{{nonscalable_benchmarks | length }}
-        for (let i = 1; i <= ids; i++) {
-            document.getElementById("selectBench_" + i).checked = all_benchmarks.checked
-        }
-    }
-
-    function checks_on_change() {
-        check_col_if_all_selected()
-        get_num_benchs()
-
-
-    }
-
-    function get_num_benchs() {
-        form = document.getElementById("benchmark_form")
-        const formData = new FormData(form);
-        fetch('./get_num_benchmarks', {
-            method: 'POST',
-            body: formData,
-            dataType: 'json',
-        }).then(response => response.json())
-            .then(response => {
-                document.getElementById("num_benchmarks").innerHTML = response.num_selected;
-
-                        if (num_benchmarks.innerHTML > 0) {
-                            downloadButton.disabled = false;
-                        }
-                        if (num_benchmarks.innerHTML == 0) {
-                            downloadButton.disabled = true;
-                        }
-            });
-
-    }
-
-    function check_col_if_all_selected() {
-        var ids = {{benchmarks | length}}+{{nonscalable_benchmarks | length }}
-        var check_all_selected = true;
-        for (let i = 1; i <= ids; i++) {
-            if (!document.getElementById("selectBench_" + i).checked) {
-                all_benchmarks.checked = false;
-                check_all_selected = false;
-            }
-        }
-        if (check_all_selected) {
-            all_benchmarks.checked = true;
-        }
-    }
-
-</script>
-</body>
+      </div>
+    </form>
+
+    <!-- Optional JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <script
+      src="https://code.jquery.com/jquery-3.3.1.min.js"
+      integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
+      integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
+      integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
+      crossorigin="anonymous"
+    ></script>
+
+    <script>
+      function toggleNativeQiskit() {
+          document.getElementById("nativegates_qiskit_compiler_opt0").disabled = !document.getElementById("nativegates_qiskit_compiler_opt0").disabled
+          document.getElementById("nativegates_qiskit_compiler_opt1").disabled = !document.getElementById("nativegates_qiskit_compiler_opt1").disabled
+          document.getElementById("nativegates_qiskit_compiler_opt2").disabled = !document.getElementById("nativegates_qiskit_compiler_opt2").disabled
+          document.getElementById("nativegates_qiskit_compiler_opt3").disabled = !document.getElementById("nativegates_qiskit_compiler_opt3").disabled
+      }
+
+      function toggleMappedQiskit() {
+          document.getElementById("mapped_qiskit_compiler_opt0").disabled = !document.getElementById("mapped_qiskit_compiler_opt0").disabled
+          document.getElementById("mapped_qiskit_compiler_opt1").disabled = !document.getElementById("mapped_qiskit_compiler_opt1").disabled
+          document.getElementById("mapped_qiskit_compiler_opt2").disabled = !document.getElementById("mapped_qiskit_compiler_opt2").disabled
+          document.getElementById("mapped_qiskit_compiler_opt3").disabled = !document.getElementById("mapped_qiskit_compiler_opt3").disabled
+      }
+
+      function toggleMappedTKET() {
+          document.getElementById("mapped_tket_compiler_graph").disabled = !document.getElementById("mapped_tket_compiler_graph").disabled
+          document.getElementById("mapped_tket_compiler_line").disabled = !document.getElementById("mapped_tket_compiler_line").disabled
+      }
+
+      function toggleAllSelection() {
+
+          var ids = {{benchmarks | length}}+{{nonscalable_benchmarks | length }}
+          for (let i = 1; i <= ids; i++) {
+              document.getElementById("selectBench_" + i).checked = all_benchmarks.checked
+          }
+      }
+
+      function checks_on_change() {
+          check_col_if_all_selected()
+          get_num_benchs()
+
+
+      }
+
+      function get_num_benchs() {
+          form = document.getElementById("benchmark_form")
+          const formData = new FormData(form);
+          fetch('./get_num_benchmarks', {
+              method: 'POST',
+              body: formData,
+              dataType: 'json',
+          }).then(response => response.json())
+              .then(response => {
+                  document.getElementById("num_benchmarks").innerHTML = response.num_selected;
+
+                          if (num_benchmarks.innerHTML > 0) {
+                              downloadButton.disabled = false;
+                          }
+                          if (num_benchmarks.innerHTML == 0) {
+                              downloadButton.disabled = true;
+                          }
+              });
+
+      }
+
+      function check_col_if_all_selected() {
+          var ids = {{benchmarks | length}}+{{nonscalable_benchmarks | length }}
+          var check_all_selected = true;
+          for (let i = 1; i <= ids; i++) {
+              if (!document.getElementById("selectBench_" + i).checked) {
+                  all_benchmarks.checked = false;
+                  check_all_selected = false;
+              }
+          }
+          if (check_all_selected) {
+              all_benchmarks.checked = true;
+          }
+      }
+    </script>
+  </body>
 </html>
-
diff --git a/mqt/benchviewer/templates/legal.html b/mqt/benchviewer/templates/legal.html
index 39c4dca62..79f93ebfe 100644
--- a/mqt/benchviewer/templates/legal.html
+++ b/mqt/benchviewer/templates/legal.html
@@ -1,135 +1,176 @@
 <!doctype html>
 <html lang="en">
-<head>
+  <head>
     <!-- Required meta tags -->
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta charset="utf-8" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1, shrink-to-fit=no"
+    />
 
     <!-- Bootstrap CSS -->
-    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
-          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
+    <link
+      href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
+      rel="stylesheet"
+      integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
+      crossorigin="anonymous"
+    />
 
-    <style>
-
-    </style>
+    <style></style>
 
     <title>MQT Bench</title>
-    <link rel="shortcut icon" href="../static/favicon.ico">
-</head>
-<body>
-
-<!-- Image and text -->
-<nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
-    <a class="navbar-brand" href="/mqtbench">
-
-        <img src="../static/TUM_Logo_blau_rgb_s.svg" alt="" width="50" height="24"
-             class="d-inline-block align-text-top">
+    <link rel="shortcut icon" href="../static/favicon.ico" />
+  </head>
+  <body>
+    <!-- Image and text -->
+    <nav class="navbar navbar-expand-lg navbar-light bg-light fixed-top">
+      <a class="navbar-brand" href="/mqtbench">
+        <img
+          src="../static/TUM_Logo_blau_rgb_s.svg"
+          alt=""
+          width="50"
+          height="24"
+          class="d-inline-block align-text-top"
+        />
         MQT Bench
-    </a>
-    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
-            aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
+      </a>
+      <button
+        class="navbar-toggler"
+        type="button"
+        data-toggle="collapse"
+        data-target="#navbarNavAltMarkup"
+        aria-controls="navbarNavAltMarkup"
+        aria-expanded="false"
+        aria-label="Toggle navigation"
+      >
         <span class="navbar-toggler-icon"></span>
-    </button>
-    <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
+      </button>
+      <div class="collapse navbar-collapse" id="navbarNavAltMarkup">
         <div class="navbar-nav">
-            <a class="nav-item nav-link " href="index">Benchmarks</span></a>
-            <a class="nav-item nav-link " href="description ">Level and File Descriptions</span></a>
-            <a class="nav-item nav-link " href="benchmark_description ">Benchmark Description</a>
-            <a class="nav-item nav-link " href="https://www.cda.cit.tum.de/research/quantum/" target="_blank">More on
-                our Work</a>
-            <a class="nav-item nav-link active" href="legal">Legal Information</span></a>
+          <a class="nav-item nav-link" href="index">Benchmarks</a>
+          <a class="nav-item nav-link" href="description "
+            >Level and File Descriptions</a
+          >
+          <a class="nav-item nav-link" href="benchmark_description "
+            >Benchmark Description</a
+          >
+          <a
+            class="nav-item nav-link"
+            href="https://www.cda.cit.tum.de/research/quantum/"
+            target="_blank"
+            >More on our Work</a
+          >
+          <a class="nav-item nav-link active" href="legal">Legal Information</a>
         </div>
-    </div>
-</nav>
-
-<div class="col-xs-12" style="height:80px;"></div>
-<div class="container">
-    <b>Herausgeber</b><br>
-    Technische Universität München<br>
-    Arcisstraße 21<br>
-    80333 München<br>
-    Telefon: +49 89 289-01<br>
-    poststelle@tum.de<br><br>
-
-    <b>Rechtsform und Vertretung</b><br>
-    Die Technische Universität München ist eine Körperschaft des Öffentlichen Rechts und staatliche Einrichtung (Art. 11
-    Abs. 1 BayHSchG). Sie wird gesetzlich vertreten durch den Präsidenten Prof. Dr. Thomas F. Hofmann.
-    <br><br>
-    <b>Zuständige Aufsichtsbehörde</b><br>
-    Bayerisches Staatsministerium für Wissenschaft und Kunst<br><br>
-
-    <b>Umsatzsteueridentifikationnummer</b><br>
-    DE811193231 (gemäß § 27a Umsatzsteuergesetz )<br><br>
-
-    <b>Inhaltlich verantwortlich</b><br>
-    Prof. Dr. Robert Wille<br>
-    Arcisstr. 21<br>
-    80333 München<br>
-    E-Mail: robert.wille(at)tum.de<br><br>
-
-    Namentlich gekennzeichnete Internetseiten geben die Auffassungen und Erkenntnisse der genannten Personen wieder.<br><br>
-
-    <b>Nutzungsbedingungen</b><br>
-    Texte, Bilder, Grafiken sowie die Gestaltung dieses Webauftritts können dem Urheberrecht unterliegen. Nicht
-    urheberrechtlich geschützt sind nach § 5 des Urheberrechtsgesetz (UrhG)
-    <ul>
-        <li>Gesetze, Verordnungen, amtliche Erlasse und Bekanntmachungen sowie Entscheidungen und amtlich verfasste
-            Leitsätze
-            zu Entscheidungen und
+      </div>
+    </nav>
+
+    <div class="col-xs-12" style="height: 80px"></div>
+    <div class="container">
+      <b>Herausgeber</b><br />
+      Technische Universität München<br />
+      Arcisstraße 21<br />
+      80333 München<br />
+      Telefon: +49 89 289-01<br />
+      poststelle@tum.de<br /><br />
+
+      <b>Rechtsform und Vertretung</b><br />
+      Die Technische Universität München ist eine Körperschaft des Öffentlichen
+      Rechts und staatliche Einrichtung (Art. 11 Abs. 1 BayHSchG). Sie wird
+      gesetzlich vertreten durch den Präsidenten Prof. Dr. Thomas F. Hofmann.
+      <br /><br />
+      <b>Zuständige Aufsichtsbehörde</b><br />
+      Bayerisches Staatsministerium für Wissenschaft und Kunst<br /><br />
+
+      <b>Umsatzsteueridentifikationnummer</b><br />
+      DE811193231 (gemäß § 27a Umsatzsteuergesetz )<br /><br />
+
+      <b>Inhaltlich verantwortlich</b><br />
+      Prof. Dr. Robert Wille<br />
+      Arcisstr. 21<br />
+      80333 München<br />
+      E-Mail: robert.wille(at)tum.de<br /><br />
+
+      Namentlich gekennzeichnete Internetseiten geben die Auffassungen und
+      Erkenntnisse der genannten Personen wieder.<br /><br />
+
+      <b>Nutzungsbedingungen</b><br />
+      Texte, Bilder, Grafiken sowie die Gestaltung dieses Webauftritts können
+      dem Urheberrecht unterliegen. Nicht urheberrechtlich geschützt sind nach §
+      5 des Urheberrechtsgesetz (UrhG)
+      <ul>
+        <li>
+          Gesetze, Verordnungen, amtliche Erlasse und Bekanntmachungen sowie
+          Entscheidungen und amtlich verfasste Leitsätze zu Entscheidungen und
         </li>
-        <li>andere amtliche Werke, die im amtlichen Interesse zur allgemeinen Kenntnisnahme veröffentlicht worden sind,
-            mit der Einschränkung, dass die Bestimmungen über Änderungsverbot und Quellenangabe
-            in § 62 Abs. 1 bis 3 und § 63 Abs. 1 und 2 UrhG entsprechend anzuwenden sind.
+        <li>
+          andere amtliche Werke, die im amtlichen Interesse zur allgemeinen
+          Kenntnisnahme veröffentlicht worden sind, mit der Einschränkung, dass
+          die Bestimmungen über Änderungsverbot und Quellenangabe in § 62 Abs. 1
+          bis 3 und § 63 Abs. 1 und 2 UrhG entsprechend anzuwenden sind.
         </li>
-    </ul>
-    Als Privatperson dürfen Sie urheberrechtlich geschütztes Material zum privaten und sonstigen eigenen Gebrauch im
-    Rahmen des § 53 UrhG verwenden. Eine Vervielfältigung oder Verwendung urheberrechtlich geschützten Materials dieser
-    Seiten oder Teilen davon in anderen elektronischen oder gedruckten Publikationen und deren Veröffentlichung ist nur
-    mit unserer Einwilligung gestattet. Diese Einwilligung erteilen auf Anfrage die für den Inhalt Verantwortlichen.
-    Der Nachdruck und die Auswertung von Pressemitteilungen und Reden sind mit Quellenangabe allgemein gestattet.
-    <br><br>
-    Weiterhin können Texte, Bilder, Grafiken und sonstige Dateien ganz oder teilweise dem Urheberrecht Dritter
-    unterliegen.
-    Auch über das Bestehen möglicher Rechte Dritter geben Ihnen die für den Inhalt Verantwortlichen nähere Auskünfte.
-    <br><br>
-    <b>Haftungsausschluss</b><br>
-    Alle in diesem Webauftritt bereitgestellten Informationen haben wir nach bestem Wissen und Gewissen erarbeitet und
-    geprüft. Eine Gewähr für die jederzeitige Aktualität, Richtigkeit, Vollständigkeit und Verfügbarkeit der bereit
-    gestellten Informationen können wir allerdings nicht übernehmen. Ein Vertragsverhältnis mit den Nutzern des
-    Webauftritts kommt nicht zustande.
-    <br><br>
-    Wir haften nicht für Schäden, die durch die Nutzung dieses Webauftritts entstehen. Dieser Haftungsausschluss gilt
-    nicht,
-    soweit die Vorschriften des § 839 BGB (Haftung bei Amtspflichtverletzung) einschlägig sind. Für etwaige Schäden,
-    die beim Aufrufen oder Herunterladen von Daten durch Schadsoftware oder der Installation oder Nutzung von Software
-    verursacht werden, übernehmen wir keine Haftung.
-    <br><br>
-    <b>Links</b><br>
-    Von unseren eigenen Inhalten sind Querverweise („Links“) auf die Webseiten anderer Anbieter zu unterscheiden. Durch
-    diese Links ermöglichen wir lediglich den Zugang zur Nutzung fremder Inhalte nach § 8 Telemediengesetz. Bei der
-    erstmaligen Verknüpfung mit diesen Internetangeboten haben wir diese fremden Inhalte daraufhin überprüft, ob durch
-    sie eine mögliche zivilrechtliche oder strafrechtliche Verantwortlichkeit ausgelöst wird. Wir können diese fremden
-    Inhalte aber nicht ständig auf Veränderungen überprüfen und daher auch keine Verantwortung dafür übernehmen. Für
-    illegale, fehlerhafte oder unvollständige Inhalte und insbesondere für Schäden, die aus der Nutzung oder
-    Nichtnutzung von Informationen Dritter entstehen, haftet allein der jeweilige Anbieter der Seite.
-</div>
-
-<div class="col-xs-12" style="height:50px;"></div>
-<!-- Optional JavaScript -->
-<!-- jQuery first, then Popper.js, then Bootstrap JS -->
-<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
-        integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
-        crossorigin="anonymous"></script>
-<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
-        integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
-        crossorigin="anonymous"></script>
-<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
-        integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
-        crossorigin="anonymous"></script>
-
-<script>
-    <form method="POST" class="form-inline" role="form" action="download" id="benchmark_form">
-
+      </ul>
+      Als Privatperson dürfen Sie urheberrechtlich geschütztes Material zum
+      privaten und sonstigen eigenen Gebrauch im Rahmen des § 53 UrhG verwenden.
+      Eine Vervielfältigung oder Verwendung urheberrechtlich geschützten
+      Materials dieser Seiten oder Teilen davon in anderen elektronischen oder
+      gedruckten Publikationen und deren Veröffentlichung ist nur mit unserer
+      Einwilligung gestattet. Diese Einwilligung erteilen auf Anfrage die für
+      den Inhalt Verantwortlichen. Der Nachdruck und die Auswertung von
+      Pressemitteilungen und Reden sind mit Quellenangabe allgemein gestattet.
+      <br /><br />
+      Weiterhin können Texte, Bilder, Grafiken und sonstige Dateien ganz oder
+      teilweise dem Urheberrecht Dritter unterliegen. Auch über das Bestehen
+      möglicher Rechte Dritter geben Ihnen die für den Inhalt Verantwortlichen
+      nähere Auskünfte.
+      <br /><br />
+      <b>Haftungsausschluss</b><br />
+      Alle in diesem Webauftritt bereitgestellten Informationen haben wir nach
+      bestem Wissen und Gewissen erarbeitet und geprüft. Eine Gewähr für die
+      jederzeitige Aktualität, Richtigkeit, Vollständigkeit und Verfügbarkeit
+      der bereit gestellten Informationen können wir allerdings nicht
+      übernehmen. Ein Vertragsverhältnis mit den Nutzern des Webauftritts kommt
+      nicht zustande.
+      <br /><br />
+      Wir haften nicht für Schäden, die durch die Nutzung dieses Webauftritts
+      entstehen. Dieser Haftungsausschluss gilt nicht, soweit die Vorschriften
+      des § 839 BGB (Haftung bei Amtspflichtverletzung) einschlägig sind. Für
+      etwaige Schäden, die beim Aufrufen oder Herunterladen von Daten durch
+      Schadsoftware oder der Installation oder Nutzung von Software verursacht
+      werden, übernehmen wir keine Haftung.
+      <br /><br />
+      <b>Links</b><br />
+      Von unseren eigenen Inhalten sind Querverweise („Links") auf die Webseiten
+      anderer Anbieter zu unterscheiden. Durch diese Links ermöglichen wir
+      lediglich den Zugang zur Nutzung fremder Inhalte nach § 8
+      Telemediengesetz. Bei der erstmaligen Verknüpfung mit diesen
+      Internetangeboten haben wir diese fremden Inhalte daraufhin überprüft, ob
+      durch sie eine mögliche zivilrechtliche oder strafrechtliche
+      Verantwortlichkeit ausgelöst wird. Wir können diese fremden Inhalte aber
+      nicht ständig auf Veränderungen überprüfen und daher auch keine
+      Verantwortung dafür übernehmen. Für illegale, fehlerhafte oder
+      unvollständige Inhalte und insbesondere für Schäden, die aus der Nutzung
+      oder Nichtnutzung von Informationen Dritter entstehen, haftet allein der
+      jeweilige Anbieter der Seite.
+    </div>
 
-    </body>
-    </html>
+    <div class="col-xs-12" style="height: 50px"></div>
+    <!-- Optional JavaScript -->
+    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
+    <script
+      src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
+      integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN"
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
+      integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
+      crossorigin="anonymous"
+    ></script>
+    <script
+      src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
+      integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
+      crossorigin="anonymous"
+    ></script>
+  </body>
+</html>
diff --git a/paper_figures.ipynb b/paper_figures.ipynb
deleted file mode 100644
index ea4b44de4..000000000
--- a/paper_figures.ipynb
+++ /dev/null
@@ -1,188 +0,0 @@
-{
- "cells": [
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "1f991f9d",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from qiskit import (\n",
-    "    QuantumCircuit,\n",
-    "    QuantumRegister,\n",
-    "    ClassicalRegister,\n",
-    "    AncillaRegister,\n",
-    "    IBMQ,\n",
-    "    Aer,\n",
-    "    __qiskit_version__,\n",
-    ")\n",
-    "from qiskit.circuit.library import QFT, GraphState, GroverOperator\n",
-    "from qiskit.qasm import pi\n",
-    "import numpy as np\n",
-    "\n",
-    "from mqt.bench.utils.utils import *\n",
-    "from qiskit_nature.drivers import Molecule\n",
-    "\n",
-    "from qiskit.algorithms import VQE\n",
-    "from qiskit.algorithms.optimizers import SLSQP\n",
-    "from qiskit_optimization.algorithms import MinimumEigenOptimizer\n",
-    "from qiskit.circuit.library import RealAmplitudes, TwoLocal\n",
-    "from qiskit import Aer\n",
-    "from qiskit.utils import QuantumInstance\n",
-    "from qiskit.compiler import transpile"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 2,
-   "id": "43d34dd1",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "qp = get_examplary_max_cut_qp(3)\n",
-    "sim = QuantumInstance(\n",
-    "    backend=Aer.get_backend(\"qasm_simulator\"), shots=1024, seed_simulator=123\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 3,
-   "id": "93f6edc1",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 387.597x204.68 with 1 Axes>"
-      ]
-     },
-     "execution_count": 3,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "ansatz = TwoLocal(3, \"ry\", \"cx\", \"full\", reps=1)\n",
-    "# ansatz = RealAmplitudes(3, reps=2)\n",
-    "ansatz.decompose().draw(output=\"mpl\", filename=\"flow_0\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 4,
-   "id": "c88aeb0b",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATMAAACoCAYAAACMjglqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAXWElEQVR4nO3dfVRVdb7H8fc5R+JBRERSBMxEHgoSfEi9aoWomTrW6MxoieNaMt5EdF1tzJl7R3PGsph1XXTHO9Nk0yPTHbVGrqWZD5kCWahdmjLR8qioeAyfQBSS0PNw/9gjCggcaG/2Prvva62zhH02v/Nd+PXjb//2PvtYPB6PByGE8HFWvQsQQgg1SJgJIUxBwkwIYQoSZkIIU5AwE0KYgoSZEMIUJMyEEKYgYSaEMAUJMyGEKUiYCSFMQcJMCGEKEmZCCFOQMBNCmIKEmRDCFCTMhBCmIGEmhDAFCTMhhClImAkhTEHCTAhhChJmQghTkDATQpiChJkQwhQkzIQQpiBhJoQwBQkzIYQpSJgJIUyhk94FGN3hXVB9Tp/X7tIDEkbr89rCe3r1iPRHQxJmrag+B1UOvasQRiY9YgxymCmEMAUJMyGEKUiYCSFMQcJMCGEKcgJAJU+uHsVXJ/dgs/lhtdqI6NaX9DFLSU2ZqndpwgCkP7QnYaaiGWOXMWPsU7hcTjYWvcDv16YTGzWQqPBYvUsTBiD9oS05zNSAzdaJCcMex+V2cuybL/QuRxiM9Ic2JMw0cM15lc1FqwGIDo/XuRphNNIf2pDDTBWt3fkc6wtzqK2rxmbzY9HUV4mJTAYge006owem8y+JkwD4Xe5kHh4+j3sTxulZcgMXv4XPT0LNdxAcAIPuhNAgvatqmcsNJQ4oqwCrBfr1hPgI5Wuj8fX+MDpDz8zcbjc5OTnExcUREBBASkoKhYWFJCQkMGfOHL3LayJ9zFLeXVFF3vILDL1rIvuP5tc/l/XjVeRuX0ZtXQ27D2ygc0BXwzSq0wVv74Nn3oVNn0P+V8qfT78LeZ8qgWFEh8th+Tvwxm7YeQh2HISXdkH2Jjh9Ue/qmvLV/vAVhg6z2bNns2LFCjIzM9m6dSvTpk1j+vTplJaWMnjwYL3La1aXoG4smvoq+75+n6KSjQB0C+7BlPsW8ueNC1i781nmPvIHnau8Yd1e2HMUPP/8vv5PD3x8BNZ/qldlzTt+Hl7OV2aRjVV8Cy/sgAvVHV+XN3ytP3yFYcNs3bp15ObmsmnTJhYvXkxaWhpLly5l+PDhOJ1OBg0apHeJLQoJCuOn9y/i9W1LcLuVqc1DQ2bhOG9n8sgFhASF6VyhwlEJn51oeZ+9x+DspQ4px2tb9oPbcyN4b+bxwHfXlNmaUflKf/gSw4ZZdnY248ePJzU1tcH22NhY/Pz8SE5W1hpOnDhBamoq8fHx9O/fn927d+tR7i1NuX8hlZfL2fHZm/XbIrvHGupU/L5S8GZ5aV+p5qV4rbIGjpy9dZBd5wH+7zhcc3VUVW3nC/3hSwwZZg6Hg5KSEqZObXpBYVlZGUlJSfj7+wOQmZnJo48+it1u5y9/+QuPPfYYV69ebfU1LBaLV4/CwgKvan4+q4AZY59qsK1zQAgbnqnkoSGzvBqjscLCAq/rbO/jjTXv4HI5W6zD7XKy+rV1mtfi7eOeQSO9+v05XdDt9ijN6/GmR3y1P/R+tIVhwwwgIiKiwfba2loKCwvrDzEvXLjAxx9/zOzZswEYMWIEkZGR5OfnI7xz9YoXx48Wi3f7dZCrtd7V4vG4ufadQRfOhOoMeWlGeHg4AHa7nYkTJ9ZvX7lyJeXl5fWL/2VlZfTs2bN+lgbQt29fTp482epreDwtHaTcUPyWuveq+vVjuV7vm5o6Cs9q7+psr0On4eWClvexWm28lD2XuNfnalqLtzweyH5PWeBv7rdjscDdkVbqrlzWvB41e8Ro/eFLDBlmMTExJCcnk52dTVhYGFFRUeTl5bFlyxYAQ5/J9DV39YJeoXCm6tbBYAGiwyC2Z8fW1RKLBR68B9buaWEnD4xO7LCShAEY8jDTarWyfv16kpKSyMrKIiMjg/DwcObPn4/NZqtf/L/jjjs4e/YsdXV19T97/Phx+vTpo1fpPsdqhcw06BHScPv11YqIUHh8lBIgRjI0BiYqbdDkBIbFAtOHQ5yBAlhoz5AzM4D4+Pgma18zZ84kMTGRwMBAQDkcHTlyJK+99hrz5s2jqKiI06dPk5aWpkfJPis0CH41EfaXwf8UKdvuioQhfSG5N3Sy6Vtfc8b1h/694ZMj8LFd2TYmEUbEQfdgfWsTHc+QM7PmFBcXNznEfOmll3jrrbeIj49nzpw5rFu3jttuu02nCn1XJxsM7nvj+8w05e1MRg2y63qFws+G3Pj+4YESZD9Uhp2ZNVZTU4PdbmfevHkNtsfExPDRRx/pVJUQwih8JsyCg4NxuQx8BWQj+48VsPyvU4jplcKZyuP0ixzAMxkb9S5LGIT0h/p86jDTl/Tv+wAJvYfyfFYByTGpLPjJi3qXJAxE+kN9EmYaKa8spVdYDADnL50ivGuUzhUJI5H+UJ+EmUZOnjlIn4gkXG4XFov8mkVD0h/qk9+iRk6cPcidPZO45qyjquYcFZfL9S5JGIj0h/p85gSAr0kfs6T+61eePKBjJcKIpD/UJzMzIYQpyMysFV16/DBfW3hPr78n6Y+GJMxakTBa7wqE0UmPGIMcZgohTEHCTAhhChJmQghTkDATQpiChJkQwhQkzIQQpiBhJoQwBQkzIYQpSJgJIUxBwkwIYQoSZkIIU5AwE0KYgoSZEMIU5K4ZrTi8C6rP6fPaXXrIHRmENszY1xJmrag+B1UOvasQQl1m7Gs5zBRCmIKEmRDCFCTMRL0rV298feIC1F5tfl8hjEbWzH7gLn4Le47CP07Cheob21dtV/68vQsMuhOGx0JokC4lCuEVCTOVPLl6FF+d3IPN5ofVaiOiW1/SxywlNWWq3qXdktMF2w7ArkPg9jS/3/lq2H4AdpTAg/fAg0nQydZxdQr9+FpPS5ipaMbYZcwY+xQul5ONRS/w+7XpxEYNJCo8Vu/SGqi6Ai/nwzdV3v+M26OE2sHTMGcUhARqVZ0wEl/paZA1M03YbJ2YMOxxXG4nx775Qu9yGrhcCy/saFuQ3cxRCS98CDXfqVqWMDgj9/R1EmYauOa8yuai1QBEh8frXM0NHg+s3QMXaprfZ9UM5dGSc5fhrX3KeOKHwag9fTMJMxWt3fkck5eFMmlJIG9sf4pFU18lJjIZgOw16ew9tLl+39/lTqb48AcdWt+npfB1uTpjlTiUkwai/eqcUF2rrF8aldF7+maGDjO3201OTg5xcXEEBASQkpJCYWEhCQkJzJkzR+/ymkgfs5R3V1SRt/wCQ++ayP6j+fXPZf14Fbnbl1FbV8PuAxvoHNCVexPGdVhtbg/sOKjumB+WyOysPUrPwSsF8B9vw7IN8Jv18Pd9Dc8mG4WRe7oxQ4fZ7NmzWbFiBZmZmWzdupVp06Yxffp0SktLGTx4sN7lNatLUDcWTX2VfV+/T1HJRgC6Bfdgyn0L+fPGBazd+SxzH/lDh9Z05Iz6/1jKL0HpeXXHNLvPjsOfPoRD38D1/weuuZTLY57fCqcv6lpes4zY040ZNszWrVtHbm4umzZtYvHixaSlpbF06VKGDx+O0+lk0KBBepfYopCgMH56/yJe37YEt9sNwENDZuE4b2fyyAWEBIV1aD32M741rhlVXYE1e5TZbOMZrQf4zgmvf9TypTJ6MlpPN2bYMMvOzmb8+PGkpqY22B4bG4ufnx/Jycpx+29/+1vi4+OxWq3k5eXpUWqzpty/kMrL5ez47M36bZHdY3U5rX2qUqNxK7QZ14yKjrQcVB4PVNTAYZXWNbVgpJ5uzJDXmTkcDkpKSvjlL3/Z5LmysjKSkpLw9/cHYPz48cyaNYtf/OIXbXoNi8Xi1X45c/NJ6Teq1f2ezyposq1zQAgbnml/ihQWFjBkelq7f/5mM//zEGFRdzfY1tJZy+aee2JNw+8Liv5B5mj9D/kX/k1JCW//XvXws2UfERl/X4s1ejxuHl+0kk/e/o2mtXjT11r0NLStrz1tWJQ1bJgBRERENNheW1tLYWEhEyZMqN82YsSIDq3NZ2n0j9xiMezk3nCs1k6th60HLFZ5i0V7GDLMwsPDAbDb7UycOLF++8qVKykvL1dl8d/bxC9+S937Pv36sVyv901NHYVntToLKH/8oOlifeNZFtyYkd3quVsZOWwAawxwSvN6vW35n7yj/W8x7D7c8j4Wq5X/zv4Vg9b+StNa1OzrtvQ0qNvXNzNkmMXExJCcnEx2djZhYWFERUWRl5fHli1bAAx9JtOoosO0OfPYW981X58yMq7lMLMAQf6Q3LvDSjIVQx4jWK1W1q9fT1JSEllZWWRkZBAeHs78+fOx2Wz1i//Ce/16aDNujEbjmlFEV5j4z9ZtfLBpQVkJ+PkIeSN/exlyZgYQHx9Pfn5+g20zZ84kMTGRwEB5l3NbJUVBlwCoVvE9ld2C4O5e6o33QzCuP4R2Vu5Ccv6m6/5iesCPUuQ/h+/DkDOz5hQXFzc5xFy2bBnR0dHs2bOHzMxMoqOjOXbsmE4VGlcnGzyQoO6YqXeD1ac6yBiGxsCSh298/9Qj8G8PSpB9Xz7TijU1Ndjt9iYXy65YsQKHw0FdXR0VFRU4HA769eunU5XGNjoRorqpM1af7vCAMd9v7BNuPqkZ3kW/OszEsIeZjQUHB+NyGfgduY3sP1bA8r9OIaZXCmcqj9MvcgDPZGzUtSabFWaOVM5sXmnmltjenMUM9lfWdmRW9sNixJ6+mbSjRvr3fYCE3kN5PquA5JhUFvzkRb1LApRF6HljlEBqj5BAmD8Wbg9Rty5hfEbt6eskzDRSXllKr7AYAM5fOkV41yidK7ohOgz+/UdtvwRgYB/49UToFapJWcLgjNzT4EOHmb7m5JmD9IlIwuV2GfIq+S6BkHE/HD0Hn9jhy1O3ft+gzaqE3n3x2l3eIXyD0XtawkwjJ84eJLHPcK4566iqOUfF5XK6hxjrOgaLBeJ6Ko+rTuVW2mcvKbek8bMpM7BeocrXQhi9pyXMNJI+Zkn91688eUDHSrxzWye4M1x5CHErRu9p480VhRCiHSTMhBCmIIeZreii46K3nq8tzM2MfS1h1oqE0XpXIIT6zNjXcpgphDAFCTMhhClImAkhTEHCTAhhChJmQghTkDATQpiChJkQwhQkzIQQpiBhJoQwBQkzIYQpSJgJIUxBwkwIYQoSZkIIU5C7ZrTi8C6oPqfPa3fpYc67Gwj9mbGvJcxaUX0Oqhx6VyGEuszY13KYKYQwBQkzIYQpyGGm8EluN9jPwrGzcKryxvZXC5UPOY7vCX1vVz5Oz0gufgsHHHCq4sa2P34AkaFwRzj0j4bA23Qrz6dJmAmf4nbDJ0eg4GuoqGn6fIlDeWxD+czPB5OUT2LXO9TKq+D9/XDQAY0/a7n0vPLgiPKRf0P6woRkCA7QoVAfJmGmkidXj+Krk3uw2fywWm1EdOtL+pilpKZM1bs006iogb8VwfHz3u1fXgVvfgKfn4RHh+kTDh4P7DwEW78El7v1/a86lbDefwoeGwb3RGtfY3N8radlzUxFM8Yu473natiwvIKHhszi92vTOX3hqN5lmcLZS7Bqu/dBdrMDDvjjDrhcq35dLXF74O+fwuYvvAuym9V8B68Vwh6d28eXelrCTAM2WycmDHscl9vJsW++0Lscn/dtHazeBdXftX+Mc5fh5QJwulQrq1XbD3y/MPIAf98Hh06rVlK7+UJPS5hp4JrzKpuLVgMQHR6vczW+751iqLrS8j6rZiiPljgq4YMS9epqSVkF7Gjltbyp2QO8vQ+u1KlWWrv4Qk8bOszcbjc5OTnExcUREBBASkoKhYWFJCQkMGfOHL3La2LtzueYvCyUSUsCeWP7Uyya+ioxkckAZK9JZ++hzfX7/i53MsWHP9CrVJ9x4gIUn1BvvA8Pth6ManjnM+UwUw2XapW69eBLPW3oMJs9ezYrVqwgMzOTrVu3Mm3aNKZPn05paSmDBw/Wu7wm0scs5d0VVeQtv8DQuyay/2h+/XNZP15F7vZl1NbVsPvABjoHdOXehHE6VusbPrarO57bo/06lKOyfWt7Ldl7TDk50NF8qacNG2br1q0jNzeXTZs2sXjxYtLS0li6dCnDhw/H6XQyaNAgvUtsVpegbiya+ir7vn6fopKNAHQL7sGU+xby540LWLvzWeY+8gedqzQ+pwu+KFN/3M9OqD/mzf5xUv0xr1yFw+Xqj+stX+hpw4ZZdnY248ePJzU1tcH22NhY/Pz8SE5O5uLFi0yaNIn4+HhSUlIYN24cR48a40xLSFAYP71/Ea9vW4LbrZzKemjILBzn7UweuYCQoDCdKzS+M5e0WbC/UK2Eg1ZuviBW1XErW99HS0bvaUOGmcPhoKSkhKlTm17PUlZWRlJSEv7+/lgsFp544gnsdjv79+9n0qRJZGRk6FDxrU25fyGVl8vZ8dmb9dsiu8cSFR6rY1W+48wlDceu0m7sco3qLq/SZty2MHJPG/KiWYdDeTt/REREg+21tbUUFhYyYcIEAEJDQxk7dmz98yNGjGDlypVevYbFy0vCc+bmk9JvVKv7PZ9V0GRb54AQNjzT/v9OCwsLGDI9rd0/7+vuSXucMbNfbrCttbN/zT3/xJqG36eNeZCykg+/R3XNm/vKJfwDQ1qtqbXnG9f83pZt/OuoCd+zOoU3fa1FT0Pb+trj8f4siiFnZuHh4QDY7Q1Xf1euXEl5eXmzi/+rVq1i8uTJWpcnOojz2ve4sKy1sa9qdwWt66o2dWs1rllYPG2Jvg7idrsZOHAg5eXl5OTkEBUVRV5eHlu2bKGsrIy9e/cybNiwBj/z9NNPs3XrVnbt2kVQUJBqtRS/pd99n0Kj4d7H9HltIyirgP/a5t2+12c3jWczzXnuZ9DZv311teZPO+CYFzc+bGvNY5Ng0oB2l9WAGfvakDMzq9XK+vXrSUpKIisri4yMDMLDw5k/fz42m43k5OQG+z/77LNs3ryZbdu2qRpkQl+RoWDToEO7B2sXZAC9NVoH12pcszDkmhlAfHw8+fn5DbbNnDmTxMREAgMD67c9/fTTbNmyhR07dhAaGtrBVQotdbIpt8RR+/KMAXeoO15jA/sod/VQU4Af3BWp7phmY8iZWXOKi4sbrJcdPHiQ5cuXU1FRwahRoxgwYAADBgzQr0ChuvtUfueMBRgRp+6Yjd3RXf1Z1NAY8Dfs1MMYfObXU1NTg91uZ968efXbkpKS2nS2Q/iefj0guTd8eUqd8UbdrRxmasligSmDlbUzNboz2B/G3aPCQCbnM2EWHByMy9WBtzwQhmCxwNQhUHoOalp4s7U3i+g9Q5SbHnaEmB5KcOZ/1fw+3i78Tx0qN2r0hs+Ema/Zf6yA5X+dQkyvFM5UHqdf5ACeydiod1k+qUsgzB0NL+5s/5X7YZ2VMW7rwI5/eIDypvbPv8fbmyYPghSN1/i8ZfSe9qk1M1/Sv+8DJPQeyvNZBSTHpLLgJy/qXZJPiw6DBeMgqlvbfzauJywcB906q19XS6xWmDlCuaSirXftDvCDn49QZndGYfSelpmZRsorS+kVFgPA+UunCO8apXNFvi+iKywaD7sOQeFh5W6sLekeDGMSYXisfp8BYLUq14Yl94b3PocjZ1ve32ZVzrY+PBBCDXaVkdF7WsJMIyfPHKRPRBIutwuLRSbAarFZ4cF7IO1u5YNLjp0HRwVU1ymzn65BypnEuJ5wVy8lTIzgju4wf6zyftMvy5Q3jZ+7DE63cpYyMhR6d4dBfZTDaiMyek9LmGnkxNmDJPYZzjVnHVU156i4XE73kF56l2UanWwwoI/y8CURXSGiv95VtI/Re9qQb2cyEjO+7UMIM/a18eaKQgjRDnKY2YouPX6Yry3MzYx9LYeZQghTkMNMIYQpSJgJIUxBwkwIYQoSZkIIU5AwE0KYgoSZEMIUJMyEEKYgYSaEMAUJMyGEKUiYCSFMQcJMCGEKEmZCCFOQMBNCmIKEmRDCFCTMhBCmIGEmhDAFCTMhhClImAkhTOH/AR9EFJ5QAVUBAAAAAElFTkSuQmCC\n",
-      "text/plain": [
-       "<Figure size 387.597x204.68 with 1 Axes>"
-      ]
-     },
-     "execution_count": 4,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "qc = ansatz.assign_parameters([np.pi, np.pi, np.pi, np.pi, np.pi, np.pi])\n",
-    "qc.decompose().draw(output=\"mpl\", filename=\"flow_1\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "id": "f73bea70",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 507.997x204.68 with 1 Axes>"
-      ]
-     },
-     "execution_count": 5,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "qc_2 = transpile(\n",
-    "    qc, basis_gates=[\"id\", \"rz\", \"sx\", \"x\", \"cx\", \"reset\"], optimization_level=1\n",
-    ")\n",
-    "qc_2.draw(output=\"mpl\", filename=\"flow_2\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "id": "981be571",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "from qiskit.test.mock import FakeManila"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 32,
-   "id": "e629dc98",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgEAAAENCAYAAACWzLaHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA3J0lEQVR4nO3deXwV1f3/8de9NwQIi2RhCXtAoBJCAkFWISAowVrBVqSCNiAqrl9bBaQqWItiRVzqbquoVUF2QjWAiBClgpaQABGBQgIJu5BAgoSQ5M7vj/vjShaSe7NNknk/H4/7MJyZOfPJNXPmM+ecmbEZhmEgIiIilmM3OwARERExh5IAERERi1ISICIiYlFKAkRERCxKSYCIiIhFKQkQERGxKCUBIiIiFqUkQERExKI8SgKOHz/O+PHj6dSpE5GRkQwYMIAVK1YA0Lhx41K3PXDgAD169PA6sMvV63A4iIiIoEePHowdO5Zz586Vex8iIiJWVmYSYBgGY8aMYciQIaSkpJCQkMCnn37KoUOHqiO+Yho2bEhSUhLJycn4+vry9ttvmxKHiIhIbVdmEvDVV1/h6+vLvffe6y7r0KEDDz30ULF1X3rpJXr06EGPHj145ZVX3OX5+flMmDCBq666iltuuYVz584BMGbMGCIjIwkNDeUf//iH18EPHjyYffv2AVBQUMDdd99NaGgo119/PTk5OZfdx88//8yvf/1rwsPD6dGjB4sWLQLg448/pm/fvkRERDBlyhQKCgpK3f/+/ftp3rw5HTt2JCIigoCAADp37kxWVpbXv4uIiEi1M8rw97//3fjjH/942eWNGjUyDMMwtm7davTo0cM4e/askZ2dbXTv3t3Ytm2bkZqaagDGpk2bDMMwjEmTJhkvvPCCYRiGcerUKcMwDOPcuXNGaGiocfLkyWL1Xm5/eXl5xk033WS8+eabRmpqquFwOIzExETDMAxj7NixxkcffXTZfSxdutS466673HWePn3a2LVrl3HjjTcaFy5cMAzDMO677z7jww8/NAzDMEaNGmUcPny4xHjGjBljfP3114ZhGEZUVJSxY8eOy35XIiIiNYnXEwMfeOABwsPDufrqqwuVb9q0iZtvvplGjRrRuHFjfvvb3/LNN98A0K5dOwYNGgTA7bffzqZNmwB49dVXCQ8Pp3///qSnp/O///2vzP3n5OQQERFBnz59aN++PZMnTwYgJCSEiIgIACIjIzlw4MBl9xEWFsa6det47LHH+Oabb7jiiitYv349CQkJXH311URERLB+/XpSUlIAiIuLo3Xr1iXG88MPP7jnI/z4449069bNi29TRETEPD5lrRAaGsqyZcvc/37jjTc4efIkffr08XgnNput2L83btzIl19+yebNm/Hz82Po0KGcP3++zLouzgkoqn79+u6fHQ4HOTk5l91H165d2bZtG3FxcTz55JMMHz4cf39/YmJieO655zz+vXJycjh//jz+/v6kp6cTFBSEr6+vx9uLiIiYqcyegGuvvZbz58/z1ltvucsujulfavDgwaxcuZJz587x888/s2LFCgYPHgxAWloamzdvBmDBggVcc801nDlzBn9/f/z8/Ni9ezdbtmyprN/J7XL7OHLkCH5+ftx+++1MmzaNbdu2MXz4cJYuXcqJEycAyMjI4ODBg6XWv2vXLq666irA1Qtw8WcREZHaoMwkwGazsXLlSuLj4wkJCaFv377ExMTw/PPPF1qvd+/eTJw4kb59+9KvXz/uuusuevXqBUC3bt144403uOqqq8jMzOS+++4jOjqa/Px8rrrqKmbMmEH//v0r/Ze73D527tzpngD49NNP8+STT9K9e3eeeeYZrr/+enr27Ml1113H0aNHAbjhhhs4cuRIsfovHQpo2LAh27ZtY/fu3ZX+e4iIiFQFm2EYhtlBiIiISPXTEwNFREQsSkmAiIiIRSkJEBERsSglASIiIhalJEBERMSilASIiIhYlJIAERERi1ISICIiYlFKAkRERCxKSYCIiIhFKQkQERGxKCUBIiIiFqUkQERExKKUBIiIiFiUkgARERGLUhIgIiJiUUoCRERELEpJgIiIiEUpCRAREbEoJQEiIiIWpSRARETEopQEiIiIWJSSABEREYtSEiAiImJRSgJEREQsSkmAiIiIRSkJEBERsSglASIiIhZV55OA5ORkbDYbcXFxAKSmpmKz2Vi8eLF7nZLKaqszZ85w77330qJFC/z8/Bg0aBCbNm0yOywREamB6nwSEBwczObNmxkxYgQACQkJAPTp08e9TklltZFhGIwePZoVK1Ywb948Vq1aRVBQENdddx2JiYlmhyciIjWMj9kBVLXAwEACAwPd/05ISMDf359OnTqVWlYbffbZZ8THxxMXF8eoUaMAGDJk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XXDnnXdis9m45ZZbzA5FRERqIB+zA6hqwcHBbN68md69ewOQkJAAQJ8+fdzrlFRW261fv57FixfTtGlTs0MREZEaqs73BAQGBtK/f398fX0B1wnf39+fTp06udcpqaw2y8nJYcqUKcyaNQt/f3+zwxERkRqqWpOAjRs3MmbMGNq1a0eDBg1o06YNd911F2fOnHGv06dPH2677TaWLVtGv3798PPzIyQkhEWLFpVY56pVqxgxYgTNmjXDz8+PsLAw5s+f717er18/xo4d6/53QkKCu1fgcmWexFlemZmZREdHs2PHjhKXG4bBU089xeHDh8u9j1mzZtGoUSMeeeSRctchIiJ1X7UmAdu3b+eaa67h7bff5osvvmDWrFnExsby6KOPApCfn09ycjLfffcdr732GlOnTmXFihW0aNGCiRMnkpWVVai+mTNnuk/W8+fPZ9myZdx0001kZGQAUFBQwM6dOwud4BMSEop1+xctKyvOisjNzWXt2rXuGIvKzMxk6dKlREVFkZ6e7nX9CQkJ/P3vf+edd97Bx6fOj/aIiEgFVOtZ4uGHH3b/7HQ6GThwINu3b2f9+vUA7Nq1i9zcXLp06cLq1aux2105Sm5uLqNHj+bgwYOEhYUBsHz5cp555hk++OADYmJi3PWOGjXK/fPu3bvJycmhV69eABw4cICMjAwiIyPd65RUVlacleHChQucP3++WLmfnx9r1qxh5MiRREVF8dVXX9GxY0eP6szPz+euu+7irrvuon///pUWq4iI1FFGNcnPzzc+/vhjY9CgQUaLFi0MwP3p3bu3YRiG8cEHHxiAsWXLlkLbvv/++wZgnDx50l3WvXt3Y9iwYaXu81//+pcBGMeOHTMMwzCWLl1qAMb+/fvd6xQt8yROwzCMmTNnGl26dDFsNpuxZMkSj7+Ho0ePFqqzrM+QIUM8rvu5554zgoODjdOnT7vLOnToYPzud7/zuA5vYtNHH3300admfjxVbT0BMTExLF++nAcffJDHHnuMoKAgfHx8GD58uPvqPjExEX9/f/r161do26SkJNq2bUtgYCAAaWlp7Nq1q9AVe0kSExNp3bo1LVu2BFxd5QEBAcUmBV5a5kmcANHR0UycOJE777yzXN/HnDlzCtV3KafTyYwZM9i/fz/Tpk3zqL60tDSefvppXn31VQzD4PTp0+668vLyOH36NI0aNaJevXrlildEROqeakkCkpOT+eSTT3j33XeZPHmyu/w///kP2dnZ7q74xMTEQt3yFxWduHfkyBEA2rRpU+p+ExMT3UMBJdVTtMzTOAEGDhxY5u9dmgEDBjB06NBi5QUFBUyaNImUlBRWrlxZaHijNCkpKZw/f5577rmHe+65p9Cy9PR0/P39+eijj7j99ttLrcfVGSAiIlZQLRMD09LSAPjVr37lLsvLy3PPXo+MjMQwDJKSkoolAU6nk6SkpEIn89atWwOuk3Zpim6XkJBQrP5LyzyJs6plZWWxZ88eYmNjPU4AACIiItiwYUOxT8uWLRkyZAgbNmzguuuuq8LIRUSktqmWnoDw8HAaNGjAjBkzmDlzJqdOneKll14iMzMTh8NBREQEKSkpZGVlFZu5v3fvXs6ePVvoCr59+/YMGzaMZ599FofDQWRkJBkZGaxbt44JEyYwePBgUlJSOH36tHu7gwcPcurUqUL1Fy3zJM6KatWqValX2/7+/mzZsgWbzeZVvc2aNSuxZ6FBgwY0b968xGUiImJt1ZIEtGnThgULFjB9+nRGjx5NaGgo06dP57PPPqN+/fr4+fmRmJgIFL/avvg0v6Ld+IsXL2bWrFm8/vrrHD16lMDAQAYNGkT37t0B3PVd7Am4WM+l9Rct8yTO6uBtAiAiIlIeNkODwBUydOhQHnzwQT2fX0REah0lAeU0c+ZM3n//fX766ScaN25Mw4YNiY+Pp3PnzmaHJiIi4hElASIiIhZV518gJCIiIiVTEiAiImJRSgJEREQsSkmAiIiIRSkJEBERsSglASIiIhalJEBERMSilASIiIhYlJIAERERi1ISICIiYlFKAkRERCxKSYCIiIhFKQkQERGxKCUBIiIiFqUkQERExKKUBIiIiFiUkgARERGLUhIgIiJiUUoCRERELEpJgIiIiEUpCRAREbEoJQEiIiIWpSRARETEopQEiIiIWJSSABEREYtSEiAiImJR/w/M/55bEdkagAAAAABJRU5ErkJggg==\n",
-      "text/plain": [
-       "<Figure size 660.786x325.08 with 1 Axes>"
-      ]
-     },
-     "execution_count": 32,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "qc_3 = transpile(\n",
-    "    qc_2,\n",
-    "    basis_gates=[\"id\", \"rz\", \"sx\", \"x\", \"cx\", \"reset\"],\n",
-    "    optimization_level=3,\n",
-    "    coupling_map=FakeManila().configuration().coupling_map,\n",
-    ")\n",
-    "qc_3.draw(output=\"mpl\", filename=\"flow_2\")"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "6effcc0f",
-   "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.9.7"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 5
-}
diff --git a/pyproject.toml b/pyproject.toml
index 340e96062..0669e22d9 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -13,4 +13,4 @@ build-verbosity = 3
 
 [tool.cibuildwheel.macos]
 
-[tool.cibuildwheel.windows]
\ No newline at end of file
+[tool.cibuildwheel.windows]
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 945c9b46d..000000000
--- a/requirements.txt
+++ /dev/null
@@ -1,1 +0,0 @@
-.
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 61438ef12..baf9bc7f0 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,7 @@
-from setuptools import setup
 import os
 
+from setuptools import setup
+
 README_PATH = os.path.join(os.path.abspath(os.path.dirname(__file__)), "README.md")
 with open(README_PATH) as readme_file:
     README = readme_file.read()


Test patch:
diff --git a/mqt/bench/tests/test_all.py b/mqt/bench/tests/test_all.py
index e8e143823..c9a746801 100644
--- a/mqt/bench/tests/test_all.py
+++ b/mqt/bench/tests/test_all.py
@@ -1,40 +1,41 @@
-from mqt.bench.utils import utils, qiskit_helper, tket_helper
+import os
+
+import pytest
+from pytket.qasm import circuit_to_qasm_str
+from qiskit import QuantumCircuit
+from qiskit_nature.drivers import Molecule
+
+from mqt.bench.benchmark_generator import get_one_benchmark
 from mqt.bench.benchmarks import (
-    ghz,
-    dj,
     ae,
+    dj,
+    ghz,
     graphstate,
     grover,
     hhl,
     qaoa,
     qft,
     qftentangled,
-    qpeinexact,
     qpeexact,
-    vqe,
+    qpeinexact,
+    qwalk,
     realamprandom,
+    shor,
     su2random,
     twolocalrandom,
-    qwalk,
+    vqe,
     wstate,
-    shor,
 )
 from mqt.bench.benchmarks.qiskit_application_finance import (
+    portfolioqaoa,
+    portfoliovqe,
     pricingcall,
     pricingput,
-    portfoliovqe,
-    portfolioqaoa,
 )
 from mqt.bench.benchmarks.qiskit_application_ml import qgan
 from mqt.bench.benchmarks.qiskit_application_nature import groundstate
-from mqt.bench.benchmarks.qiskit_application_optimization import tsp, routing
-from qiskit_nature.drivers import Molecule
-from qiskit import QuantumCircuit
-from pytket.qasm import circuit_to_qasm_str
-from mqt.bench.benchmark_generator import get_one_benchmark
-
-import pytest
-import os
+from mqt.bench.benchmarks.qiskit_application_optimization import routing, tsp
+from mqt.bench.utils import qiskit_helper, tket_helper, utils
 
 
 def test_configure_begin():
@@ -67,7 +68,7 @@ def test_configure_begin():
         (twolocalrandom, 8, True),
         (wstate, 8, True),
         (portfolioqaoa, 5, True),
-        # (shor, 15, False),
+        (shor, 9, False),
         (portfoliovqe, 5, True),
         (pricingcall, 5, False),
         (pricingput, 5, False),
@@ -585,7 +586,7 @@ def test_get_one_benchmark(
     if gate_set_name and "oqc" not in gate_set_name:
         if compiler == "tket":
             qc = QuantumCircuit.from_qasm_str(circuit_to_qasm_str(qc))
-        for instruction, qargs, cargs in qc.data:
+        for instruction, _qargs, _cargs in qc.data:
             gate_type = instruction.name
             assert (
                 gate_type in qiskit_helper.get_native_gates(gate_set_name)
diff --git a/mqt/benchviewer/src/tests/test_backend.py b/mqt/benchviewer/src/tests/test_backend.py
index 6328fa64b..91a431185 100644
--- a/mqt/benchviewer/src/tests/test_backend.py
+++ b/mqt/benchviewer/src/tests/test_backend.py
@@ -1,11 +1,12 @@
-from mqt.benchviewer.src import backend
-from mqt.benchviewer.main import app, init
-
-import pytest
-from pathlib import Path
 import io
-from zipfile import ZipFile
 import os
+from pathlib import Path
+from zipfile import ZipFile
+
+import pytest
+
+from mqt.benchviewer.main import app, init
+from mqt.benchviewer.src import backend
 
 
 @pytest.mark.parametrize(