From 465ca25fc336d9fb1df461185829d44398d632c2 Mon Sep 17 00:00:00 2001 From: chris-van-den-oetelaar <146938303+chris-van-den-oetelaar@users.noreply.github.com> Date: Wed, 22 May 2024 10:06:04 +0200 Subject: [PATCH] MIS on neutral atom implementation (#120) Maximum independent set (MIS) problem implementation, including graph layouts and a mapping to neutral-atom-based devices. --- .settings/module_db.json | 5759 +++++++++-------- .settings/requirements_full.txt | 64 +- src/Installer.py | 3 +- .../applications/optimization/MIS/MIS.py | 245 + .../applications/optimization/MIS/__init__.py | 15 + .../optimization/MIS/data/__init__.py | 15 + .../optimization/MIS/data/graph_layouts.py | 122 + .../optimization/MIS/mappings/NeutralAtom.py | 101 + .../optimization/MIS/mappings/__init__.py | 15 + src/modules/devices/Device.py | 1 - .../devices/pulser/MockNeutralAtomDevice.py | 84 + src/modules/devices/pulser/Pulser.py | 65 + src/modules/devices/pulser/__init__.py | 15 + src/modules/solvers/NeutralAtomMIS.py | 204 + 14 files changed, 3819 insertions(+), 2889 deletions(-) create mode 100644 src/modules/applications/optimization/MIS/MIS.py create mode 100644 src/modules/applications/optimization/MIS/__init__.py create mode 100644 src/modules/applications/optimization/MIS/data/__init__.py create mode 100644 src/modules/applications/optimization/MIS/data/graph_layouts.py create mode 100644 src/modules/applications/optimization/MIS/mappings/NeutralAtom.py create mode 100644 src/modules/applications/optimization/MIS/mappings/__init__.py create mode 100644 src/modules/devices/pulser/MockNeutralAtomDevice.py create mode 100644 src/modules/devices/pulser/Pulser.py create mode 100644 src/modules/devices/pulser/__init__.py create mode 100644 src/modules/solvers/NeutralAtomMIS.py diff --git a/.settings/module_db.json b/.settings/module_db.json index 5ca5d743..18ae1413 100644 --- a/.settings/module_db.json +++ b/.settings/module_db.json @@ -1,2856 +1,2905 @@ -{ - "build_number": 8, - "build_date": "13-05-2024 15:58:02", - "git_revision_number": "1caf302b6d1ff20061b631f42044049e92e7c5dc", - "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": "2.8.8" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "dimod", - "version": "0.12.5" - }, - { - "name": "networkx", - "version": "2.8.8" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "scipy", - "version": "1.10.1" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.28.0" - }, - { - "name": "pennylane-lightning", - "version": "0.28.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.5.2" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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": "2.8.8" - } - ], - "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.0.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "GreedyClassicalPVC", - "class": "GreedyClassicalPVC", - "args": {}, - "module": "modules.solvers.GreedyClassicalPVC", - "requirements": [ - { - "name": "networkx", - "version": "2.8.8" - } - ], - "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": "2.8.8" - } - ], - "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": "2.8.8" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - } - ], - "requirements": [ - { - "name": "networkx", - "version": "2.8.8" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ] - }, - { - "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.0.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": "0.1.7.dev26" - } - ], - "submodules": [ - { - "name": "ClassicalSAT", - "class": "ClassicalSAT", - "args": {}, - "module": "modules.solvers.ClassicalSAT", - "requirements": [ - { - "name": "python-sat", - "version": "0.1.7.dev26" - } - ], - "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": "0.1.7.dev26" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "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.0.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.0.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "ChoiIsing", - "class": "ChoiIsing", - "args": {}, - "module": "modules.applications.optimization.SAT.mappings.ChoiISING", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "dimod", - "version": "0.12.5" - }, - { - "name": "nnf", - "version": "0.4.1" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "scipy", - "version": "1.10.1" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.28.0" - }, - { - "name": "pennylane-lightning", - "version": "0.28.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.5.2" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.23.5" - }, - { - "name": "dimod", - "version": "0.12.5" - }, - { - "name": "nnf", - "version": "0.4.1" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "scipy", - "version": "1.10.1" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.28.0" - }, - { - "name": "pennylane-lightning", - "version": "0.28.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.5.2" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.23.5" - } - ] - }, - { - "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": "2.8.8" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "dimod", - "version": "0.12.5" - }, - { - "name": "more-itertools", - "version": "9.0.0" - }, - { - "name": "qiskit-optimization", - "version": "0.5.0" - }, - { - "name": "pyqubo", - "version": "1.4.0" - }, - { - "name": "networkx", - "version": "2.8.8" - }, - { - "name": "dwave_networkx", - "version": "0.8.13" - } - ], - "submodules": [ - { - "name": "QAOA", - "class": "QAOA", - "args": {}, - "module": "modules.solvers.QAOA", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "scipy", - "version": "1.10.1" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [ - { - "name": "LocalSimulator", - "class": "LocalSimulator", - "args": { - "device_name": "LocalSimulator" - }, - "module": "modules.devices.braket.LocalSimulator", - "requirements": [ - { - "name": "amazon-braket-sdk", - "version": "1.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PennylaneQAOA", - "class": "PennylaneQAOA", - "args": {}, - "module": "modules.solvers.PennylaneQAOA", - "requirements": [ - { - "name": "pennylane", - "version": "0.28.0" - }, - { - "name": "pennylane-lightning", - "version": "0.28.0" - }, - { - "name": "amazon-braket-pennylane-plugin", - "version": "1.5.2" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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.35.1" - }, - { - "name": "botocore", - "version": "1.25.7" - }, - { - "name": "boto3", - "version": "1.22.7" - } - ], - "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": "0.45.0" - }, - { - "name": "qiskit-optimization", - "version": "0.5.0" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ], - "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": "2.8.8" - }, - { - "name": "dwave_networkx", - "version": "0.8.13" - } - ], - "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.0.0" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "GreedyClassicalTSP", - "class": "GreedyClassicalTSP", - "args": {}, - "module": "modules.solvers.GreedyClassicalTSP", - "requirements": [ - { - "name": "networkx", - "version": "2.8.8" - } - ], - "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": "2.8.8" - } - ], - "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": "2.8.8" - } - ], - "submodules": [ - { - "name": "Local", - "class": "Local", - "args": {}, - "module": "modules.devices.Local", - "requirements": [], - "submodules": [] - } - ] - } - ], - "requirements": [ - { - "name": "networkx", - "version": "2.8.8" - }, - { - "name": "numpy", - "version": "1.23.5" - } - ] - }, - { - "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.23.5" - } - ], - "submodules": [ - { - "name": "PIT", - "class": "PIT", - "args": {}, - "module": "modules.applications.QML.generative_modeling.transformations.PIT", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "pandas", - "version": "1.5.2" - } - ], - "submodules": [ - { - "name": "CircuitCopula", - "class": "CircuitCopula", - "args": {}, - "module": "modules.circuits.CircuitCopula", - "requirements": [ - { - "name": "scipy", - "version": "1.11.1" - } - ], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - } - ] - } - ] - }, - { - "name": "MinMax", - "class": "MinMax", - "args": {}, - "module": "modules.applications.QML.generative_modeling.transformations.MinMax", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [ - { - "name": "CircuitStandard", - "class": "CircuitStandard", - "args": {}, - "module": "modules.circuits.CircuitStandard", - "requirements": [ - { - "name": "scipy", - "version": "1.11.1" - } - ], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - } - ] - }, - { - "name": "CircuitCardinality", - "class": "CircuitCardinality", - "args": {}, - "module": "modules.circuits.CircuitCardinality", - "requirements": [], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - } - ] - } - ] - } - ] - }, - { - "name": "Discrete Data", - "class": "DiscreteData", - "args": {}, - "module": "modules.applications.QML.generative_modeling.data.data_handler.DiscreteData", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [ - { - "name": "CircuitCardinality", - "class": "CircuitCardinality", - "args": {}, - "module": "modules.circuits.CircuitCardinality", - "requirements": [], - "submodules": [ - { - "name": "LibraryQiskit", - "class": "LibraryQiskit", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "CustomQiskitNoisyBackend", - "class": "CustomQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - }, - { - "name": "PresetQiskitNoisyBackend", - "class": "PresetQiskitNoisyBackend", - "args": {}, - "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", - "requirements": [ - { - "name": "qiskit", - "version": "0.45.0" - }, - { - "name": "qiskit_aer", - "version": "0.11.2" - }, - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "qiskit-ibmq-provider", - "version": "0.19.2" - } - ], - "submodules": [ - { - "name": "QCBM", - "class": "QCBM", - "args": {}, - "module": "modules.training.QCBM", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - }, - { - "name": "cma", - "version": "3.3.0" - }, - { - "name": "tensorboard", - "version": "2.13.0" - }, - { - "name": "tensorboardX", - "version": "2.6.2" - } - ], - "submodules": [] - }, - { - "name": "Inference", - "class": "Inference", - "args": {}, - "module": "modules.training.Inference", - "requirements": [ - { - "name": "numpy", - "version": "1.23.5" - } - ], - "submodules": [] - } - ] - } - ] - } - ] - } - ], - "requirements": [] - } - ] +{ + "build_number": 9, + "build_date": "21-05-2024 10:16:52", + "git_revision_number": "16d427e5b1954cf0855dcea6c8aa5b13ee98a1f9", + "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": "2.8.8" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "dimod", + "version": "0.12.5" + }, + { + "name": "networkx", + "version": "2.8.8" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "scipy", + "version": "1.10.1" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.28.0" + }, + { + "name": "pennylane-lightning", + "version": "0.28.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.5.2" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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": "2.8.8" + } + ], + "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.0.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "GreedyClassicalPVC", + "class": "GreedyClassicalPVC", + "args": {}, + "module": "modules.solvers.GreedyClassicalPVC", + "requirements": [ + { + "name": "networkx", + "version": "2.8.8" + } + ], + "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": "2.8.8" + } + ], + "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": "2.8.8" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + } + ], + "requirements": [ + { + "name": "networkx", + "version": "2.8.8" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ] + }, + { + "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.0.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": "0.1.7.dev26" + } + ], + "submodules": [ + { + "name": "ClassicalSAT", + "class": "ClassicalSAT", + "args": {}, + "module": "modules.solvers.ClassicalSAT", + "requirements": [ + { + "name": "python-sat", + "version": "0.1.7.dev26" + } + ], + "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": "0.1.7.dev26" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "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.0.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.0.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "ChoiIsing", + "class": "ChoiIsing", + "args": {}, + "module": "modules.applications.optimization.SAT.mappings.ChoiISING", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "dimod", + "version": "0.12.5" + }, + { + "name": "nnf", + "version": "0.4.1" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "scipy", + "version": "1.10.1" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.28.0" + }, + { + "name": "pennylane-lightning", + "version": "0.28.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.5.2" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.23.5" + }, + { + "name": "dimod", + "version": "0.12.5" + }, + { + "name": "nnf", + "version": "0.4.1" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "scipy", + "version": "1.10.1" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.28.0" + }, + { + "name": "pennylane-lightning", + "version": "0.28.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.5.2" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.23.5" + } + ] + }, + { + "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": "2.8.8" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "dimod", + "version": "0.12.5" + }, + { + "name": "more-itertools", + "version": "9.0.0" + }, + { + "name": "qiskit-optimization", + "version": "0.5.0" + }, + { + "name": "pyqubo", + "version": "1.4.0" + }, + { + "name": "networkx", + "version": "2.8.8" + }, + { + "name": "dwave_networkx", + "version": "0.8.13" + } + ], + "submodules": [ + { + "name": "QAOA", + "class": "QAOA", + "args": {}, + "module": "modules.solvers.QAOA", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "scipy", + "version": "1.10.1" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [ + { + "name": "LocalSimulator", + "class": "LocalSimulator", + "args": { + "device_name": "LocalSimulator" + }, + "module": "modules.devices.braket.LocalSimulator", + "requirements": [ + { + "name": "amazon-braket-sdk", + "version": "1.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PennylaneQAOA", + "class": "PennylaneQAOA", + "args": {}, + "module": "modules.solvers.PennylaneQAOA", + "requirements": [ + { + "name": "pennylane", + "version": "0.28.0" + }, + { + "name": "pennylane-lightning", + "version": "0.28.0" + }, + { + "name": "amazon-braket-pennylane-plugin", + "version": "1.5.2" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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.35.1" + }, + { + "name": "botocore", + "version": "1.25.7" + }, + { + "name": "boto3", + "version": "1.22.7" + } + ], + "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": "0.45.0" + }, + { + "name": "qiskit-optimization", + "version": "0.5.0" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ], + "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": "2.8.8" + }, + { + "name": "dwave_networkx", + "version": "0.8.13" + } + ], + "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.0.0" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "GreedyClassicalTSP", + "class": "GreedyClassicalTSP", + "args": {}, + "module": "modules.solvers.GreedyClassicalTSP", + "requirements": [ + { + "name": "networkx", + "version": "2.8.8" + } + ], + "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": "2.8.8" + } + ], + "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": "2.8.8" + } + ], + "submodules": [ + { + "name": "Local", + "class": "Local", + "args": {}, + "module": "modules.devices.Local", + "requirements": [], + "submodules": [] + } + ] + } + ], + "requirements": [ + { + "name": "networkx", + "version": "2.8.8" + }, + { + "name": "numpy", + "version": "1.23.5" + } + ] + }, + { + "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.23.5" + } + ], + "submodules": [ + { + "name": "PIT", + "class": "PIT", + "args": {}, + "module": "modules.applications.QML.generative_modeling.transformations.PIT", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "pandas", + "version": "1.5.2" + } + ], + "submodules": [ + { + "name": "CircuitCopula", + "class": "CircuitCopula", + "args": {}, + "module": "modules.circuits.CircuitCopula", + "requirements": [ + { + "name": "scipy", + "version": "1.11.1" + } + ], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + } + ] + } + ] + }, + { + "name": "MinMax", + "class": "MinMax", + "args": {}, + "module": "modules.applications.QML.generative_modeling.transformations.MinMax", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [ + { + "name": "CircuitStandard", + "class": "CircuitStandard", + "args": {}, + "module": "modules.circuits.CircuitStandard", + "requirements": [ + { + "name": "scipy", + "version": "1.11.1" + } + ], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + } + ] + }, + { + "name": "CircuitCardinality", + "class": "CircuitCardinality", + "args": {}, + "module": "modules.circuits.CircuitCardinality", + "requirements": [], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + } + ] + } + ] + } + ] + }, + { + "name": "Discrete Data", + "class": "DiscreteData", + "args": {}, + "module": "modules.applications.QML.generative_modeling.data.data_handler.DiscreteData", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [ + { + "name": "CircuitCardinality", + "class": "CircuitCardinality", + "args": {}, + "module": "modules.circuits.CircuitCardinality", + "requirements": [], + "submodules": [ + { + "name": "LibraryQiskit", + "class": "LibraryQiskit", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.LibraryQiskit", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "CustomQiskitNoisyBackend", + "class": "CustomQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.CustomQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + }, + { + "name": "PresetQiskitNoisyBackend", + "class": "PresetQiskitNoisyBackend", + "args": {}, + "module": "modules.applications.QML.generative_modeling.mappings.PresetQiskitNoisyBackend", + "requirements": [ + { + "name": "qiskit", + "version": "0.45.0" + }, + { + "name": "qiskit_aer", + "version": "0.11.2" + }, + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "qiskit-ibmq-provider", + "version": "0.19.2" + } + ], + "submodules": [ + { + "name": "QCBM", + "class": "QCBM", + "args": {}, + "module": "modules.training.QCBM", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + }, + { + "name": "cma", + "version": "3.3.0" + }, + { + "name": "tensorboard", + "version": "2.13.0" + }, + { + "name": "tensorboardX", + "version": "2.6.2" + } + ], + "submodules": [] + }, + { + "name": "Inference", + "class": "Inference", + "args": {}, + "module": "modules.training.Inference", + "requirements": [ + { + "name": "numpy", + "version": "1.23.5" + } + ], + "submodules": [] + } + ] + } + ] + } + ] + } + ], + "requirements": [] + }, + { + "name": "MIS", + "class": "MIS", + "module": "modules.applications.optimization.MIS.MIS", + "submodules": [ + { + "name": "NeutralAtom", + "class": "NeutralAtom", + "args": {}, + "module": "modules.applications.optimization.MIS.mappings.NeutralAtom", + "requirements": [ + { + "name": "pulser", + "version": "0.16.0" + } + ], + "submodules": [ + { + "name": "NeutralAtomMIS", + "class": "NeutralAtomMIS", + "args": {}, + "module": "modules.solvers.NeutralAtomMIS", + "requirements": [ + { + "name": "pulser", + "version": "0.16.0" + } + ], + "submodules": [ + { + "name": "MockNeutralAtomDevice", + "class": "MockNeutralAtomDevice", + "args": {}, + "module": "modules.devices.pulser.MockNeutralAtomDevice", + "requirements": [ + { + "name": "pulser", + "version": "0.16.0" + } + ], + "submodules": [] + } + ] + } + ] + } + ], + "requirements": [] + } + ] } \ No newline at end of file diff --git a/.settings/requirements_full.txt b/.settings/requirements_full.txt index b9130d94..fb1ea82c 100644 --- a/.settings/requirements_full.txt +++ b/.settings/requirements_full.txt @@ -1,32 +1,32 @@ -seaborn==0.13.0 -networkx==2.8.8 -inquirer==3.1.2 -packaging==23.1 -pyyaml==6.0 -typing-extensions==4.6.3 -sphinx==6.2.1 -sphinx-rtd-theme==1.2.0 -numpy==1.23.5 -dimod==0.12.5 -amazon-braket-sdk==1.35.1 -scipy==1.11.1 -botocore==1.25.7 -boto3==1.22.7 -pennylane==0.28.0 -pennylane-lightning==0.28.0 -amazon-braket-pennylane-plugin==1.5.2 -dwave-samplers==1.0.0 -nnf==0.4.1 -qubovert==1.2.5 -python-sat==0.1.7.dev26 -more-itertools==9.0.0 -qiskit-optimization==0.5.0 -pyqubo==1.4.0 -dwave_networkx==0.8.13 -qiskit==0.45.0 -pandas==1.5.2 -qiskit-ibmq-provider==0.19.2 -cma==3.3.0 -tensorboard==2.13.0 -tensorboardX==2.6.2 -qiskit_aer==0.11.2 +seaborn==0.13.0 +networkx==2.8.8 +inquirer==3.1.2 +packaging==23.1 +pyyaml==6.0 +typing-extensions==4.6.3 +sphinx==6.2.1 +sphinx-rtd-theme==1.2.0 +numpy==1.23.5 +dimod==0.12.5 +amazon-braket-sdk==1.35.1 +scipy==1.11.1 +botocore==1.25.7 +boto3==1.22.7 +pennylane==0.28.0 +pennylane-lightning==0.28.0 +amazon-braket-pennylane-plugin==1.5.2 +dwave-samplers==1.0.0 +nnf==0.4.1 +qubovert==1.2.5 +python-sat==0.1.7.dev26 +more-itertools==9.0.0 +qiskit-optimization==0.5.0 +pyqubo==1.4.0 +dwave_networkx==0.8.13 +qiskit==0.45.0 +pandas==1.5.2 +cma==3.3.0 +tensorboard==2.13.0 +tensorboardX==2.6.2 +pulser==0.16.0 +qiskit-aer==0.11.2 diff --git a/src/Installer.py b/src/Installer.py index b41f30e9..eb2ccbd6 100644 --- a/src/Installer.py +++ b/src/Installer.py @@ -44,7 +44,8 @@ def __init__(self): {"name": "SAT", "class": "SAT", "module": "modules.applications.optimization.SAT.SAT"}, {"name": "TSP", "class": "TSP", "module": "modules.applications.optimization.TSP.TSP"}, {"name": "GenerativeModeling", "class": "GenerativeModeling", - "module": "modules.applications.QML.generative_modeling.GenerativeModeling"} + "module": "modules.applications.QML.generative_modeling.GenerativeModeling"}, + {"name": "MIS", "class": "MIS", "module": "modules.applications.optimization.MIS.MIS"}, ] self.core_requirements = [ diff --git a/src/modules/applications/optimization/MIS/MIS.py b/src/modules/applications/optimization/MIS/MIS.py new file mode 100644 index 00000000..b0b2c3cb --- /dev/null +++ b/src/modules/applications/optimization/MIS/MIS.py @@ -0,0 +1,245 @@ +# Copyright 2021 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import TypedDict +import pickle + +import networkx + +from modules.applications.Application import * +from modules.applications.optimization.Optimization import Optimization +from modules.applications.optimization.MIS.data.graph_layouts import \ + generate_hexagonal_graph +from utils import start_time_measurement, end_time_measurement + +# define R_rydberg +R_rydberg = 9.75 + + +class MIS(Optimization): + """ + In planning problems, there will be tasks to be done, and some of them may be mutually exclusive. + We can translate this into a graph where the nodes are the tasks and the edges are the mutual exclusions. + The maximum independent set (MIS) problem is a combinatorial optimization problem that seeks to find the largest + subset of vertices in a graph such that no two vertices are adjacent. + """ + + def __init__(self): + """ + Constructor method + """ + super().__init__("MIS") + self.submodule_options = ["NeutralAtom"] + + @staticmethod + def get_requirements() -> list[dict]: + """ + Returns requirements of this module + + :return: list of dict with requirements of this module + :rtype: list[dict] + """ + return [ + ] + + def get_solution_quality_unit(self) -> str: + return "Set size" + + def get_default_submodule(self, option: str) -> Core: + if option == "NeutralAtom": + from modules.applications.optimization.MIS.mappings.NeutralAtom import NeutralAtom # pylint: disable=C0415 + return NeutralAtom() + else: + raise NotImplementedError(f"Mapping Option {option} not implemented") + + def get_parameter_options(self) -> dict: + """ + Returns the configurable settings for this application + + :return: + .. code-block:: python + + return { + "size": { + "values": list(range(1, 18)), + "description": "How large should your graph be?" + }, + "spacing": { + "values": [x/10 for x in range(1, 11)], + "description": "How much space do you want between your nodes," + " relative to Rydberg distance?" + }, + "filling_fraction": { + "values": [x/10 for x in range(1, 11)], + "description": "What should the filling fraction be?" + }, + } + + """ + return { + "size": { + "values": [1, 5, 10, 15], + "custom_input": True, + "allow_ranges": True, + "postproc": int, + "description": "How large should your graph be?" + }, + "spacing": { + "values": [x/10 for x in range(3, 11, 2)], + "custom_input": True, + "allow_ranges": True, + "postproc": float, + "description": "How much space do you want between your nodes," + " relative to Rydberg distance?" + }, + "filling_fraction": { + "values": [x/10 for x in range(2, 11, 2)], + "custom_input": True, + "allow_ranges": True, + "postproc": float, + "description": "What should the filling fraction be?" + }, + } + + class Config(TypedDict): + """ + Attributes of a valid config + + .. code-block:: python + + size: int + spacing: float + filling_fraction: float + + """ + size: int + spacing: float + filling_fraction: float + + def generate_problem(self, config: Config) -> networkx.Graph: + """ + Generates a graph to solve the MIS for. + + :param config: Config specifying the size and connectivity for the problem + :type config: Config + :return: networkx graph representing the problem + :rtype: networkx.Graph + """ + + if config is None: + config = {"size": 3, + "spacing": 1, + "filling_fraction": 0.5} + + # check if config has the necessary information + assert all( + x in config.keys() + for x in ['size', 'spacing', 'filling_fraction'] + ) + + size = config.get('size') + spacing = config.get('spacing') * R_rydberg + filling_fraction = config.get('filling_fraction') + + graph = generate_hexagonal_graph( + n_nodes=size, + spacing=spacing, + filling_fraction=filling_fraction, + ) + + logging.info("Created MIS problem with the generate hexagonal " + "graph method, with the following attributes:") + logging.info(f" - Graph size: {size}") + logging.info(f" - Spacing: {spacing}") + logging.info(f" - Filling fraction: {filling_fraction}") + + self.application = graph + return graph.copy() + + def process_solution(self, solution: list) -> (list, float): + """ + Returns list of visited nodes and the time it took to process the solution + + :param solution: Unprocessed solution + :type solution: list + :return: Processed solution and the time it took to process it + :rtype: tuple(list, float) + """ + start_time = start_time_measurement() + + return solution, end_time_measurement(start_time) + + def validate(self, solution: list) -> (bool, float): + """ + Checks if the solution is an independent set + + :param solution: List containing the nodes of the solution + :type solution: list + :return: Boolean whether the solution is valid and time it took to validate + :rtype: tuple(bool, float) + """ + start = start_time_measurement() + is_valid = True + + nodes = list(self.application.nodes()) + edges = list(self.application.edges()) + + # TODO: Check if the solution is maximal? + + # Check if the solution is independent + is_independent = all((u, v) not in edges for u, v in edges if u in solution and v in solution) + if is_independent: + logging.info("The solution is independent") + else: + logging.warning("The solution is not independent") + is_valid = False + + # Check if the solution is a set + solution_set = set(solution) + is_set = len(solution_set) == len(solution) + if is_set: + logging.info("The solution is a set") + else: + logging.warning("The solution is not a set") + is_valid = False + + # Check if the solution is a subset of the original nodes + is_set = all(node in nodes for node in solution) + if is_set: + logging.info("The solution is a subset of the problem") + else: + logging.warning("The solution is not a subset of the problem") + is_valid = False + + return is_valid, end_time_measurement(start) + + def evaluate(self, solution: list) -> (int, float): + """ + Calculates the size of the solution + + :param solution: List containing the nodes of the solution + :type solution: list + :return: Set size, time it took to calculate the set size + :rtype: tuple(int, float) + """ + start = start_time_measurement() + set_size = len(solution) + + logging.info(f"Size of solution: {set_size}") + + return set_size, end_time_measurement(start) + + 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) diff --git a/src/modules/applications/optimization/MIS/__init__.py b/src/modules/applications/optimization/MIS/__init__.py new file mode 100644 index 00000000..e808d010 --- /dev/null +++ b/src/modules/applications/optimization/MIS/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2022 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Module for MIS""" diff --git a/src/modules/applications/optimization/MIS/data/__init__.py b/src/modules/applications/optimization/MIS/data/__init__.py new file mode 100644 index 00000000..310100cb --- /dev/null +++ b/src/modules/applications/optimization/MIS/data/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2022 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Module for MIS data""" diff --git a/src/modules/applications/optimization/MIS/data/graph_layouts.py b/src/modules/applications/optimization/MIS/data/graph_layouts.py new file mode 100644 index 00000000..1c6192d8 --- /dev/null +++ b/src/modules/applications/optimization/MIS/data/graph_layouts.py @@ -0,0 +1,122 @@ +# Copyright 2021 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import math +import random + +import networkx +import pulser + +# define R_rydberg +R_rydberg = 9.75 + +def generate_hexagonal_graph(n_nodes:int, spacing:float, + filling_fraction:float=1.0) -> networkx.Graph: + """ + Generate a hexagonal graph layout based on the number of atoms and spacing. + + Args: + n (int): The number of nodes in the graph. + spacing (float): The spacing between atoms. + filling_fraction (float): The fraction of available places in the + lattice to be filled with atoms. (default: 1.0) + + Returns: + Graph: networkx Graph representing the hexagonal graph layout. + """ + if filling_fraction > 1.0 or filling_fraction <= 0.0: + raise ValueError( + "The filling fraction must be in the domain of (0.0, 1.0]." + ) + + # Create a layout large enough to contain the desired number of atoms at + # the filling fraction + n_traps = int(n_nodes/filling_fraction) + hexagonal_layout = pulser.register.special_layouts.TriangularLatticeLayout( + n_traps=n_traps, spacing=spacing) + + # Fill the layout with traps + reg = hexagonal_layout.hexagonal_register(n_traps) + ids = reg._ids + coords = reg._coords + coords = [l.tolist() for l in coords] + traps = dict(zip(ids, coords)) + + # Remove random atoms to get the desired number of atoms + # This is needed if the filling fraction is below 1.0 + while len(traps) > n_nodes: + atom_to_remove = random.choice(list(traps)) + traps.pop(atom_to_remove) + + # Rename the atoms + i = 0 + node_positions = dict() + for trap in traps.keys(): + node_positions[i] = traps[trap] + i += 1 + + # Create the graph + hexagonal_graph = networkx.Graph() + + # Add the nodes + for id, coord in node_positions.items(): + hexagonal_graph.add_node(id, pos=coord) + + # Generate the edges and add them to the graph + edges = _generate_edges(node_positions=node_positions) + hexagonal_graph.add_edges_from(edges) + + return hexagonal_graph + +def _generate_edges( + node_positions: dict, + radius: float = R_rydberg, + ) -> list[tuple]: + """Generate edges between vertices within a given distance 'radius', which + defaults to R_rydberg. + + Parameters + ---------- + node_positions: dict + A dictionary with the node ids as keys, and the node coordinates as + value. + radius: float + When the distance between two nodes is smaller than this radius, an + edge is generated between them. + + Returns + ------- + edges: list[tuple] + A list of 2-tuples. Each 2-tuple contains two different node ids and + represents an edge between those two nodes. + """ + edges = [] + vertex_keys = list(node_positions.keys()) + for i, vertex_key in enumerate(vertex_keys): + for neighbor_key in vertex_keys[i+1:]: + distance = _vertex_distance(node_positions[vertex_key], + node_positions[neighbor_key]) + if distance <= radius: + edges.append((vertex_key, neighbor_key)) + return edges + +def _vertex_distance(v0: tuple, v1: tuple) -> float: + """ + Calculates distance between two n-dimensional vertices. + For 2 dimensions: distance = sqrt((x0-x1)**2 + (y0-y1)**2) + """ + squared_difference = 0 + for coordinate0, coordinate1 in zip(v0, v1): + squared_difference += (coordinate0 -coordinate1)**2 + return math.sqrt(squared_difference) diff --git a/src/modules/applications/optimization/MIS/mappings/NeutralAtom.py b/src/modules/applications/optimization/MIS/mappings/NeutralAtom.py new file mode 100644 index 00000000..ba382680 --- /dev/null +++ b/src/modules/applications/optimization/MIS/mappings/NeutralAtom.py @@ -0,0 +1,101 @@ +# Copyright 2021 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import TypedDict + +import networkx +import numpy as np +import pulser + +from modules.applications.Mapping import * +from utils import start_time_measurement, end_time_measurement + + +class NeutralAtom(Mapping): + """ + Neutral atom formulation for MIS. + """ + + def __init__(self): + """ + Constructor method + """ + super().__init__() + self.submodule_options = ["NeutralAtomMIS"] + + @staticmethod + def get_requirements() -> list[dict]: + """ + Return requirements of this module + + :return: list of dict with requirements of this module + :rtype: list[dict] + """ + return [ + { + "name": "pulser", + "version": "0.16.0" + } + ] + + def get_parameter_options(self) -> dict: + """ + Returns the configurable settings for this mapping + + :return: + .. code-block:: python + + return {} + + """ + return {} + + class Config(TypedDict): + """ + Attributes of a valid config + + .. code-block:: python + pass + """ + pass + + def map(self, problem: networkx.Graph, config: Config) -> (dict, float): + """ + Maps the networkx graph to a neutral atom MIS problem. + + :param problem: networkx graph + :type problem: networkx.Graph + :param config: config with the parameters specified in Config class + :type config: Config + :return: dict with neutral MIS, time it took to map it + :rtype: tuple(dict, float) + """ + start = start_time_measurement() + + pos = networkx.get_node_attributes(problem, 'pos') + register = pulser.Register(pos) + + neutral_atom_problem = { + 'graph': problem, + 'register': register + } + return neutral_atom_problem, end_time_measurement(start) + + def get_default_submodule(self, option: str) -> Core: + + if option == "NeutralAtomMIS": + from modules.solvers.NeutralAtomMIS import NeutralAtomMIS # pylint: disable=C0415 + return NeutralAtomMIS() + else: + raise NotImplementedError(f"Solver Option {option} not implemented") diff --git a/src/modules/applications/optimization/MIS/mappings/__init__.py b/src/modules/applications/optimization/MIS/mappings/__init__.py new file mode 100644 index 00000000..a701f7ff --- /dev/null +++ b/src/modules/applications/optimization/MIS/mappings/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2022 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Module for MIS mappings""" diff --git a/src/modules/devices/Device.py b/src/modules/devices/Device.py index 014958f3..dcf71103 100644 --- a/src/modules/devices/Device.py +++ b/src/modules/devices/Device.py @@ -29,7 +29,6 @@ def __init__(self, device_name: str): self.device = None self.config = None self.device_name = self.name - self.config = None def get_parameter_options(self) -> dict: """ diff --git a/src/modules/devices/pulser/MockNeutralAtomDevice.py b/src/modules/devices/pulser/MockNeutralAtomDevice.py new file mode 100644 index 00000000..75a325c9 --- /dev/null +++ b/src/modules/devices/pulser/MockNeutralAtomDevice.py @@ -0,0 +1,84 @@ +# Copyright 2021 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import TypedDict + +import pulser +from pulser.devices import MockDevice +from pulser_simulation import QutipBackend + +from modules.devices.pulser.Pulser import Pulser +from modules.Core import Core + + +class MockNeutralAtomDevice(Pulser): + """ + Class for using the local mock Pulser simulator for neutral atom devices + """ + + def __init__(self): + """ + Constructor method + """ + super().__init__(device_name="mock neutral atom device") + self.device = MockDevice + self.backend = QutipBackend + self.submodule_options = [] + + def get_parameter_options(self) -> dict: + """ + Returns the configurable settings for this application + """ + return { + "doppler": { + "values": [False, True], + "description": "Simulate doppler noise? Has a large impact on performance!" + }, + "amplitude": { + "values": [False, True], + "description": "Simulate amplitude noise? Has a large impact on performance!" + }, + "SPAM": { + "values": [False, True], + "description": "Simulate SPAM noise? Has a large impact on performance!" + }, + "dephasing": { + "values": [False, True], + "description": "Simulate dephasing noise? Has a large impact on performance!" + }, + } + + class Config(TypedDict): + """ + Attributes of a valid config + """ + doppler: bool + amplitude: bool + SPAM: bool + dephasing: bool + + def get_backend_config(self) -> pulser.backend.config.EmulatorConfig: + """ + Returns backend configurations + + :return: backend config for the emulator + :rtype: pulser.backend.config.EmulatorConfig + """ + noise_types = [key for key, value in self.config.items() if value] + noise_model = pulser.backend.noise_model.NoiseModel(noise_types=noise_types) + emulator_config = pulser.backend.config.EmulatorConfig(noise_model=noise_model) + return emulator_config + + def get_default_submodule(self, option: str) -> Core: + raise ValueError("This module has no submodules.") diff --git a/src/modules/devices/pulser/Pulser.py b/src/modules/devices/pulser/Pulser.py new file mode 100644 index 00000000..06c09bae --- /dev/null +++ b/src/modules/devices/pulser/Pulser.py @@ -0,0 +1,65 @@ +# Copyright 2021 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from abc import ABC, abstractmethod + +from modules.devices.Device import Device + + +class Pulser(Device, ABC): + """ + Abstract class to use the Pulser devices. + """ + + def __init__(self, device_name: str): + """ + Constructor method + """ + super().__init__(device_name) + self.device = None + self.backend = None + + def get_backend(self) -> any: + """ + Returns backend + + :return: Instance of the backend class + :rtype: any + """ + return self.backend + + @abstractmethod + def get_backend_config(self) -> any: + """ + Returns backend configurations + + :return: Instance of the backend config class + :rtype: any + """ + pass + + @staticmethod + def get_requirements() -> list[dict]: + """ + Return requirements of this module + + :return: list of dict with requirements of this module + :rtype: list[dict] + """ + return [ + { + "name": "pulser", + "version": "0.16.0" + }, + ] diff --git a/src/modules/devices/pulser/__init__.py b/src/modules/devices/pulser/__init__.py new file mode 100644 index 00000000..21f825c9 --- /dev/null +++ b/src/modules/devices/pulser/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2022 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Pulser neutral atom devices""" diff --git a/src/modules/solvers/NeutralAtomMIS.py b/src/modules/solvers/NeutralAtomMIS.py new file mode 100644 index 00000000..5624d235 --- /dev/null +++ b/src/modules/solvers/NeutralAtomMIS.py @@ -0,0 +1,204 @@ +# Copyright 2021 The QUARK Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from typing import TypedDict + +import numpy as np +import pulser + +from modules.solvers.Solver import * +from utils import start_time_measurement, end_time_measurement + + +class NeutralAtomMIS(Solver): + """ + Neutral atom quantum computer maximum independent sets solver. + """ + + def __init__(self): + """ + Constructor method + """ + super().__init__() + self.submodule_options = ["MockNeutralAtomDevice"] + + @staticmethod + def get_requirements() -> list[dict]: + """ + Return requirements of this module + + :return: list of dict with requirements of this module + :rtype: list[dict] + """ + return [ + { + "name": "pulser", + "version": "0.16.0" + } + ] + + def get_default_submodule(self, option: str) -> Core: + if option == "MockNeutralAtomDevice": + from modules.devices.pulser.MockNeutralAtomDevice import MockNeutralAtomDevice # pylint: disable=C0415 + return MockNeutralAtomDevice() + else: + raise NotImplementedError(f"Device Option {option} not implemented") + + def get_parameter_options(self) -> dict: + """ + Returns the configurable settings for this solver + """ + return { + "samples": { + "values": [10, 100, 1000, 10000], + "custom_input": True, + "allow_ranges": True, + "postproc": int, + "description": "How many samples from the quantum computer do you want per measurement?" + }, + } + + class Config(TypedDict): + """ + Attributes of a valid config + + samples (int): How many times to sample the final state from the quantum computer per measurement + """ + samples: int + + def run(self, mapped_problem: dict, device_wrapper: any, config: any, **kwargs: dict) -> (list, float, dict): + """ + The given application is a problem instance from the pysat library. This uses the rc2 maxsat solver + given in that library to return a solution. + + :param mapped_problem: + :type mapped_problem: dict with graph and register + :param device_wrapper: Device to run the problem on + :type device_wrapper: any + :param config: empty dict + :type config: Config + :param kwargs: no additionally settings needed + :type kwargs: any + :return: Solution, the time it took to compute it and optional additional information + :rtype: tuple(list, float, dict) + """ + register = mapped_problem.get('register') + graph = mapped_problem.get('graph') + nodes = list(graph.nodes()) + edges = list(graph.edges()) + logging.info( + f"Got problem with {len(graph.nodes)} nodes, {len(graph.edges)} edges." + ) + + device = device_wrapper.get_device() + device.validate_register(register) + device_backend = device_wrapper.get_backend() + device_config = device_wrapper.get_backend_config() + + start = start_time_measurement() + + sequence = self._create_sequence(register, device) + + if device_wrapper.device_name == "mock neutral atom device": + backend = device_backend(sequence, device_config) + results = backend.run(progress_bar=False) + sampled_state_counts = results.sample_final_state(N_samples=config['samples']) + else: + raise NotImplementedError(f"Device Option {device_wrapper.device_name} not implemented") + + valid_state_counts = self._filter_invalid_states(sampled_state_counts, nodes, edges) + state = self._select_best_state(valid_state_counts, nodes) + state_nodes = self._translate_state_to_nodes(state, nodes) + + return state_nodes, end_time_measurement(start), {} + + def _create_sequence(self, register:pulser.Register, device:pulser.devices._device_datacls.Device) -> pulser.Sequence: + """ + Creates a pulser sequence from a register and a device. + """ + pulses = self._create_pulses(device) + sequence = pulser.Sequence(register, device) + sequence.declare_channel("Rydberg global", "rydberg_global") + for pulse in pulses: + sequence.add(pulse, "Rydberg global") + return sequence + + def _create_pulses(self, device:pulser.devices._device_datacls.Device) -> list[pulser.Pulse]: + """ + Creates pulses tuned to MIS problem. + + Pulse creation is a whole art/science on its own that we have not delved into yet. + If you shape and finetune your pulses to decrease compute time on your neutral atom device. + We found this configuration in the documentation of the pulser documentation and it works for MIS. + We are hesitant to make them parametrizable, because setting the wrong values will break your whole MIS. + Though parameterization of pulses is a feature that we might implement in the future. + """ + Omega_max = 2.3 * 2 * np.pi + delta_factor = 2 * np.pi + + channel = device.channels['rydberg_global'] + max_amp = channel.max_amp + if max_amp is not None and max_amp < Omega_max: + Omega_max = max_amp + + delta_0 = -3 * delta_factor + delta_f = 1 * delta_factor + + t_rise = 2000 + t_fall = 2000 + t_sweep = (delta_f - delta_0) / (2 * np.pi * 10) * 5000 + + rise = pulser.Pulse.ConstantDetuning( + pulser.waveforms.RampWaveform(t_rise, 0.0, Omega_max), delta_0, 0.0 + ) + sweep = pulser.Pulse.ConstantAmplitude( + Omega_max, pulser.waveforms.RampWaveform(t_sweep, delta_0, delta_f), 0.0 + ) + fall = pulser.Pulse.ConstantDetuning( + pulser.waveforms.RampWaveform(t_fall, Omega_max, 0.0), delta_f, 0.0 + ) + pulses = [rise, sweep, fall] + + for pulse in pulses: + channel.validate_pulse(pulse) + + return pulses + + def _filter_invalid_states(self, state_counts:dict, nodes:list, edges:list) -> dict: + valid_state_counts = {} + for state, count in state_counts.items(): + selected_nodes = self._translate_state_to_nodes(state, nodes) + + is_valid = True + for edge in edges: + if edge[0] in selected_nodes and edge[1] in selected_nodes: + is_valid = False + break + if is_valid: + valid_state_counts[state] = count + + return valid_state_counts + + def _translate_state_to_nodes(self, state:str, nodes:list) -> list: + return [key for index, key in enumerate(nodes) if state[index] == '1'] + + def _select_best_state(self, states:dict, nodes=list) -> str: + # TODO: Implement the samplers + try: + best_state = max(states, key=lambda k: states[k]) + except: + # TODO: Clean up this monstrocity + n_nodes = len(nodes) + best_state = "0" * n_nodes + return best_state