MEDfl 2.0.5.dev0__tar.gz → 2.0.5.dev1__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 (362) hide show
  1. medfl-2.0.5.dev1/MEDfl/rw/client.py +512 -0
  2. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/rw/model.py +3 -3
  3. medfl-2.0.5.dev1/MEDfl/rw/strategy.py +199 -0
  4. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl.egg-info/PKG-INFO +33 -2
  5. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/PKG-INFO +33 -2
  6. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/setup.py +1 -1
  7. MEDfl-2.0.5.dev0/MEDfl/rw/client.py +0 -487
  8. MEDfl-2.0.5.dev0/MEDfl/rw/strategy.py +0 -429
  9. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.github/workflows/main.yml +0 -0
  10. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.gitignore +0 -0
  11. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.idea/.gitignore +0 -0
  12. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.idea/MEDfl.iml +0 -0
  13. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
  14. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.idea/misc.xml +0 -0
  15. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.idea/modules.xml +0 -0
  16. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/.idea/vcs.xml +0 -0
  17. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/LICENSE +0 -0
  18. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/__init__.py +0 -0
  19. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/client.py +0 -0
  20. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/dynamicModal.py +0 -0
  21. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/federated_dataset.py +0 -0
  22. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/flpipeline.py +0 -0
  23. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/model.py +0 -0
  24. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/params.yaml +0 -0
  25. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/params_optimiser.py +0 -0
  26. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/plot.py +0 -0
  27. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/server.py +0 -0
  28. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/strategy.py +0 -0
  29. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/LearningManager/utils.py +0 -0
  30. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/__init__.py +0 -0
  31. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/database_connector.py +0 -0
  32. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/dataset.py +0 -0
  33. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/flsetup.py +0 -0
  34. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/net_helper.py +0 -0
  35. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/net_manager_queries.py +0 -0
  36. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/network.py +0 -0
  37. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/NetManager/node.py +0 -0
  38. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/__init__.py +0 -0
  39. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/rw/__init__.py +0 -0
  40. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/rw/server.py +0 -0
  41. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/scripts/__init__.py +0 -0
  42. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/scripts/base.py +0 -0
  43. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl/scripts/create_db.py +0 -0
  44. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl.egg-info/SOURCES.txt +0 -0
  45. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl.egg-info/dependency_links.txt +0 -0
  46. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl.egg-info/requires.txt +0 -0
  47. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/MEDfl.egg-info/top_level.txt +0 -0
  48. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/README.md +0 -0
  49. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/README +0 -0
  50. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/__init__.py +0 -0
  51. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/__pycache__/env.cpython-38.pyc +0 -0
  52. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/alembic_logging.ini +0 -0
  53. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/debug.log +0 -0
  54. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/env.py +0 -0
  55. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/script.py.mako +0 -0
  56. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/versions/__pycache__/b159ee510a90_initial.cpython-38.pyc +0 -0
  57. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic/versions/b159ee510a90_initial.py +0 -0
  58. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/alembic.ini +0 -0
  59. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/Makefile +0 -0
  60. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.buildinfo +0 -0
  61. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.doctrees/Medfl.LearningManager.doctree +0 -0
  62. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.doctrees/Medfl.NetManager.doctree +0 -0
  63. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.doctrees/Medfl.doctree +0 -0
  64. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.doctrees/environment.pickle +0 -0
  65. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.doctrees/index.doctree +0 -0
  66. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.doctrees/modules.doctree +0 -0
  67. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/.nojekyll +0 -0
  68. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/Medfl.LearningManager.html +0 -0
  69. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/Medfl.NetManager.html +0 -0
  70. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/Medfl.html +0 -0
  71. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/client.html +0 -0
  72. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
  73. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
  74. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/flpipeline.html +0 -0
  75. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/model.html +0 -0
  76. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/plot.html +0 -0
  77. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/server.html +0 -0
  78. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/strategy.html +0 -0
  79. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/LearningManager/utils.html +0 -0
  80. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/NetManager/dataset.html +0 -0
  81. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/NetManager/flsetup.html +0 -0
  82. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/NetManager/net_helper.html +0 -0
  83. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/NetManager/network.html +0 -0
  84. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/Medfl/NetManager/node.html +0 -0
  85. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_modules/index.html +0 -0
  86. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_sources/Medfl.LearningManager.rst.txt +0 -0
  87. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_sources/Medfl.NetManager.rst.txt +0 -0
  88. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_sources/Medfl.rst.txt +0 -0
  89. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_sources/index.rst.txt +0 -0
  90. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_sources/modules.rst.txt +0 -0
  91. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/MEDomics.png +0 -0
  92. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  93. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/basic.css +0 -0
  94. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/badge_only.css +0 -0
  95. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  96. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  97. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  98. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  99. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/fontawesome-webfont.eot +0 -0
  100. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/fontawesome-webfont.svg +0 -0
  101. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  102. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/fontawesome-webfont.woff +0 -0
  103. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  104. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-bold-italic.woff +0 -0
  105. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  106. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-bold.woff +0 -0
  107. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-bold.woff2 +0 -0
  108. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-normal-italic.woff +0 -0
  109. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  110. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-normal.woff +0 -0
  111. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/fonts/lato-normal.woff2 +0 -0
  112. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/css/theme.css +0 -0
  113. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/dark_mode_css/custom.css +0 -0
  114. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/dark_mode_css/dark.css +0 -0
  115. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/dark_mode_css/general.css +0 -0
  116. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/dark_mode_js/default_dark.js +0 -0
  117. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/dark_mode_js/default_light.js +0 -0
  118. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/dark_mode_js/theme_switcher.js +0 -0
  119. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/doctools.js +0 -0
  120. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/documentation_options.js +0 -0
  121. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/file.png +0 -0
  122. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/jquery.js +0 -0
  123. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/js/badge_only.js +0 -0
  124. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/js/html5shiv-printshiv.min.js +0 -0
  125. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/js/html5shiv.min.js +0 -0
  126. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/js/theme.js +0 -0
  127. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/language_data.js +0 -0
  128. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/minus.png +0 -0
  129. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/plus.png +0 -0
  130. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/pygments.css +0 -0
  131. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/searchtools.js +0 -0
  132. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/_static/sphinx_highlight.js +0 -0
  133. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/genindex.html +0 -0
  134. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/index.html +0 -0
  135. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/modules.html +0 -0
  136. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/objects.inv +0 -0
  137. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/py-modindex.html +0 -0
  138. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/search.html +0 -0
  139. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/_build/searchindex.js +0 -0
  140. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/Documentation.doctree +0 -0
  141. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/Installation.doctree +0 -0
  142. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/Medfl.LearningManager.doctree +0 -0
  143. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/Medfl.NetManager.doctree +0 -0
  144. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/Medfl.doctree +0 -0
  145. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/configuration_file.doctree +0 -0
  146. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/environment.pickle +0 -0
  147. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/index.doctree +0 -0
  148. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/modules.doctree +0 -0
  149. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/doctrees/tutorials.doctree +0 -0
  150. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/.buildinfo +0 -0
  151. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/.nojekyll +0 -0
  152. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/Documentation.html +0 -0
  153. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/Installation.html +0 -0
  154. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/Medfl.LearningManager.html +0 -0
  155. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/Medfl.NetManager.html +0 -0
  156. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/Medfl.html +0 -0
  157. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/FTL_comp.png +0 -0
  158. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/LearningManager.png +0 -0
  159. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/MEDfl_Diagramm.png +0 -0
  160. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/NetManager_Diagramm.png +0 -0
  161. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/learningresults.png +0 -0
  162. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/mysqllogo.png +0 -0
  163. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/phpmyadmin.png +0 -0
  164. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/wampLogo.png +0 -0
  165. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_images/xampplogo.png +0 -0
  166. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_modules/index.html +0 -0
  167. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/Documentation.rst.txt +0 -0
  168. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/Installation.rst.txt +0 -0
  169. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/Medfl.LearningManager.rst.txt +0 -0
  170. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/Medfl.NetManager.rst.txt +0 -0
  171. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/Medfl.rst.txt +0 -0
  172. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/configuration_file.rst.txt +0 -0
  173. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/index.rst.txt +0 -0
  174. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/modules.rst.txt +0 -0
  175. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_sources/tutorials.rst.txt +0 -0
  176. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/MEDomics.png +0 -0
  177. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  178. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/basic.css +0 -0
  179. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/badge_only.css +0 -0
  180. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  181. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  182. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  183. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  184. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  185. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  186. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  187. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  188. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  189. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  190. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  191. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  192. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  193. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  194. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  195. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  196. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  197. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/css/theme.css +0 -0
  198. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/custom.css +0 -0
  199. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/dark_mode_css/custom.css +0 -0
  200. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/dark_mode_css/dark.css +0 -0
  201. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/dark_mode_css/general.css +0 -0
  202. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/dark_mode_js/default_dark.js +0 -0
  203. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/dark_mode_js/default_light.js +0 -0
  204. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/dark_mode_js/theme_switcher.js +0 -0
  205. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/doctools.js +0 -0
  206. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/documentation_options.js +0 -0
  207. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/file.png +0 -0
  208. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  209. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/jquery.js +0 -0
  210. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/js/badge_only.js +0 -0
  211. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  212. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  213. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/js/theme.js +0 -0
  214. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/language_data.js +0 -0
  215. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/minus.png +0 -0
  216. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/plus.png +0 -0
  217. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/pygments.css +0 -0
  218. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/searchtools.js +0 -0
  219. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/sphinx_highlight.js +0 -0
  220. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  221. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/_static/underscore.js +0 -0
  222. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/configuration_file.html +0 -0
  223. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/genindex.html +0 -0
  224. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/index.html +0 -0
  225. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/modules.html +0 -0
  226. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/objects.inv +0 -0
  227. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/py-modindex.html +0 -0
  228. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/search.html +0 -0
  229. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/searchindex.js +0 -0
  230. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/build/html/tutorials.html +0 -0
  231. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/make.bat +0 -0
  232. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/Documentation.rst +0 -0
  233. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/Installation.rst +0 -0
  234. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/Medfl.LearningManager.rst +0 -0
  235. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/Medfl.NetManager.rst +0 -0
  236. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/Medfl.rst +0 -0
  237. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/_static/custom.css +0 -0
  238. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/conf.py +0 -0
  239. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/configuration_file.rst +0 -0
  240. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/FL_gen.png +0 -0
  241. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/FTL_comp.png +0 -0
  242. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/FlDatasetDiagramm.png +0 -0
  243. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/GDP.png +0 -0
  244. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/LDP.png +0 -0
  245. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/LearningManager.png +0 -0
  246. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/MEDfl_Diagramm.png +0 -0
  247. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/Modelinit.png +0 -0
  248. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/NetManager_Diagramm.png +0 -0
  249. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/NetworkCreation.png +0 -0
  250. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/createServer.png +0 -0
  251. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/learningresults.png +0 -0
  252. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/logos/mysqllogo.png +0 -0
  253. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/logos/phpmyadmin.png +0 -0
  254. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/logos/wampLogo.png +0 -0
  255. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/logos/xampplogo.png +0 -0
  256. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/modeltest.png +0 -0
  257. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/netMan.png +0 -0
  258. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/nodecreation.png +0 -0
  259. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/pipeline.png +0 -0
  260. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/Images/strategy.png +0 -0
  261. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/figures/MEDomics.png +0 -0
  262. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/index.rst +0 -0
  263. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/modules.rst +0 -0
  264. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/docs/source/tutorials.rst +0 -0
  265. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/global_params.yaml +0 -0
  266. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/medfl.egg-info/PKG-INFO +0 -0
  267. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/medfl.egg-info/SOURCES.txt +0 -0
  268. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/medfl.egg-info/dependency_links.txt +0 -0
  269. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/medfl.egg-info/requires.txt +0 -0
  270. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/medfl.egg-info/top_level.txt +0 -0
  271. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/.ipynb_checkpoints/trainedModels/binary_classifier.pth +0 -0
  272. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/.ipynb_checkpoints/trainedModels/eicu_binary_classifier.pth +0 -0
  273. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/.ipynb_checkpoints/trainedModels/grid_search_classifier.pth +0 -0
  274. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/.ipynb_checkpoints/trainedModels/new_binary_classifier.pth +0 -0
  275. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/.ipynb_checkpoints/trainedModels/updated_model.pth +0 -0
  276. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/First_Tuto.ipynb +0 -0
  277. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/FL_gen.png +0 -0
  278. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/FTL_comp.png +0 -0
  279. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/FlDatasetDiagramm.png +0 -0
  280. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/GDP.png +0 -0
  281. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/LDP.png +0 -0
  282. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/LearningManager.png +0 -0
  283. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/MEDfl_Diagramm.png +0 -0
  284. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/MEDfl_bachmarking_plan.png +0 -0
  285. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/Modelinit.png +0 -0
  286. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/NetManager_Diagramm.png +0 -0
  287. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/NetworkCreation.png +0 -0
  288. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/createServer.png +0 -0
  289. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/learningresults.png +0 -0
  290. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/logos/mysqllogo.png +0 -0
  291. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/logos/phpmyadmin.png +0 -0
  292. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/logos/wampLogo.png +0 -0
  293. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/logos/xampplogo.png +0 -0
  294. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/modeltest.png +0 -0
  295. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/netMan.png +0 -0
  296. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/nodecreation.png +0 -0
  297. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/optuna_optim_diag.png +0 -0
  298. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/pipeline.png +0 -0
  299. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/Images/strategy.png +0 -0
  300. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/banchmarking/MEDfl_benchmarks.ipynb +0 -0
  301. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/banchmarking/banchmarking_plan.md +0 -0
  302. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/banchmarking/benchmarks_results.txt +0 -0
  303. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_1.ipynb +0 -0
  304. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_2.ipynb +0 -0
  305. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/banchmarking/transfer_learning/TL_activated.ipynb +0 -0
  306. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/banchmarking/transfer_learning/TL_dectivated.ipynb +0 -0
  307. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/chunk_1.csv +0 -0
  308. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/chunk_2.csv +0 -0
  309. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/chunk_3.csv +0 -0
  310. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/config_1/part_1.csv +0 -0
  311. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/config_1/part_2.csv +0 -0
  312. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/config_1/part_3.csv +0 -0
  313. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/config_1/test_1.csv +0 -0
  314. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/config_1/test_2.csv +0 -0
  315. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/eicu_sapsii_data.csv +0 -0
  316. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/eicu_sapsii_data_test.csv +0 -0
  317. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/eicu_sapsii_data_test_1.csv +0 -0
  318. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/masterDataSet/Mimic_ouael.csv +0 -0
  319. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/masterDataSet/Mimic_train.csv +0 -0
  320. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/masterDataSet/eICU.csv +0 -0
  321. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/nodesData/output_1.csv +0 -0
  322. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/nodesData/output_2.csv +0 -0
  323. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/nodesData/output_3.csv +0 -0
  324. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/nodesData/output_4.csv +0 -0
  325. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/nodesData/output_5.csv +0 -0
  326. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/test_1.csv +0 -0
  327. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/test_2.csv +0 -0
  328. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/test_3.csv +0 -0
  329. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/data/validation/Mimic_validation.csv +0 -0
  330. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/eicu_test.csv +0 -0
  331. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/eicu_test_1.csv +0 -0
  332. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/eicu_test_2.csv +0 -0
  333. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/eicu_test_3.csv +0 -0
  334. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/sapsii_score_knnimputed_eicu.csv +0 -0
  335. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/1_DB.ipynb +0 -0
  336. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/2_NetManager.ipynb +0 -0
  337. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/3_TransferLearning copy.ipynb +0 -0
  338. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/3_TransferLearning.ipynb +0 -0
  339. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/4_LearningManager.ipynb +0 -0
  340. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/5_LearningResults.ipynb +0 -0
  341. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/6_ModelChoice.ipynb +0 -0
  342. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/7_ParamsOptimiser.ipynb +0 -0
  343. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/8_complete_tutorial.ipynb +0 -0
  344. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/newplot2.png +0 -0
  345. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/notebooks/tutorial/newplot4.png +0 -0
  346. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/requirements.txt +0 -0
  347. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/setup.cfg +0 -0
  348. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/setup_mysql.sh +0 -0
  349. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/__init__.py +0 -0
  350. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/__pycache__/test_dataset.cpython-38.pyc +0 -0
  351. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/__pycache__/test_federated_dataset.cpython-38.pyc +0 -0
  352. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/__pycache__/test_flpipeline.cpython-38.pyc +0 -0
  353. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/__pycache__/test_flsetup.cpython-38.pyc +0 -0
  354. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/__pycache__/test_network.cpython-38.pyc +0 -0
  355. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/__pycache__/test_node.cpython-38.pyc +0 -0
  356. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/test_dataset.py +0 -0
  357. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/test_federated_dataset.py +0 -0
  358. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/test_flpipeline.py +0 -0
  359. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/test_flsetup.py +0 -0
  360. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/test_network.py +0 -0
  361. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/tests/test_node.py +0 -0
  362. {MEDfl-2.0.5.dev0 → medfl-2.0.5.dev1}/workflows/migration.yml +0 -0
