[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "spooky" version = "0.1.0" description = "Hybrid quantum-classical multi-robot path planning using QUBO formulations" authors = [ {name="JavideuS", email="javi.rm2005@gmail.com"} ] readme = "README.md" license = {text = "Apache-2.0"} requires-python = ">=3.8" keywords = [ "path planning", "multi-robot", "QUBO", "quantum annealing", "QAOA", "robotics", "quantum computing" ] classifiers = [ "Development Status :: 3 - Alpha", "Intended Audience :: Science/Research", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Physics", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "pyyaml", "h5py", "numpy", "pennylane", "networkx", # Used by the CBS classical baseline ] [project.optional-dependencies] gpu = [ "custatevec-cu12", "pennylane-lightning-gpu", ] dwave = [ "dimod", "dwave-system", "dwave-neal", ] ibm = [ "qiskit-ibm-runtime", "pennylane-qiskit", ] ros = [ "pillow", ] iqm = [ # qrisp[iqm] pulls in iqm-client and provides qrisp.interface.IQMBackend, # the execution path Pennylane_solver.py bridges into for real IQM hardware # (PennyLane -> Qiskit -> Qrisp) — see Pennylane_solver.py's IQM comments # for why qiskit.remote's Sampler can't be used directly against IQM. "qrisp[iqm]", "pennylane-qiskit", "python-dotenv", ] jupyter = [ "ipykernel", "nbformat>=4.2.0", ] dev = [ "pytest", "black", "flake8", ] visualizer = [ "plotly", "kaleido", ] fastapi = [ "fastapi", "uvicorn", "python-multipart", # required by FastAPI's UploadFile form parsing "dash", ] paper = [ "matplotlib", ] classical = [ "pyomo", "highspy", ] # quantum/benchmark/sweep_runner.py + quantum/benchmark/analysis/ benchmark = [ "pandas", "scipy", ] all = [ "spooky[gpu,dwave,ibm,iqm,jupyter,dev,visualizer,fastapi,paper,ros,classical,benchmark]", ] # PennyLane ships no CUDA/lightning-gpu wheels for Windows, so this mirrors # "all" minus the gpu extra. windows = [ "spooky[dwave,ibm,iqm,jupyter,dev,visualizer,fastapi,paper,ros,classical,benchmark]", ] [project.urls] Homepage = "https://github.com/JavideuS/Spooky" Repository = "https://github.com/JavideuS/Spooky" Issues = "https://github.com/JavideuS/Spooky/issues" [project.scripts] spooky-solve = "quantum.qubo_cli:main" spooky-sweep = "quantum.benchmark.run_sweep:main" [tool.setuptools.packages.find] where = ["."] include = ["quantum*"] exclude = ["quantum.prueba*", "quantum.tfg_proves*", "quantum.paper*"] # Data the library loads at runtime relative to its own __file__, so it has to # travel with the package. Without this a non-editable `pip install .` copies # only the .py files. Map .h5 files are deliberately NOT listed here — they're # generated artifacts (see maps/yaml2HDF5.py); the 1000x1000 map alone is 11MB, # so bundling every .h5 would balloon the wheel. registry.py generates missing # .h5 files on demand from the bundled .yaml sources instead, cached outside # the install so it survives on a read-only or reinstalled package dir. # "images/*.png" is the only extension the visualizer's default "auto" theme # actually loads (quantum/images/*.jpg and *.svg are unused leftovers). [tool.setuptools.package-data] "quantum" = ["images/*.png"] "quantum.config" = ["*.yaml"] "quantum.maps" = ["*.yaml"]