MEDfl 2.0.5.dev1__tar.gz → 2.0.5.dev2__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.5.dev1 → medfl-2.0.5.dev2}/MEDfl/rw/client.py +26 -117
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/rw/strategy.py +127 -19
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl.egg-info/PKG-INFO +1 -1
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/PKG-INFO +1 -1
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/eicu_sapsii_data.csv +1 -1
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/eicu_test_1.csv +1 -1
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/setup.py +1 -1
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.github/workflows/main.yml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.gitignore +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.idea/.gitignore +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.idea/MEDfl.iml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.idea/misc.xml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.idea/modules.xml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/.idea/vcs.xml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/LICENSE +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/__init__.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/client.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/dynamicModal.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/federated_dataset.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/flpipeline.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/model.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/params.yaml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/params_optimiser.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/plot.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/server.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/strategy.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/LearningManager/utils.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/__init__.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/database_connector.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/dataset.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/flsetup.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/net_helper.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/net_manager_queries.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/network.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/NetManager/node.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/__init__.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/rw/__init__.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/rw/model.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/rw/server.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/scripts/__init__.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/scripts/base.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl/scripts/create_db.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl.egg-info/SOURCES.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl.egg-info/dependency_links.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl.egg-info/requires.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/MEDfl.egg-info/top_level.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/README.md +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/README +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/__init__.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/__pycache__/env.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/alembic_logging.ini +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/debug.log +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/env.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/script.py.mako +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/versions/__pycache__/b159ee510a90_initial.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic/versions/b159ee510a90_initial.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/alembic.ini +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/Makefile +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.buildinfo +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.doctrees/Medfl.LearningManager.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.doctrees/Medfl.NetManager.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.doctrees/Medfl.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.doctrees/environment.pickle +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.doctrees/index.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.doctrees/modules.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/.nojekyll +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/Medfl.LearningManager.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/Medfl.NetManager.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/Medfl.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/client.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/flpipeline.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/model.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/plot.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/server.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/strategy.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/LearningManager/utils.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/NetManager/dataset.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/NetManager/flsetup.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/NetManager/net_helper.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/NetManager/network.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/Medfl/NetManager/node.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_modules/index.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_sources/Medfl.LearningManager.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_sources/Medfl.NetManager.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_sources/Medfl.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_sources/index.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_sources/modules.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/MEDomics.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/basic.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/badge_only.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-bold-italic.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-bold.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-bold.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-normal-italic.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-normal.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/fonts/lato-normal.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/css/theme.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/dark_mode_css/custom.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/dark_mode_css/dark.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/dark_mode_css/general.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/dark_mode_js/default_dark.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/dark_mode_js/default_light.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/dark_mode_js/theme_switcher.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/doctools.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/documentation_options.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/file.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/jquery.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/js/badge_only.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/js/html5shiv-printshiv.min.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/js/html5shiv.min.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/js/theme.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/language_data.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/minus.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/plus.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/pygments.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/searchtools.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/_static/sphinx_highlight.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/genindex.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/index.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/modules.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/objects.inv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/py-modindex.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/search.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/_build/searchindex.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/Documentation.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/Installation.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/Medfl.LearningManager.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/Medfl.NetManager.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/Medfl.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/configuration_file.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/environment.pickle +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/index.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/modules.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/doctrees/tutorials.doctree +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/.buildinfo +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/.nojekyll +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/Documentation.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/Installation.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/Medfl.LearningManager.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/Medfl.NetManager.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/Medfl.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/FTL_comp.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/LearningManager.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/MEDfl_Diagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/NetManager_Diagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/learningresults.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/mysqllogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/phpmyadmin.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/wampLogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_images/xampplogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_modules/index.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/Documentation.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/Installation.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/Medfl.LearningManager.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/Medfl.NetManager.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/Medfl.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/configuration_file.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/index.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/modules.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_sources/tutorials.rst.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/MEDomics.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/basic.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/badge_only.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/css/theme.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/custom.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/dark_mode_css/custom.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/dark_mode_css/dark.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/dark_mode_css/general.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/dark_mode_js/default_dark.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/dark_mode_js/default_light.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/dark_mode_js/theme_switcher.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/doctools.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/documentation_options.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/file.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/jquery-3.6.0.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/jquery.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/js/badge_only.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/js/html5shiv.min.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/js/theme.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/language_data.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/minus.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/plus.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/pygments.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/searchtools.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/sphinx_highlight.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/underscore-1.13.1.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/_static/underscore.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/configuration_file.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/genindex.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/index.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/modules.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/objects.inv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/py-modindex.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/search.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/searchindex.js +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/build/html/tutorials.html +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/make.bat +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/Documentation.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/Installation.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/Medfl.LearningManager.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/Medfl.NetManager.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/Medfl.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/_static/custom.css +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/conf.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/configuration_file.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/FL_gen.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/FTL_comp.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/FlDatasetDiagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/GDP.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/LDP.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/LearningManager.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/MEDfl_Diagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/Modelinit.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/NetManager_Diagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/NetworkCreation.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/createServer.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/learningresults.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/logos/mysqllogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/logos/phpmyadmin.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/logos/wampLogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/logos/xampplogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/modeltest.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/netMan.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/nodecreation.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/pipeline.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/Images/strategy.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/figures/MEDomics.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/index.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/modules.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/docs/source/tutorials.rst +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/global_params.yaml +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/medfl.egg-info/PKG-INFO +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/medfl.egg-info/SOURCES.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/medfl.egg-info/dependency_links.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/medfl.egg-info/requires.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/medfl.egg-info/top_level.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/.ipynb_checkpoints/trainedModels/binary_classifier.pth +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/.ipynb_checkpoints/trainedModels/eicu_binary_classifier.pth +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/.ipynb_checkpoints/trainedModels/grid_search_classifier.pth +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/.ipynb_checkpoints/trainedModels/new_binary_classifier.pth +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/.ipynb_checkpoints/trainedModels/updated_model.pth +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/First_Tuto.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/FL_gen.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/FTL_comp.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/FlDatasetDiagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/GDP.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/LDP.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/LearningManager.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/MEDfl_Diagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/MEDfl_bachmarking_plan.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/Modelinit.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/NetManager_Diagramm.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/NetworkCreation.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/createServer.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/learningresults.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/logos/mysqllogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/logos/phpmyadmin.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/logos/wampLogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/logos/xampplogo.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/modeltest.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/netMan.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/nodecreation.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/optuna_optim_diag.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/pipeline.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/Images/strategy.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/banchmarking/MEDfl_benchmarks.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/banchmarking/banchmarking_plan.md +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/banchmarking/benchmarks_results.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_1.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_2.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/banchmarking/transfer_learning/TL_activated.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/banchmarking/transfer_learning/TL_dectivated.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/chunk_1.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/chunk_2.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/chunk_3.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/config_1/part_1.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/config_1/part_2.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/config_1/part_3.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/config_1/test_1.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/config_1/test_2.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/eicu_sapsii_data_test.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/eicu_sapsii_data_test_1.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/masterDataSet/Mimic_ouael.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/masterDataSet/Mimic_train.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/masterDataSet/eICU.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/nodesData/output_1.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/nodesData/output_2.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/nodesData/output_3.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/nodesData/output_4.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/nodesData/output_5.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/test_1.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/test_2.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/test_3.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/data/validation/Mimic_validation.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/eicu_test.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/eicu_test_2.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/eicu_test_3.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/sapsii_score_knnimputed_eicu.csv +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/1_DB.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/2_NetManager.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/3_TransferLearning copy.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/3_TransferLearning.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/4_LearningManager.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/5_LearningResults.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/6_ModelChoice.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/7_ParamsOptimiser.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/8_complete_tutorial.ipynb +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/newplot2.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/notebooks/tutorial/newplot4.png +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/requirements.txt +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/setup.cfg +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/setup_mysql.sh +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/__init__.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/__pycache__/test_dataset.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/__pycache__/test_federated_dataset.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/__pycache__/test_flpipeline.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/__pycache__/test_flsetup.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/__pycache__/test_network.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/__pycache__/test_node.cpython-38.pyc +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/test_dataset.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/test_federated_dataset.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/test_flpipeline.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/test_flsetup.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/test_network.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/tests/test_node.py +0 -0
- {medfl-2.0.5.dev1 → medfl-2.0.5.dev2}/workflows/migration.yml +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# client.py
|
|
1
|
+
# File: client.py
|
|
2
2
|
|
|
3
3
|
import argparse
|
|
4
4
|
import pandas as pd
|
|
@@ -112,6 +112,7 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
112
112
|
Build model and (train, val, test) loaders once, using:
|
|
113
113
|
- Server-enforced schema: config['features'] (comma-separated), config['target']
|
|
114
114
|
- Split fractions: client overrides win; else use server's val_fraction/test_fraction
|
|
115
|
+
- NEW: if config['test_ids'] is set (per-client from strategy), use ID-based split
|
|
115
116
|
"""
|
|
116
117
|
# ---------- schema from server (enforced if provided)
|
|
117
118
|
srv_features = (config.get("features") or "").strip()
|
|
@@ -142,6 +143,21 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
142
143
|
if not (0.0 <= val_frac < 1.0):
|
|
143
144
|
raise ValueError(f"Invalid val_frac: {val_frac} (must be 0 <= val_frac < 1)")
|
|
144
145
|
|
|
146
|
+
# ---------- NEW: adopt test_ids / id_col from server config if provided
|
|
147
|
+
if (not self.test_ids or not self.test_ids.strip()) and config.get("test_ids"):
|
|
148
|
+
|
|
149
|
+
# strategy (per_client) can inject test_ids as list or CSV; normalize to CSV string
|
|
150
|
+
ti = config.get("test_ids")
|
|
151
|
+
if isinstance(ti, (list, tuple, set)):
|
|
152
|
+
self.test_ids = ",".join(str(x) for x in ti)
|
|
153
|
+
else:
|
|
154
|
+
self.test_ids = str(ti)
|
|
155
|
+
|
|
156
|
+
print(f"[Client] Using server-provided test_ids: {self.test_ids}")
|
|
157
|
+
|
|
158
|
+
if (not self.id_col) and config.get("id_col"):
|
|
159
|
+
self.id_col = str(config.get("id_col"))
|
|
160
|
+
|
|
145
161
|
# ---------- extract arrays with the enforced schema
|
|
146
162
|
X_all = self._df[feat_cols].values
|
|
147
163
|
y_all = self._df[target_col].values
|
|
@@ -151,12 +167,18 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
151
167
|
self.y_tensor = torch.tensor(y_all, dtype=torch.float32)
|
|
152
168
|
|
|
153
169
|
# ---------- split
|
|
154
|
-
if self.test_ids and self.test_ids.strip(): # ID-based mode
|
|
170
|
+
if self.test_ids and self.test_ids.strip(): # ID-based mode (unchanged behavior, now also supports server-provided IDs)
|
|
155
171
|
print("[Client] Using ID-based test selection")
|
|
156
172
|
test_ids_list = [i.strip() for i in self.test_ids.split(',') if i.strip()]
|
|
157
173
|
|
|
158
174
|
if self.id_col and self.id_col in self._df.columns:
|
|
159
175
|
id_series = self._df[self.id_col]
|
|
176
|
+
# Align types between id_series and test_ids_list
|
|
177
|
+
if np.issubdtype(id_series.dtype, np.number):
|
|
178
|
+
test_ids_list = [int(i) for i in test_ids_list]
|
|
179
|
+
else:
|
|
180
|
+
test_ids_list = [str(i) for i in test_ids_list]
|
|
181
|
+
|
|
160
182
|
else:
|
|
161
183
|
print(f"[Client] Falling back to line numbers (index) as IDs since id_col='{self.id_col}' is invalid or not provided")
|
|
162
184
|
id_series = self._df.index
|
|
@@ -204,7 +226,7 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
204
226
|
# ---------- build loaders
|
|
205
227
|
batch_size = self.dp_config.batch_size if self.dp_config else 32
|
|
206
228
|
self.train_loader = self._mk_loader(X_train, y_train, batch_size, shuffle=True)
|
|
207
|
-
self.val_loader = self._mk_loader(X_val, y_val, batch_size, shuffle=False) if len(y_val) else None
|
|
229
|
+
self.val_loader = self._mk_loader(X_val, y_val, batch_size= batch_size, shuffle=False) if len(y_val) else None
|
|
208
230
|
self.test_loader = self._mk_loader(X_test, y_test, batch_size, shuffle=False)
|
|
209
231
|
|
|
210
232
|
# ---------- model/optimizer
|
|
@@ -242,17 +264,13 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
242
264
|
self._initialized = True
|
|
243
265
|
print(f"[Client] Initialized with features={feat_cols}, target={target_col}, val={val_frac}, test={self.effective_test_frac}")
|
|
244
266
|
|
|
245
|
-
# ---------- FL API
|
|
267
|
+
# ---------- FL API (unchanged behavior) ----------
|
|
246
268
|
|
|
247
269
|
def get_parameters(self, config):
|
|
248
|
-
# Ensure the model/dataloaders are built before the very first call
|
|
249
270
|
if not self._initialized:
|
|
250
|
-
# Use server config if provided; otherwise fall back to last-col target/all features
|
|
251
271
|
try:
|
|
252
272
|
self._lazy_init_from_server_config(config if isinstance(config, dict) else {})
|
|
253
273
|
except Exception as e:
|
|
254
|
-
# As a last resort, initialize with local defaults so Flower can proceed
|
|
255
|
-
# (server-enforced schema will still be used on first fit if present)
|
|
256
274
|
if not self._initialized:
|
|
257
275
|
self._lazy_init_from_server_config({})
|
|
258
276
|
return [val.cpu().numpy() for val in self.model.state_dict().values()]
|
|
@@ -263,7 +281,6 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
263
281
|
self.model.load_state_dict(state_dict, strict=True)
|
|
264
282
|
|
|
265
283
|
def fit(self, parameters, config):
|
|
266
|
-
# Lazy init when we see the server config for the first time
|
|
267
284
|
if not self._initialized:
|
|
268
285
|
self._lazy_init_from_server_config(config)
|
|
269
286
|
|
|
@@ -286,7 +303,6 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
286
303
|
|
|
287
304
|
avg_loss = total_loss / (len(self.train_loader.dataset) * local_epochs)
|
|
288
305
|
|
|
289
|
-
# Compute metrics on FULL data (keeps your previous behavior)
|
|
290
306
|
with torch.no_grad():
|
|
291
307
|
logits = self.model(self.X_tensor).squeeze()
|
|
292
308
|
probs = torch.sigmoid(logits).cpu().numpy()
|
|
@@ -306,7 +322,6 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
306
322
|
"train_loss": avg_loss,
|
|
307
323
|
"train_accuracy": acc,
|
|
308
324
|
"train_auc": auc,
|
|
309
|
-
# Helpful for debugging/visibility
|
|
310
325
|
"features": ",".join(self.effective_features),
|
|
311
326
|
"target": self.effective_target,
|
|
312
327
|
"val_fraction": self.effective_val_frac,
|
|
@@ -316,14 +331,12 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
316
331
|
return self.get_parameters(config), len(self.train_loader.dataset), metrics
|
|
317
332
|
|
|
318
333
|
def evaluate(self, parameters, config):
|
|
319
|
-
# Ensure initialized (in case server calls evaluate before fit on round 1)
|
|
320
334
|
if not self._initialized:
|
|
321
335
|
self._lazy_init_from_server_config(config)
|
|
322
336
|
|
|
323
337
|
self.set_parameters(parameters)
|
|
324
338
|
self.model.eval()
|
|
325
339
|
|
|
326
|
-
# Evaluate on TEST split (not the training loader)
|
|
327
340
|
total_loss = 0.0
|
|
328
341
|
all_probs, all_true = [], []
|
|
329
342
|
with torch.no_grad():
|
|
@@ -353,15 +366,9 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
353
366
|
return float(avg_loss), len(self.test_loader.dataset), metrics
|
|
354
367
|
|
|
355
368
|
def get_properties(self, config):
|
|
356
|
-
"""
|
|
357
|
-
Return dataset statistics before training starts.
|
|
358
|
-
Only scalar values allowed (int, float, str, bool, bytes).
|
|
359
|
-
Note: before first fit, this uses fallback (last column is target).
|
|
360
|
-
"""
|
|
361
369
|
hostname = socket.gethostname()
|
|
362
370
|
os_type = platform.system()
|
|
363
371
|
|
|
364
|
-
# If already initialized, report the effective (server-enforced) view
|
|
365
372
|
if self._initialized:
|
|
366
373
|
num_samples = int(self.X_tensor.shape[0])
|
|
367
374
|
num_features = int(self.X_tensor.shape[1])
|
|
@@ -408,105 +415,7 @@ class FlowerClient(fl.client.NumPyClient):
|
|
|
408
415
|
}
|
|
409
416
|
|
|
410
417
|
def start(self) -> None:
|
|
411
|
-
"""
|
|
412
|
-
Start this client against its configured server_address.
|
|
413
|
-
Blocks until the server shuts down.
|
|
414
|
-
"""
|
|
415
418
|
fl.client.start_numpy_client(
|
|
416
419
|
server_address=self.server_address,
|
|
417
420
|
client=self,
|
|
418
421
|
)
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
if __name__ == "__main__":
|
|
422
|
-
parser = argparse.ArgumentParser(
|
|
423
|
-
description="Flower client with DP support and metrics"
|
|
424
|
-
)
|
|
425
|
-
parser.add_argument(
|
|
426
|
-
"--server_address",
|
|
427
|
-
type=str,
|
|
428
|
-
required=True,
|
|
429
|
-
help="Adresse du serveur Flower (ex : 127.0.0.1:8080)",
|
|
430
|
-
)
|
|
431
|
-
parser.add_argument(
|
|
432
|
-
"--data_path",
|
|
433
|
-
type=str,
|
|
434
|
-
default="data/data.csv",
|
|
435
|
-
help="Chemin vers les données CSV",
|
|
436
|
-
)
|
|
437
|
-
parser.add_argument(
|
|
438
|
-
"--dp",
|
|
439
|
-
action="store_true",
|
|
440
|
-
help="Activer la confidentialité différentielle",
|
|
441
|
-
)
|
|
442
|
-
parser.add_argument(
|
|
443
|
-
"--noise_multiplier",
|
|
444
|
-
type=float,
|
|
445
|
-
default=1.0,
|
|
446
|
-
help="Noise multiplier pour DP",
|
|
447
|
-
)
|
|
448
|
-
parser.add_argument(
|
|
449
|
-
"--max_grad_norm",
|
|
450
|
-
type=float,
|
|
451
|
-
default=1.0,
|
|
452
|
-
help="Norme max pour le clipping",
|
|
453
|
-
)
|
|
454
|
-
parser.add_argument(
|
|
455
|
-
"--batch_size",
|
|
456
|
-
type=int,
|
|
457
|
-
default=32,
|
|
458
|
-
help="Taille du batch",
|
|
459
|
-
)
|
|
460
|
-
# NEW — client-local optional overrides (keeps all old args intact)
|
|
461
|
-
parser.add_argument(
|
|
462
|
-
"--val_frac",
|
|
463
|
-
type=float,
|
|
464
|
-
default=None,
|
|
465
|
-
help="Fraction de validation (priorité au client si fourni)",
|
|
466
|
-
)
|
|
467
|
-
parser.add_argument(
|
|
468
|
-
"--test_frac",
|
|
469
|
-
type=float,
|
|
470
|
-
default=None,
|
|
471
|
-
help="Fraction de test (priorité au client si fourni; ignoré si --test_ids fourni)",
|
|
472
|
-
)
|
|
473
|
-
parser.add_argument(
|
|
474
|
-
"--id_col",
|
|
475
|
-
type=str,
|
|
476
|
-
default=None,
|
|
477
|
-
help="Colonne des IDs pour la sélection du test (optionnel; fallback aux numéros de ligne si absent)",
|
|
478
|
-
)
|
|
479
|
-
parser.add_argument(
|
|
480
|
-
"--test_ids",
|
|
481
|
-
type=str,
|
|
482
|
-
default=None,
|
|
483
|
-
help="Liste d'IDs pour le test, séparés par virgule (ex: '1,3,5'; active le mode ID-based si fourni)",
|
|
484
|
-
)
|
|
485
|
-
parser.add_argument(
|
|
486
|
-
"--seed",
|
|
487
|
-
type=int,
|
|
488
|
-
default=42,
|
|
489
|
-
help="Graine aléatoire pour les splits",
|
|
490
|
-
)
|
|
491
|
-
|
|
492
|
-
args = parser.parse_args()
|
|
493
|
-
|
|
494
|
-
dp_config = None
|
|
495
|
-
if args.dp:
|
|
496
|
-
dp_config = DPConfig(
|
|
497
|
-
noise_multiplier=args.noise_multiplier,
|
|
498
|
-
max_grad_norm=args.max_grad_norm,
|
|
499
|
-
batch_size=args.batch_size,
|
|
500
|
-
)
|
|
501
|
-
|
|
502
|
-
client = FlowerClient(
|
|
503
|
-
server_address=args.server_address,
|
|
504
|
-
data_path=args.data_path,
|
|
505
|
-
dp_config=dp_config,
|
|
506
|
-
val_frac=args.val_frac, # optional, overrides server if set
|
|
507
|
-
test_frac=args.test_frac, # optional, overrides server if set
|
|
508
|
-
id_col=args.id_col, # new
|
|
509
|
-
test_ids=args.test_ids, # new
|
|
510
|
-
seed=args.seed,
|
|
511
|
-
)
|
|
512
|
-
client.start()
|
|
@@ -43,6 +43,30 @@ class Strategy:
|
|
|
43
43
|
- Per-client & aggregated metric logging
|
|
44
44
|
- Synchronous get_properties() inspection in configure_fit()
|
|
45
45
|
- Saving global parameters every saveOnRounds to savingPath
|
|
46
|
+
|
|
47
|
+
Extended:
|
|
48
|
+
- split_mode:
|
|
49
|
+
* "global": use global val_fraction/test_fraction for all clients
|
|
50
|
+
* "per_client": use client_fractions[hostname] if present
|
|
51
|
+
- client_fractions:
|
|
52
|
+
{
|
|
53
|
+
"HOSTNAME_1": {
|
|
54
|
+
"val_fraction": float (optional),
|
|
55
|
+
"test_fraction": float (optional),
|
|
56
|
+
"test_ids": [..] or "id1,id2" (optional)
|
|
57
|
+
},
|
|
58
|
+
...
|
|
59
|
+
}
|
|
60
|
+
- In per_client mode:
|
|
61
|
+
* if test_ids is present for a client:
|
|
62
|
+
-> send test_ids
|
|
63
|
+
-> do NOT use that client's test_fraction
|
|
64
|
+
* otherwise:
|
|
65
|
+
-> use that client's val_fraction/test_fraction if provided,
|
|
66
|
+
else fall back to global val_fraction/test_fraction
|
|
67
|
+
- client id in this mapping = hostname from client.get_properties()
|
|
68
|
+
- id_col:
|
|
69
|
+
* column name used on clients to match test_ids (default "id")
|
|
46
70
|
"""
|
|
47
71
|
|
|
48
72
|
def __init__(
|
|
@@ -68,6 +92,11 @@ class Strategy:
|
|
|
68
92
|
target: str = "",
|
|
69
93
|
val_fraction: float = 0.10,
|
|
70
94
|
test_fraction: float = 0.10,
|
|
95
|
+
# NEW: splitting control (added at the end to not break existing calls)
|
|
96
|
+
split_mode: str = "global", # "global" or "per_client"
|
|
97
|
+
client_fractions: Optional[Dict[str, Dict[str, Any]]] = None,
|
|
98
|
+
# NEW: id column for test_ids mapping
|
|
99
|
+
id_col: str = "id",
|
|
71
100
|
) -> None:
|
|
72
101
|
self.name = name
|
|
73
102
|
self.fraction_fit = fraction_fit
|
|
@@ -94,41 +123,48 @@ class Strategy:
|
|
|
94
123
|
self._val_fraction = val_fraction
|
|
95
124
|
self._test_fraction = test_fraction
|
|
96
125
|
|
|
126
|
+
# NEW
|
|
127
|
+
self.split_mode = split_mode
|
|
128
|
+
self.client_fractions = client_fractions or {}
|
|
129
|
+
self.id_col = id_col
|
|
130
|
+
|
|
97
131
|
self.strategy_object: Optional[fl.server.strategy.Strategy] = None
|
|
98
132
|
|
|
99
133
|
def create_strategy(self) -> None:
|
|
100
134
|
# 1) Pick the Flower Strategy class
|
|
101
135
|
StrategyClass = getattr(fl.server.strategy, self.name)
|
|
102
136
|
|
|
103
|
-
# 2) Define on_fit_config_fn _before_ instantiation
|
|
137
|
+
# 2) Define on_fit_config_fn _before_ instantiation (global defaults)
|
|
104
138
|
def fit_config_fn(server_round: int) -> Dict[str, Any]:
|
|
105
139
|
return {
|
|
106
140
|
"local_epochs": self.local_epochs,
|
|
107
141
|
"threshold": self.threshold,
|
|
108
142
|
"learning_rate": self.learning_rate,
|
|
109
143
|
"optimizer": self.optimizer_name,
|
|
110
|
-
"features":
|
|
111
|
-
"target":
|
|
112
|
-
"val_fraction":
|
|
113
|
-
"test_fraction":
|
|
144
|
+
"features": self._features,
|
|
145
|
+
"target": self._target,
|
|
146
|
+
"val_fraction": float(self._val_fraction),
|
|
147
|
+
"test_fraction": float(self._test_fraction),
|
|
148
|
+
# NEW: always send id_col so clients know which column to use for test_ids
|
|
149
|
+
"id_col": self.id_col,
|
|
114
150
|
}
|
|
115
151
|
|
|
116
152
|
# 3) Build params including on_fit_config_fn
|
|
117
153
|
params: Dict[str, Any] = {
|
|
118
|
-
"fraction_fit":
|
|
119
|
-
"fraction_evaluate":
|
|
120
|
-
"min_fit_clients":
|
|
121
|
-
"min_evaluate_clients":
|
|
122
|
-
"min_available_clients":
|
|
123
|
-
"evaluate_fn":
|
|
124
|
-
"on_fit_config_fn":
|
|
125
|
-
"fit_metrics_aggregation_fn":
|
|
126
|
-
"evaluate_metrics_aggregation_fn":
|
|
154
|
+
"fraction_fit": self.fraction_fit,
|
|
155
|
+
"fraction_evaluate": self.fraction_evaluate,
|
|
156
|
+
"min_fit_clients": self.min_fit_clients,
|
|
157
|
+
"min_evaluate_clients": self.min_evaluate_clients,
|
|
158
|
+
"min_available_clients": self.min_available_clients,
|
|
159
|
+
"evaluate_fn": self.evaluate_fn,
|
|
160
|
+
"on_fit_config_fn": fit_config_fn,
|
|
161
|
+
"fit_metrics_aggregation_fn": self.fit_metrics_aggregation_fn,
|
|
162
|
+
"evaluate_metrics_aggregation_fn": self.evaluate_metrics_aggregation_fn,
|
|
127
163
|
}
|
|
128
164
|
if self.initial_parameters:
|
|
129
165
|
params["initial_parameters"] = fl.common.ndarrays_to_parameters(self.initial_parameters)
|
|
130
166
|
else:
|
|
131
|
-
#
|
|
167
|
+
# derive initial params from server-specified features
|
|
132
168
|
feat_cols = [c.strip() for c in (self._features or "").split(",") if c.strip()]
|
|
133
169
|
if not feat_cols:
|
|
134
170
|
raise ValueError(
|
|
@@ -145,6 +181,7 @@ class Strategy:
|
|
|
145
181
|
|
|
146
182
|
# 5) Wrap aggregate_fit for logging (prints unchanged)
|
|
147
183
|
original_agg_fit = strat.aggregate_fit
|
|
184
|
+
|
|
148
185
|
def logged_agg_fit(server_round, results, failures):
|
|
149
186
|
print(f"\n[Server] 🔄 Round {server_round} - Client Training Metrics:")
|
|
150
187
|
for i, (client_id, fit_res) in enumerate(results):
|
|
@@ -152,17 +189,26 @@ class Strategy:
|
|
|
152
189
|
agg_params, metrics = original_agg_fit(server_round, results, failures)
|
|
153
190
|
print(f"[Server] ✅ Round {server_round} - Aggregated Training Metrics: {metrics}\n")
|
|
154
191
|
# save the model parameters if savingPath is set on each saveOnRounds
|
|
155
|
-
if self.savingPath and (
|
|
192
|
+
if self.savingPath and (
|
|
193
|
+
(server_round % self.saveOnRounds == 0)
|
|
194
|
+
or (self.total_rounds and server_round == self.total_rounds)
|
|
195
|
+
):
|
|
156
196
|
arrays = fl.common.parameters_to_ndarrays(agg_params)
|
|
157
197
|
# Determine filename: final_model on last round else round_{n}
|
|
158
|
-
filename =
|
|
198
|
+
filename = (
|
|
199
|
+
f"round_{server_round}_final_model.npz"
|
|
200
|
+
if server_round == self.total_rounds
|
|
201
|
+
else f"round_{server_round}_model.npz"
|
|
202
|
+
)
|
|
159
203
|
filepath = os.path.join(self.savingPath, filename)
|
|
160
204
|
np.savez(filepath, *arrays)
|
|
161
205
|
return agg_params, metrics
|
|
206
|
+
|
|
162
207
|
strat.aggregate_fit = logged_agg_fit
|
|
163
208
|
|
|
164
209
|
# 6) Wrap aggregate_evaluate for logging (prints unchanged)
|
|
165
210
|
original_agg_eval = strat.aggregate_evaluate
|
|
211
|
+
|
|
166
212
|
def logged_agg_eval(server_round, results, failures):
|
|
167
213
|
print(f"\n[Server] 📊 Round {server_round} - Client Evaluation Metrics:")
|
|
168
214
|
for i, (client_id, eval_res) in enumerate(results):
|
|
@@ -171,10 +217,14 @@ class Strategy:
|
|
|
171
217
|
print(f"[Server] ✅ Round {server_round} - Aggregated Evaluation Metrics:")
|
|
172
218
|
print(f" Loss: {loss}, Metrics: {metrics}\n")
|
|
173
219
|
return loss, metrics
|
|
220
|
+
|
|
174
221
|
strat.aggregate_evaluate = logged_agg_eval
|
|
175
222
|
|
|
176
|
-
# 7) Wrap configure_fit to
|
|
223
|
+
# 7) Wrap configure_fit to:
|
|
224
|
+
# - log client properties (unchanged)
|
|
225
|
+
# - apply split_mode/client_fractions to fit_ins.config (NEW)
|
|
177
226
|
original_conf_fit = strat.configure_fit
|
|
227
|
+
|
|
178
228
|
def wrapped_conf_fit(
|
|
179
229
|
server_round: int,
|
|
180
230
|
parameters,
|
|
@@ -185,14 +235,72 @@ class Strategy:
|
|
|
185
235
|
parameters=parameters,
|
|
186
236
|
client_manager=client_manager
|
|
187
237
|
)
|
|
238
|
+
|
|
188
239
|
ins = GetPropertiesIns(config={})
|
|
189
|
-
|
|
240
|
+
|
|
241
|
+
for client, fit_ins in selected:
|
|
242
|
+
hostname = None
|
|
190
243
|
try:
|
|
191
244
|
props = client.get_properties(ins=ins, timeout=10.0, group_id=0)
|
|
192
245
|
print(f"\n📋 [Round {server_round}] Client {client.cid} Properties: {props.properties}")
|
|
246
|
+
hostname = props.properties.get("hostname", None)
|
|
193
247
|
except Exception as e:
|
|
194
248
|
print(f"⚠️ Failed to get properties from {client.cid}: {e}")
|
|
249
|
+
|
|
250
|
+
# Fallback: if no hostname returned, use Flower cid
|
|
251
|
+
if not hostname:
|
|
252
|
+
hostname = client.cid
|
|
253
|
+
|
|
254
|
+
# Keep same object
|
|
255
|
+
cfg = fit_ins.config
|
|
256
|
+
|
|
257
|
+
if self.split_mode == "per_client":
|
|
258
|
+
# Lookup by hostname (preferred) or cid
|
|
259
|
+
per_cfg = (
|
|
260
|
+
self.client_fractions.get(hostname)
|
|
261
|
+
or self.client_fractions.get(client.cid)
|
|
262
|
+
or {}
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
# val_fraction: per-client override if present
|
|
266
|
+
if "val_fraction" in per_cfg:
|
|
267
|
+
try:
|
|
268
|
+
cfg["val_fraction"] = float(per_cfg["val_fraction"])
|
|
269
|
+
except Exception:
|
|
270
|
+
pass # keep existing if invalid
|
|
271
|
+
|
|
272
|
+
# test: prefer test_ids if provided
|
|
273
|
+
if "test_ids" in per_cfg and per_cfg["test_ids"]:
|
|
274
|
+
test_ids_val = per_cfg["test_ids"]
|
|
275
|
+
if isinstance(test_ids_val, (list, tuple, set)):
|
|
276
|
+
test_ids_str = ",".join(str(x) for x in test_ids_val)
|
|
277
|
+
else:
|
|
278
|
+
test_ids_str = str(test_ids_val)
|
|
279
|
+
cfg["test_ids"] = test_ids_str
|
|
280
|
+
# when using explicit IDs, do not force a test_fraction for this client
|
|
281
|
+
if "test_fraction" in cfg:
|
|
282
|
+
del cfg["test_fraction"]
|
|
283
|
+
# ensure id_col is sent so client can map IDs
|
|
284
|
+
cfg["id_col"] = self.id_col
|
|
285
|
+
else:
|
|
286
|
+
# no test_ids -> use per-client test_fraction if present
|
|
287
|
+
if "test_fraction" in per_cfg:
|
|
288
|
+
try:
|
|
289
|
+
cfg["test_fraction"] = float(per_cfg["test_fraction"])
|
|
290
|
+
except Exception:
|
|
291
|
+
pass # keep existing if invalid
|
|
292
|
+
# if no test_ids: id_col not strictly required, leave as-is
|
|
293
|
+
else:
|
|
294
|
+
# split_mode == "global": enforce global fractions, clear any test_ids
|
|
295
|
+
if "test_ids" in cfg:
|
|
296
|
+
del cfg["test_ids"]
|
|
297
|
+
cfg["val_fraction"] = float(self._val_fraction)
|
|
298
|
+
cfg["test_fraction"] = float(self._test_fraction)
|
|
299
|
+
# also send id_col so clients know column name if needed
|
|
300
|
+
cfg["id_col"] = self.id_col
|
|
301
|
+
|
|
195
302
|
return selected
|
|
303
|
+
|
|
196
304
|
strat.configure_fit = wrapped_conf_fit
|
|
197
305
|
|
|
198
306
|
# 8) Save the ready-to-use strategy
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
|
-
name: medfl-2.0.5.
|
|
2
|
+
name: medfl-2.0.5.dev2/notebooks/data/eicu_sapsii_data.csv
|
|
3
3
|
size: 48904729 bytes
|
|
4
4
|
sha256: 79203f34470b04f3b2e8cc5b3374b48e54f8a6bb6f484f259889adf7c7dff77d
|
|
@@ -15,7 +15,7 @@ stay180870,site71,Midwest,18,0,0,6,3,0,6,0,0,0,0,13,0,0,0,1
|
|
|
15
15
|
stay181437,site63,Midwest,15,0,0,8,0,0,6,0,0,2,0,0,0,0,0,0
|
|
16
16
|
stay182413,site58,Midwest,12,0,11,6,0,0,6,9,0,0,0,5,0,0,3,0
|
|
17
17
|
stay186957,site73,Midwest,7,0,0,6,0,0,6,0,0,0,0,5,0,0,0,0
|
|
18
|
-
stay187667,site73,Midwest,15,0,0,6,6,0,10,0,0,4,3,5,0,0,0,
|
|
18
|
+
stay187667,site73,Midwest,15,0,0,6,6,0,10,0,0,4,3,5,0,0,0,00
|
|
19
19
|
stay187743,site63,Midwest,15,0,0,6,0,0,6,0,5,2,0,5,0,3,0,0
|
|
20
20
|
stay189842,site66,Midwest,18,0,0,6,3,0,0,0,0,2,0,5,1,0,0,0
|
|
21
21
|
stay205928,site67,Midwest,7,0,0,6,3,0,6,0,0,0,0,5,0,0,0,0
|
|
@@ -14,7 +14,7 @@ with open('requirements.txt') as f:
|
|
|
14
14
|
|
|
15
15
|
setup(
|
|
16
16
|
name="MEDfl",
|
|
17
|
-
version="2.0.5.
|
|
17
|
+
version="2.0.5.dev2",
|
|
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",
|
|
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
|