@@ -0,0 +1,512 @@
1
+ # client.py
2
+
3
+ import argparse
4
+ import pandas as pd
5
+ import flwr as fl
6
+ import torch
7
+ import torch.nn as nn
8
+ import torch.optim as optim
9
+ from torch.utils.data import TensorDataset, DataLoader
10
+ from sklearn.metrics import accuracy_score, roc_auc_score
11
+ from sklearn.model_selection import train_test_split
12
+ from MEDfl.rw.model import Net # votre définition de modèle
13
+ import socket
14
+ import platform
15
+ import psutil
16
+ import shutil
17
+ import numpy as np
18
+
19
+ try:
20
+ import GPUtil
21
+ except ImportError:
22
+ GPUtil = None
23
+
24
+
25
+ class DPConfig:
26
+ """
27
+ Configuration for differential privacy.
28
+
29
+ Attributes:
30
+ noise_multiplier (float): Noise multiplier for DP.
31
+ max_grad_norm (float): Maximum gradient norm for clipping.
32
+ batch_size (int): Batch size for training.
33
+ secure_rng (bool): Use a secure random generator.
34
+ """
35
+
36
+ def __init__(
37
+ self,
38
+ noise_multiplier: float = 1.0,
39
+ max_grad_norm: float = 1.0,
40
+ batch_size: int = 32,
41
+ secure_rng: bool = False,
42
+ ):
43
+ self.noise_multiplier = noise_multiplier
44
+ self.max_grad_norm = max_grad_norm
45
+ self.batch_size = batch_size
46
+ self.secure_rng = secure_rng
47
+
48
+
49
+ class FlowerClient(fl.client.NumPyClient):
50
+ def __init__(
51
+ self,
52
+ server_address: str,
53
+ data_path: str = "data/data.csv",
54
+ dp_config: DPConfig = None,
55
+ # NEW (optional client overrides; do NOT remove old args)
56
+ val_frac: float | None = None,
57
+ test_frac: float | None = None,
58
+ id_col: str | None = None,
59
+ test_ids: str | None = None,
60
+ seed: int = 42,
61
+ ):
62
+ self.server_address = server_address
63
+ self.dp_config = dp_config
64
+ self.client_val_frac = val_frac
65
+ self.client_test_frac = test_frac
66
+ self.id_col = id_col
67
+ self.test_ids = test_ids
68
+ self.seed = seed
69
+
70
+ # Load the CSV once; actual column selection happens on first fit using server config
71
+ self._df = pd.read_csv(data_path)
72
+
73
+ # Defaults used only for get_properties BEFORE first fit (last column target)
74
+ self.feature_names = self._df.columns[:-1].tolist()
75
+ self.target_name = self._df.columns[-1]
76
+ self.label_counts = self._df[self.target_name].value_counts().to_dict()
77
+ self.classes = sorted(self.label_counts.keys())
78
+
79
+ # Tensors for metrics before first fit (fallback to all-but-last as features)
80
+ X_default = self._df.iloc[:, :-1].values
81
+ y_default = self._df.iloc[:, -1].values
82
+ self.X_tensor = torch.tensor(X_default, dtype=torch.float32)
83
+ self.y_tensor = torch.tensor(y_default, dtype=torch.float32)
84
+
85
+ # Placeholders; we lazily build loaders/model on the first fit when we see server config
86
+ self.train_loader: DataLoader | None = None
87
+ self.val_loader: DataLoader | None = None
88
+ self.test_loader: DataLoader | None = None
89
+
90
+ self.model: Net | None = None
91
+ self.criterion = nn.BCEWithLogitsLoss()
92
+ self.optimizer: optim.Optimizer | None = None
93
+
94
+ # Effective settings (filled at first fit)
95
+ self.effective_features: list[str] = self.feature_names[:]
96
+ self.effective_target: str = self.target_name
97
+ self.effective_val_frac: float = float(self.client_val_frac) if self.client_val_frac is not None else 0.0
98
+ self.effective_test_frac: float = float(self.client_test_frac) if self.client_test_frac is not None else 0.0
99
+
100
+ self._initialized = False
101
+ self._dp_attached = False # to avoid wrapping twice
102
+
103
+ # ---------- helpers
104
+
105
+ def _mk_loader(self, X: np.ndarray, y: np.ndarray, batch_size: int, shuffle: bool) -> DataLoader:
106
+ x_t = torch.tensor(X, dtype=torch.float32)
107
+ y_t = torch.tensor(y, dtype=torch.float32)
108
+ return DataLoader(TensorDataset(x_t, y_t), batch_size=batch_size, shuffle=shuffle)
109
+
110
+ def _lazy_init_from_server_config(self, config: dict):
111
+ """
112
+ Build model and (train, val, test) loaders once, using:
113
+ - Server-enforced schema: config['features'] (comma-separated), config['target']
114
+ - Split fractions: client overrides win; else use server's val_fraction/test_fraction
115
+ """
116
+ # ---------- schema from server (enforced if provided)
117
+ srv_features = (config.get("features") or "").strip()
118
+ srv_target = (config.get("target") or "").strip()
119
+ print(f"[Client] Initializing with server schema: features='{srv_features}', target='{srv_target}'")
120
+
121
+ if srv_target:
122
+ if srv_target not in self._df.columns:
123
+ raise ValueError(f"Server-specified target '{srv_target}' not in CSV columns {list(self._df.columns)}")
124
+ target_col = srv_target
125
+ else:
126
+ target_col = self._df.columns[-1] # fallback (keeps backward compatibility)
127
+
128
+ if srv_features:
129
+ feat_cols = [c.strip() for c in srv_features.split(",") if c.strip()]
130
+ missing = [c for c in feat_cols if c not in self._df.columns]
131
+ if missing:
132
+ raise ValueError(f"Server-specified feature(s) not found in CSV: {missing}")
133
+ else:
134
+ feat_cols = [c for c in self._df.columns if c != target_col]
135
+
136
+ # ---------- fractions: client overrides > server defaults > fallback (0.10/0.10)
137
+ srv_val = config.get("val_fraction", None)
138
+ srv_test = config.get("test_fraction", None)
139
+ val_frac = self.client_val_frac if self.client_val_frac is not None else (float(srv_val) if srv_val is not None else 0.10)
140
+ test_frac = self.client_test_frac if self.client_test_frac is not None else (float(srv_test) if srv_test is not None else 0.10)
141
+
142
+ if not (0.0 <= val_frac < 1.0):
143
+ raise ValueError(f"Invalid val_frac: {val_frac} (must be 0 <= val_frac < 1)")
144
+
145
+ # ---------- extract arrays with the enforced schema
146
+ X_all = self._df[feat_cols].values
147
+ y_all = self._df[target_col].values
148
+
149
+ # Keep tensors for global metrics logging (same behavior as before)
150
+ self.X_tensor = torch.tensor(X_all, dtype=torch.float32)
151
+ self.y_tensor = torch.tensor(y_all, dtype=torch.float32)
152
+
153
+ # ---------- split
154
+ if self.test_ids and self.test_ids.strip(): # ID-based mode
155
+ print("[Client] Using ID-based test selection")
156
+ test_ids_list = [i.strip() for i in self.test_ids.split(',') if i.strip()]
157
+
158
+ if self.id_col and self.id_col in self._df.columns:
159
+ id_series = self._df[self.id_col]
160
+ else:
161
+ print(f"[Client] Falling back to line numbers (index) as IDs since id_col='{self.id_col}' is invalid or not provided")
162
+ id_series = self._df.index
163
+ try:
164
+ test_ids_list = [int(i) for i in test_ids_list]
165
+ except ValueError:
166
+ raise ValueError("Test IDs must be integers when using line numbers as IDs")
167
+
168
+ test_mask = id_series.isin(test_ids_list)
169
+ if not test_mask.any():
170
+ print("[Client] Warning: No matching IDs found for test set; it will be empty")
171
+
172
+ X_test = X_all[test_mask]
173
+ y_test = y_all[test_mask]
174
+ X_trval = X_all[~test_mask]
175
+ y_trval = y_all[~test_mask]
176
+
177
+ actual_test_frac = len(y_test) / len(y_all) if len(y_all) > 0 else 0.0
178
+ if val_frac + actual_test_frac >= 1.0:
179
+ raise ValueError(f"Validation fraction {val_frac} + actual test fraction {actual_test_frac} >= 1.0")
180
+
181
+ self.effective_test_frac = actual_test_frac # For logging
182
+
183
+ else: # Fraction-based mode (existing)
184
+ if not (0.0 <= test_frac < 1.0 and (val_frac + test_frac) < 1.0):
185
+ raise ValueError(f"Invalid fractions: val={val_frac}, test={test_frac} (require 0 <= val,test < 1 and val+test < 1)")
186
+
187
+ strat_all = y_all if len(np.unique(y_all)) > 1 else None
188
+ X_trval, X_test, y_trval, y_test = train_test_split(
189
+ X_all, y_all, test_size=test_frac, random_state=self.seed, stratify=strat_all
190
+ )
191
+
192
+ # Split val from trval (common to both modes)
193
+ if val_frac > 0 and len(y_trval) > 0:
194
+ actual_test_frac = len(y_test) / len(y_all) if len(y_all) > 0 else 0.0
195
+ rel_val = val_frac / (1.0 - actual_test_frac) if (1.0 - actual_test_frac) > 0 else 0.0
196
+ strat_tr = y_trval if len(np.unique(y_trval)) > 1 else None
197
+ X_train, X_val, y_train, y_val = train_test_split(
198
+ X_trval, y_trval, test_size=rel_val, random_state=self.seed, stratify=strat_tr
199
+ )
200
+ else:
201
+ X_train, y_train = X_trval, y_trval
202
+ X_val, y_val = np.empty((0, X_all.shape[1])), np.empty((0,))
203
+
204
+ # ---------- build loaders
205
+ batch_size = self.dp_config.batch_size if self.dp_config else 32
206
+ 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
208
+ self.test_loader = self._mk_loader(X_test, y_test, batch_size, shuffle=False)
209
+
210
+ # ---------- model/optimizer
211
+ input_dim = X_all.shape[1]
212
+ self.model = Net(input_dim)
213
+ self.optimizer = optim.SGD(self.model.parameters(), lr=0.01)
214
+
215
+ # ---------- attach DP (same behavior as before; only wraps the train loader)
216
+ if self.dp_config and not self._dp_attached:
217
+ try:
218
+ from opacus import PrivacyEngine
219
+ privacy_engine = PrivacyEngine()
220
+ (self.model, self.optimizer, self.train_loader) = privacy_engine.make_private(
221
+ module=self.model,
222
+ optimizer=self.optimizer,
223
+ data_loader=self.train_loader,
224
+ noise_multiplier=self.dp_config.noise_multiplier,
225
+ max_grad_norm=self.dp_config.max_grad_norm,
226
+ secure_rng=self.dp_config.secure_rng,
227
+ )
228
+ self._dp_attached = True
229
+ except ImportError:
230
+ print("Opacus non installé : exécution sans DP.")
231
+
232
+ # ---------- record effective settings
233
+ self.effective_features = feat_cols
234
+ self.effective_target = target_col
235
+ self.effective_val_frac = float(val_frac)
236
+ # effective_test_frac already set above if ID mode; otherwise use the input
237
+ if self.test_ids and self.test_ids.strip():
238
+ pass # Already set
239
+ else:
240
+ self.effective_test_frac = float(test_frac)
241
+
242
+ self._initialized = True
243
+ print(f"[Client] Initialized with features={feat_cols}, target={target_col}, val={val_frac}, test={self.effective_test_frac}")
244
+
245
+ # ---------- FL API
246
+
247
+ def get_parameters(self, config):
248
+ # Ensure the model/dataloaders are built before the very first call
249
+ if not self._initialized:
250
+ # Use server config if provided; otherwise fall back to last-col target/all features
251
+ try:
252
+ self._lazy_init_from_server_config(config if isinstance(config, dict) else {})
253
+ 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
+ if not self._initialized:
257
+ self._lazy_init_from_server_config({})
258
+ return [val.cpu().numpy() for val in self.model.state_dict().values()]
259
+
260
+ def set_parameters(self, parameters):
261
+ params_dict = zip(self.model.state_dict().keys(), parameters)
262
+ state_dict = {k: torch.tensor(v) for k, v in params_dict}
263
+ self.model.load_state_dict(state_dict, strict=True)
264
+
265
+ def fit(self, parameters, config):
266
+ # Lazy init when we see the server config for the first time
267
+ if not self._initialized:
268
+ self._lazy_init_from_server_config(config)
269
+
270
+ self.set_parameters(parameters)
271
+ self.model.train()
272
+
273
+ local_epochs = config.get("local_epochs", 5)
274
+ total_loss = 0.0
275
+ print(f"Training for {local_epochs} epochs...")
276
+
277
+ for epoch in range(local_epochs):
278
+ print(f"Epoch {epoch + 1}/{local_epochs}")
279
+ for X_batch, y_batch in self.train_loader:
280
+ self.optimizer.zero_grad()
281
+ outputs = self.model(X_batch)
282
+ loss = self.criterion(outputs.squeeze(), y_batch)
283
+ loss.backward()
284
+ self.optimizer.step()
285
+ total_loss += loss.item() * X_batch.size(0)
286
+
287
+ avg_loss = total_loss / (len(self.train_loader.dataset) * local_epochs)
288
+
289
+ # Compute metrics on FULL data (keeps your previous behavior)
290
+ with torch.no_grad():
291
+ logits = self.model(self.X_tensor).squeeze()
292
+ probs = torch.sigmoid(logits).cpu().numpy()
293
+ y_true = self.y_tensor.cpu().numpy()
294
+ binary_preds = (probs >= 0.5).astype(int)
295
+ try:
296
+ auc = roc_auc_score(y_true, probs)
297
+ except Exception:
298
+ auc = float("nan")
299
+ acc = accuracy_score(y_true, binary_preds)
300
+
301
+ hostname = socket.gethostname()
302
+ os_type = platform.system()
303
+ metrics = {
304
+ "hostname": hostname,
305
+ "os_type": os_type,
306
+ "train_loss": avg_loss,
307
+ "train_accuracy": acc,
308
+ "train_auc": auc,
309
+ # Helpful for debugging/visibility
310
+ "features": ",".join(self.effective_features),
311
+ "target": self.effective_target,
312
+ "val_fraction": self.effective_val_frac,
313
+ "test_fraction": self.effective_test_frac,
314
+ }
315
+
316
+ return self.get_parameters(config), len(self.train_loader.dataset), metrics
317
+
318
+ def evaluate(self, parameters, config):
319
+ # Ensure initialized (in case server calls evaluate before fit on round 1)
320
+ if not self._initialized:
321
+ self._lazy_init_from_server_config(config)
322
+
323
+ self.set_parameters(parameters)
324
+ self.model.eval()
325
+
326
+ # Evaluate on TEST split (not the training loader)
327
+ total_loss = 0.0
328
+ all_probs, all_true = [], []
329
+ with torch.no_grad():
330
+ for X_batch, y_batch in self.test_loader:
331
+ outputs = self.model(X_batch)
332
+ loss = self.criterion(outputs.squeeze(), y_batch)
333
+ total_loss += loss.item() * X_batch.size(0)
334
+ probs = torch.sigmoid(outputs.squeeze()).cpu().numpy()
335
+ all_probs.extend(probs.tolist())
336
+ all_true.extend(y_batch.cpu().numpy().tolist())
337
+
338
+ avg_loss = total_loss / len(self.test_loader.dataset) if len(self.test_loader.dataset) > 0 else 0.0
339
+ binary_preds = [1 if p >= 0.5 else 0 for p in all_probs]
340
+ try:
341
+ auc = roc_auc_score(all_true, all_probs)
342
+ except Exception:
343
+ auc = float("nan")
344
+ acc = accuracy_score(all_true, binary_preds)
345
+
346
+ metrics = {
347
+ "eval_loss": avg_loss,
348
+ "eval_accuracy": acc,
349
+ "eval_auc": auc,
350
+ }
351
+ print(f"Evaluation metrics: {metrics}")
352
+
353
+ return float(avg_loss), len(self.test_loader.dataset), metrics
354
+
355
+ 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
+ hostname = socket.gethostname()
362
+ os_type = platform.system()
363
+
364
+ # If already initialized, report the effective (server-enforced) view
365
+ if self._initialized:
366
+ num_samples = int(self.X_tensor.shape[0])
367
+ num_features = int(self.X_tensor.shape[1])
368
+ features_str = ",".join(self.effective_features)
369
+ target_name = self.effective_target
370
+ label_counts = pd.Series(self.y_tensor.numpy()).value_counts().to_dict()
371
+ classes = sorted(label_counts.keys())
372
+ else:
373
+ num_samples = len(self.X_tensor)
374
+ num_features = self.X_tensor.shape[1]
375
+ features_str = ",".join(self.feature_names)
376
+ target_name = self.target_name
377
+ label_counts = self.label_counts
378
+ classes = self.classes
379
+
380
+ classes_str = ",".join(map(str, classes))
381
+ dist_str = ",".join(f"{cls}:{cnt}" for cls, cnt in label_counts.items())
382
+
383
+ cpu_physical = psutil.cpu_count(logical=False)
384
+ cpu_logical = psutil.cpu_count(logical=True)
385
+ total_mem_gb = round(psutil.virtual_memory().total / (1024**3), 2)
386
+ driver_present = shutil.which('nvidia-smi') is not None
387
+ gpu_count = 0
388
+ if GPUtil and driver_present:
389
+ try:
390
+ gpu_count = len(GPUtil.getGPUs())
391
+ except Exception:
392
+ gpu_count = 0
393
+
394
+ return {
395
+ "hostname": hostname,
396
+ "os_type": os_type,
397
+ "num_samples": num_samples,
398
+ "num_features": num_features,
399
+ "features": features_str,
400
+ "target": target_name,
401
+ "classes": classes_str,
402
+ "label_distribution": dist_str,
403
+ "cpu_physical_cores": cpu_physical,
404
+ "cpu_logical_cores": cpu_logical,
405
+ "total_memory_gb": total_mem_gb,
406
+ "gpu_driver_present": str(driver_present),
407
+ "gpu_count": gpu_count,
408
+ }
409
+
410
+ def start(self) -> None:
411
+ """
412
+ Start this client against its configured server_address.
413
+ Blocks until the server shuts down.
414
+ """
415
+ fl.client.start_numpy_client(
416
+ server_address=self.server_address,
417
+ client=self,
418
+ )
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()
@@ -134,9 +134,8 @@ class Net(nn.Module):
134
134
 
135
135
  @torch.no_grad()
136
136
  def predict(self, x: torch.Tensor) -> torch.Tensor:
137
- """Apply appropriate post-processing for predictions."""
138
- logits = self.forward(x) if self.return_logits else x
139
- probs = self._apply_output_activation(logits) if self.return_logits else logits
137
+ out = self.forward(x) # always run forward
138
+ probs = self._apply_output_activation(out) if self.return_logits else out
140
139
  if self.task == "binary":
141
140
  return (probs >= 0.5).long()
142
141
  elif self.task == "multiclass":
@@ -145,3 +144,4 @@ class Net(nn.Module):
145
144
  return (probs >= 0.5).long()
146
145
  elif self.task == "regression":
147
146
  return probs
147
+