Skip to main content

Python interface to multiple optimization solvers

Project description

PyOptInterface (Python Optimization Interface)

PyOptInterface is an open-source Python library to provide a unified API to construct and solve optimization models with various optimizers.

The detailed documentation can be found here.

Key features compared with other modeling interfaces

It is designed as a very thin wrapper of native C API of optimizers and attempts to provide common abstractions of an algebraic modelling environment including model, variable, constraint and expression with the least overhead of performance.

The key features of PyOptInterface include:

  • Very fast speed to construct optimization model (10x faster than Pyomo, comparable with JuMP.jl and some official Python bindings provided by vendors of optimizer)
  • Highly efficient structured automatic differentiation for nonlinear optimization with JIT compilation (faster than other NLP frameworks)
  • Low overhead to modify and re-solve the problem incrementally (including adding/removing variables/constraints, changing objective function, etc.)
  • Unified API to cover common usages, write once and the code works for all optimizers
  • You still have escape hatch to query or modify solver-specific parameter/attribute/information for different optimizers directly like the vendor-specific Python binding of optimizer

Benchmark

The benchmark comparing PyOptInterface with some other modeling interfaces can be found here. PyOptInterface is among the fastest modeling interfaces in terms of model construction time and automatic differentiation of nonlinear optimization problems.

Installation

PyOptInterface is available on PyPI. You can install it via pip:

pip install pyoptinterface

After installation, you can import the package in Python console:

import pyoptinterface as poi

PyOptInterface has no dependencies other than Python itself. However, to use it with a specific optimizer, you need to install the corresponding optimizer manually. The details can be found on the configurations of optimizers.

In order to provide out-of-the-box support for open source optimizers (currently we support HiGHS), PyOptInterface can also be installed with pre-built optimizers. You can install them via pip:

pip install pyoptinterface[highs]

It will install a full-featured binary version of HiGHS optimizer via highsbox, which can be used with PyOptInterface.

What kind of problems can PyOptInterface solve?

It currently supports the following problem types:

  • Linear Programming (LP)
  • Mixed-Integer Linear Programming (MILP)
  • Quadratic Programming (QP)
  • Mixed-Integer Quadratic Programming (MIQP)
  • Quadratically Constrained Quadratic Programming (QCQP)
  • Mixed-Integer Quadratically Constrained Quadratic Programming (MIQCQP)
  • Second-Order Cone Programming (SOCP)
  • Mixed-Integer Second-Order Cone Programming (MISOCP)
  • Exponential Cone Programming (ECP)
  • Mixed-Integer Exponential Cone Programming (MIECP)
  • Nonlinear Programming (NLP)

What optimizers does PyOptInterface support?

It currently supports the following optimizers:

Short Example

import pyoptinterface as poi
from pyoptinterface import highs

model = highs.Model()

x = model.add_variable(lb=0, ub=1, domain=poi.VariableDomain.Continuous, name="x")
y = model.add_variable(lb=0, ub=1, domain=poi.VariableDomain.Integer, name="y")

con = model.add_linear_constraint(x+y, poi.Geq, 1.2, name="con")

obj = 2*x
model.set_objective(obj, poi.ObjectiveSense.Minimize)

model.set_model_attribute(poi.ModelAttribute.Silent, False)
model.optimize()

print(model.get_model_attribute(poi.ModelAttribute.TerminationStatus))
# TerminationStatusCode.OPTIMAL

x_val = model.get_value(x)
# 0.2

y_val = model.get_value(y)
# 1.0

Citation

If you use PyOptInterface in your research, please consider citing the following paper:

@misc{yang2024pyoptinterface,
      title={PyOptInterface: Design and implementation of an efficient modeling language for mathematical optimization}, 
      author={Yue Yang and Chenhui Lin and Luo Xu and Wenchuan Wu},
      year={2024},
      eprint={2405.10130},
      archivePrefix={arXiv},
      primaryClass={cs.MS}
}

If you use the nonlinear optimization feature of PyOptInterface, please consider citing the following paper as well:

@article{yang2024accelerating,
      title={Accelerating Optimal Power Flow with Structure-aware Automatic Differentiation and Code Generation},
      author={Yang, Yue and Lin, Chenhui and Xu, Luo and Yang, Xiaodong and Wu, Wenchuan and Wang, Bin},
      journal={IEEE Transactions on Power Systems},
      year={2024},
      publisher={IEEE}
}

License

PyOptInterface is licensed under MPL-2.0 License.

