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: https://github.com/fmipp

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

.. _FMI++ Library: https://github.com/fmipp

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: https://fmipp.readthedocs.io/projects/py-fmipp

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

.. _FMI++ Library: https://github.com/fmipp

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

* use ``pip`` to install the FMI++ Python Interface 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 (Ubuntu 20.04)
------------------------------------

* make sure to have installed the following prerequisites(e.g. via ``apt``, see package names in brackets below):

    * python (python3) (recommended: version 3.7 or higher)
    * pip (python3-pip)
    * distutils (python3-setuptools)
    * GCC compiler toolchain (build-essential)
    * swig (swig)
    * SUNDIALS library (libsundials-dev)
    * Boost library (libboost-all-dev)

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

    $ python3 -m pip install fmipp
