MEDfl 2.0.3__tar.gz → 2.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- medfl-2.0.4/MEDfl/rw/server.py +82 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/rw/strategy.py +21 -3
- medfl-2.0.4/MEDfl/rw/verbose_server.py +21 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl.egg-info/PKG-INFO +1 -1
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl.egg-info/SOURCES.txt +1 -0
- {medfl-2.0.3 → medfl-2.0.4}/PKG-INFO +1 -1
- {medfl-2.0.3 → medfl-2.0.4}/setup.py +1 -1
- medfl-2.0.3/MEDfl/rw/server.py +0 -42
- {medfl-2.0.3 → medfl-2.0.4}/.github/workflows/main.yml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/.gitignore +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/.idea/.gitignore +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/.idea/MEDfl.iml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/.idea/misc.xml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/.idea/modules.xml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/.idea/vcs.xml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/LICENSE +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/__init__.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/client.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/dynamicModal.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/federated_dataset.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/flpipeline.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/model.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/params.yaml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/params_optimiser.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/plot.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/server.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/strategy.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/LearningManager/utils.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/__init__.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/database_connector.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/dataset.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/flsetup.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/net_helper.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/net_manager_queries.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/network.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/NetManager/node.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/__init__.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/rw/__init__.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/rw/client.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/rw/model.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/rw/rwConfig.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/scripts/__init__.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/scripts/base.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl/scripts/create_db.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl.egg-info/dependency_links.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl.egg-info/requires.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/MEDfl.egg-info/top_level.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/README.md +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/README +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/__init__.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/__pycache__/env.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/alembic_logging.ini +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/debug.log +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/env.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/script.py.mako +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/versions/__pycache__/b159ee510a90_initial.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic/versions/b159ee510a90_initial.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/alembic.ini +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/Makefile +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.buildinfo +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.doctrees/Medfl.LearningManager.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.doctrees/Medfl.NetManager.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.doctrees/Medfl.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.doctrees/environment.pickle +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.doctrees/index.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.doctrees/modules.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/.nojekyll +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/Medfl.LearningManager.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/Medfl.NetManager.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/Medfl.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/client.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/flpipeline.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/model.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/plot.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/server.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/strategy.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/utils.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/NetManager/dataset.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/NetManager/flsetup.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/NetManager/net_helper.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/NetManager/network.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/NetManager/node.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/index.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_sources/Medfl.LearningManager.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_sources/Medfl.NetManager.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_sources/Medfl.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_sources/index.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_sources/modules.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/MEDomics.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/basic.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/badge_only.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-bold-italic.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-bold.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-bold.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-normal-italic.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-normal.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/fonts/lato-normal.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/css/theme.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/dark_mode_css/custom.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/dark_mode_css/dark.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/dark_mode_css/general.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/dark_mode_js/default_dark.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/dark_mode_js/default_light.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/dark_mode_js/theme_switcher.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/doctools.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/documentation_options.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/file.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/jquery.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/js/badge_only.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/js/html5shiv-printshiv.min.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/js/html5shiv.min.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/js/theme.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/language_data.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/minus.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/plus.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/pygments.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/searchtools.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/_static/sphinx_highlight.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/genindex.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/index.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/modules.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/objects.inv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/py-modindex.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/search.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/_build/searchindex.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/Documentation.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/Installation.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/Medfl.LearningManager.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/Medfl.NetManager.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/Medfl.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/configuration_file.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/environment.pickle +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/index.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/modules.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/doctrees/tutorials.doctree +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/.buildinfo +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/.nojekyll +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/Documentation.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/Installation.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/Medfl.LearningManager.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/Medfl.NetManager.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/Medfl.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/FTL_comp.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/LearningManager.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/MEDfl_Diagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/NetManager_Diagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/learningresults.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/mysqllogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/phpmyadmin.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/wampLogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_images/xampplogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/client.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/flpipeline.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/model.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/plot.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/server.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/strategy.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/LearningManager/utils.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/NetManager/dataset.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/NetManager/flsetup.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/NetManager/net_helper.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/NetManager/network.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/Medfl/NetManager/node.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_modules/index.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/Documentation.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/Installation.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/Medfl.LearningManager.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/Medfl.NetManager.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/Medfl.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/configuration_file.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/index.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/modules.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_sources/tutorials.rst.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/MEDomics.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/basic.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/badge_only.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/css/theme.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/custom.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/dark_mode_css/custom.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/dark_mode_css/dark.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/dark_mode_css/general.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/dark_mode_js/default_dark.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/dark_mode_js/default_light.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/dark_mode_js/theme_switcher.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/doctools.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/documentation_options.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/file.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/jquery-3.6.0.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/jquery.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/js/badge_only.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/js/html5shiv.min.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/js/theme.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/language_data.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/minus.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/plus.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/pygments.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/searchtools.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/sphinx_highlight.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/underscore-1.13.1.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/_static/underscore.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/configuration_file.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/genindex.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/index.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/modules.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/objects.inv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/py-modindex.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/search.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/searchindex.js +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/build/html/tutorials.html +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/make.bat +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/Documentation.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/Installation.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/Medfl.LearningManager.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/Medfl.NetManager.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/Medfl.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/_static/custom.css +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/conf.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/configuration_file.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/FL_gen.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/FTL_comp.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/FlDatasetDiagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/GDP.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/LDP.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/LearningManager.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/MEDfl_Diagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/Modelinit.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/NetManager_Diagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/NetworkCreation.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/createServer.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/learningresults.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/logos/mysqllogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/logos/phpmyadmin.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/logos/wampLogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/logos/xampplogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/modeltest.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/netMan.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/nodecreation.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/pipeline.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/Images/strategy.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/figures/MEDomics.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/index.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/modules.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/docs/source/tutorials.rst +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/global_params.yaml +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/medfl.egg-info/PKG-INFO +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/medfl.egg-info/SOURCES.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/medfl.egg-info/dependency_links.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/medfl.egg-info/requires.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/medfl.egg-info/top_level.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/.ipynb_checkpoints/trainedModels/binary_classifier.pth +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/.ipynb_checkpoints/trainedModels/eicu_binary_classifier.pth +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/.ipynb_checkpoints/trainedModels/grid_search_classifier.pth +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/.ipynb_checkpoints/trainedModels/new_binary_classifier.pth +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/.ipynb_checkpoints/trainedModels/updated_model.pth +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/First_Tuto.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/FL_gen.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/FTL_comp.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/FlDatasetDiagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/GDP.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/LDP.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/LearningManager.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/MEDfl_Diagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/MEDfl_bachmarking_plan.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/Modelinit.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/NetManager_Diagramm.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/NetworkCreation.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/createServer.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/learningresults.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/logos/mysqllogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/logos/phpmyadmin.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/logos/wampLogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/logos/xampplogo.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/modeltest.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/netMan.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/nodecreation.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/optuna_optim_diag.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/pipeline.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/Images/strategy.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/banchmarking/MEDfl_benchmarks.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/banchmarking/banchmarking_plan.md +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/banchmarking/benchmarks_results.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_1.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_2.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/banchmarking/transfer_learning/TL_activated.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/banchmarking/transfer_learning/TL_dectivated.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/chunk_1.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/chunk_2.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/chunk_3.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/config_1/part_1.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/config_1/part_2.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/config_1/part_3.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/config_1/test_1.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/config_1/test_2.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/eicu_sapsii_data.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/eicu_sapsii_data_test.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/eicu_sapsii_data_test_1.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/masterDataSet/Mimic_ouael.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/masterDataSet/Mimic_train.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/masterDataSet/eICU.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/nodesData/output_1.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/nodesData/output_2.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/nodesData/output_3.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/nodesData/output_4.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/nodesData/output_5.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/test_1.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/test_2.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/test_3.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/data/validation/Mimic_validation.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/eicu_test.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/eicu_test_1.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/eicu_test_2.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/eicu_test_3.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/sapsii_score_knnimputed_eicu.csv +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/1_DB.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/2_NetManager.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/3_TransferLearning copy.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/3_TransferLearning.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/4_LearningManager.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/5_LearningResults.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/6_ModelChoice.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/7_ParamsOptimiser.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/8_complete_tutorial.ipynb +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/newplot2.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/notebooks/tutorial/newplot4.png +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/requirements.txt +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/setup.cfg +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/setup_mysql.sh +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/__init__.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/__pycache__/test_dataset.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/__pycache__/test_federated_dataset.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/__pycache__/test_flpipeline.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/__pycache__/test_flsetup.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/__pycache__/test_network.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/__pycache__/test_node.cpython-38.pyc +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/test_dataset.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/test_federated_dataset.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/test_flpipeline.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/test_flsetup.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/test_network.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/tests/test_node.py +0 -0
- {medfl-2.0.3 → medfl-2.0.4}/workflows/migration.yml +0 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
import flwr as fl
|
2
|
+
from flwr.server.strategy import FedAvg
|
3
|
+
from flwr.server.server import ServerConfig
|
4
|
+
from typing import Optional, Any, List, Tuple, Dict, Callable
|
5
|
+
from MEDfl.rw.strategy import Strategy
|
6
|
+
from MEDfl.rw.verbose_server import VerboseServer
|
7
|
+
import time
|
8
|
+
from flwr.server.client_manager import ClientManager
|
9
|
+
from flwr.server.client_proxy import ClientProxy
|
10
|
+
from flwr.common import GetPropertiesIns
|
11
|
+
import asyncio
|
12
|
+
|
13
|
+
class FederatedServer:
|
14
|
+
"""
|
15
|
+
Wrapper for launching a Flower federated-learning server,
|
16
|
+
using a Strategy instance as its strategy attribute.
|
17
|
+
Now with client connection tracking.
|
18
|
+
"""
|
19
|
+
def __init__(
|
20
|
+
self,
|
21
|
+
host: str = "0.0.0.0",
|
22
|
+
port: int = 8080,
|
23
|
+
num_rounds: int = 3,
|
24
|
+
strategy: Optional[Strategy] = None,
|
25
|
+
certificates: Optional[Any] = None,
|
26
|
+
):
|
27
|
+
self.server_address = f"{host}:{port}"
|
28
|
+
self.server_config = ServerConfig(num_rounds=num_rounds)
|
29
|
+
# If no custom strategy provided, use default
|
30
|
+
self.strategy_wrapper = strategy or Strategy()
|
31
|
+
# Build the actual Flower strategy object
|
32
|
+
self.strategy_wrapper.create_strategy()
|
33
|
+
if self.strategy_wrapper.strategy_object is None:
|
34
|
+
raise ValueError("Strategy object not initialized. Call create_strategy() first.")
|
35
|
+
self.strategy = self.strategy_wrapper.strategy_object
|
36
|
+
self.certificates = certificates
|
37
|
+
self.connected_clients = []
|
38
|
+
|
39
|
+
def start(self) -> None:
|
40
|
+
"""
|
41
|
+
Start the Flower server with the configured strategy.
|
42
|
+
Now tracks and logs client connections before starting.
|
43
|
+
"""
|
44
|
+
print(f"Using strategy: {self.strategy_wrapper.name}")
|
45
|
+
print(f"Starting Flower server on {self.server_address} with strategy {self.strategy_wrapper.name}")
|
46
|
+
|
47
|
+
# Create a custom client manager to track connections
|
48
|
+
client_manager = TrackingClientManager(self)
|
49
|
+
|
50
|
+
fl.server.start_server(
|
51
|
+
server_address=self.server_address,
|
52
|
+
config=self.server_config,
|
53
|
+
strategy=self.strategy,
|
54
|
+
certificates=self.certificates,
|
55
|
+
client_manager=client_manager,
|
56
|
+
)
|
57
|
+
|
58
|
+
class TrackingClientManager(fl.server.client_manager.SimpleClientManager):
|
59
|
+
"""
|
60
|
+
Custom client manager that tracks and logs client connections.
|
61
|
+
"""
|
62
|
+
def __init__(self, server: FederatedServer):
|
63
|
+
super().__init__()
|
64
|
+
self.server = server
|
65
|
+
self.client_properties = {} # Store client properties
|
66
|
+
|
67
|
+
def register(self, client: ClientProxy) -> bool:
|
68
|
+
success = super().register(client)
|
69
|
+
if success and client.cid not in self.server.connected_clients:
|
70
|
+
# Run the async fetch synchronously
|
71
|
+
asyncio.run(self._fetch_and_log_hostname(client))
|
72
|
+
return success
|
73
|
+
|
74
|
+
async def _fetch_and_log_hostname(self, client: ClientProxy):
|
75
|
+
# try:
|
76
|
+
# ins = GetPropertiesIns(config={})
|
77
|
+
# props = await client.get_properties(ins=ins, timeout=10.0, group_id=0)
|
78
|
+
# hostname = props.properties.get("hostname", "unknown")
|
79
|
+
# except Exception as e:
|
80
|
+
# hostname = f"Error: {e}"
|
81
|
+
print(f"✅ Client connected - CID: {client.cid}")
|
82
|
+
self.server.connected_clients.append(client.cid)
|
@@ -105,18 +105,36 @@ class Strategy:
|
|
105
105
|
# 2) Wrap aggregate_fit to log
|
106
106
|
original_agg_fit = strat.aggregate_fit
|
107
107
|
def logged_aggregate_fit(rnd, results, failures):
|
108
|
+
# Print individual client fit metrics
|
109
|
+
print(f"\n[Server] 🔄 Round {rnd} - Client Training Metrics:")
|
110
|
+
for i, (client_id, fit_res) in enumerate(results):
|
111
|
+
print(f" Client {client_id.cid}: {fit_res.metrics}")
|
112
|
+
|
113
|
+
# Call original aggregation function
|
108
114
|
aggregated_params, metrics = original_agg_fit(rnd, results, failures)
|
109
|
-
|
115
|
+
|
116
|
+
# Print aggregated metrics
|
117
|
+
print(f"[Server] ✅ Round {rnd} - Aggregated Training Metrics: {metrics}\n")
|
110
118
|
return aggregated_params, metrics
|
119
|
+
|
111
120
|
strat.aggregate_fit = logged_aggregate_fit # type: ignore
|
112
121
|
|
113
122
|
# 3) Wrap aggregate_evaluate to log
|
114
123
|
original_agg_eval = strat.aggregate_evaluate
|
115
124
|
def logged_aggregate_evaluate(rnd, results, failures):
|
125
|
+
# Print individual client evaluation metrics
|
126
|
+
print(f"\n[Server] 📊 Round {rnd} - Client Evaluation Metrics:")
|
127
|
+
for i, (client_id, eval_res) in enumerate(results):
|
128
|
+
print(f" Client {client_id.cid}: {eval_res.metrics}")
|
129
|
+
|
130
|
+
# Call original aggregation function
|
116
131
|
loss, metrics = original_agg_eval(rnd, results, failures)
|
117
|
-
|
118
|
-
|
132
|
+
|
133
|
+
# Print aggregated metrics
|
134
|
+
print(f"[Server] ✅ Round {rnd} - Aggregated Evaluation Metrics:")
|
135
|
+
print(f" Loss: {loss}, Metrics: {metrics}\n")
|
119
136
|
return loss, metrics
|
137
|
+
|
120
138
|
strat.aggregate_evaluate = logged_aggregate_evaluate # type: ignore
|
121
139
|
|
122
140
|
self.strategy_object = strat
|
@@ -0,0 +1,21 @@
|
|
1
|
+
from flwr.server import Server
|
2
|
+
from flwr.server.client_manager import SimpleClientManager
|
3
|
+
from flwr.server.client_proxy import ClientProxy
|
4
|
+
from flwr.common.logger import log
|
5
|
+
from logging import INFO
|
6
|
+
|
7
|
+
class VerboseServer(Server):
|
8
|
+
def __init__(self, strategy):
|
9
|
+
super().__init__(client_manager=SimpleClientManager(), strategy=strategy)
|
10
|
+
|
11
|
+
def client_manager_fn(self):
|
12
|
+
return self.client_manager
|
13
|
+
|
14
|
+
def on_client_connect(self, client: ClientProxy):
|
15
|
+
super().on_client_connect(client)
|
16
|
+
log(INFO, f"[Server] ➕ Client connected: {client.cid}")
|
17
|
+
log(INFO, f"[Server] Currently connected: {len(self.client_manager.all().values())} clients")
|
18
|
+
|
19
|
+
def on_client_disconnect(self, client: ClientProxy):
|
20
|
+
super().on_client_disconnect(client)
|
21
|
+
log(INFO, f"[Server] ❌ Client disconnected: {client.cid}")
|
@@ -14,7 +14,7 @@ with open('requirements.txt') as f:
|
|
14
14
|
|
15
15
|
setup(
|
16
16
|
name="MEDfl",
|
17
|
-
version="2.0.
|
17
|
+
version="2.0.4",
|
18
18
|
author="MEDomics consortium",
|
19
19
|
author_email="medomics.info@gmail.com",
|
20
20
|
description="Python Open-source package for simulating federated learning and differential privacy",
|
medfl-2.0.3/MEDfl/rw/server.py
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
|
2
|
-
import flwr as fl
|
3
|
-
from flwr.server.strategy import FedAvg
|
4
|
-
from flwr.server.server import ServerConfig
|
5
|
-
from typing import Optional, Any
|
6
|
-
from MEDfl.rw.strategy import Strategy
|
7
|
-
|
8
|
-
class FederatedServer:
|
9
|
-
"""
|
10
|
-
Wrapper for launching a Flower federated-learning server,
|
11
|
-
using a Strategy instance as its strategy attribute.
|
12
|
-
"""
|
13
|
-
def __init__(
|
14
|
-
self,
|
15
|
-
host: str = "0.0.0.0",
|
16
|
-
port: int = 8080,
|
17
|
-
num_rounds: int = 3,
|
18
|
-
strategy: Optional[Strategy] = None,
|
19
|
-
certificates: Optional[Any] = None,
|
20
|
-
):
|
21
|
-
self.server_address = f"{host}:{port}"
|
22
|
-
self.server_config = ServerConfig(num_rounds=num_rounds)
|
23
|
-
# If no custom strategy provided, use default
|
24
|
-
self.strategy_wrapper = strategy or Strategy()
|
25
|
-
# Build the actual Flower strategy object
|
26
|
-
self.strategy_wrapper.create_strategy()
|
27
|
-
if self.strategy_wrapper.strategy_object is None:
|
28
|
-
raise ValueError("Strategy object not initialized. Call create_strategy() first.")
|
29
|
-
self.strategy = self.strategy_wrapper.strategy_object
|
30
|
-
self.certificates = certificates
|
31
|
-
|
32
|
-
def start(self) -> None:
|
33
|
-
"""
|
34
|
-
Start the Flower server with the configured strategy.
|
35
|
-
"""
|
36
|
-
print(f"Starting Flower server on {self.server_address} with strategy {self.strategy_wrapper.name}")
|
37
|
-
fl.server.start_server(
|
38
|
-
server_address=self.server_address,
|
39
|
-
config=self.server_config,
|
40
|
-
strategy=self.strategy,
|
41
|
-
certificates=self.certificates,
|
42
|
-
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{medfl-2.0.3 → medfl-2.0.4}/alembic/versions/__pycache__/b159ee510a90_initial.cpython-38.pyc
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{medfl-2.0.3 → medfl-2.0.4}/docs/_build/_modules/Medfl/LearningManager/federated_dataset.html
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|