It uses nanobind, fmtlib and martinus/unordered_dense as dependencies.

The design of PyOptInterface is inspired by JuMP.jl.

Some solver-related code in src folder is adapted from the corresponding solver interface package in JuMP.jl ecosystem, which is licensed under MIT License.

The header files in thirdparty/solvers directory are from the corresponding distribution of optimizers and are licensed under their own licenses.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

pyoptinterface-0.3.0-cp312-abi3-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.12+ Windows x86-64

pyoptinterface-0.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.12+ manylinux: glibc 2.17+ x86-64

pyoptinterface-0.3.0-cp312-abi3-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.12+ macOS 11.0+ ARM64

pyoptinterface-0.3.0-cp312-abi3-macosx_10_14_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12+ macOS 10.14+ x86-64

pyoptinterface-0.3.0-cp311-cp311-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.11 Windows x86-64

pyoptinterface-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

pyoptinterface-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11 macOS 11.0+ ARM64

pyoptinterface-0.3.0-cp311-cp311-macosx_10_14_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11 macOS 10.14+ x86-64

pyoptinterface-0.3.0-cp310-cp310-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.10 Windows x86-64

pyoptinterface-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

pyoptinterface-0.3.0-cp310-cp310-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.10 macOS 11.0+ ARM64

pyoptinterface-0.3.0-cp310-cp310-macosx_10_14_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10 macOS 10.14+ x86-64

pyoptinterface-0.3.0-cp39-cp39-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.9 Windows x86-64

pyoptinterface-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

pyoptinterface-0.3.0-cp39-cp39-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.9 macOS 11.0+ ARM64

pyoptinterface-0.3.0-cp39-cp39-macosx_10_14_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.9 macOS 10.14+ x86-64

pyoptinterface-0.3.0-cp38-cp38-win_amd64.whl (1.4 MB view details)

Uploaded CPython 3.8 Windows x86-64

pyoptinterface-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.2 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

pyoptinterface-0.3.0-cp38-cp38-macosx_10_14_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.8 macOS 10.14+ x86-64

File details

