Metadata-Version: 2.4
Name: mafw
Version: 1.1.0
Summary: A modular analysis framework
Project-URL: homepage, https://code.europa.eu/kada/mafw/-/blob/main/README.rst
Project-URL: Documentation, https://mafw-e8abfd.pages.code.europa.eu/doc/
Project-URL: Issues, https://code.europa.eu/kada/mafw/-/issues
Project-URL: Source, https://code.europa.eu/kada/mafw
Project-URL: Changelog, https://code.europa.eu/kada/mafw/-/blob/main/CHANGELOG.md
Author-email: BULGHERONI Antonio <Antonio.BULGHERONI@ec.europa.eu>, KRACHLER Michael <Michael.KRACHLER@ec.europa.eu>
License-Expression: EUPL-1.2
License-File: LICENSE.txt
License-File: NOTICE.txt
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.11
Requires-Dist: click>=8.1.8
Requires-Dist: deprecated>=1.2.18
Requires-Dist: peewee>=3.17.9
Requires-Dist: pluggy>=1.5.0
Requires-Dist: rich>=13.9.4
Requires-Dist: tomlkit>=0.13.2
Requires-Dist: typing-extensions>=4.13.0; python_version <= '3.11'
Provides-Extra: all-db
Requires-Dist: psycopg2-binary; extra == 'all-db'
Requires-Dist: psycopg[binary]; extra == 'all-db'
Requires-Dist: pymysql[rsa]; extra == 'all-db'
Provides-Extra: dev
Requires-Dist: auto-changelog; extra == 'dev'
Requires-Dist: matplotlib>=3.10.1; extra == 'dev'
Requires-Dist: pandas[hdf5]>=2.2.3; extra == 'dev'
Requires-Dist: pre-commit; extra == 'dev'
Requires-Dist: psycopg2-binary; extra == 'dev'
Requires-Dist: psycopg[binary]; extra == 'dev'
Requires-Dist: pymysql[rsa]; extra == 'dev'
Requires-Dist: pytest; extra == 'dev'
Requires-Dist: pytest-datadir; extra == 'dev'
Requires-Dist: ruff; extra == 'dev'
Requires-Dist: seaborn>=0.13.2; extra == 'dev'
Requires-Dist: sphinx; extra == 'dev'
Requires-Dist: sphinx-click; extra == 'dev'
Requires-Dist: sphinx-copybutton; extra == 'dev'
Requires-Dist: sphinx-design; extra == 'dev'
Requires-Dist: sphinx-rtd-theme; extra == 'dev'
Requires-Dist: sphinxcontrib-applehelp; extra == 'dev'
Requires-Dist: sphinxcontrib-devhelp; extra == 'dev'
Requires-Dist: sphinxcontrib-external-links; extra == 'dev'
Requires-Dist: sphinxcontrib-htmlhelp; extra == 'dev'
Requires-Dist: sphinxcontrib-jquery; extra == 'dev'
Requires-Dist: sphinxcontrib-jsmath; extra == 'dev'
Requires-Dist: sphinxcontrib-qthelp; extra == 'dev'
Requires-Dist: sphinxcontrib-serializinghtml; extra == 'dev'
Provides-Extra: doc
Requires-Dist: sphinx; extra == 'doc'
Requires-Dist: sphinx-click; extra == 'doc'
Requires-Dist: sphinx-copybutton; extra == 'doc'
Requires-Dist: sphinx-design; extra == 'doc'
Requires-Dist: sphinx-rtd-theme; extra == 'doc'
Requires-Dist: sphinxcontrib-applehelp; extra == 'doc'
Requires-Dist: sphinxcontrib-devhelp; extra == 'doc'
Requires-Dist: sphinxcontrib-external-links; extra == 'doc'
Requires-Dist: sphinxcontrib-htmlhelp; extra == 'doc'
Requires-Dist: sphinxcontrib-jquery; extra == 'doc'
Requires-Dist: sphinxcontrib-jsmath; extra == 'doc'
Requires-Dist: sphinxcontrib-qthelp; extra == 'doc'
Requires-Dist: sphinxcontrib-serializinghtml; extra == 'doc'
Provides-Extra: seaborn
Requires-Dist: matplotlib>=3.10.1; extra == 'seaborn'
Requires-Dist: pandas[hdf5]>=2.2.3; extra == 'seaborn'
Requires-Dist: seaborn>=0.13.2; extra == 'seaborn'
Provides-Extra: test
Requires-Dist: pytest; extra == 'test'
Requires-Dist: pytest-datadir; extra == 'test'
Description-Content-Type: text/x-rst

MAFw: Modular Analysis Framework
================================
A software library for scientists written by scientists!

