MEDfl 2.0.5.dev1__tar.gz → 2.0.5.dev3__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.
Files changed (360) hide show
  1. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/rw/client.py +26 -117
  2. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/rw/model.py +25 -25
  3. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/rw/strategy.py +127 -19
  4. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl.egg-info/PKG-INFO +1 -1
  5. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/PKG-INFO +1 -1
  6. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/eicu_sapsii_data.csv +1 -1
  7. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/eicu_test_1.csv +1 -1
  8. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/setup.py +1 -1
  9. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.github/workflows/main.yml +0 -0
  10. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.gitignore +0 -0
  11. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.idea/.gitignore +0 -0
  12. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.idea/MEDfl.iml +0 -0
  13. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
  14. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.idea/misc.xml +0 -0
  15. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.idea/modules.xml +0 -0
  16. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/.idea/vcs.xml +0 -0
  17. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/LICENSE +0 -0
  18. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/__init__.py +0 -0
  19. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/client.py +0 -0
  20. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/dynamicModal.py +0 -0
  21. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/federated_dataset.py +0 -0
  22. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/flpipeline.py +0 -0
  23. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/model.py +0 -0
  24. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/params.yaml +0 -0
  25. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/params_optimiser.py +0 -0
  26. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/plot.py +0 -0
  27. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/server.py +0 -0
  28. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/strategy.py +0 -0
  29. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/LearningManager/utils.py +0 -0
  30. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/__init__.py +0 -0
  31. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/database_connector.py +0 -0
  32. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/dataset.py +0 -0
  33. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/flsetup.py +0 -0
  34. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/net_helper.py +0 -0
  35. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/net_manager_queries.py +0 -0
  36. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/network.py +0 -0
  37. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/NetManager/node.py +0 -0
  38. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/__init__.py +0 -0
  39. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/rw/__init__.py +0 -0
  40. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/rw/server.py +0 -0
  41. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/scripts/__init__.py +0 -0
  42. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/scripts/base.py +0 -0
  43. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl/scripts/create_db.py +0 -0
  44. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl.egg-info/SOURCES.txt +0 -0
  45. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl.egg-info/dependency_links.txt +0 -0
  46. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl.egg-info/requires.txt +0 -0
  47. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/MEDfl.egg-info/top_level.txt +0 -0
  48. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/README.md +0 -0
  49. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/README +0 -0
  50. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/__init__.py +0 -0
  51. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/__pycache__/env.cpython-38.pyc +0 -0
  52. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/alembic_logging.ini +0 -0
  53. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/debug.log +0 -0
  54. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/env.py +0 -0
  55. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/script.py.mako +0 -0
  56. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/versions/__pycache__/b159ee510a90_initial.cpython-38.pyc +0 -0
  57. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic/versions/b159ee510a90_initial.py +0 -0
  58. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/alembic.ini +0 -0
  59. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/Makefile +0 -0
  60. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.buildinfo +0 -0
  61. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.doctrees/Medfl.LearningManager.doctree +0 -0
  62. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.doctrees/Medfl.NetManager.doctree +0 -0
  63. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.doctrees/Medfl.doctree +0 -0
  64. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.doctrees/environment.pickle +0 -0
  65. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.doctrees/index.doctree +0 -0
  66. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.doctrees/modules.doctree +0 -0
  67. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/.nojekyll +0 -0
  68. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/Medfl.LearningManager.html +0 -0
  69. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/Medfl.NetManager.html +0 -0
  70. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/Medfl.html +0 -0
  71. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/client.html +0 -0
  72. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
  73. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
  74. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/flpipeline.html +0 -0
  75. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/model.html +0 -0
  76. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/plot.html +0 -0
  77. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/server.html +0 -0
  78. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/strategy.html +0 -0
  79. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/LearningManager/utils.html +0 -0
  80. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/NetManager/dataset.html +0 -0
  81. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/NetManager/flsetup.html +0 -0
  82. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/NetManager/net_helper.html +0 -0
  83. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/NetManager/network.html +0 -0
  84. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/Medfl/NetManager/node.html +0 -0
  85. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_modules/index.html +0 -0
  86. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_sources/Medfl.LearningManager.rst.txt +0 -0
  87. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_sources/Medfl.NetManager.rst.txt +0 -0
  88. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_sources/Medfl.rst.txt +0 -0
  89. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_sources/index.rst.txt +0 -0
  90. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_sources/modules.rst.txt +0 -0
  91. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/MEDomics.png +0 -0
  92. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  93. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/basic.css +0 -0
  94. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/badge_only.css +0 -0
  95. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  96. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  97. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  98. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  99. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/fontawesome-webfont.eot +0 -0
  100. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/fontawesome-webfont.svg +0 -0
  101. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  102. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/fontawesome-webfont.woff +0 -0
  103. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  104. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-bold-italic.woff +0 -0
  105. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  106. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-bold.woff +0 -0
  107. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-bold.woff2 +0 -0
  108. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-normal-italic.woff +0 -0
  109. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  110. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-normal.woff +0 -0
  111. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/fonts/lato-normal.woff2 +0 -0
  112. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/css/theme.css +0 -0
  113. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/dark_mode_css/custom.css +0 -0
  114. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/dark_mode_css/dark.css +0 -0
  115. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/dark_mode_css/general.css +0 -0
  116. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/dark_mode_js/default_dark.js +0 -0
  117. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/dark_mode_js/default_light.js +0 -0
  118. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/dark_mode_js/theme_switcher.js +0 -0
  119. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/doctools.js +0 -0
  120. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/documentation_options.js +0 -0
  121. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/file.png +0 -0
  122. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/jquery.js +0 -0
  123. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/js/badge_only.js +0 -0
  124. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/js/html5shiv-printshiv.min.js +0 -0
  125. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/js/html5shiv.min.js +0 -0
  126. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/js/theme.js +0 -0
  127. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/language_data.js +0 -0
  128. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/minus.png +0 -0
  129. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/plus.png +0 -0
  130. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/pygments.css +0 -0
  131. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/searchtools.js +0 -0
  132. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/_static/sphinx_highlight.js +0 -0
  133. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/genindex.html +0 -0
  134. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/index.html +0 -0
  135. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/modules.html +0 -0
  136. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/objects.inv +0 -0
  137. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/py-modindex.html +0 -0
  138. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/search.html +0 -0
  139. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/_build/searchindex.js +0 -0
  140. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/Documentation.doctree +0 -0
  141. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/Installation.doctree +0 -0
  142. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/Medfl.LearningManager.doctree +0 -0
  143. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/Medfl.NetManager.doctree +0 -0
  144. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/Medfl.doctree +0 -0
  145. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/configuration_file.doctree +0 -0
  146. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/environment.pickle +0 -0
  147. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/index.doctree +0 -0
  148. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/modules.doctree +0 -0
  149. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/doctrees/tutorials.doctree +0 -0
  150. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/.buildinfo +0 -0
  151. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/.nojekyll +0 -0
  152. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/Documentation.html +0 -0
  153. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/Installation.html +0 -0
  154. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/Medfl.LearningManager.html +0 -0
  155. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/Medfl.NetManager.html +0 -0
  156. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/Medfl.html +0 -0
  157. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/FTL_comp.png +0 -0
  158. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/LearningManager.png +0 -0
  159. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/MEDfl_Diagramm.png +0 -0
  160. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/NetManager_Diagramm.png +0 -0
  161. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/learningresults.png +0 -0
  162. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/mysqllogo.png +0 -0
  163. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/phpmyadmin.png +0 -0
  164. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/wampLogo.png +0 -0
  165. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_images/xampplogo.png +0 -0
  166. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_modules/index.html +0 -0
  167. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/Documentation.rst.txt +0 -0
  168. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/Installation.rst.txt +0 -0
  169. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/Medfl.LearningManager.rst.txt +0 -0
  170. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/Medfl.NetManager.rst.txt +0 -0
  171. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/Medfl.rst.txt +0 -0
  172. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/configuration_file.rst.txt +0 -0
  173. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/index.rst.txt +0 -0
  174. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/modules.rst.txt +0 -0
  175. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_sources/tutorials.rst.txt +0 -0
  176. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/MEDomics.png +0 -0
  177. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  178. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/basic.css +0 -0
  179. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/badge_only.css +0 -0
  180. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  181. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  182. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  183. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  184. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  185. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  186. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  187. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  188. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  189. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  190. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  191. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  192. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  193. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  194. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  195. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  196. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  197. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/css/theme.css +0 -0
  198. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/custom.css +0 -0
  199. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/dark_mode_css/custom.css +0 -0
  200. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/dark_mode_css/dark.css +0 -0
  201. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/dark_mode_css/general.css +0 -0
  202. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/dark_mode_js/default_dark.js +0 -0
  203. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/dark_mode_js/default_light.js +0 -0
  204. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/dark_mode_js/theme_switcher.js +0 -0
  205. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/doctools.js +0 -0
  206. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/documentation_options.js +0 -0
  207. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/file.png +0 -0
  208. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  209. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/jquery.js +0 -0
  210. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/js/badge_only.js +0 -0
  211. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  212. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  213. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/js/theme.js +0 -0
  214. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/language_data.js +0 -0
  215. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/minus.png +0 -0
  216. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/plus.png +0 -0
  217. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/pygments.css +0 -0
  218. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/searchtools.js +0 -0
  219. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/sphinx_highlight.js +0 -0
  220. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  221. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/_static/underscore.js +0 -0
  222. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/configuration_file.html +0 -0
  223. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/genindex.html +0 -0
  224. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/index.html +0 -0
  225. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/modules.html +0 -0
  226. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/objects.inv +0 -0
  227. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/py-modindex.html +0 -0
  228. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/search.html +0 -0
  229. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/searchindex.js +0 -0
  230. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/build/html/tutorials.html +0 -0
  231. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/make.bat +0 -0
  232. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/Documentation.rst +0 -0
  233. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/Installation.rst +0 -0
  234. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/Medfl.LearningManager.rst +0 -0
  235. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/Medfl.NetManager.rst +0 -0
  236. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/Medfl.rst +0 -0
  237. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/_static/custom.css +0 -0
  238. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/conf.py +0 -0
  239. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/configuration_file.rst +0 -0
  240. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/FL_gen.png +0 -0
  241. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/FTL_comp.png +0 -0
  242. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/FlDatasetDiagramm.png +0 -0
  243. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/GDP.png +0 -0
  244. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/LDP.png +0 -0
  245. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/LearningManager.png +0 -0
  246. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/MEDfl_Diagramm.png +0 -0
  247. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/Modelinit.png +0 -0
  248. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/NetManager_Diagramm.png +0 -0
  249. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/NetworkCreation.png +0 -0
  250. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/createServer.png +0 -0
  251. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/learningresults.png +0 -0
  252. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/logos/mysqllogo.png +0 -0
  253. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/logos/phpmyadmin.png +0 -0
  254. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/logos/wampLogo.png +0 -0
  255. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/logos/xampplogo.png +0 -0
  256. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/modeltest.png +0 -0
  257. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/netMan.png +0 -0
  258. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/nodecreation.png +0 -0
  259. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/pipeline.png +0 -0
  260. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/Images/strategy.png +0 -0
  261. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/figures/MEDomics.png +0 -0
  262. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/index.rst +0 -0
  263. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/modules.rst +0 -0
  264. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/docs/source/tutorials.rst +0 -0
  265. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/global_params.yaml +0 -0
  266. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/medfl.egg-info/PKG-INFO +0 -0
  267. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/medfl.egg-info/SOURCES.txt +0 -0
  268. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/medfl.egg-info/dependency_links.txt +0 -0
  269. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/medfl.egg-info/requires.txt +0 -0
  270. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/medfl.egg-info/top_level.txt +0 -0
  271. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/.ipynb_checkpoints/trainedModels/binary_classifier.pth +0 -0
  272. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/.ipynb_checkpoints/trainedModels/eicu_binary_classifier.pth +0 -0
  273. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/.ipynb_checkpoints/trainedModels/grid_search_classifier.pth +0 -0
  274. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/.ipynb_checkpoints/trainedModels/new_binary_classifier.pth +0 -0
  275. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/.ipynb_checkpoints/trainedModels/updated_model.pth +0 -0
  276. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/First_Tuto.ipynb +0 -0
  277. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/FL_gen.png +0 -0
  278. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/FTL_comp.png +0 -0
  279. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/FlDatasetDiagramm.png +0 -0
  280. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/GDP.png +0 -0
  281. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/LDP.png +0 -0
  282. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/LearningManager.png +0 -0
  283. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/MEDfl_Diagramm.png +0 -0
  284. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/MEDfl_bachmarking_plan.png +0 -0
  285. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/Modelinit.png +0 -0
  286. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/NetManager_Diagramm.png +0 -0
  287. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/NetworkCreation.png +0 -0
  288. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/createServer.png +0 -0
  289. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/learningresults.png +0 -0
  290. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/logos/mysqllogo.png +0 -0
  291. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/logos/phpmyadmin.png +0 -0
  292. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/logos/wampLogo.png +0 -0
  293. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/logos/xampplogo.png +0 -0
  294. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/modeltest.png +0 -0
  295. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/netMan.png +0 -0
  296. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/nodecreation.png +0 -0
  297. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/optuna_optim_diag.png +0 -0
  298. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/pipeline.png +0 -0
  299. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/Images/strategy.png +0 -0
  300. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/banchmarking/MEDfl_benchmarks.ipynb +0 -0
  301. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/banchmarking/banchmarking_plan.md +0 -0
  302. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/banchmarking/benchmarks_results.txt +0 -0
  303. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_1.ipynb +0 -0
  304. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_2.ipynb +0 -0
  305. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/banchmarking/transfer_learning/TL_activated.ipynb +0 -0
  306. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/banchmarking/transfer_learning/TL_dectivated.ipynb +0 -0
  307. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/chunk_1.csv +0 -0
  308. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/chunk_2.csv +0 -0
  309. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/chunk_3.csv +0 -0
  310. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/config_1/part_1.csv +0 -0
  311. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/config_1/part_2.csv +0 -0
  312. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/config_1/part_3.csv +0 -0
  313. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/config_1/test_1.csv +0 -0
  314. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/config_1/test_2.csv +0 -0
  315. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/eicu_sapsii_data_test.csv +0 -0
  316. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/eicu_sapsii_data_test_1.csv +0 -0
  317. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/masterDataSet/Mimic_ouael.csv +0 -0
  318. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/masterDataSet/Mimic_train.csv +0 -0
  319. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/masterDataSet/eICU.csv +0 -0
  320. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/nodesData/output_1.csv +0 -0
  321. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/nodesData/output_2.csv +0 -0
  322. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/nodesData/output_3.csv +0 -0
  323. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/nodesData/output_4.csv +0 -0
  324. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/nodesData/output_5.csv +0 -0
  325. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/test_1.csv +0 -0
  326. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/test_2.csv +0 -0
  327. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/test_3.csv +0 -0
  328. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/data/validation/Mimic_validation.csv +0 -0
  329. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/eicu_test.csv +0 -0
  330. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/eicu_test_2.csv +0 -0
  331. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/eicu_test_3.csv +0 -0
  332. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/sapsii_score_knnimputed_eicu.csv +0 -0
  333. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/1_DB.ipynb +0 -0
  334. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/2_NetManager.ipynb +0 -0
  335. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/3_TransferLearning copy.ipynb +0 -0
  336. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/3_TransferLearning.ipynb +0 -0
  337. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/4_LearningManager.ipynb +0 -0
  338. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/5_LearningResults.ipynb +0 -0
  339. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/6_ModelChoice.ipynb +0 -0
  340. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/7_ParamsOptimiser.ipynb +0 -0
  341. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/8_complete_tutorial.ipynb +0 -0
  342. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/newplot2.png +0 -0
  343. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/notebooks/tutorial/newplot4.png +0 -0
  344. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/requirements.txt +0 -0
  345. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/setup.cfg +0 -0
  346. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/setup_mysql.sh +0 -0
  347. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/__init__.py +0 -0
  348. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/__pycache__/test_dataset.cpython-38.pyc +0 -0
  349. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/__pycache__/test_federated_dataset.cpython-38.pyc +0 -0
  350. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/__pycache__/test_flpipeline.cpython-38.pyc +0 -0
  351. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/__pycache__/test_flsetup.cpython-38.pyc +0 -0
  352. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/__pycache__/test_network.cpython-38.pyc +0 -0
  353. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/__pycache__/test_node.cpython-38.pyc +0 -0
  354. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/test_dataset.py +0 -0
  355. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/test_federated_dataset.py +0 -0
  356. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/test_flpipeline.py +0 -0
  357. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/test_flsetup.py +0 -0
  358. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/test_network.py +0 -0
  359. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/tests/test_node.py +0 -0
  360. {medfl-2.0.5.dev1 → medfl-2.0.5.dev3}/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()
