Metadata-Version: 2.4
Name: qiskit-addon-opt-mapper
Version: 0.1.0
Summary: An addon for optimization problem modeling, providing various utilities and enhancements.
License-Expression: Apache-2.0
License-File: LICENSE.txt
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Physics
Requires-Python: >=3.10
Requires-Dist: cvxpy
Requires-Dist: docplex
Requires-Dist: networkx
Requires-Dist: numpy
Requires-Dist: qiskit<3
Requires-Dist: rustworkx
Requires-Dist: scipy
Provides-Extra: basetest
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'basetest'
Requires-Dist: cvxpy; extra == 'basetest'
Requires-Dist: ddt; extra == 'basetest'
Requires-Dist: gurobipy; extra == 'basetest'
Requires-Dist: matplotlib; extra == 'basetest'
Requires-Dist: pytest-cov>=5.0; extra == 'basetest'
Requires-Dist: pytest-subtests>=0.13; extra == 'basetest'
Requires-Dist: pytest>=8.0; extra == 'basetest'
Provides-Extra: cplex
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'cplex'
Provides-Extra: cvx
Requires-Dist: cvxpy; extra == 'cvx'
Provides-Extra: dev
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'dev'
Requires-Dist: cvxpy; extra == 'dev'
Requires-Dist: ddt; extra == 'dev'
Requires-Dist: gurobipy; extra == 'dev'
Requires-Dist: ipywidgets; extra == 'dev'
Requires-Dist: jupyter-sphinx; extra == 'dev'
Requires-Dist: matplotlib; extra == 'dev'
Requires-Dist: mypy==1.18.2; extra == 'dev'
Requires-Dist: nbmake>=1.5.0; extra == 'dev'
Requires-Dist: nbqa>=1.8.5; extra == 'dev'
Requires-Dist: nbsphinx>=0.9.4; extra == 'dev'
Requires-Dist: pylatexenc; extra == 'dev'
Requires-Dist: pylint==4.0.2; extra == 'dev'
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
Requires-Dist: pytest-doctestplus>=1.2.1; extra == 'dev'
Requires-Dist: pytest-subtests>=0.13; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: qiskit-sphinx-theme~=2.0.0; extra == 'dev'
Requires-Dist: reno>=4.1; extra == 'dev'
Requires-Dist: ruff==0.14.3; extra == 'dev'
Requires-Dist: rustworkx[graphviz]>=0.15; extra == 'dev'
Requires-Dist: sphinx-autodoc-typehints; extra == 'dev'
Requires-Dist: sphinx-copybutton; extra == 'dev'
Requires-Dist: sphinx-design; extra == 'dev'
Requires-Dist: sphinx-reredirects; extra == 'dev'
Requires-Dist: toml>=0.9.6; extra == 'dev'
Requires-Dist: tox>=4.4.3; extra == 'dev'
Requires-Dist: typos>=1.20.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'docs'
Requires-Dist: cvxpy; extra == 'docs'
Requires-Dist: ddt; extra == 'docs'
Requires-Dist: gurobipy; extra == 'docs'
Requires-Dist: ipywidgets; extra == 'docs'
Requires-Dist: jupyter-sphinx; extra == 'docs'
Requires-Dist: matplotlib; extra == 'docs'
Requires-Dist: nbsphinx>=0.9.4; extra == 'docs'
Requires-Dist: pylatexenc; extra == 'docs'
Requires-Dist: pytest-cov>=5.0; extra == 'docs'
Requires-Dist: pytest-doctestplus>=1.2.1; extra == 'docs'
Requires-Dist: pytest-subtests>=0.13; extra == 'docs'
Requires-Dist: pytest>=8.0; extra == 'docs'
Requires-Dist: qiskit-sphinx-theme~=2.0.0; extra == 'docs'
Requires-Dist: reno>=4.1; extra == 'docs'
Requires-Dist: rustworkx[graphviz]>=0.15; extra == 'docs'
Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
Requires-Dist: sphinx-copybutton; extra == 'docs'
Requires-Dist: sphinx-design; extra == 'docs'
Requires-Dist: sphinx-reredirects; extra == 'docs'
Provides-Extra: doctest
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'doctest'
Requires-Dist: cvxpy; extra == 'doctest'
Requires-Dist: ddt; extra == 'doctest'
Requires-Dist: gurobipy; extra == 'doctest'
Requires-Dist: ipywidgets; extra == 'doctest'
Requires-Dist: matplotlib; extra == 'doctest'
Requires-Dist: pylatexenc; extra == 'doctest'
Requires-Dist: pytest-cov>=5.0; extra == 'doctest'
Requires-Dist: pytest-doctestplus>=1.2.1; extra == 'doctest'
Requires-Dist: pytest-subtests>=0.13; extra == 'doctest'
Requires-Dist: pytest>=8.0; extra == 'doctest'
Requires-Dist: rustworkx[graphviz]>=0.15; extra == 'doctest'
Provides-Extra: dynamic
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'dynamic'
Requires-Dist: cvxpy; extra == 'dynamic'
Requires-Dist: gurobipy; extra == 'dynamic'
Requires-Dist: matplotlib; extra == 'dynamic'
Provides-Extra: gurobi
Requires-Dist: gurobipy; extra == 'gurobi'
Provides-Extra: lint
Requires-Dist: mypy==1.18.2; extra == 'lint'
Requires-Dist: nbqa>=1.8.5; extra == 'lint'
Requires-Dist: pylint==4.0.2; extra == 'lint'
Requires-Dist: reno>=4.1; extra == 'lint'
Requires-Dist: ruff==0.14.3; extra == 'lint'
Requires-Dist: toml>=0.9.6; extra == 'lint'
Requires-Dist: typos>=1.20.0; extra == 'lint'
Provides-Extra: matplotlib
Requires-Dist: matplotlib; extra == 'matplotlib'
Provides-Extra: nbtest
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'nbtest'
Requires-Dist: cvxpy; extra == 'nbtest'
Requires-Dist: ddt; extra == 'nbtest'
Requires-Dist: gurobipy; extra == 'nbtest'
Requires-Dist: matplotlib; extra == 'nbtest'
Requires-Dist: nbmake>=1.5.0; extra == 'nbtest'
Requires-Dist: pytest-cov>=5.0; extra == 'nbtest'
Requires-Dist: pytest-subtests>=0.13; extra == 'nbtest'
Requires-Dist: pytest>=8.0; extra == 'nbtest'
Provides-Extra: notebook-dependencies
Requires-Dist: ipywidgets; extra == 'notebook-dependencies'
Requires-Dist: matplotlib; extra == 'notebook-dependencies'
Requires-Dist: pylatexenc; extra == 'notebook-dependencies'
Requires-Dist: rustworkx[graphviz]>=0.15; extra == 'notebook-dependencies'
Provides-Extra: style
Requires-Dist: nbqa>=1.8.5; extra == 'style'
Requires-Dist: ruff==0.14.3; extra == 'style'
Requires-Dist: typos>=1.20.0; extra == 'style'
Provides-Extra: test
Requires-Dist: cplex; ((python_version < '3.13' and platform_system != 'Darwin') or (python_version < '3.12' and platform_system == 'Darwin')) and extra == 'test'
Requires-Dist: cvxpy; extra == 'test'
Requires-Dist: ddt; extra == 'test'
Requires-Dist: gurobipy; extra == 'test'
Requires-Dist: matplotlib; extra == 'test'
Requires-Dist: pytest-cov>=5.0; extra == 'test'
Requires-Dist: pytest-subtests>=0.13; extra == 'test'
Requires-Dist: pytest>=8.0; extra == 'test'
Description-Content-Type: text/markdown

