Skip to main content

Bindings to Ipopt C++ library.

Project description

Pypopt: Ipopt for Python

Pypopt is an Ipopt wrapper for Python. The aim is to expose the same API as Ipopt C++ interface.

Examples

You can find examples in the examples/ folder.

PythonJournal

In Pypopt you can use Python objects as targets for Ipopt journaling. The Python objects needs to implement two methods:

  • write(str): called to write str to the stream object

  • flush(): called to flush the stream

This means we can use Python3 io.StringIO to capture Ipopt output to string:

app = IpoptApplication()
f = io.StringIO()
j = PythonJournal(EJournalLevel.J_NONE, f)
jnlst = app.journalist()
jnlst.add_journal(j)

Requirements

  • A working C++ compiler

  • Cython

  • Ipopt

  • Pytest + pytest-runner + pytest-cov for testing

Ipopt Installation

We recommend installing Ipopt from source.

If you have Ipopt installed in a different location than /usr set the following environment variables before proceeding to the next section:

IPOPT_INCLUDE_DIR=/path/to/ipopt/include
IPOPT_LIBRARY_DIR=/path/to/ipopt/lib

Installation

Pypopt is available on Pypi:

pip install pypopt

Installation from Source

To install pypopt simply run:

python setup.py install

Troubleshooting

Pypopt is a Cython extension, this makes it sometimes tricky to install correctly.

Different toolchain for Ipopt and Pypopt

Ipopt and Pypopt need to be compiled with the same C++ toolchain. If that’s not the case, you will see an error like the following when loading Pypopt:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/lib/python3.6/site-packages/pypopt/__init__.py", line 24, in <module>
  from pypopt._cython import (
ImportError: /lib/python3.6/site-packages/pypopt/_cython.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN5Ipopt7Journal4NameB5cxx11Ev

This means Ipopt and Pypopt were compiled with different compilers/flags. To fix this issue install Ipopt from source and set the IPOPT_INCLUDE_DIR and IPOPT_LIBRARY_DIR environment variables to your Ipopt installation.

License

Copyright 2018 Francesco Ceccon

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.

Changelog

0.5.0 (2020-04-28)

  • Improve TNLP interface for optimal performance

  • Implement Pyomo direct solver interface

0.4.2 (2018-07-05)

  • Documentation update

0.4.1 (2018-07-05)

  • Fix MANIFEST.in

0.4.0 (2018-07-05)

  • Changes to TNLP interface

Project details


Download files

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

Source Distribution

pypopt-0.6.0.tar.gz (205.9 kB view details)

Uploaded Source

File details

Details for the file pypopt-0.6.0.tar.gz.

File metadata

  • Download URL: pypopt-0.6.0.tar.gz
  • Upload date:
  • Size: 205.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.8

File hashes

Hashes for pypopt-0.6.0.tar.gz
Algorithm Hash digest
SHA256 8f199d01422c25dafc945460a1e9cbca4c100423d46216817c7bf3d4dd2f42ce
MD5 1222e79dd5a643e5a2ec3a5a184e4e73
BLAKE2b-256 12094a111d68c509e215f2872e09d6597ef285109eee1a12b1fbdb91647c36c5

See more details on using hashes here.

Supported by

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