The FMI++ Python Interface
==========================

About
-----

The `Functional Mock-up Interface`_ (FMI) specification intentionally provides only the most essential and fundamental functionalities in the form of a C interface.
On the one hand, this increases flexibility in use and portability to virtually any platform.
On the other hand, such a low-level approach implies several prerequisites a simulation tool has to fulfil in order to be able to utilize such an FMI component.

.. _Functional Mock-up Interface: https://fmi-standard.org/

The `FMI++ Python Interface`_ is a Python wrapper for the `FMI++ Library`_, which intends to bridge the gap between the basic fuctionality provided by the FMI specification and the typical requirements of simulation tools.
The FMI++ Library provides high-level functionalities that ease the handling and manipulation of FMUs, such as numerical integration, advanced event-handling or state predictions.
This allows FMUs to be integrated more easily, e.g., into fixed time step or discrete event simulations.

.. _FMI++ Python Interface: https://pypi.python.org/pypi?:action=display&name=fmipp
.. _FMI++ Library: http://fmipp.sourceforge.net

This package provides a stand-alone version of the Python interface for the `FMI++ Library`_.

.. _FMI++ Library: http://fmipp.sourceforge.net

Documentation
-------------

The FMI++ Python Interface provides several classes that allow to manipulate FMUs for ModelExchange and for Co-Simulation.
An overview on how to use it can be found `here`_.

.. _here: http://pythonhosted.org/fmipp/

More extensive background information can be found in the documentation of the `FMI++ Library`_.

.. _FMI++ Library: http://fmipp.sourceforge.net

Installation on Windows
-----------------------

* use ``pip`` to install FMI++ from the PyPI as pre-compiled binary package (Python wheel)::

    $ pip install fmipp --prefer-binary

``--prefer-binary`` should guarantee that binary distributions (wheels) are chosen over source distributions for the installation.
Alternatively ``--only-binary :all:`` can be used instead to force installing from binary distribution.

Installation on Linux
---------------------

* make sure to have installed the following prerequisites(e.g. via ``apt-get``)

    * python (python-dev) (recommended: version 3.5 (or higher))
    * pip (python-pip)
    * swig (swig)
    * SUNDIALS (libsundials-serial-dev)
    * Boost (libboost-all-dev)

* use ``pip`` to install FMI++ from the PyPI via source distribution::

    $ pip install fmipp