Details for the file pyoptinterface-0.3.0-cp312-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp312-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 aad0f3859590f357f770dc6ecfdd0d6d27c011d5f758f32a6b03ac4f958be544
MD5 8f2c876acb0104723d4a766379df28d4
BLAKE2b-256 04ab53892c1f46181a6ca7e0ea49599affbbf1e25eaa3dfc75bdfba52d63ec1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp312-abi3-win_amd64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4d6f78f915d060cd0e1c3cb918a618e75da4590f4c562fafe26fad7e2d11a53b
MD5 99ae27149065b744078787910932057b
BLAKE2b-256 ce83a4b3ad99cf282091670a90ca44cde9aa214a15bfd779adb21b5b131a4ea0

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp312-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp312-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0dd563813f14a22e2883a4e54e96b92cc7ee8a7064e99a4a00c964689d8307e2
MD5 a7eb4750fac8f2acae2cc61dcea0a807
BLAKE2b-256 87b77a3f8ed91df5ab30d6fa519f20303b10ee65262e04bcf87e02ae4ed28054

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp312-abi3-macosx_11_0_arm64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp312-abi3-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp312-abi3-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 b9f577a7c0daad4481c59ab1ea061e45dd3f5bcb38496d5ad91c5eeb291ee3e3
MD5 0d03ad30584203250405542090a8f9df
BLAKE2b-256 29ac84e8087f5cb365aceff96a95707fee87ee269473a996f1fd29cf33f8b7d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp312-abi3-macosx_10_14_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 e8b0ff2197b045ebaab670c718a15890639306fc68776e9be4fa30edce134543
MD5 4891b451c73cf3df4ac72295e3388acf
BLAKE2b-256 c8ebc168f08cbc61ce8c8d1137cb9bd8709d01d340fc0693f0672d540f8486cc

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp311-cp311-win_amd64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 95376c3385ea5b3245642f54575968fffa8e98bebc099af0d25cd1d0442cf132
MD5 4cb4ccf3e4656f5c8a1560f7a37a4d5f
BLAKE2b-256 3c0de91c679d2d565cfa54bedbe5e4eca5be7ee135d36f1411f3725aee4c1097

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f89c5557ac2ec850c47e1c016eef5abce245a2ed9502e0a95e4f6474171d7473
MD5 158eaab33da98c2e96713d7c31ff7850
BLAKE2b-256 18254daddbcc65d80299286e7c3d05f19e79a27caa3b0d44d74640e80bbe0a2c

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp311-cp311-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp311-cp311-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 cd2f9fdf753238694aaf14f7bbe0c0be3697418d38dcc7bd6939128aa5b18e93
MD5 63b921f8280fa90fac53d4a08c85c7d4
BLAKE2b-256 2c78a86e7c25957c03e18461bd091491d2974cf823ebbf46d7797161c85f4390

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp311-cp311-macosx_10_14_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 95eaa89baeda83f698a6088ed4704f191a096c8e84a0d6859bcb985ba53ab403
MD5 ac65cc0bdece35bafb2d4198d76c69f2
BLAKE2b-256 57902a8b6997d5fe4bedb41c387df0131c796946ee5440cc5b966b98cc853e97

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp310-cp310-win_amd64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0cd396d66c0a20eb354aba7052f2b51b08b78bc8e8df73e1edee052b2a367f62
MD5 163b7a0ad70a679789b416024610e84b
BLAKE2b-256 dea487a3e3c17954dd4537986f852fb734d56fb23dfa0a1bd1e720d6e7494c1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b5ffea42c88d4b0091aca299c54b022c258b890ff6cc1cd712a6d2ff546f1554
MD5 804b02f771733f512d0fba9450816ae1
BLAKE2b-256 2918f49472ecb43fbdc1e4978f67f5a16c4585ede4a352dfa7d45cac7cced671

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp310-cp310-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp310-cp310-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 654535dcc4d56d10fb3d5ede6e29c7868d20301e13e4f3354bbe7121aa540501
MD5 2f172f82a39d40e9e7faa5bb9eff9a46
BLAKE2b-256 2da170bbb941dab30ffc152b342169bf6258031303900b4988d65c0bb10a9f86

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp310-cp310-macosx_10_14_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e82a52091bf2f85b505b495440cd31e4c1c2f4e41de38fd9d4902b31fce99f9c
MD5 92996330cc5ad25da69dc976b6721004
BLAKE2b-256 1b43eed985673a4e85e70ee8bac9ef8b38ffd4eb07770c8bee0debf6592167c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp39-cp39-win_amd64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 eb698f08c06136bd6b8d58a8c96db34eaa8fdf905578655c49c473f409412a58
MD5 43478ab48b117fb7d8e8dc5fac6c213a
BLAKE2b-256 6e56835f67bb181f484b136461a0d7119b05fbceca790d0422efc596005b1d5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5bcd4cdb7b8aad2abfd69fea13e51c83704e5f2147f0521d84c5597eba18dce4
MD5 ddddfd9b1adeed2199d7277597236977
BLAKE2b-256 211332153306ef96ee139f863b08bbb97f49731428daf1d52eb92e2c53455961

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp39-cp39-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp39-cp39-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 2c5f70d270a99747896cde2124bd5370bd81101f3cb361549d14814bcb5770c7
MD5 9cdd3f75e3db1a2956b980eadf6779fb
BLAKE2b-256 b286ed81ba8980d78b2f6ffd4eb9b9f12afe9831e33df6d24240ff886ec4d4d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp39-cp39-macosx_10_14_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp38-cp38-win_amd64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 3ade90226adf74c4552dc5f722932d9dbd5c407ad030ea75f9fdbe5bfee0e676
MD5 d09abbd542bd95f1eaef7cc0c036bcc3
BLAKE2b-256 d7f42dfada59933be867b83ff4b07224d85727ab8acb68fb408ebea6b4cc4b84

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp38-cp38-win_amd64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e435cefc18f006af5fb8630772ead605e661c25f003a75ddedc40beb24af89ea
MD5 bbc1a826b5e872f370fd52846d5566cc
BLAKE2b-256 c4e75fa31e16036ea5c3f86194a166556123b00aec22e8d5a971e48c714714ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyoptinterface-0.3.0-cp38-cp38-macosx_10_14_x86_64.whl.

File metadata

File hashes

Hashes for pyoptinterface-0.3.0-cp38-cp38-macosx_10_14_x86_64.whl
Algorithm Hash digest
SHA256 02d0bc24ae4138f98af44c8f3f5e5b2dc00b8c665c0ef5ad6273b4ea84ccd3e0
MD5 d4199c59008af5e34d8dffd5be735bdb
BLAKE2b-256 94e59054b3e090b841b5994a7a8f0af231951001838196641bfff7150aaf1c23

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyoptinterface-0.3.0-cp38-cp38-macosx_10_14_x86_64.whl:

Publisher: wheel.yml on metab0t/PyOptInterface

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page