From 3034bad47aad13f13feb72af3b50f95f69273708 Mon Sep 17 00:00:00 2001 From: Marvin Erdmann <106394656+Marvmann@users.noreply.github.com> Date: Fri, 7 Feb 2025 16:13:36 +0100 Subject: [PATCH] Release QUARK 2.1.3 (#157) Streamlined installation and environment management (01144a49c0e130ef531ea302d54c89a0f3c8b72f): - QUARK installation process and switching between custom QUARK self-managed environments is now faciliated by using uv. Graph visualization (#153): - Added the function visualize_solution in Optimization.py that can be overridden by any sub-class where a visualization of the solution should be created. The function is called with the preprocessed solution after it has been validated. Also provided function implementations for the MIS, PVC, and TSP modules. Minor adjustments on the Docker setup (#154) - Removed pyqubo dependency and added arm to docker platform and minor changes in wording. --- .github/workflows/container_build_publish.yml | 7 +- .github/workflows/test.yml | 4 +- .readthedocs.yaml | 17 + .settings/module_db.json | 7220 ++++++++--------- .settings/requirements_full.txt | 4 +- Dockerfile | 4 +- README.md | 6 + docs/tutorial.rst | 6 + src/BenchmarkManager.py | 2 +- .../applications/optimization/MIS/MIS.py | 63 +- .../applications/optimization/Optimization.py | 12 + .../applications/optimization/PVC/PVC.py | 76 + .../applications/optimization/TSP/TSP.py | 29 + .../optimization/TSP/mappings/ISING.py | 104 +- .../optimization/TSP/mappings/QUBO.py | 11 +- src/modules/solvers/QiskitQAOA.py | 9 +- tests/configs/valid/MIS.yml | 33 +- .../applications/optimization/MIS/test_MIS.py | 24 +- .../optimization/TSP/mappings/test_ISING.py | 14 +- .../mappings/test_LibraryQiskit.py | 136 +- .../transformation/test_PIT.py | 77 +- tests/test_BenchmarkManager.py | 87 +- 22 files changed, 3915 insertions(+), 4030 deletions(-) diff --git a/.github/workflows/container_build_publish.yml b/.github/workflows/container_build_publish.yml index 0007962f..f87c8078 100644 --- a/.github/workflows/container_build_publish.yml +++ b/.github/workflows/container_build_publish.yml @@ -18,11 +18,13 @@ jobs: build-and-push-image: if: github.repository == 'QUARK-framework/QUARK' runs-on: ubuntu-latest + strategy: + matrix: + platform: [linux/amd64, linux/arm64] # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. permissions: contents: read packages: write - # steps: - name: Free Disk Space (Ubuntu) uses: jlumbroso/free-disk-space@main @@ -71,7 +73,6 @@ jobs: with: context: . push: true - # Start with a limited number of platforms - platforms: linux/amd64,linux/arm64 + platforms: ${{ matrix.platform }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 96c6dc03..b970d151 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -34,11 +34,13 @@ jobs: run: pip install -r .settings/requirements_full.txt - name: Run Unit Tests + env: + PYTHONWARNINGS: "ignore::DeprecationWarning" run: python -m unittest discover . > unittest_results.log - name: Upload Test Logs if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: unittest-logs path: unittest_results.log diff --git a/.readthedocs.yaml b/.readthedocs.yaml index f43f4be8..de6b41d3 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -1,6 +1,7 @@ # .readthedocs.yaml # Read the Docs configuration file # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details +# The part about Git LFS was taken from here: https://docs.readthedocs.io/en/stable/build-customization.html#support-git-lfs-large-file-storage # Required version: 2 @@ -10,6 +11,22 @@ build: os: ubuntu-22.04 tools: python: "3.12" + jobs: + post_checkout: + # Download and uncompress the binary + # https://git-lfs.github.com/ + - wget https://github.com/git-lfs/git-lfs/releases/download/v3.1.4/git-lfs-linux-amd64-v3.1.4.tar.gz + - tar xvfz git-lfs-linux-amd64-v3.1.4.tar.gz + # Modify LFS config paths to point where git-lfs binary was downloaded + - git config filter.lfs.process "`pwd`/git-lfs filter-process" + - git config filter.lfs.smudge "`pwd`/git-lfs smudge -- %f" + - git config filter.lfs.clean "`pwd`/git-lfs clean -- %f" + # Make LFS available in current repository + - ./git-lfs install + # Download content from remote + - ./git-lfs fetch + # Make local files to have the real content on them + - ./git-lfs checkout # Build documentation in the docs/ directory with Sphinx sphinx: diff --git a/.settings/module_db.json b/.settings/module_db.json index 12d7e8c7..5c449d8a 100644 --- a/.settings/module_db.json +++ b/.settings/module_db.json @@ -1,3612 +1,3608 @@ -{ - "build_number": 17, - "build_date": "06-12-2024 16:34:38", - "git_revision_number": "4e90d19586fdbf5672ebcb4725aa9b045b6733ce", - "modules": [ - { - "name": "PVC", - "class": "PVC", - "module": "modules.applications.optimization.PVC.PVC", - "submodules": [ - { - "name": "Ising", - "class": "Ising", - "args": {}, - "module": "modules.applications.optimization.PVC.mappings.ISING", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "dimod", - "version": "0.12.18" - }, - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "scipy", - "version": "1.12.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionQ", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti Aspen-9", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.30.2" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionq", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", - "class": "OQC", - "args": { - "device_name": "OQC", - "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" - }, - "module": "modules.devices.braket.OQC", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "braket.local.qubit", - "class": "HelperClass", - "args": { - "device_name": "braket.local.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit", - "class": "HelperClass", - "args": { - "device_name": "default.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit.autograd", - "class": "HelperClass", - "args": { - "device_name": "default.qubit.autograd" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "qulacs.simulator", - "class": "HelperClass", - "args": { - "device_name": "qulacs.simulator" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.gpu", - "class": "HelperClass", - "args": { - "device_name": "lightning.gpu" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.qubit", - "class": "HelperClass", - "args": { - "device_name": "lightning.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - } - ] - } - ] - }, - { - "name": "QUBO", - "class": "QUBO", - "args": {}, - "module": "modules.applications.optimization.PVC.mappings.QUBO", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "Annealer", - "class": "Annealer", - "args": {}, - "module": "modules.solvers.Annealer", - "requirements": [], - "submodules": [ - { - "name": "Simulated Annealer", - "class": "SimulatedAnnealingSampler", - "args": {}, - "module": "modules.devices.SimulatedAnnealingSampler", - "requirements": [ - { - "name": "dwave-samplers", - "version": "1.4.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "GreedyClassicalPVC", - "class": "GreedyClassicalPVC", - "args": {}, - "module": "modules.solvers.GreedyClassicalPVC", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - }, - { - "name": "ReverseGreedyClassicalPVC", - "class": "ReverseGreedyClassicalPVC", - "args": {}, - "module": "modules.solvers.ReverseGreedyClassicalPVC", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - }, - { - "name": "RandomPVC", - "class": "RandomPVC", - "args": {}, - "module": "modules.solvers.RandomClassicalPVC", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - } - ], - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ] - }, - { - "name": "SAT", - "class": "SAT", - "module": "modules.applications.optimization.SAT.SAT", - "submodules": [ - { - "name": "QubovertQUBO", - "class": "QubovertQUBO", - "args": {}, - "module": "modules.applications.optimization.SAT.mappings.QubovertQUBO", - "requirements": [ - { - "name": "nnf", - "version": "0.4.1" - }, - { - "name": "qubovert", - "version": "1.2.5" - } - ], - "submodules": [ - { - "name": "Annealer", - "class": "Annealer", - "args": {}, - "module": "modules.solvers.Annealer", - "requirements": [], - "submodules": [ - { - "name": "Simulated Annealer", - "class": "SimulatedAnnealingSampler", - "args": {}, - "module": "modules.devices.SimulatedAnnealingSampler", - "requirements": [ - { - "name": "dwave-samplers", - "version": "1.4.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "Direct", - "class": "Direct", - "args": {}, - "module": "modules.applications.optimization.SAT.mappings.Direct", - "requirements": [ - { - "name": "nnf", - "version": "0.4.1" - }, - { - "name": "python-sat", - "version": "1.8.dev13" - } - ], - "submodules": [ - { - "name": "ClassicalSAT", - "class": "ClassicalSAT", - "args": {}, - "module": "modules.solvers.ClassicalSAT", - "requirements": [ - { - "name": "python-sat", - "version": "1.8.dev13" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - }, - { - "name": "RandomSAT", - "class": "RandomSAT", - "args": {}, - "module": "modules.solvers.RandomClassicalSAT", - "requirements": [ - { - "name": "python-sat", - "version": "1.8.dev13" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - } - ] - }, - { - "name": "ChoiQUBO", - "class": "ChoiQUBO", - "args": {}, - "module": "modules.applications.optimization.SAT.mappings.ChoiQUBO", - "requirements": [ - { - "name": "nnf", - "version": "0.4.1" - } - ], - "submodules": [ - { - "name": "Annealer", - "class": "Annealer", - "args": {}, - "module": "modules.solvers.Annealer", - "requirements": [], - "submodules": [ - { - "name": "Simulated Annealer", - "class": "SimulatedAnnealingSampler", - "args": {}, - "module": "modules.devices.SimulatedAnnealingSampler", - "requirements": [ - { - "name": "dwave-samplers", - "version": "1.4.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "DinneenQUBO", - "class": "DinneenQUBO", - "args": {}, - "module": "modules.applications.optimization.SAT.mappings.DinneenQUBO", - "requirements": [ - { - "name": "nnf", - "version": "0.4.1" - } - ], - "submodules": [ - { - "name": "Annealer", - "class": "Annealer", - "args": {}, - "module": "modules.solvers.Annealer", - "requirements": [], - "submodules": [ - { - "name": "Simulated Annealer", - "class": "SimulatedAnnealingSampler", - "args": {}, - "module": "modules.devices.SimulatedAnnealingSampler", - "requirements": [ - { - "name": "dwave-samplers", - "version": "1.4.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "ChoiIsing", - "class": "ChoiIsing", - "args": {}, - "module": "modules.applications.optimization.SAT.mappings.ChoiISING", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "dimod", - "version": "0.12.18" - }, - { - "name": "nnf", - "version": "0.4.1" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "scipy", - "version": "1.12.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionQ", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti Aspen-9", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.30.2" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionq", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", - "class": "OQC", - "args": { - "device_name": "OQC", - "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" - }, - "module": "modules.devices.braket.OQC", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "braket.local.qubit", - "class": "HelperClass", - "args": { - "device_name": "braket.local.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit", - "class": "HelperClass", - "args": { - "device_name": "default.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit.autograd", - "class": "HelperClass", - "args": { - "device_name": "default.qubit.autograd" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "qulacs.simulator", - "class": "HelperClass", - "args": { - "device_name": "qulacs.simulator" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.gpu", - "class": "HelperClass", - "args": { - "device_name": "lightning.gpu" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.qubit", - "class": "HelperClass", - "args": { - "device_name": "lightning.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - } - ] - } - ] - }, - { - "name": "DinneenIsing", - "class": "DinneenIsing", - "args": {}, - "module": "modules.applications.optimization.SAT.mappings.DinneenISING", - "requirements": [ - { - "name": "nnf", - "version": "0.4.1" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "dimod", - "version": "0.12.18" - }, - { - "name": "nnf", - "version": "0.4.1" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "scipy", - "version": "1.12.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionQ", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti Aspen-9", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.30.2" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionq", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", - "class": "OQC", - "args": { - "device_name": "OQC", - "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" - }, - "module": "modules.devices.braket.OQC", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "braket.local.qubit", - "class": "HelperClass", - "args": { - "device_name": "braket.local.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit", - "class": "HelperClass", - "args": { - "device_name": "default.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit.autograd", - "class": "HelperClass", - "args": { - "device_name": "default.qubit.autograd" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "qulacs.simulator", - "class": "HelperClass", - "args": { - "device_name": "qulacs.simulator" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.gpu", - "class": "HelperClass", - "args": { - "device_name": "lightning.gpu" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.qubit", - "class": "HelperClass", - "args": { - "device_name": "lightning.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - } - ] - } - ] - } - ], - "requirements": [ - { - "name": "nnf", - "version": "0.4.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ] - }, - { - "name": "TSP", - "class": "TSP", - "module": "modules.applications.optimization.TSP.TSP", - "submodules": [ - { - "name": "Ising", - "class": "Ising", - "args": {}, - "module": "modules.applications.optimization.TSP.mappings.ISING", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "dimod", - "version": "0.12.18" - }, - { - "name": "more-itertools", - "version": "10.5.0" - }, - { - "name": "qiskit-optimization", - "version": "0.6.1" - }, - { - "name": "pyqubo", - "version": "1.5.0" - }, - { - "name": "networkx", - "version": "3.4.2" - }, - { - "name": "dwave_networkx", - "version": "0.8.15" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "scipy", - "version": "1.12.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionQ", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti Aspen-9", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.30.2" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", - "class": "SV1", - "args": { - "device_name": "SV1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" - }, - "module": "modules.devices.braket.SV1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", - "class": "TN1", - "args": { - "device_name": "TN1", - "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" - }, - "module": "modules.devices.braket.TN1", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", - "class": "Ionq", - "args": { - "device_name": "ionq", - "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" - }, - "module": "modules.devices.braket.Ionq", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", - "class": "Rigetti", - "args": { - "device_name": "Rigetti", - "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" - }, - "module": "modules.devices.braket.Rigetti", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", - "class": "OQC", - "args": { - "device_name": "OQC", - "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" - }, - "module": "modules.devices.braket.OQC", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.88.2" - }, - { - "name": "botocore", - "version": "1.35.73" - }, - { - "name": "boto3", - "version": "1.35.73" - } - ], - "submodules": [] - }, - { - "name": "braket.local.qubit", - "class": "HelperClass", - "args": { - "device_name": "braket.local.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit", - "class": "HelperClass", - "args": { - "device_name": "default.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "default.qubit.autograd", - "class": "HelperClass", - "args": { - "device_name": "default.qubit.autograd" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "qulacs.simulator", - "class": "HelperClass", - "args": { - "device_name": "qulacs.simulator" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.gpu", - "class": "HelperClass", - "args": { - "device_name": "lightning.gpu" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "lightning.qubit", - "class": "HelperClass", - "args": { - "device_name": "lightning.qubit" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - } - ] - }, - { - "name": "QiskitQAOA", - "class": "QiskitQAOA", - "args": {}, - "module": "modules.solvers.QiskitQAOA", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit-optimization", - "version": "0.6.1" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "qiskit-algorithms", - "version": "0.3.1" - } - ], - "submodules": [ - { - "name": "qasm_simulator", - "class": "HelperClass", - "args": { - "device_name": "qasm_simulator" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - }, - { - "name": "qasm_simulator_gpu", - "class": "HelperClass", - "args": { - "device_name": "qasm_simulator_gpu" - }, - "module": "modules.devices.HelperClass", - "requirements": [], - "submodules": [] - } - ] - } - ] - }, - { - "name": "QUBO", - "class": "QUBO", - "args": {}, - "module": "modules.applications.optimization.TSP.mappings.QUBO", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - }, - { - "name": "dwave_networkx", - "version": "0.8.15" - } - ], - "submodules": [ - { - "name": "Annealer", - "class": "Annealer", - "args": {}, - "module": "modules.solvers.Annealer", - "requirements": [], - "submodules": [ - { - "name": "Simulated Annealer", - "class": "SimulatedAnnealingSampler", - "args": {}, - "module": "modules.devices.SimulatedAnnealingSampler", - "requirements": [ - { - "name": "dwave-samplers", - "version": "1.4.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "GreedyClassicalTSP", - "class": "GreedyClassicalTSP", - "args": {}, - "module": "modules.solvers.GreedyClassicalTSP", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - }, - { - "name": "ReverseGreedyClassicalTSP", - "class": "ReverseGreedyClassicalTSP", - "args": {}, - "module": "modules.solvers.ReverseGreedyClassicalTSP", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - }, - { - "name": "RandomTSP", - "class": "RandomTSP", - "args": {}, - "module": "modules.solvers.RandomClassicalTSP", - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - } - ], - "requirements": [ - { - "name": "networkx", - "version": "3.4.2" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ] - }, - { - "name": "ACL", - "class": "ACL", - "module": "modules.applications.optimization.ACL.ACL", - "submodules": [ - { - "name": "MIPsolverACL", - "class": "MIPaclp", - "args": {}, - "module": "modules.solvers.MIPsolverACL", - "requirements": [ - { - "name": "pulp", - "version": "2.9.0" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - }, - { - "name": "QUBO", - "class": "Qubo", - "args": {}, - "module": "modules.applications.optimization.ACL.mappings.QUBO", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "qiskit-optimization", - "version": "0.6.1" - } - ], - "submodules": [ - { - "name": "Annealer", - "class": "Annealer", - "args": {}, - "module": "modules.solvers.Annealer", - "requirements": [], - "submodules": [ - { - "name": "Simulated Annealer", - "class": "SimulatedAnnealingSampler", - "args": {}, - "module": "modules.devices.SimulatedAnnealingSampler", - "requirements": [ - { - "name": "dwave-samplers", - "version": "1.4.0" - } - ], - "submodules": [] - } - ] - } - ] - } - ], - "requirements": [ - { - "name": "pulp", - "version": "2.9.0" - }, - { - "name": "pandas", - "version": "2.2.3" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "openpyxl", - "version": "3.1.5" - } - ] - }, - { - "name": "MIS", - "class": "MIS", - "module": "modules.applications.optimization.MIS.MIS", - "submodules": [ - { - "name": "QIRO", - "class": "QIRO", - "args": {}, - "module": "modules.applications.optimization.MIS.mappings.QIRO", - "requirements": [ - { - "name": "qrisp", - "version": "0.5.2" - } - ], - "submodules": [ - { - "name": "QrispQIRO", - "class": "QIROSolver", - "args": {}, - "module": "modules.solvers.QrispQIRO", - "requirements": [ - { - "name": "qrisp", - "version": "0.5.2" - } - ], - "submodules": [ - { - "name": "qrisp_simulator", - "class": "QrispSimulator", - "args": {}, - "module": "modules.devices.qrisp_simulator.QrispSimulator", - "requirements": [ - { - "name": "qrisp", - "version": "0.5.2" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "NeutralAtom", - "class": "NeutralAtom", - "args": {}, - "module": "modules.applications.optimization.MIS.mappings.NeutralAtom", - "requirements": [ - { - "name": "pulser", - "version": "1.1.1" - } - ], - "submodules": [ - { - "name": "NeutralAtomMIS", - "class": "NeutralAtomMIS", - "args": {}, - "module": "modules.solvers.NeutralAtomMIS", - "requirements": [ - { - "name": "pulser", - "version": "1.1.1" - } - ], - "submodules": [ - { - "name": "MockNeutralAtomDevice", - "class": "MockNeutralAtomDevice", - "args": {}, - "module": "modules.devices.pulser.MockNeutralAtomDevice", - "requirements": [ - { - "name": "pulser", - "version": "1.1.1" - } - ], - "submodules": [] - } - ] - } - ] - } - ], - "requirements": [] - }, - { - "name": "SCP", - "class": "SCP", - "module": "modules.applications.optimization.SCP.SCP", - "submodules": [ - { - "name": "qubovertQUBO", - "class": "QubovertQUBO", - "args": {}, - "module": "modules.applications.optimization.SCP.mappings.qubovertQUBO", - "requirements": [ - { - "name": "qubovert", - "version": "1.2.5" - } - ], - "submodules": [ - { - "name": "Annealer", - "class": "Annealer", - "args": {}, - "module": "modules.solvers.Annealer", - "requirements": [], - "submodules": [ - { - "name": "Simulated Annealer", - "class": "SimulatedAnnealingSampler", - "args": {}, - "module": "modules.devices.SimulatedAnnealingSampler", - "requirements": [ - { - "name": "dwave-samplers", - "version": "1.4.0" - } - ], - "submodules": [] - } - ] - } - ] - } - ], - "requirements": [] - }, - { - "name": "GenerativeModeling", - "class": "GenerativeModeling", - "module": "modules.applications.qml.generative_modeling.GenerativeModeling", - "submodules": [ - { - "name": "Continuous Data", - "class": "ContinuousData", - "args": {}, - "module": "modules.applications.qml.generative_modeling.data.data_handler.ContinuousData", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "PIT", - "class": "PIT", - "args": {}, - "module": "modules.applications.qml.generative_modeling.transformations.PIT", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "pandas", - "version": "2.2.3" - } - ], - "submodules": [ - { - "name": "CircuitCopula", - "class": "CircuitCopula", - "args": {}, - "module": "modules.applications.qml.generative_modeling.circuits.CircuitCopula", - "requirements": [ - { - "name": "scipy", - "version": "1.12.0" - } - ], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "LibraryPennylane", - "class": "LibraryPennylane", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "jax", - "version": "0.4.35" - }, - { - "name": "jaxlib", - "version": "0.4.35" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_ibm_runtime", - "version": "0.33.2" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - } - ] - } - ] - }, - { - "name": "MinMax", - "class": "MinMax", - "args": {}, - "module": "modules.applications.qml.generative_modeling.transformations.MinMax", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "CircuitStandard", - "class": "CircuitStandard", - "args": {}, - "module": "modules.applications.qml.generative_modeling.circuits.CircuitStandard", - "requirements": [], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "LibraryPennylane", - "class": "LibraryPennylane", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "jax", - "version": "0.4.35" - }, - { - "name": "jaxlib", - "version": "0.4.35" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_ibm_runtime", - "version": "0.33.2" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "CircuitCardinality", - "class": "CircuitCardinality", - "args": {}, - "module": "modules.applications.qml.generative_modeling.circuits.CircuitCardinality", - "requirements": [], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "LibraryPennylane", - "class": "LibraryPennylane", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "jax", - "version": "0.4.35" - }, - { - "name": "jaxlib", - "version": "0.4.35" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_ibm_runtime", - "version": "0.33.2" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - } - ] - } - ] - } - ] - }, - { - "name": "Discrete Data", - "class": "DiscreteData", - "args": {}, - "module": "modules.applications.qml.generative_modeling.data.data_handler.DiscreteData", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "CircuitCardinality", - "class": "CircuitCardinality", - "args": {}, - "module": "modules.applications.qml.generative_modeling.circuits.CircuitCardinality", - "requirements": [], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "LibraryPennylane", - "class": "LibraryPennylane", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", - "requirements": [ - { - "name": "pennylane", - "version": "0.39.0" - }, - { - "name": "pennylane-lightning", - "version": "0.39.0" - }, - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "jax", - "version": "0.4.35" - }, - { - "name": "jaxlib", - "version": "0.4.35" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "QGAN", - "class": "QGAN", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QGAN", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "torch", - "version": "2.5.1" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "1.3.0" - }, - { - "name": "qiskit_ibm_runtime", - "version": "0.33.2" - }, - { - "name": "qiskit_aer", - "version": "0.15.1" - }, - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - }, - { - "name": "cma", - "version": "4.0.0" - }, - { - "name": "matplotlib", - "version": "3.9.3" - }, - { - "name": "tensorboard", - "version": "2.18.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.applications.qml.generative_modeling.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.26.4" - } - ], - "submodules": [] - } - ] - } - ] - } - ] - } - ], - "requirements": [] - } - ] -} \ No newline at end of file +{ + "build_number": 18, + "build_date": "22-01-2025 13:49:05", + "git_revision_number": "c817270e589cd85c29fa8644cd14eeafde2215f1", + "modules": [ + { + "name": "PVC", + "class": "PVC", + "module": "modules.applications.optimization.PVC.PVC", + "submodules": [ + { + "name": "Ising", + "class": "Ising", + "args": {}, + "module": "modules.applications.optimization.PVC.mappings.ISING", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "dimod", + "version": "0.12.18" + }, + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "scipy", + "version": "1.12.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionQ", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti Aspen-9", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.30.2" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionq", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", + "class": "OQC", + "args": { + "device_name": "OQC", + "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" + }, + "module": "modules.devices.braket.OQC", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "braket.local.qubit", + "class": "HelperClass", + "args": { + "device_name": "braket.local.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit", + "class": "HelperClass", + "args": { + "device_name": "default.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit.autograd", + "class": "HelperClass", + "args": { + "device_name": "default.qubit.autograd" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "qulacs.simulator", + "class": "HelperClass", + "args": { + "device_name": "qulacs.simulator" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.gpu", + "class": "HelperClass", + "args": { + "device_name": "lightning.gpu" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.qubit", + "class": "HelperClass", + "args": { + "device_name": "lightning.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + } + ] + } + ] + }, + { + "name": "QUBO", + "class": "QUBO", + "args": {}, + "module": "modules.applications.optimization.PVC.mappings.QUBO", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "Annealer", + "class": "Annealer", + "args": {}, + "module": "modules.solvers.Annealer", + "requirements": [], + "submodules": [ + { + "name": "Simulated Annealer", + "class": "SimulatedAnnealingSampler", + "args": {}, + "module": "modules.devices.SimulatedAnnealingSampler", + "requirements": [ + { + "name": "dwave-samplers", + "version": "1.4.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "GreedyClassicalPVC", + "class": "GreedyClassicalPVC", + "args": {}, + "module": "modules.solvers.GreedyClassicalPVC", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + }, + { + "name": "ReverseGreedyClassicalPVC", + "class": "ReverseGreedyClassicalPVC", + "args": {}, + "module": "modules.solvers.ReverseGreedyClassicalPVC", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + }, + { + "name": "RandomPVC", + "class": "RandomPVC", + "args": {}, + "module": "modules.solvers.RandomClassicalPVC", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + } + ], + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ] + }, + { + "name": "SAT", + "class": "SAT", + "module": "modules.applications.optimization.SAT.SAT", + "submodules": [ + { + "name": "QubovertQUBO", + "class": "QubovertQUBO", + "args": {}, + "module": "modules.applications.optimization.SAT.mappings.QubovertQUBO", + "requirements": [ + { + "name": "nnf", + "version": "0.4.1" + }, + { + "name": "qubovert", + "version": "1.2.5" + } + ], + "submodules": [ + { + "name": "Annealer", + "class": "Annealer", + "args": {}, + "module": "modules.solvers.Annealer", + "requirements": [], + "submodules": [ + { + "name": "Simulated Annealer", + "class": "SimulatedAnnealingSampler", + "args": {}, + "module": "modules.devices.SimulatedAnnealingSampler", + "requirements": [ + { + "name": "dwave-samplers", + "version": "1.4.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "Direct", + "class": "Direct", + "args": {}, + "module": "modules.applications.optimization.SAT.mappings.Direct", + "requirements": [ + { + "name": "nnf", + "version": "0.4.1" + }, + { + "name": "python-sat", + "version": "1.8.dev13" + } + ], + "submodules": [ + { + "name": "ClassicalSAT", + "class": "ClassicalSAT", + "args": {}, + "module": "modules.solvers.ClassicalSAT", + "requirements": [ + { + "name": "python-sat", + "version": "1.8.dev13" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + }, + { + "name": "RandomSAT", + "class": "RandomSAT", + "args": {}, + "module": "modules.solvers.RandomClassicalSAT", + "requirements": [ + { + "name": "python-sat", + "version": "1.8.dev13" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + } + ] + }, + { + "name": "ChoiQUBO", + "class": "ChoiQUBO", + "args": {}, + "module": "modules.applications.optimization.SAT.mappings.ChoiQUBO", + "requirements": [ + { + "name": "nnf", + "version": "0.4.1" + } + ], + "submodules": [ + { + "name": "Annealer", + "class": "Annealer", + "args": {}, + "module": "modules.solvers.Annealer", + "requirements": [], + "submodules": [ + { + "name": "Simulated Annealer", + "class": "SimulatedAnnealingSampler", + "args": {}, + "module": "modules.devices.SimulatedAnnealingSampler", + "requirements": [ + { + "name": "dwave-samplers", + "version": "1.4.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "DinneenQUBO", + "class": "DinneenQUBO", + "args": {}, + "module": "modules.applications.optimization.SAT.mappings.DinneenQUBO", + "requirements": [ + { + "name": "nnf", + "version": "0.4.1" + } + ], + "submodules": [ + { + "name": "Annealer", + "class": "Annealer", + "args": {}, + "module": "modules.solvers.Annealer", + "requirements": [], + "submodules": [ + { + "name": "Simulated Annealer", + "class": "SimulatedAnnealingSampler", + "args": {}, + "module": "modules.devices.SimulatedAnnealingSampler", + "requirements": [ + { + "name": "dwave-samplers", + "version": "1.4.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "ChoiIsing", + "class": "ChoiIsing", + "args": {}, + "module": "modules.applications.optimization.SAT.mappings.ChoiISING", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "dimod", + "version": "0.12.18" + }, + { + "name": "nnf", + "version": "0.4.1" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "scipy", + "version": "1.12.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionQ", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti Aspen-9", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.30.2" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionq", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", + "class": "OQC", + "args": { + "device_name": "OQC", + "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" + }, + "module": "modules.devices.braket.OQC", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "braket.local.qubit", + "class": "HelperClass", + "args": { + "device_name": "braket.local.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit", + "class": "HelperClass", + "args": { + "device_name": "default.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit.autograd", + "class": "HelperClass", + "args": { + "device_name": "default.qubit.autograd" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "qulacs.simulator", + "class": "HelperClass", + "args": { + "device_name": "qulacs.simulator" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.gpu", + "class": "HelperClass", + "args": { + "device_name": "lightning.gpu" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.qubit", + "class": "HelperClass", + "args": { + "device_name": "lightning.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + } + ] + } + ] + }, + { + "name": "DinneenIsing", + "class": "DinneenIsing", + "args": {}, + "module": "modules.applications.optimization.SAT.mappings.DinneenISING", + "requirements": [ + { + "name": "nnf", + "version": "0.4.1" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "dimod", + "version": "0.12.18" + }, + { + "name": "nnf", + "version": "0.4.1" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "scipy", + "version": "1.12.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionQ", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti Aspen-9", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.30.2" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionq", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", + "class": "OQC", + "args": { + "device_name": "OQC", + "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" + }, + "module": "modules.devices.braket.OQC", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "braket.local.qubit", + "class": "HelperClass", + "args": { + "device_name": "braket.local.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit", + "class": "HelperClass", + "args": { + "device_name": "default.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit.autograd", + "class": "HelperClass", + "args": { + "device_name": "default.qubit.autograd" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "qulacs.simulator", + "class": "HelperClass", + "args": { + "device_name": "qulacs.simulator" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.gpu", + "class": "HelperClass", + "args": { + "device_name": "lightning.gpu" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.qubit", + "class": "HelperClass", + "args": { + "device_name": "lightning.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + } + ] + } + ] + } + ], + "requirements": [ + { + "name": "nnf", + "version": "0.4.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ] + }, + { + "name": "TSP", + "class": "TSP", + "module": "modules.applications.optimization.TSP.TSP", + "submodules": [ + { + "name": "Ising", + "class": "Ising", + "args": {}, + "module": "modules.applications.optimization.TSP.mappings.ISING", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "dimod", + "version": "0.12.18" + }, + { + "name": "more-itertools", + "version": "10.5.0" + }, + { + "name": "qiskit-optimization", + "version": "0.6.1" + }, + { + "name": "networkx", + "version": "3.4.2" + }, + { + "name": "dwave_networkx", + "version": "0.8.15" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "scipy", + "version": "1.12.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionQ", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti Aspen-9", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.30.2" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/sv1", + "class": "SV1", + "args": { + "device_name": "SV1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/sv1" + }, + "module": "modules.devices.braket.SV1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:::device/quantum-simulator/amazon/tn1", + "class": "TN1", + "args": { + "device_name": "TN1", + "arn": "arn:aws:braket:::device/quantum-simulator/amazon/tn1" + }, + "module": "modules.devices.braket.TN1", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony", + "class": "Ionq", + "args": { + "device_name": "ionq", + "arn": "arn:aws:braket:us-east-1::device/qpu/ionq/Harmony" + }, + "module": "modules.devices.braket.Ionq", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3", + "class": "Rigetti", + "args": { + "device_name": "Rigetti", + "arn": "arn:aws:braket:us-west-1::device/qpu/rigetti/Aspen-M-3" + }, + "module": "modules.devices.braket.Rigetti", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy", + "class": "OQC", + "args": { + "device_name": "OQC", + "arn": "arn:aws:braket:eu-west-2::device/qpu/oqc/Lucy" + }, + "module": "modules.devices.braket.OQC", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.88.2" + }, + { + "name": "botocore", + "version": "1.35.73" + }, + { + "name": "boto3", + "version": "1.35.73" + } + ], + "submodules": [] + }, + { + "name": "braket.local.qubit", + "class": "HelperClass", + "args": { + "device_name": "braket.local.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit", + "class": "HelperClass", + "args": { + "device_name": "default.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "default.qubit.autograd", + "class": "HelperClass", + "args": { + "device_name": "default.qubit.autograd" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "qulacs.simulator", + "class": "HelperClass", + "args": { + "device_name": "qulacs.simulator" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.gpu", + "class": "HelperClass", + "args": { + "device_name": "lightning.gpu" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "lightning.qubit", + "class": "HelperClass", + "args": { + "device_name": "lightning.qubit" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + } + ] + }, + { + "name": "QiskitQAOA", + "class": "QiskitQAOA", + "args": {}, + "module": "modules.solvers.QiskitQAOA", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit-optimization", + "version": "0.6.1" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "qiskit-algorithms", + "version": "0.3.1" + } + ], + "submodules": [ + { + "name": "qasm_simulator", + "class": "HelperClass", + "args": { + "device_name": "qasm_simulator" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + }, + { + "name": "qasm_simulator_gpu", + "class": "HelperClass", + "args": { + "device_name": "qasm_simulator_gpu" + }, + "module": "modules.devices.HelperClass", + "requirements": [], + "submodules": [] + } + ] + } + ] + }, + { + "name": "QUBO", + "class": "QUBO", + "args": {}, + "module": "modules.applications.optimization.TSP.mappings.QUBO", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + }, + { + "name": "dwave_networkx", + "version": "0.8.15" + } + ], + "submodules": [ + { + "name": "Annealer", + "class": "Annealer", + "args": {}, + "module": "modules.solvers.Annealer", + "requirements": [], + "submodules": [ + { + "name": "Simulated Annealer", + "class": "SimulatedAnnealingSampler", + "args": {}, + "module": "modules.devices.SimulatedAnnealingSampler", + "requirements": [ + { + "name": "dwave-samplers", + "version": "1.4.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "GreedyClassicalTSP", + "class": "GreedyClassicalTSP", + "args": {}, + "module": "modules.solvers.GreedyClassicalTSP", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + }, + { + "name": "ReverseGreedyClassicalTSP", + "class": "ReverseGreedyClassicalTSP", + "args": {}, + "module": "modules.solvers.ReverseGreedyClassicalTSP", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + }, + { + "name": "RandomTSP", + "class": "RandomTSP", + "args": {}, + "module": "modules.solvers.RandomClassicalTSP", + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + } + ], + "requirements": [ + { + "name": "networkx", + "version": "3.4.2" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ] + }, + { + "name": "ACL", + "class": "ACL", + "module": "modules.applications.optimization.ACL.ACL", + "submodules": [ + { + "name": "MIPsolverACL", + "class": "MIPaclp", + "args": {}, + "module": "modules.solvers.MIPsolverACL", + "requirements": [ + { + "name": "pulp", + "version": "2.9.0" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + }, + { + "name": "QUBO", + "class": "Qubo", + "args": {}, + "module": "modules.applications.optimization.ACL.mappings.QUBO", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "qiskit-optimization", + "version": "0.6.1" + } + ], + "submodules": [ + { + "name": "Annealer", + "class": "Annealer", + "args": {}, + "module": "modules.solvers.Annealer", + "requirements": [], + "submodules": [ + { + "name": "Simulated Annealer", + "class": "SimulatedAnnealingSampler", + "args": {}, + "module": "modules.devices.SimulatedAnnealingSampler", + "requirements": [ + { + "name": "dwave-samplers", + "version": "1.4.0" + } + ], + "submodules": [] + } + ] + } + ] + } + ], + "requirements": [ + { + "name": "pulp", + "version": "2.9.0" + }, + { + "name": "pandas", + "version": "2.2.3" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "openpyxl", + "version": "3.1.5" + } + ] + }, + { + "name": "MIS", + "class": "MIS", + "module": "modules.applications.optimization.MIS.MIS", + "submodules": [ + { + "name": "QIRO", + "class": "QIRO", + "args": {}, + "module": "modules.applications.optimization.MIS.mappings.QIRO", + "requirements": [ + { + "name": "qrisp", + "version": "0.5.2" + } + ], + "submodules": [ + { + "name": "QrispQIRO", + "class": "QIROSolver", + "args": {}, + "module": "modules.solvers.QrispQIRO", + "requirements": [ + { + "name": "qrisp", + "version": "0.5.2" + } + ], + "submodules": [ + { + "name": "qrisp_simulator", + "class": "QrispSimulator", + "args": {}, + "module": "modules.devices.qrisp_simulator.QrispSimulator", + "requirements": [ + { + "name": "qrisp", + "version": "0.5.2" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "NeutralAtom", + "class": "NeutralAtom", + "args": {}, + "module": "modules.applications.optimization.MIS.mappings.NeutralAtom", + "requirements": [ + { + "name": "pulser", + "version": "1.1.1" + } + ], + "submodules": [ + { + "name": "NeutralAtomMIS", + "class": "NeutralAtomMIS", + "args": {}, + "module": "modules.solvers.NeutralAtomMIS", + "requirements": [ + { + "name": "pulser", + "version": "1.1.1" + } + ], + "submodules": [ + { + "name": "MockNeutralAtomDevice", + "class": "MockNeutralAtomDevice", + "args": {}, + "module": "modules.devices.pulser.MockNeutralAtomDevice", + "requirements": [ + { + "name": "pulser", + "version": "1.1.1" + } + ], + "submodules": [] + } + ] + } + ] + } + ], + "requirements": [] + }, + { + "name": "SCP", + "class": "SCP", + "module": "modules.applications.optimization.SCP.SCP", + "submodules": [ + { + "name": "qubovertQUBO", + "class": "QubovertQUBO", + "args": {}, + "module": "modules.applications.optimization.SCP.mappings.qubovertQUBO", + "requirements": [ + { + "name": "qubovert", + "version": "1.2.5" + } + ], + "submodules": [ + { + "name": "Annealer", + "class": "Annealer", + "args": {}, + "module": "modules.solvers.Annealer", + "requirements": [], + "submodules": [ + { + "name": "Simulated Annealer", + "class": "SimulatedAnnealingSampler", + "args": {}, + "module": "modules.devices.SimulatedAnnealingSampler", + "requirements": [ + { + "name": "dwave-samplers", + "version": "1.4.0" + } + ], + "submodules": [] + } + ] + } + ] + } + ], + "requirements": [] + }, + { + "name": "GenerativeModeling", + "class": "GenerativeModeling", + "module": "modules.applications.qml.generative_modeling.GenerativeModeling", + "submodules": [ + { + "name": "Continuous Data", + "class": "ContinuousData", + "args": {}, + "module": "modules.applications.qml.generative_modeling.data.data_handler.ContinuousData", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "PIT", + "class": "PIT", + "args": {}, + "module": "modules.applications.qml.generative_modeling.transformations.PIT", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "pandas", + "version": "2.2.3" + } + ], + "submodules": [ + { + "name": "CircuitCopula", + "class": "CircuitCopula", + "args": {}, + "module": "modules.applications.qml.generative_modeling.circuits.CircuitCopula", + "requirements": [ + { + "name": "scipy", + "version": "1.12.0" + } + ], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "LibraryPennylane", + "class": "LibraryPennylane", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "jax", + "version": "0.4.35" + }, + { + "name": "jaxlib", + "version": "0.4.35" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_ibm_runtime", + "version": "0.33.2" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + } + ] + } + ] + }, + { + "name": "MinMax", + "class": "MinMax", + "args": {}, + "module": "modules.applications.qml.generative_modeling.transformations.MinMax", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "CircuitStandard", + "class": "CircuitStandard", + "args": {}, + "module": "modules.applications.qml.generative_modeling.circuits.CircuitStandard", + "requirements": [], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "LibraryPennylane", + "class": "LibraryPennylane", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "jax", + "version": "0.4.35" + }, + { + "name": "jaxlib", + "version": "0.4.35" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_ibm_runtime", + "version": "0.33.2" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "CircuitCardinality", + "class": "CircuitCardinality", + "args": {}, + "module": "modules.applications.qml.generative_modeling.circuits.CircuitCardinality", + "requirements": [], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "LibraryPennylane", + "class": "LibraryPennylane", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "jax", + "version": "0.4.35" + }, + { + "name": "jaxlib", + "version": "0.4.35" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_ibm_runtime", + "version": "0.33.2" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "Discrete Data", + "class": "DiscreteData", + "args": {}, + "module": "modules.applications.qml.generative_modeling.data.data_handler.DiscreteData", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "CircuitCardinality", + "class": "CircuitCardinality", + "args": {}, + "module": "modules.applications.qml.generative_modeling.circuits.CircuitCardinality", + "requirements": [], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "LibraryPennylane", + "class": "LibraryPennylane", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.LibraryPennylane", + "requirements": [ + { + "name": "pennylane", + "version": "0.39.0" + }, + { + "name": "pennylane-lightning", + "version": "0.39.0" + }, + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "jax", + "version": "0.4.35" + }, + { + "name": "jaxlib", + "version": "0.4.35" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "QGAN", + "class": "QGAN", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QGAN", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "torch", + "version": "2.5.1" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.qml.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "1.3.0" + }, + { + "name": "qiskit_ibm_runtime", + "version": "0.33.2" + }, + { + "name": "qiskit_aer", + "version": "0.15.1" + }, + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + }, + { + "name": "cma", + "version": "4.0.0" + }, + { + "name": "matplotlib", + "version": "3.9.3" + }, + { + "name": "tensorboard", + "version": "2.18.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.applications.qml.generative_modeling.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.26.4" + } + ], + "submodules": [] + } + ] + } + ] + } + ] + } + ], + "requirements": [] + } + ] +} diff --git a/.settings/requirements_full.txt b/.settings/requirements_full.txt index 6cb63451..3dbe2043 100644 --- a/.settings/requirements_full.txt +++ b/.settings/requirements_full.txt @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8d416d05b1ba1f071a97eb4417750817627ceecc36e9dd694e9a59ebb5f1718b -size 793 +oid sha256:d4c3173f52d75a21ffdab2d0bf6ad86f6bca7374ec6cae23a420d4dfc90d9162 +size 738 diff --git a/Dockerfile b/Dockerfile index 44574f98..c4b7ca48 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM python:3.12 - +RUN pip install --upgrade pip COPY . . -RUN pip install --default-timeout=1800 -r .settings/requirements_full.txt +RUN pip install --default-timeout=3600 -r .settings/requirements_full.txt ENTRYPOINT ["python", "src/main.py"] diff --git a/README.md b/README.md index 3551c0c9..8b198ea5 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,12 @@ After making sure your docker daemon is running, you can run the container: docker run -it --rm ghcr.io/quark-framework/quark ``` +> __Note__: ARM builds are (temporarily) removed in release 2.1.3 because pyqubo 1.5.0 is unavailable for this platform +> at the moment. This means if you want to run QUARK as a container on a machine with a chip from this +> [list](https://en.wikipedia.org/wiki/List_of_ARM_processors) you might face problems. Please feel free to +> [open an issue](https://github.com/QUARK-framework/QUARK/issues/new), so we can work on a tailored workaround until +> the latest version of pyqubo is available on ARM platforms. + You can also build the docker image locally like: ``` docker build -t ghcr.io/quark-framework/quark . diff --git a/docs/tutorial.rst b/docs/tutorial.rst index 27c923e1..5b6bdfda 100644 --- a/docs/tutorial.rst +++ b/docs/tutorial.rst @@ -267,6 +267,12 @@ After making sure your docker daemon is running, you can run the container: docker run -it --rm ghcr.io/quark-framework/quark +**Note**: ARM builds are (temporarily) removed in release 2.1.3 because pyqubo 1.5.0 is unavailable for this platform at +the moment. This means if you want to run QUARK as a container on a machine with a chip from this +`list `_ you might face problems. Please feel free to `open an +issue `_, so we can work on a tailored workaround until the latest +version of pyqubo is available on ARM platforms. + You can also build the docker image locally like: :: diff --git a/src/BenchmarkManager.py b/src/BenchmarkManager.py index 154f54ab..2d8b3f2e 100644 --- a/src/BenchmarkManager.py +++ b/src/BenchmarkManager.py @@ -103,7 +103,7 @@ def __init__(self, fail_fast: bool = False): """ self.fail_fast = fail_fast self.application = None - self.application_configs = None + self.application_configs = None # TODO Seems to be unused, maybe delete self.results = [] self.store_dir = None self.benchmark_record_template = None diff --git a/src/modules/applications/optimization/MIS/MIS.py b/src/modules/applications/optimization/MIS/MIS.py index 1ee5bb22..b0083fe1 100644 --- a/src/modules/applications/optimization/MIS/MIS.py +++ b/src/modules/applications/optimization/MIS/MIS.py @@ -17,6 +17,8 @@ from typing import TypedDict import networkx as nx +import matplotlib.pyplot as plt +from matplotlib.lines import Line2D from modules.applications.Application import Core from modules.applications.optimization.Optimization import Optimization @@ -246,16 +248,6 @@ def generate_problem(self, config: Config) -> nx.Graph: self.graph = graph return graph.copy() - def process_solution(self, solution: list) -> tuple[list, float]: - """ - Returns list of visited nodes and the time it took to process the solution. - - :param solution: Unprocessed solution - :return: Processed solution and the time it took to process it - """ - start_time = start_time_measurement() - return solution, end_time_measurement(start_time) - def validate(self, solution: list) -> tuple[bool, float]: """ Checks if the solution is an independent set. @@ -319,3 +311,54 @@ def save(self, path: str, iter_count: int) -> None: """ with open(f"{path}/graph_iter_{iter_count}.gpickle", "wb") as file: pickle.dump(self.graph, file, pickle.HIGHEST_PROTOCOL) + + def visualize_solution(self, processed_solution: list[int], path: str): + """ + Plot the problem graph with the solution nodes highlighted + + :param processed_solution: The solution already processed by :func:`process_solution`, a list of visited node IDs in order of being visited. + :param path: File path for the plot + :returns: None + """ + NODE_SIZE = 300 # Default=300 + EDGE_WIDTH = 1.0 # Default=1.0 + FONT_SIZE = 12 # Default=12 + COLOR_INCLUDED = "red" + COLOR_EXCLUDED = "gray" + + G = self.graph + included_nodes = [node for node in G.nodes() if node in processed_solution] + excluded_nodes = [node for node in G.nodes() if node not in processed_solution] + pos = nx.circular_layout(G) + included_pos = {n: n for n, _ in pos.items() if n in processed_solution} + excluded_pos = {n: n for n, _ in pos.items() if n not in processed_solution} + legend_elements = [ + Line2D( + [0], + [0], + marker='o', + ls="None", + label="Included", + markerfacecolor=COLOR_INCLUDED, + markeredgewidth=0, + markersize=10), + Line2D( + [0], + [0], + marker='o', + ls="None", + label="Excluded", + markerfacecolor=COLOR_EXCLUDED, + markeredgewidth=0, + markersize=10) + ] + + nx.draw_networkx_nodes(G, pos, nodelist=included_nodes, node_size=NODE_SIZE, node_color=COLOR_INCLUDED) + nx.draw_networkx_nodes(G, pos, nodelist=excluded_nodes, node_size=NODE_SIZE, node_color=COLOR_EXCLUDED) + nx.draw_networkx_labels(G, pos, included_pos, font_size=FONT_SIZE, font_weight="bold") + nx.draw_networkx_labels(G, pos, excluded_pos, font_size=FONT_SIZE) + nx.draw_networkx_edges(G, pos, width=EDGE_WIDTH) + + plt.legend(handles=legend_elements) + plt.savefig(path) + plt.close() diff --git a/src/modules/applications/optimization/Optimization.py b/src/modules/applications/optimization/Optimization.py index aa09c6e0..cfc3dada 100644 --- a/src/modules/applications/optimization/Optimization.py +++ b/src/modules/applications/optimization/Optimization.py @@ -106,6 +106,7 @@ def postprocess(self, input_data: any, config: dict, **kwargs) -> tuple[any, flo if solution_validity and (processed_solution is not None): solution_quality, time_to_evaluation = self.evaluate(processed_solution) + self.visualize_solution(processed_solution, f"{kwargs["store_dir"]}/solution.pdf") else: solution_quality = None time_to_evaluation = None @@ -123,3 +124,14 @@ def postprocess(self, input_data: any, config: dict, **kwargs) -> tuple[any, flo return solution_validity, sum(filter(None, [ time_to_process_solution, time_to_validation, time_to_evaluation ])) + + def visualize_solution(self, processed_solution: any, path: str) -> None: + """ + Creates visualizations of a processed and validated solution and writes them to disk. + Override if applicable. Default is to do nothing. + + :param processed_solution: A solution that was already processed by :func:`process_solution` + :param path: File path for the plot + :returns: None + """ + pass diff --git a/src/modules/applications/optimization/PVC/PVC.py b/src/modules/applications/optimization/PVC/PVC.py index 0483c0dc..767a6963 100644 --- a/src/modules/applications/optimization/PVC/PVC.py +++ b/src/modules/applications/optimization/PVC/PVC.py @@ -19,6 +19,9 @@ import os import networkx as nx +import matplotlib.pyplot as plt +from matplotlib.lines import Line2D +from matplotlib.patches import Patch import numpy as np from modules.applications.Application import Core @@ -315,3 +318,76 @@ def save(self, path: str, iter_count: int) -> None: """ with open(f"{path}/graph_iter_{iter_count}.gpickle", "wb") as file: pickle.dump(self.application, file, pickle.HIGHEST_PROTOCOL) + + def visualize_solution(self, processed_solution, path: str): + """ + Plot a graph representing the possible locations where seams can start or end, with arrows representing either idle movements or the sealing of a seam + + :param processed_solution: The solution already processed by :func:`process_solution`, a list of tuples representing seam start points and the config and tool needed to seal the seam. + :param path: File path for the plot + :returns: None + """ + NODE_SIZE = 300 # Default=300 + EDGE_WIDTH = 1.0 # Default=1.0 + FONT_SIZE = 12 # Default=12 + + highest_node_id = max(node[1] for node in self.application.nodes()) + G = nx.MultiDiGraph() + G.add_nodes_from(range(highest_node_id + 1)) + pos = nx.circular_layout(G) + + tools = set() + configs = set() + current_node = 0 + for ((seam1, node1), config, tool) in processed_solution[1:]: + config = config - 1 + tools.add(tool) + configs.add(config) + (seam2, node2) = next((seam, node) + for (seam, node) in self.application.nodes() if seam == seam1 and not node == node1) + assert seam1 == seam2, "This is bad" + if not current_node == node1: + G.add_edge(current_node, node1, color=7, width=EDGE_WIDTH, style=-1) + G.add_edge(node1, node2, color=tool, width=2 * EDGE_WIDTH, style=config) + current_node = node2 + + # The 8 here controls how many edges between the same two nodes are at + # most drawn with spacing between them before drawing them on top of each + # other to avoid cluttering + connectionstyle = [f"arc3,rad={r}" for r in itertools.accumulate([0.15] * 8)] + style_options = ["solid", "dotted", "dashed", "dashdot"] + cmap = plt.cm.Dark2 + tools = list(tools) + configs = list(configs) + legend_elements = [Line2D([0], + [0], + color=cmap(7), + lw=EDGE_WIDTH, + ls=':', + label="Idle Movement")] + [Patch(facecolor=cmap(i), + label=f"Tool {i}") for i in tools] + [Line2D([0], + [0], + color="black", + lw=2 * EDGE_WIDTH, + ls=style_options[i % len( + style_options)], + label=f"Config {i + 1}") for i in configs] + colors = nx.get_edge_attributes(G, 'color').values() + widths = nx.get_edge_attributes(G, 'width').values() + styles = [':' if i == -1 else style_options[i % len(style_options)] + for i in nx.get_edge_attributes(G, 'style').values()] + + nx.draw_networkx( + G, + pos, + node_size=NODE_SIZE, + font_size=FONT_SIZE, + style=list(styles), + edge_color=colors, + edge_cmap=cmap, + width=list(widths), + connectionstyle=connectionstyle) + + plt.legend(handles=legend_elements) + plt.savefig(path) + plt.close() diff --git a/src/modules/applications/optimization/TSP/TSP.py b/src/modules/applications/optimization/TSP/TSP.py index 0bbb3954..32392e59 100644 --- a/src/modules/applications/optimization/TSP/TSP.py +++ b/src/modules/applications/optimization/TSP/TSP.py @@ -18,6 +18,7 @@ import os import networkx as nx +import matplotlib.pyplot as plt import numpy as np from modules.applications.Application import Core @@ -306,3 +307,31 @@ def save(self, path: str, iter_count: int) -> None: """ with open(f"{path}/graph_iter_{iter_count}.gpickle", "wb") as file: pickle.dump(self.application, file, pickle.HIGHEST_PROTOCOL) + + def visualize_solution(self, processed_solution: list[int], path: str): + """ + Plot a graph representing the problem network with the solution path highlighted + + :param processed_solution: The solution already processed by :func:`process_solution`, a list of visited node IDs in order of being visited. + :param path: File path for the plot + :returns: None + """ + NODE_SIZE = 300 # Default=300 + EDGE_WIDTH = 1.0 # Default=1.0 + FONT_SIZE = 12 # Default=12 + + path_edges = list(nx.utils.pairwise(processed_solution, cyclic=True)) + path_edges = [(u, v) if u < v else (v, u) for (u, v) in path_edges] + G = self.application + pos = nx.circular_layout(G) + weights = nx.get_edge_attributes(G, "weight") + filtered_weights = {e: (int(weights[e])) for e in path_edges} + + nx.draw_networkx_nodes(G, pos, node_size=NODE_SIZE) + nx.draw_networkx_edges(G, pos, edgelist=G.edges(), width=EDGE_WIDTH, edge_color="gray") + nx.draw_networkx_edges(G, pos, edgelist=path_edges, width=2 * EDGE_WIDTH, edge_color="red", arrows=True) + nx.draw_networkx_labels(G, pos, font_size=FONT_SIZE) + nx.draw_networkx_edge_labels(G, pos, filtered_weights, font_size=.5 * FONT_SIZE) + + plt.savefig(path) + plt.close() diff --git a/src/modules/applications/optimization/TSP/mappings/ISING.py b/src/modules/applications/optimization/TSP/mappings/ISING.py index 793a8bf1..056f21df 100644 --- a/src/modules/applications/optimization/TSP/mappings/ISING.py +++ b/src/modules/applications/optimization/TSP/mappings/ISING.py @@ -20,7 +20,6 @@ import numpy as np from dimod import qubo_to_ising from more_itertools import locate -from pyqubo import Array, Placeholder, Constraint from qiskit_optimization.applications import Tsp from qiskit_optimization.converters import QuadraticProgramToQubo @@ -57,7 +56,6 @@ def get_requirements() -> list[dict]: {"name": "dimod", "version": "0.12.18"}, {"name": "more-itertools", "version": "10.5.0"}, {"name": "qiskit-optimization", "version": "0.6.1"}, - {"name": "pyqubo", "version": "1.5.0"}, *QUBO.get_requirements() ] @@ -74,7 +72,7 @@ def get_parameter_options(self) -> dict: "description": "By which factor would you like to multiply your lagrange?" }, "mapping": { - "values": ["ocean", "qiskit", "pyqubo"], + "values": ["ocean", "qiskit"], "description": "Which Ising formulation of the TSP problem should be used?" } } @@ -85,7 +83,7 @@ def get_parameter_options(self) -> dict: "description": "By which factor would you like to multiply your lagrange?" }, "mapping": { - "values": ["ocean", "qiskit", "pyqubo"], + "values": ["ocean", "qiskit"], "description": "Which Ising formulation of the TSP problem should be used?" } } @@ -117,108 +115,12 @@ def map(self, problem: nx.Graph, config: Config) -> tuple[dict, float]: mapping = self.config["mapping"] if mapping == "ocean": return self._map_ocean(problem, config) - elif mapping == "pyqubo": - return self._map_pyqubo(problem, config) elif mapping == "qiskit": return self._map_qiskit(problem, config) else: logging.error(f"Unknown mapping {mapping}.") raise ValueError(f"Unknown mapping {mapping}.") - @staticmethod - def _create_pyqubo_model(cost_matrix: list) -> any: - """ - This PyQubo formulation of the TSP was kindly provided by AWS. - - :param cost_matrix: Cost matrix of the TSP - :return: Compiled PyQubo model - """ - n = len(cost_matrix) - x = Array.create('c', (n, n), 'BINARY') - - # Constraint not to visit more than two nodes at the same time. - time_const = 0.0 - for i in range(n): - # If you wrap the hamiltonian by Const(...), this part is recognized as constraint - time_const += Constraint((sum(x[i, j] for j in range(n)) - 1) ** 2, label=f"time{i}") - - # Constraint not to visit the same location more than twice. - location_const = 0.0 - for j in range(n): - location_const += Constraint((sum(x[i, j] for i in range(n)) - 1) ** 2, label=f"location{j}") - - # distance of route - distance = 0.0 - for i in range(n): - for j in range(n): - for k in range(n): - d_ij = cost_matrix[i][j] - distance += d_ij * x[k, i] * x[(k + 1) % n, j] - - # Construct hamiltonian - A = Placeholder("A") - H = distance + A * (time_const + location_const) - - # Compile model - model = H.compile() - - return model - - @staticmethod - def _get_matrix_index(ising_index_string: any, number_nodes: any) -> any: - """ - Converts dictionary index in PyQubo to matrix index. - - :param ising_index_string: Index string from PyQubo - :param number_nodes: Number of nodes in the graph - :return: Matrix index - """ - x = 0 - y = 0 - match = re.findall(r'(?<=\[)[0-9]*(?=\])', ising_index_string, re.S) - if len(match) == 2: - x = int(match[0]) - y = int(match[1]) - - idx = x * number_nodes + y - - return idx - - def _map_pyqubo(self, graph: nx.Graph, config: Config) -> tuple[dict, float]: - """ - Use Qubo / Ising model defined in PyQubo. - - :param graph: Networkx graph - :param config: Config with the parameters specified in Config class - :return: Dict with the Ising, time it took to map it - """ - start = start_time_measurement() - cost_matrix = np.array(nx.to_numpy_array(graph, weight="weight")) - model = self._create_pyqubo_model(cost_matrix) - feed_dict = {'A': 2.0} - if "lagrange_factor" in config: - feed_dict = {'A': config["lagrange_factor"]} - - linear, quad, _ = model.to_ising(feed_dict=feed_dict) - - timesteps = graph.number_of_nodes() - - t_matrix = np.zeros(graph.number_of_nodes() * graph.number_of_nodes(), dtype=float) - - for key, value in linear.items(): - idx = self._get_matrix_index(key, graph.number_of_nodes()) - t_matrix[idx] = value - - matrix_size = graph.number_of_nodes() * timesteps - j_matrix = np.zeros((matrix_size, matrix_size), dtype=float) - - for key, value in quad.items(): - x = self._get_matrix_index(key[0], graph.number_of_nodes()) - y = self._get_matrix_index(key[1], graph.number_of_nodes()) - j_matrix[x][y] = value - - return {"J": j_matrix, "J_dict": quad, "t_dict": linear, "t": t_matrix}, end_time_measurement(start) - def _map_ocean(self, graph: nx.Graph, config: Config) -> tuple[dict, float]: """ Use D-Wave/Ocean TSP QUBO/Ising model. @@ -297,7 +199,7 @@ def reverse_map(self, solution: any) -> tuple[dict, float]: start = start_time_measurement() if -1 in solution: # ising model output from Braket QAOA solution = self._convert_ising_to_qubo(solution) - elif self.config["mapping"] == "pyqubo" or self.config["mapping"] == "ocean": + elif self.config["mapping"] == "ocean": logging.debug("Flip bits in solutions to unify different mappings") solution = self._flip_bits_in_bitstring(solution) diff --git a/src/modules/applications/optimization/TSP/mappings/QUBO.py b/src/modules/applications/optimization/TSP/mappings/QUBO.py index d10430a6..9adde638 100644 --- a/src/modules/applications/optimization/TSP/mappings/QUBO.py +++ b/src/modules/applications/optimization/TSP/mappings/QUBO.py @@ -97,15 +97,8 @@ def map(self, problem: networkx.Graph, config: Config) -> tuple[dict, float]: lagrange_factor = config['lagrange_factor'] weight = 'weight' - if lagrange is None: - # If no lagrange parameter provided, set to 'average' tour length. - # Usually a good estimate for a lagrange parameter is between 75-150% - # of the objective function value, so we come up with an estimate for - # tour length and use that. - if problem.number_of_edges() > 0: - lagrange = problem.size(weight=weight) * problem.number_of_nodes() / problem.number_of_edges() - else: - lagrange = 2 + # Taken from dwave_networkx.traveling_salesperson_qubo + lagrange = problem.size(weight=weight) * problem.number_of_nodes() / problem.number_of_edges() lagrange = lagrange * lagrange_factor diff --git a/src/modules/solvers/QiskitQAOA.py b/src/modules/solvers/QiskitQAOA.py index 335d2bf6..11e65c86 100644 --- a/src/modules/solvers/QiskitQAOA.py +++ b/src/modules/solvers/QiskitQAOA.py @@ -112,9 +112,8 @@ def get_parameter_options(self) -> dict: }, "iterations": { # number measurements to make on circuit "values": [1, 5, 10, 20, 50, 75], - "description": "How many iterations do you need? Warning: When using the IBM Eagle device you\ - should only choose a low number of iterations, since a high number would lead to a waiting \ - time that could take up to multiple days!" + "description": "How many iterations do you need? Warning: When using the IBM Eagle device you should " + "only choose a low number of iterations (long computation times)." }, "depth": { "values": [2, 3, 4, 5, 10, 20], @@ -126,8 +125,8 @@ def get_parameter_options(self) -> dict: }, "optimizer": { "values": ["POWELL", "SPSA", "COBYLA"], - "description": "Which Qiskit solver should be used? Warning: When using the IBM Eagle device\ - you should not use the SPSA optimizer for a low number of iterations!" + "description": "Which Qiskit solver should be used? Warning: When using the IBM Eagle device you should" + " not use the SPSA optimizer for a low number of iterations!" } } diff --git a/tests/configs/valid/MIS.yml b/tests/configs/valid/MIS.yml index b4b660a2..f7a45b07 100644 --- a/tests/configs/valid/MIS.yml +++ b/tests/configs/valid/MIS.yml @@ -1,30 +1,33 @@ application: config: filling_fraction: - - 0.2 + - 0.4 + graph_type: + - hexagonal + - erdosRenyi + seed: + - 'No' size: - 5 spacing: - - 0.4 + - 0.5 name: MIS submodules: - config: {} - name: NeutralAtom + name: QIRO submodules: - config: - samples: + QIRO_reps: + - 2 + depth: + - 2 + iterations: + - 5 + shots: - 10 - name: NeutralAtomMIS + name: QrispQIRO submodules: - - config: - SPAM: - - false - amplitude: - - false - dephasing: - - false - doppler: - - false - name: MockNeutralAtomDevice + - config: {} + name: qrisp_simulator submodules: [] repetitions: 1 diff --git a/tests/modules/applications/optimization/MIS/test_MIS.py b/tests/modules/applications/optimization/MIS/test_MIS.py index 84477e4e..26c11af2 100644 --- a/tests/modules/applications/optimization/MIS/test_MIS.py +++ b/tests/modules/applications/optimization/MIS/test_MIS.py @@ -2,7 +2,6 @@ import networkx as nx import os from tempfile import TemporaryDirectory -import logging from modules.applications.optimization.MIS.MIS import MIS @@ -32,7 +31,6 @@ def test_get_default_submodule(self): def test_get_parameter_options(self): options = self.mis_instance.get_parameter_options() self.assertIn("size", options) - self.assertIn("graph_type", options) def test_generate_problem(self): # Generate with valid configuration @@ -48,14 +46,20 @@ def test_process_solution(self): self.assertGreaterEqual(processing_time, 0, "Processing time should be positive.") def test_validate(self): - logging.disable(logging.WARNING) - self.mis_instance.application = nx.Graph() - self.mis_instance.application.add_edges_from([(0, 1), (1, 2)]) - - valid_solution = [0, 2] - is_valid, validation_time = self.mis_instance.validate(valid_solution) - self.assertTrue(is_valid, f"Expected valid solution: {valid_solution}") - self.assertGreater(validation_time, 0, "Validation time should be positive.") + generated_graph = self.mis_instance.generate_problem(self.config) + self.assertIsInstance(generated_graph, nx.Graph) + + # Valid solution (independent set) + valid_solution = [] + for node in generated_graph.nodes(): + if all(neighbor not in valid_solution for neighbor in generated_graph.neighbors(node)): + valid_solution.append(node) + print('valid solution', valid_solution) + is_valid, time_taken = self.mis_instance.validate(valid_solution) + print('is valid', is_valid) + + self.assertTrue(is_valid, "Expected solution to be valid") + self.assertIsInstance(time_taken, float) def test_evaluate(self): solution = list(self.graph.nodes)[:3] diff --git a/tests/modules/applications/optimization/TSP/mappings/test_ISING.py b/tests/modules/applications/optimization/TSP/mappings/test_ISING.py index 4046272c..078ec47b 100644 --- a/tests/modules/applications/optimization/TSP/mappings/test_ISING.py +++ b/tests/modules/applications/optimization/TSP/mappings/test_ISING.py @@ -14,7 +14,7 @@ def setUpClass(cls): cls.graph = nx.complete_graph(4) for (u, v) in cls.graph.edges(): cls.graph[u][v]['weight'] = np.random.randint(1, 10) - cls.config = {"lagrange_factor": 1.0, "mapping": "pyqubo"} + cls.config = {"lagrange_factor": 1.0, "mapping": "ocean"} def test_get_requirements(self): requirements = self.ising_instance.get_requirements() @@ -24,7 +24,6 @@ def test_get_requirements(self): {"name": "dimod", "version": "0.12.18"}, {"name": "more-itertools", "version": "10.5.0"}, {"name": "qiskit-optimization", "version": "0.6.1"}, - {"name": "pyqubo", "version": "1.5.0"}, ] for req in expected_requirements: self.assertIn(req, requirements) @@ -34,17 +33,6 @@ def test_get_parameter_options(self): self.assertIn("lagrange_factor", options) self.assertIn("mapping", options) - def test_map_pyqubo(self): - self.config["mapping"] = "pyqubo" - ising_mapping, mapping_time = self.ising_instance.map(self.graph, self.config) - self.assertIn("J", ising_mapping) - self.assertIn("J_dict", ising_mapping) - self.assertIn("t", ising_mapping) - - self.assertIsInstance(ising_mapping["J"], np.ndarray) - self.assertIsInstance(ising_mapping["t"], np.ndarray) - self.assertGreater(mapping_time, 0, "Mapping time should be positive.") - def test_map_ocean(self): self.config["mapping"] = "ocean" ising_mapping, mapping_time = self.ising_instance.map(self.graph, self.config) diff --git a/tests/modules/applications/qml/generative_modeling/mappings/test_LibraryQiskit.py b/tests/modules/applications/qml/generative_modeling/mappings/test_LibraryQiskit.py index afafe1d1..94ba3636 100644 --- a/tests/modules/applications/qml/generative_modeling/mappings/test_LibraryQiskit.py +++ b/tests/modules/applications/qml/generative_modeling/mappings/test_LibraryQiskit.py @@ -1,7 +1,6 @@ import unittest from unittest.mock import patch, MagicMock from qiskit import QuantumCircuit -import numpy as np from qiskit_aer import AerSimulator from modules.applications.qml.generative_modeling.mappings.LibraryQiskit import LibraryQiskit @@ -78,29 +77,14 @@ def test_sequence_to_circuit(self): self.assertIn("n_params", output) self.assertEqual(output["n_params"], 3) # RX, RY, RXX need 3 parameters - # These tests are currently commented out because implementing test cases for the - # cusvaer simulator is challenging due to the complexity of mocking certain - # behaviors of the `cusvaer`-enabled backend. We plan to implement these tests - # in the future once we have resolved these issues. - # @patch("modules.applications.qml.generative_modeling.mappings.LibraryQiskit.select_backend.cusvaer") - # @patch("qiskit_aer.Aer.get_backend") - # def test_cusvaer_simulator(self, mock_aer_simulator, mock_cusvaer): - # mock_backend = MagicMock() - # mock_aer_simulator.return_value = mock_backend - - # backend = self.library_instance.select_backend( - # "cusvaer_simulator (only available in cuQuantum appliance)", 5 - # ) - # self.assertEqual(backend, mock_backend) - # mock_aer_simulator.assert_called_once_with( - # method="statevector", - # device="GPU", - # cusvaer_enable=True, - # noise_model=None, - # cusvaer_p2p_device_bits=3, - # cusvaer_comm_plugin_type=mock_cusvaer.CommPluginType.MPI_AUTO, - # cusvaer_comm_plugin_soname="libmpi.so", - # ) + def test_select_backend(self): + with patch("qiskit_aer.Aer.get_backend", return_value=AerSimulator()) as mock_backend: + backend = self.library_instance.select_backend("aer_simulator_cpu", 2) + mock_backend.assert_called_once_with("aer_simulator") + self.assertIsInstance(backend, AerSimulator) + + with self.assertRaises(NotImplementedError): + self.library_instance.select_backend("unknown_backend", 2) @patch("qiskit_aer.Aer.get_backend") def test_aer_simulator_gpu(self, mock_get_backend): @@ -142,100 +126,20 @@ def test_aer_statevector_simulator_cpu(self, mock_get_backend): mock_backend.set_options.assert_called_once_with(device="CPU") self.assertEqual(backend, mock_backend) - # The following tests are commented out because: - # - The `AWSBraketBackend` and `AWSBraketProvider` are complex to mock in the current setup. - # - Additional setup or dependency resolution is required for testing with AWS Braket devices (e.g., SV1 or IonQ Harmony). - # def test_amazon_sv1(self): - # from qiskit_braket_provider import AWSBraketBackend, AWSBraketProvider - # from modules.devices.braket.SV1 import SV1 - - # # Create a mock device wrapper and backend - # device_wrapper = SV1("SV1", "arn:aws:braket:::device/quantum-simulator/amazon/sv1") - # backend = AWSBraketBackend( - # device=device_wrapper.device, - # provider=AWSBraketProvider(), - # name=device_wrapper.device.name, - # description=f"AWS Device: {device_wrapper.device.provider_name} {device_wrapper.device.name}.", - # online_date=device_wrapper.device.properties.service.updatedAt, - # backend_version="2", - # ) - - # # Assert that the backend behaves as expected - # self.assertIsNotNone(backend) - # self.assertEqual(backend.name, device_wrapper.device.name) - - # @patch("modules.devices.braket.Ionq.Ionq") - # @patch("qiskit_braket_provider.AWSBraketBackend") - # def test_ionq_harmony(self, mock_aws_braket_backend, mock_ionq): - # mock_device_wrapper = MagicMock() - # mock_ionq.return_value = mock_device_wrapper - - # backend = self.library_instance.select_backend("ionQ_Harmony", 4) - # mock_aws_braket_backend.assert_called_once() - # self.assertEqual(backend, mock_aws_braket_backend.return_value) - def test_invalid_configuration(self): with self.assertRaises(NotImplementedError) as context: self.library_instance.select_backend("invalid.backend", 4) self.assertIn("Device Configuration invalid.backend not implemented", str(context.exception)) - # These tests are commented out because: - # - The complexity of mocking the behavior of Qiskit components (e.g., `transpile`, `Statevector`, and `AerSimulator`) - # makes it challenging to implement these tests in the current setup. - # - The dependency on specific Qiskit modules and features requires more robust mocking strategies. - # - We plan to revisit these tests in the future. - # @patch("qiskit.transpiler.transpile") - # @patch("qiskit.quantum_info.Statevector") - # def test_aer_statevector_simulator(self, mock_statevector, mock_transpile): - # mock_circuit = MagicMock(spec=QuantumCircuit) - # mock_transpiled_circuit = MagicMock(spec=QuantumCircuit) - # mock_transpile.return_value = mock_transpiled_circuit - # mock_statevector.return_value.probabilities.return_value = np.array([0.25, 0.75]) - - # # Config - # config = "aer_statevector_simulator_gpu" - # config_dict = {"n_shots": 100} - # backend = MagicMock() - - # execute_circuit, transpiled_circuit = self.library_instance.get_execute_circuit( - # mock_circuit, backend, config, config_dict - # ) - - # self.assertEqual(transpiled_circuit, mock_transpiled_circuit) - # solutions = [np.array([0.1, 0.9]), np.array([0.8, 0.2])] - # pmfs, samples = execute_circuit(solutions) - - # # Validate the outputs - # self.assertIsInstance(pmfs, np.ndarray) - # self.assertIsNone(samples) - # self.assertEqual(pmfs.shape, (2, 2)) - # np.testing.assert_array_equal(pmfs[0], [0.25, 0.75]) - - # @patch("qiskit.transpile") - # @patch("qiskit_aer.AerSimulator.run") - # def test_aer_simulator(self, mock_run, mock_transpile): - # mock_circuit = MagicMock(spec=QuantumCircuit) - # mock_transpiled_circuit = MagicMock(spec=QuantumCircuit) - # mock_transpile.return_value = mock_transpiled_circuit - # mock_job = MagicMock() - # mock_job.result.return_value.get_counts.return_value.int_outcomes.return_value = {0: 10, 1: 20} - # mock_run.return_value = mock_job - - # # Config - # mock_backend = MagicMock(spec=AerSimulator) - # mock_backend.version = 2 - # config = "aer_simulator_gpu" - # config_dict = {"n_shots": 100} - - # execute_circuit, transpiled_circuit = self.library_instance.get_execute_circuit( - # mock_circuit, mock_backend, config, config_dict - # ) - - # self.assertEqual(transpiled_circuit, mock_transpiled_circuit) - # solutions = [np.array([0.1, 0.9]), np.array([0.8, 0.2])] - # pmfs, samples = execute_circuit(solutions) - - # self.assertIsInstance(pmfs, np.ndarray) - # self.assertIsInstance(samples, np.ndarray) - # self.assertEqual(pmfs.shape, (2, 2)) - # self.assertEqual(samples.shape, (2, 2)) + def test_get_execute_circuit(self): + circuit = QuantumCircuit(2) + circuit.h(0) + backend = AerSimulator() + config_dict = {"n_shots": 100} + + execute_circuit, transpiled_circuit = self.library_instance.get_execute_circuit( + circuit, backend, "aer_simulator_cpu", config_dict + ) + + self.assertIsNotNone(execute_circuit) + self.assertIsInstance(transpiled_circuit, QuantumCircuit) diff --git a/tests/modules/applications/qml/generative_modeling/transformation/test_PIT.py b/tests/modules/applications/qml/generative_modeling/transformation/test_PIT.py index 964cdb5a..56c77e64 100644 --- a/tests/modules/applications/qml/generative_modeling/transformation/test_PIT.py +++ b/tests/modules/applications/qml/generative_modeling/transformation/test_PIT.py @@ -1,6 +1,5 @@ import unittest import numpy as np -from unittest.mock import MagicMock from modules.applications.qml.generative_modeling.transformations.PIT import PIT from modules.applications.qml.generative_modeling.circuits.CircuitCopula import CircuitCopula @@ -22,17 +21,9 @@ def setUpClass(cls): # Mock reverse_epit_lookup for testing cls.pit_instance.reverse_epit_lookup = np.array([ [0.1, 0.2, 0.3, 0.4], - [0.5, 0.6, 0.7, 0.8], - [0.9, 1.0, 1.1, 1.2] + [0.5, 0.6, 0.7, 0.8] ]) - cls.pit_instance.grid_shape = (2, 2) - cls.pit_instance.transform_config = { - "n_registers": 2, - "binary_train": np.array([[0, 1], [1, 0]]), - "histogram_train": np.array([0.5, 0.5]), - "dataset_name": "mock_dataset", - "store_dir_iter": "/mock/path" - } + # cls.pit_instance.grid_shape = (2, 2) def test_get_requirements(self): requirements = self.pit_instance.get_requirements() @@ -58,38 +49,27 @@ def test_transform(self): self.assertIsInstance(result["binary_train"], np.ndarray, "Expected binary_train to be a numpy array.") self.assertEqual(result["n_qubits"], self.sample_input_data["n_qubits"], "n_qubits mismatch.") - # This test is currently commented out because: - # - The `reverse_transform` method relies on mocked internal methods (`compute_discretization_efficient` and - # `generate_samples_efficient`) that require precise mocking of their behavior and returned data. - # - Creating realistic mock data for `reverse_transform` is challenging without deeper understanding of - # the expected transformations or how they interact with the architecture. - # - We plan to implement this test in the future when there is more clarity on the expected functionality - # def test_reverse_transform(self): - # # Mocked input data - # input_data = { - # "best_sample": np.array([0, 1, 2, 3]), - # "depth": 2, - # "architecture_name": "TestArchitecture", - # "n_qubits": 2, - # "KL": [0.1, 0.2], - # "circuit_transpiled": None, - # "best_parameter": [0.5, 0.6], - # "store_dir_iter": "/mock/path" - # } - - # # Mock internal method responses - # self.pit_instance.compute_discretization_efficient = MagicMock(return_value=np.array([[0, 1], [2, 3]])) - # self.pit_instance.generate_samples_efficient = MagicMock(return_value=np.array([[0.1, 0.2], [0.3, 0.4]])) - - # # Call the method - # reverse_config = self.pit_instance.reverse_transform(input_data) - - # # Validate the response - # self.assertIn("generated_samples", reverse_config) - # self.assertIn("transformed_samples", reverse_config) - # self.assertIn("KL_best_transformed", reverse_config) - # self.assertEqual(reverse_config["depth"], input_data["depth"]) - # self.assertEqual(reverse_config["dataset_name"], self.pit_instance.dataset_name) + def test_reverse_transform(self): + """ + Test the reverse_transform method. + """ + input_data = { + "depth": 1, + "architecture_name": "dummy_arch", + "n_qubits": 4, + "KL": [0.1, 0.05], + "best_sample": np.random.rand(10, 2), + "circuit_transpiled": "dummy_circuit", + "best_parameter": [0.5, 0.3], + "store_dir_iter": "/tmp", + } + self.pit_instance.grid_shape = 10 + self.pit_instance.transform_config = { + "n_registers": 2 + } + result = self.pit_instance.reverse_transform(input_data) + self.assertIn("generated_samples", result) + self.assertIn("KL_best_transformed", result) def test_emp_integral_trans(self): data = np.random.uniform(0, 1, 100) @@ -107,14 +87,3 @@ def test_inverse_transform(self): self.pit_instance.fit_transform(data) inverse_data = self.pit_instance.inverse_transform(data) self.assertEqual(inverse_data.shape, data.shape, "Inverse-transformed data should match the input shape.") - - # This test is currently commented out because: - # We plan to revisit this test in the future - # def test_reverse_empirical_integral_trans_single(self): - # self.pit_instance.reverse_epit_lookup = np.array([ - # [0.1, 0.2, 0.3], - # [0.4, 0.5, 0.6] - # ]) - # values = np.array([0.2, 0.8]) - # reverse_result = self.pit_instance._reverse_emp_integral_trans_single(values) - # self.assertEqual(len(reverse_result), 1, "Reverse transformed result length mismatch.") diff --git a/tests/test_BenchmarkManager.py b/tests/test_BenchmarkManager.py index 3ee70732..bb145cc7 100644 --- a/tests/test_BenchmarkManager.py +++ b/tests/test_BenchmarkManager.py @@ -167,79 +167,14 @@ def test_traverse_config(self, mock_postprocess, mock_preprocess): self.assertEqual(output, "postprocessed_output", "Expected processed output to match mock postprocess return.") self.assertIsNotNone(benchmark_record, "Expected a BenchmarkRecord instance.") - # These tests are commented out because: - # - The `BenchmarkManager` relies on complex dependencies, including filesystem operations (`Path.mkdir`), - # logging configurations (`FileHandler`), and application-specific configurations (`ConfigManager`). - # - Mocking all these dependencies accurately to test the `orchestrate_benchmark` and `run_benchmark` methods - # requires significant effort and a well-structured mocking strategy, which is currently incomplete. - # - We plan to implement these tests in the future - # @patch("BenchmarkManager.Path.mkdir") - # @patch("BenchmarkManager.logging.FileHandler") - # @patch("BenchmarkManager.ConfigManager") - # @patch("BenchmarkManager.BenchmarkManager._collect_all_results") - # def test_orchestrate_benchmark(self, mock_collect_results, mock_config_manager, mock_filehandler, mock_mkdir): - # # Mock ConfigManager behavior - # mock_config_manager.get_config.return_value = { - # "application": {"name": "test_application"} - # } - # mock_config_manager.get_app.return_value = MagicMock() - # mock_config_manager.start_create_benchmark_backlog.return_value = [] - # mock_config_manager.get_reps.return_value = 1 - - # # Mock mkdir to avoid filesystem errors - # mock_mkdir.return_value = None - - # # Mock FileHandler to avoid file creation errors - # mock_filehandler.return_value = MagicMock() - # mock_filehandler.return_value.level = 10 # Set a valid integer logging level - - # # Mock _collect_all_results to return an empty list - # mock_collect_results.return_value = [] - - # # Create an instance of BenchmarkManager - # benchmark_manager = BenchmarkManager() - - # # Call orchestrate_benchmark - # benchmark_manager.orchestrate_benchmark(mock_config_manager, [{"name": "test"}], "/mock/store_dir") - - # # Assertions - # mock_config_manager.get_config.assert_called_once() - # mock_config_manager.save.assert_called_once() - # mock_mkdir.assert_called() - # mock_filehandler.assert_called_once_with( - # "/mock/store_dir/benchmark_runs/test_application-/logging.log" - # ) - # mock_collect_results.assert_called_once() - - # @patch("src.BenchmarkManager.Path.mkdir") - # @patch("builtins.open", new_callable=mock_open) - # @patch("src.BenchmarkManager.logging.getLogger") - # def test_run_benchmark(self, mock_get_logger, mock_open_file, mock_mkdir): - # # Set up a mocked logger - # mock_logger = MagicMock() - # mock_get_logger.return_value = mock_logger - - # # Mock the BenchmarkManager instance and dependencies - # benchmark_manager = BenchmarkManager() - # benchmark_manager.application = MagicMock() - # benchmark_manager.application.metrics = MagicMock() - # benchmark_manager.application.metrics.set_module_config = MagicMock() - # benchmark_manager.application.metrics.set_preprocessing_time = MagicMock() - # benchmark_manager.application.metrics.add_metric = MagicMock() - # benchmark_manager.application.metrics.validate = MagicMock() - # benchmark_manager.application.save = MagicMock() - # benchmark_manager.benchmark_record_template = MagicMock() - # benchmark_manager.store_dir = "/mock/store" - - # # Set up backlog and repetitions - # backlog = [{"config": {"name": "test"}, "submodule": None}] - # repetitions = 1 - - # # Run the benchmark - # benchmark_manager.run_benchmark(backlog, repetitions) - - # # Assertions - # mock_mkdir.assert_called() - # mock_open_file.assert_called_with("/mock/store/benchmark_0/application_config.json", 'w') - # mock_logger.info.assert_called() # Ensure logging calls happen - # benchmark_manager.application.save.assert_called() # Ensure save is called + @patch("BenchmarkManager.BenchmarkManager._collect_all_results", return_value=[{"key": "value"}]) + @patch("BenchmarkManager.BenchmarkManager._save_as_json") + def test_orchestrate_benchmark(self, mock_save_as_json, mock_collect_all_results): + mock_config_manager = MagicMock() + mock_config_manager.get_config.return_value = {"application": {"name": "test_app"}} + mock_config_manager.get_reps.return_value = 1 + + self.benchmark_manager.orchestrate_benchmark(mock_config_manager, app_modules=[], store_dir="/tmp") + + mock_config_manager.save.assert_called_once_with(self.benchmark_manager.store_dir) + mock_config_manager.load_config.assert_called_once_with([])