Metadata-Version: 2.4
Name: opti-extensions
Version: 1.3.0
Summary: A collection of custom data structures and user-friendly functions for mathematical optimization modeling with DOcplex, gurobipy, Xpress, and highspy.
Author-email: Samarth Mistry <samarth.mistry@gmail.com>
License-Expression: Apache-2.0
Project-URL: Homepage, https://opti-extensions.readthedocs.io/
Project-URL: Documentation, https://opti-extensions.readthedocs.io/en/stable/#documentation
Project-URL: Source code, https://github.com/samarthmistry/opti-extensions/tree/main/src/opti_extensions
Project-URL: Changelog, https://github.com/samarthmistry/opti-extensions/releases
Keywords: CPLEX,DOcplex,Gurobi,gurobipy,Xpress,Highs,highspy,linear programming,mixed integer programming,optimization model
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
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: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE
Requires-Dist: typing_extensions>=4.10.0
Provides-Extra: solver-apis
Requires-Dist: cplex>=20.1.0.4; extra == "solver-apis"
Requires-Dist: docplex>=2.25.236; extra == "solver-apis"
Requires-Dist: gurobipy>=11.0.0; extra == "solver-apis"
Requires-Dist: xpress>=9.4.0; extra == "solver-apis"
Requires-Dist: highspy>=1.11.0; extra == "solver-apis"
Provides-Extra: tests
Requires-Dist: pytest>=8.1.1; extra == "tests"
Requires-Dist: coverage>=7.4.4; extra == "tests"
Requires-Dist: pytest-cov>=4.1.0; extra == "tests"
Requires-Dist: pytest-randomly>=3.15.0; extra == "tests"
Requires-Dist: mypy[faster-cache]<=1.21,>=1.20; extra == "tests"
Requires-Dist: pandas<3.0.0,>=2.0.0; extra == "tests"
Requires-Dist: pandas-stubs<3.0.0,>=2.0.0; extra == "tests"
Provides-Extra: docs
Requires-Dist: Sphinx==8.1.3; extra == "docs"
Requires-Dist: sphinx-autosummary-accessors==2025.3.1; extra == "docs"
Requires-Dist: ansys-sphinx-theme==1.4.5; extra == "docs"
Requires-Dist: sphinx_design==0.6.1; extra == "docs"
Requires-Dist: sphinx_gallery==0.19.0; extra == "docs"
Requires-Dist: sphinx-copybutton==0.5.2; extra == "docs"
Requires-Dist: sphinx-notfound-page==1.1.0; extra == "docs"
Requires-Dist: matplotlib==3.10.3; extra == "docs"
Requires-Dist: numpy==2.2.6; extra == "docs"
Requires-Dist: pandas==2.3.3; extra == "docs"
Requires-Dist: pandas-stubs==2.3.3.260113; extra == "docs"
Requires-Dist: numpydoc==1.10.0; extra == "docs"
Provides-Extra: dev
Requires-Dist: ruff>=0.7.0; extra == "dev"
Requires-Dist: prek>=0.3.0; extra == "dev"
Requires-Dist: tox>=4.14.1; extra == "dev"
Requires-Dist: tox-uv>=1.10.0; extra == "dev"
Requires-Dist: opti-extensions[tests]; extra == "dev"
Requires-Dist: opti-extensions[docs]; extra == "dev"
Dynamic: license-file

# opti-extensions

[![license](https://img.shields.io/pypi/l/opti-extensions)](https://github.com/samarthmistry/opti-extensions/blob/main/LICENSE)
[![pypi](https://img.shields.io/pypi/v/opti-extensions)](https://pypi.python.org/pypi/opti-extensions)
[![pyversions](https://img.shields.io/pypi/pyversions/opti-extensions)](https://pypi.python.org/pypi/opti-extensions)

[![CI](https://github.com/samarthmistry/opti-extensions/actions/workflows/ci.yaml/badge.svg)](https://github.com/samarthmistry/opti-extensions/blob/main/.github/workflows/ci.yaml)
[![Tests](https://github.com/samarthmistry/opti-extensions/actions/workflows/tests.yaml/badge.svg)](https://github.com/samarthmistry/opti-extensions/blob/main/.github/workflows/tests.yaml)
[![Coverage](https://raw.githubusercontent.com/samarthmistry/opti-extensions/main/coverage.svg)](https://github.com/samarthmistry/opti-extensions/tree/main/tests/unit_tests)

A collection of custom data structures and user-friendly functions for mathematical optimization modeling with [DOcplex](https://ibmdecisionoptimization.github.io/docplex-doc), [gurobipy](https://docs.gurobi.com/projects/optimizer/en/current/reference/python.html), [Xpress](https://www.fico.com/fico-xpress-optimization/docs/latest/solver/optimizer/python/HTML), and [highspy](https://ergo-code.github.io/HiGHS/stable/interfaces/python/).

Features
--------

* **Specialized data structures**: For defining index-sets, parameters, and decision variables enabling concise and high-performance algebraic modeling.
* **Cross-solver compatibility**: Comprehensively tested with:
    * CPLEX versions: 20.1.0, 22.1.0, 22.1.1, 22.1.2
    * Gurobi versions: 12.0, 13.0
    * Xpress versions: 9.4, 9.5, 9.6, 9.7, 9.8
    * HiGHS versions: 1.11, 1.12, 1.13, 1.14
* **Easy access to additional CPLEX functionality**: Like [tuning tool](https://www.ibm.com/docs/en/icos/latest?topic=programmingconsiderations-tuning-tool), [runseeds](https://www.ibm.com/docs/en/icos/latest?topic=cplex-evaluating-variability), [displaying problem statistics](https://www.ibm.com/docs/en/icos/latest?topic=problem-displaying-statistics), and [displaying solution quality statistics](https://www.ibm.com/docs/en/icos/latest?topic=cplex-evaluating-solution-quality) — not directly available in DOcplex.
* **Type-complete interface**: Enables static type checking and intelligent auto-completion suggestions with modern IDEs — reducing type errors and improving development speed.

Links
-----

* [Documentation](https://opti-extensions.readthedocs.io/en/stable)
* [Installation](https://opti-extensions.readthedocs.io/en/stable/installation/index.html)
* [Source code](https://github.com/samarthmistry/opti-extensions)
* [Changelog](https://github.com/samarthmistry/opti-extensions/releases)

Development
-----------

Dev dependencies can be installed with the pip [extras](https://packaging.python.org/en/latest/tutorials/installing-packages/#installing-extras) `dev`.

* Create HTML documentation locally with: `docs/make html`.
* Run unit tests and functional tests with: `pytest tests`.
* Run doctests with: `pytest src`.
* Run static typing tests with: `mypy tests/typing_tests`.

License
-------

opti-extensions is an open-source project developed by [Samarth Mistry](https://www.linkedin.com/in/samarthmistry) and released under the Apache 2.0 License. See the [LICENSE](https://github.com/samarthmistry/opti-extensions/blob/main/LICENSE) and [NOTICE](https://github.com/samarthmistry/opti-extensions/blob/main/NOTICE) for more details.