# Qiskit addon: optimization modeling

### Table of contents

* [About](#about)
* [Documentation](#documentation)
* [Installation](#installation)
* [Computational requirements](#computational-requirements)
* [Deprecation Policy](#deprecation-policy)
* [Contributing](#contributing)
* [License](#license)
* [References](#references)

----------------------------------------------------------------------------------------------------

### About

[Qiskit addons](https://quantum.cloud.ibm.com/docs/guides/addons) are a collection of modular tools for building utility-scale workloads powered by Qiskit.

This package contains the Qiskit addon for optimization modeling.
Quantum computers have the potential to solve combinatorial optimization problems [1].
These optimization problems can be formulated in an abstract model and then converted into a representation that a quantum computer can understand, for instance a Hamiltonian operator.

The optimization workflow first involves formulating the optimization problem in mathematical terms.
This requires defining the objective function to either maximize or minimize and adding any constraints that the decision variables must satisfy.
The variables may be continuous, integare, binary or spin-like.
Furthermore, the constraints on the variables are typically formulated as equalities and inequalities.
Second, this mathematical model is often reformulated into an unconstrained form by transforming the constraints into penalty terms.
Third, the decision variables may be converted into a desired format.
For example, integer variables may the transformed into binary variables so that the resulting model is either quadratic unconstrained binary optimization (QUBO) problem or a higher-order unconstrained binary optimization (HUBO) problem.
In this package the term higher-order is used to designed any polynomial or monomial with a degree higher than two.
Finally, the model is translated into a format that a quantum computer can understand.
Typically, this implies creating a Hamiltonian operator whose ground state corresponds to the solution of the original optimization problem.

----------------------------------------------------------------------------------------------------

### Documentation

All documentation is available at [https://qiskit.github.io/qiskit-addon-opt-mapper](https://qiskit.github.io/qiskit-addon-opt-mapper)

----------------------------------------------------------------------------------------------------

### Installation

We encourage installing this package via `pip`, when possible:

```bash
pip install qiskit-addon-opt-mapper
```

For more installation information refer to these [installation instructions](docs/install.rst).

----------------------------------------------------------------------------------------------------

### Computational requirements

The most computationally expensive part of the addon is the computation of the objective function for large combinatorial optimization problems.

----------------------------------------------------------------------------------------------------

### Deprecation Policy

We follow [semantic versioning](https://semver.org/) and are guided by the principles in
[Qiskit's deprecation policy](https://github.com/Qiskit/qiskit/blob/main/DEPRECATION.md).
We may occasionally make breaking changes in order to improve the user experience.
When possible, we will keep old interfaces and mark them as deprecated, as long as they can co-exist with the
new ones.
Each substantial improvement, breaking change, or deprecation will be documented in the
[release notes](https://qiskit.github.io/qiskit-addon-opt-mapper/release-notes.html).

----------------------------------------------------------------------------------------------------

### Contributing

The source code is available [on GitHub](https://github.com/Qiskit/qiskit-addon-opt-mapper).

The developer guide is located at [CONTRIBUTING.md](https://github.com/Qiskit/qiskit-addon-opt-mapper/blob/main/CONTRIBUTING.md)
in the root of this project's repository.
By participating, you are expected to uphold Qiskit's [code of conduct](https://github.com/Qiskit/qiskit/blob/main/CODE_OF_CONDUCT.md).

We use [GitHub issues](https://github.com/Qiskit/qiskit-addon-opt-mapper/issues/new/choose) for tracking requests and bugs.

----------------------------------------------------------------------------------------------------

### License

[Apache License 2.0](LICENSE.txt)

### References

[1] Abbas, et al. [Challenges and opportunities in quantum optimization](https://www.nature.com/articles/s42254-024-00770-9), Nat. Rev. Physics **6**, 718-735 (2024).