@@ -1,11 +1,8 @@
1
1
  import math
2
- from typing import List, Optional, Literal, Callable, Tuple
3
2
  import torch
4
3
  import torch.nn as nn
5
4
  import torch.nn.functional as F
6
5
 
7
- Task = Literal["binary", "multiclass", "multilabel", "regression"]
8
-
9
6
  _ACTS = {
10
7
  "relu": nn.ReLU,
11
8
  "gelu": nn.GELU,
@@ -16,7 +13,7 @@ _ACTS = {
16
13
  "identity": nn.Identity,
17
14
  }
18
15
 
19
- def _make_activation(name: str) -> nn.Module:
16
+ def _make_activation(name):
20
17
  if name not in _ACTS:
21
18
  raise ValueError(f"Unsupported activation '{name}'. Choose from {list(_ACTS)}")
22
19
  return _ACTS[name]()
@@ -35,16 +32,16 @@ class Net(nn.Module):
35
32
 
36
33
  def __init__(
37
34
  self,
38
- input_dim: int,
39
- hidden_dims: List[int] = [64, 32],
40
- activation: str = "relu",
41
- batchnorm: bool = True,
42
- dropout: Optional[float | List[float]] = 0.0,
43
- task: Task = "binary",
44
- num_classes: Optional[int] = None,
45
- output_bias: bool = True,
46
- return_logits: bool = True,
47
- weight_init: Literal["kaiming", "xavier", "none"] = "kaiming",
35
+ input_dim,
36
+ hidden_dims=[64, 32],
37
+ activation="relu",
38
+ batchnorm=True,
39
+ dropout=0.0,
40
+ task="binary",
41
+ num_classes=None,
42
+ output_bias=True,
43
+ return_logits=True,
44
+ weight_init="kaiming",
48
45
  ):
49
46
  super().__init__()
50
47
  self.task = task
@@ -78,10 +75,9 @@ class Net(nn.Module):
78
75
  else:
79
76
  raise ValueError("dropout must be float|list[float]|None")
80
77
 
81
- layers = []
82
- in_dim = input_dim
83
78
  self.blocks = nn.ModuleList()
84
- for i, (h, p) in enumerate(zip(hidden_dims, dropout)):
79
+ in_dim = input_dim
80
+ for h, p in zip(hidden_dims, dropout):
85
81
  block = nn.ModuleDict({
86
82
  "lin": nn.Linear(in_dim, h, bias=True),
87
83
  "bn": nn.BatchNorm1d(h) if batchnorm else nn.Identity(),
@@ -98,11 +94,15 @@ class Net(nn.Module):
98
94
  self.apply(lambda m: self._init_weights(m, scheme=weight_init, activation=activation))
99
95
 
100
96
  @staticmethod
101
- def _init_weights(m: nn.Module, scheme: str, activation: str):
97
+ def _init_weights(m, scheme, activation):
102
98
  if isinstance(m, nn.Linear):
103
99
  if scheme == "kaiming":
104
100
  nonlinearity = "leaky_relu" if activation == "leaky_relu" else "relu"
105
- nn.init.kaiming_uniform_(m.weight, a=math.sqrt(5) if activation == "leaky_relu" else 0, nonlinearity=nonlinearity)
101
+ nn.init.kaiming_uniform_(
102
+ m.weight,
103
+ a=math.sqrt(5) if activation == "leaky_relu" else 0,
104
+ nonlinearity=nonlinearity,
105
+ )
106
106
  elif scheme == "xavier":
107
107
  nn.init.xavier_uniform_(m.weight)
108
108
  if m.bias is not None:
@@ -110,7 +110,7 @@ class Net(nn.Module):
110
110
  bound = 1 / math.sqrt(fan_in) if fan_in > 0 else 0
111
111
  nn.init.uniform_(m.bias, -bound, bound)
112
112
 
113
- def forward(self, x: torch.Tensor) -> torch.Tensor:
113
+ def forward(self, x):
114
114
  for blk in self.blocks:
115
115
  x = blk["lin"](x)
116
116
  x = blk["bn"](x)
@@ -120,7 +120,7 @@ class Net(nn.Module):
120
120
  return logits if self.return_logits else self._apply_output_activation(logits)
121
121
 
122
122
  # Inference helpers
123
- def _apply_output_activation(self, logits: torch.Tensor) -> torch.Tensor:
123
+ def _apply_output_activation(self, logits):
124
124
  if self.task == "binary":
125
125
  return torch.sigmoid(logits) # (B, 1)
126
126
  elif self.task == "multiclass":
@@ -128,14 +128,15 @@ class Net(nn.Module):
128
128
  elif self.task == "multilabel":
129
129
  return torch.sigmoid(logits) # (B, L)
130
130
  elif self.task == "regression":
131
- return logits # raw regression output
131
+ return logits # raw regression output
132
132
  else:
133
133
  raise RuntimeError("Invalid task")
134
134
 
135
135
  @torch.no_grad()
136
- def predict(self, x: torch.Tensor) -> torch.Tensor:
137
- out = self.forward(x) # always run forward
136
+ def predict(self, x):
137
+ out = self.forward(x)
138
138
  probs = self._apply_output_activation(out) if self.return_logits else out
139
+
139
140
  if self.task == "binary":
140
141
  return (probs >= 0.5).long()
141
142
  elif self.task == "multiclass":
@@ -144,4 +145,3 @@ class Net(nn.Module):
144
145
  return (probs >= 0.5).long()
145
146
  elif self.task == "regression":
146
147
  return probs
147
-
@@ -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": self._features, # e.g. "age,bmi,glucose"
111
- "target": self._target, # e.g. "outcome"
112
- "val_fraction": float(self._val_fraction),
113
- "test_fraction": float(self._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": self.fraction_fit,
119
- "fraction_evaluate": self.fraction_evaluate,
120
- "min_fit_clients": self.min_fit_clients,
121
- "min_evaluate_clients": self.min_evaluate_clients,
122
- "min_available_clients": self.min_available_clients,
123
- "evaluate_fn": self.evaluate_fn,
124
- "on_fit_config_fn": fit_config_fn,
125
- "fit_metrics_aggregation_fn": self.fit_metrics_aggregation_fn,
126
- "evaluate_metrics_aggregation_fn": self.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
- # NEW: derive initial params from server-specified features
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 ((server_round % self.saveOnRounds == 0) or (self.total_rounds and server_round == self.total_rounds)):
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 = f"round_{server_round}_final_model.npz" if server_round == self.total_rounds else f"round_{server_round}_model.npz"
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 log client properties (prints unchanged)
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
- for client, _ in selected:
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MEDfl
3
- Version: 2.0.5.dev1
3
+ Version: 2.0.5.dev3
4
4
  Summary: Python Open-source package for simulating federated learning and differential privacy
5
5
  Home-page: https://github.com/MEDomics-UdeS/MEDfl
6
6
  Author: MEDomics consortium
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MEDfl
3
- Version: 2.0.5.dev1
3
+ Version: 2.0.5.dev3
4
4
  Summary: Python Open-source package for simulating federated learning and differential privacy
5
5
  Home-page: https://github.com/MEDomics-UdeS/MEDfl
6
6
  Author: MEDomics consortium
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
- name: medfl-2.0.5.dev1/notebooks/data/eicu_sapsii_data.csv
2
+ name: medfl-2.0.5.dev3/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,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.dev1",
17
+ version="2.0.5.dev3",
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