.. image:: https://code.europa.eu/kada/mafw/badges/main/pipeline.svg
   :target: https://code.europa.eu/kada/mafw/-/pipelines
   :alt: Pipeline Status

.. image:: https://code.europa.eu/kada/mafw/badges/main/coverage.svg 
   :target: https://code.europa.eu/kada/mafw/-/commits/main 
   :alt: coverage report

.. image:: https://code.europa.eu/kada/mafw/-/badges/release.svg 
   :target: https://code.europa.eu/kada/mafw/-/releases 
   :alt: Latest Release

Description
-----------
Modular Analysis Framework is a python tool to run analytical steps in a consistent manner and to generate suitable output graphs and tables.

The idea behind MAFw is to offer data scientists a framework where they will be able to implement complex analytical tasks in a well defined environment where they can focus only on the data analysis without bothering with all other ancillary things, like interfaces to database, job submission and so on.

The core of MAFw is the **Processor**, the class that is responsible to perform the analytical task. The Processor I/O is based on a strong collaboration between a relational database structure and files on disc.
In general, the processor is gathering the relevant input from one or more DB tables (location of input files, processing parameters...), performing its analytical job and update a DB output table with the main outcomes including the location where the output files are saved on disc.

By inheriting from the base Processor class, user-developed processors will come with some *superpowers*, like the ability to exchange data with the database back-end, displaying progress to the user, generating output graphs and so on. The scientist tasks will be limited to the implementation of the analysis code.

Once the data scientists have created their processor libraries, they will be able to chain them one after the other in a very simple way inside a so-called *steering file* and MAFw will take care to run them.

A full documentation of the library API along with a general description is available `here <https://mafw-e8abfd.pages.code.europa.eu/doc>`_.

Installation
------------
MAFw can be installed using pip in a separated virtual environment.

.. code-block:: doscon

    D:\mafw>python -m venv mafw-env
    D:\mafw>cd mafw-env
    D:\mafw\mafw-env>Scripts\activate
    (mafw-env) D:\mafw\mafw-env>pip install mafw

MAFw dependencies will be automatically installed by pip.

Usage
-----

The project's documentation is available `here <https://mafw-e8abfd.pages.code.europa.eu/doc>`_ also as a `PDF file <https://mafw-e8abfd.pages.code.europa.eu/doc/mafw.pdf>`_.

Contributing
------------
Contributions to the software development are very much welcome.

If you want to join the developer efforts, the best way is to clone/fork this repository on your system and start working.

The development team has adopted `hatch <https://hatch.pypa.io/latest/>`_ for basic tasks. So, once you have downloaded the git repository to your system, open a shell there and type:

.. code-block:: doscon

    D:\mafw> hatch env create dev
    D:\mafw> hatch env find dev
    C:\path\to\.venv\mafw\KVhWIDtq\dev.py3.11
    C:\path\to\.venv\mafw\KVhWIDtq\dev.py3.12
    C:\path\to\.venv\mafw\KVhWIDtq\dev.py3.13

to generate the python environments for the development. This command will actually create the whole environment matrix, that means one environment for each supported python version. If you intend to work primarily with one single python version, simply specify it in the create command, for example:

.. code-block:: doscon

    D:\mafw> hatch env create dev.py3.13
    D:\mafw> hatch env find dev.py3.13
    C:\path\to\.venv\mafw\KVhWIDtq\dev.py3.13


hatch will take care of installing MAFw in development mode with all the required dependencies. Use the output of the find command, if you want to add the same virtual environment to your favorite IDE.
Once done, you can spawn a shell in the development environment just be typing:

.. code-block:: doscon

    D:\mafw> hatch shell dev.py3.13
    (dev.py3-13) D:\mafw>

and from there you can simply run mafw and all other scripts.

MAFw uses `pre-commit <https://pre-commit.com/>`_ to assure a high quality code. The pre-commit package will be automatically installed into your environment, but it needs to be initialised before first use. So just enter:

.. code-block:: doscon

    (dev.py3-13) D:\mafw> pre-commit install

And now you are really ready to go with your coding!

Before pushing all your commits to the remote branch, we encourage you to run the pre-push tests to be sure that everything still works as expected. You can do this by typing:

.. code-block:: doscon

    D:\mafw> hatch run dev.py3-13:pre-push


if you are not in an activated development shell, or

.. code-block:: doscon

    (dev.py3-13) D:\mafw> hatch run pre-push

if you are already in the dev environment.

Authors and acknowledgment
---------------------------
Antonio Bulgheroni antonio.bulgheroni@ec.europa.eu

License
-------
This software is licensed under EUPL 1.2

Project status
--------------
Very primitive development. Open for contributions.
