MEDfl 2.0.4.dev0__tar.gz → 2.0.4.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.gitignore +3 -0
  2. MEDfl-2.0.4.dev2/MEDfl/rw/client.py +108 -0
  3. MEDfl-2.0.4.dev2/MEDfl/rw/model.py +47 -0
  4. MEDfl-2.0.4.dev2/MEDfl/rw/server.py +135 -0
  5. MEDfl-2.0.4.dev2/MEDfl/rw/strategy.py +135 -0
  6. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl.egg-info/PKG-INFO +2 -32
  7. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl.egg-info/SOURCES.txt +0 -2
  8. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/PKG-INFO +2 -32
  9. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/setup.py +1 -1
  10. medfl-2.0.4.dev0/MEDfl/rw/client.py +0 -39
  11. medfl-2.0.4.dev0/MEDfl/rw/model.py +0 -75
  12. medfl-2.0.4.dev0/MEDfl/rw/rwConfig.py +0 -21
  13. medfl-2.0.4.dev0/MEDfl/rw/server.py +0 -82
  14. medfl-2.0.4.dev0/MEDfl/rw/strategy.py +0 -140
  15. medfl-2.0.4.dev0/MEDfl/rw/verbose_server.py +0 -21
  16. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.github/workflows/main.yml +0 -0
  17. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.idea/.gitignore +0 -0
  18. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.idea/MEDfl.iml +0 -0
  19. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
  20. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.idea/misc.xml +0 -0
  21. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.idea/modules.xml +0 -0
  22. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/.idea/vcs.xml +0 -0
  23. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/LICENSE +0 -0
  24. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/__init__.py +0 -0
  25. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/client.py +0 -0
  26. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/dynamicModal.py +0 -0
  27. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/federated_dataset.py +0 -0
  28. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/flpipeline.py +0 -0
  29. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/model.py +0 -0
  30. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/params.yaml +0 -0
  31. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/params_optimiser.py +0 -0
  32. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/plot.py +0 -0
  33. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/server.py +0 -0
  34. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/strategy.py +0 -0
  35. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/LearningManager/utils.py +0 -0
  36. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/__init__.py +0 -0
  37. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/database_connector.py +0 -0
  38. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/dataset.py +0 -0
  39. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/flsetup.py +0 -0
  40. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/net_helper.py +0 -0
  41. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/net_manager_queries.py +0 -0
  42. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/network.py +0 -0
  43. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/NetManager/node.py +0 -0
  44. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/__init__.py +0 -0
  45. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/rw/__init__.py +0 -0
  46. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/scripts/__init__.py +0 -0
  47. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/scripts/base.py +0 -0
  48. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl/scripts/create_db.py +0 -0
  49. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl.egg-info/dependency_links.txt +0 -0
  50. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl.egg-info/requires.txt +0 -0
  51. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/MEDfl.egg-info/top_level.txt +0 -0
  52. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/README.md +0 -0
  53. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/README +0 -0
  54. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/__init__.py +0 -0
  55. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/__pycache__/env.cpython-38.pyc +0 -0
  56. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/alembic_logging.ini +0 -0
  57. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/debug.log +0 -0
  58. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/env.py +0 -0
  59. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/script.py.mako +0 -0
  60. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/versions/__pycache__/b159ee510a90_initial.cpython-38.pyc +0 -0
  61. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic/versions/b159ee510a90_initial.py +0 -0
  62. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/alembic.ini +0 -0
  63. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/Makefile +0 -0
  64. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.buildinfo +0 -0
  65. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.doctrees/Medfl.LearningManager.doctree +0 -0
  66. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.doctrees/Medfl.NetManager.doctree +0 -0
  67. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.doctrees/Medfl.doctree +0 -0
  68. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.doctrees/environment.pickle +0 -0
  69. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.doctrees/index.doctree +0 -0
  70. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.doctrees/modules.doctree +0 -0
  71. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/.nojekyll +0 -0
  72. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/Medfl.LearningManager.html +0 -0
  73. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/Medfl.NetManager.html +0 -0
  74. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/Medfl.html +0 -0
  75. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/client.html +0 -0
  76. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
  77. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
  78. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/flpipeline.html +0 -0
  79. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/model.html +0 -0
  80. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/plot.html +0 -0
  81. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/server.html +0 -0
  82. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/strategy.html +0 -0
  83. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/LearningManager/utils.html +0 -0
  84. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/NetManager/dataset.html +0 -0
  85. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/NetManager/flsetup.html +0 -0
  86. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/NetManager/net_helper.html +0 -0
  87. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/NetManager/network.html +0 -0
  88. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/Medfl/NetManager/node.html +0 -0
  89. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_modules/index.html +0 -0
  90. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_sources/Medfl.LearningManager.rst.txt +0 -0
  91. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_sources/Medfl.NetManager.rst.txt +0 -0
  92. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_sources/Medfl.rst.txt +0 -0
  93. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_sources/index.rst.txt +0 -0
  94. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_sources/modules.rst.txt +0 -0
  95. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/MEDomics.png +0 -0
  96. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  97. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/basic.css +0 -0
  98. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/badge_only.css +0 -0
  99. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  100. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  101. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  102. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  103. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.eot +0 -0
  104. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.svg +0 -0
  105. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  106. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.woff +0 -0
  107. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  108. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-bold-italic.woff +0 -0
  109. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  110. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-bold.woff +0 -0
  111. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-bold.woff2 +0 -0
  112. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-normal-italic.woff +0 -0
  113. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  114. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-normal.woff +0 -0
  115. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/fonts/lato-normal.woff2 +0 -0
  116. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/css/theme.css +0 -0
  117. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/dark_mode_css/custom.css +0 -0
  118. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/dark_mode_css/dark.css +0 -0
  119. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/dark_mode_css/general.css +0 -0
  120. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/dark_mode_js/default_dark.js +0 -0
  121. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/dark_mode_js/default_light.js +0 -0
  122. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/dark_mode_js/theme_switcher.js +0 -0
  123. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/doctools.js +0 -0
  124. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/documentation_options.js +0 -0
  125. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/file.png +0 -0
  126. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/jquery.js +0 -0
  127. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/js/badge_only.js +0 -0
  128. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/js/html5shiv-printshiv.min.js +0 -0
  129. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/js/html5shiv.min.js +0 -0
  130. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/js/theme.js +0 -0
  131. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/language_data.js +0 -0
  132. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/minus.png +0 -0
  133. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/plus.png +0 -0
  134. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/pygments.css +0 -0
  135. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/searchtools.js +0 -0
  136. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/_static/sphinx_highlight.js +0 -0
  137. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/genindex.html +0 -0
  138. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/index.html +0 -0
  139. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/modules.html +0 -0
  140. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/objects.inv +0 -0
  141. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/py-modindex.html +0 -0
  142. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/search.html +0 -0
  143. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/_build/searchindex.js +0 -0
  144. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/Documentation.doctree +0 -0
  145. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/Installation.doctree +0 -0
  146. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/Medfl.LearningManager.doctree +0 -0
  147. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/Medfl.NetManager.doctree +0 -0
  148. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/Medfl.doctree +0 -0
  149. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/configuration_file.doctree +0 -0
  150. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/environment.pickle +0 -0
  151. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/index.doctree +0 -0
  152. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/modules.doctree +0 -0
  153. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/doctrees/tutorials.doctree +0 -0
  154. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/.buildinfo +0 -0
  155. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/.nojekyll +0 -0
  156. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/Documentation.html +0 -0
  157. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/Installation.html +0 -0
  158. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/Medfl.LearningManager.html +0 -0
  159. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/Medfl.NetManager.html +0 -0
  160. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/Medfl.html +0 -0
  161. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/FTL_comp.png +0 -0
  162. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/LearningManager.png +0 -0
  163. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/MEDfl_Diagramm.png +0 -0
  164. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/NetManager_Diagramm.png +0 -0
  165. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/learningresults.png +0 -0
  166. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/mysqllogo.png +0 -0
  167. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/phpmyadmin.png +0 -0
  168. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/wampLogo.png +0 -0
  169. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_images/xampplogo.png +0 -0
  170. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/client.html +0 -0
  171. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
  172. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
  173. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/flpipeline.html +0 -0
  174. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/model.html +0 -0
  175. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/plot.html +0 -0
  176. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/server.html +0 -0
  177. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/strategy.html +0 -0
  178. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/LearningManager/utils.html +0 -0
  179. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/NetManager/dataset.html +0 -0
  180. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/NetManager/flsetup.html +0 -0
  181. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/NetManager/net_helper.html +0 -0
  182. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/NetManager/network.html +0 -0
  183. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/Medfl/NetManager/node.html +0 -0
  184. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_modules/index.html +0 -0
  185. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/Documentation.rst.txt +0 -0
  186. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/Installation.rst.txt +0 -0
  187. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/Medfl.LearningManager.rst.txt +0 -0
  188. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/Medfl.NetManager.rst.txt +0 -0
  189. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/Medfl.rst.txt +0 -0
  190. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/configuration_file.rst.txt +0 -0
  191. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/index.rst.txt +0 -0
  192. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/modules.rst.txt +0 -0
  193. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_sources/tutorials.rst.txt +0 -0
  194. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/MEDomics.png +0 -0
  195. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  196. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/basic.css +0 -0
  197. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/badge_only.css +0 -0
  198. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  199. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  200. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  201. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  202. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  203. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  204. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  205. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  206. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  207. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  208. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  209. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  210. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  211. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  212. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  213. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  214. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  215. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/css/theme.css +0 -0
  216. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/custom.css +0 -0
  217. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/dark_mode_css/custom.css +0 -0
  218. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/dark_mode_css/dark.css +0 -0
  219. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/dark_mode_css/general.css +0 -0
  220. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/dark_mode_js/default_dark.js +0 -0
  221. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/dark_mode_js/default_light.js +0 -0
  222. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/dark_mode_js/theme_switcher.js +0 -0
  223. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/doctools.js +0 -0
  224. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/documentation_options.js +0 -0
  225. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/file.png +0 -0
  226. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  227. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/jquery.js +0 -0
  228. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/js/badge_only.js +0 -0
  229. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  230. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  231. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/js/theme.js +0 -0
  232. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/language_data.js +0 -0
  233. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/minus.png +0 -0
  234. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/plus.png +0 -0
  235. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/pygments.css +0 -0
  236. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/searchtools.js +0 -0
  237. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/sphinx_highlight.js +0 -0
  238. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  239. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/_static/underscore.js +0 -0
  240. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/configuration_file.html +0 -0
  241. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/genindex.html +0 -0
  242. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/index.html +0 -0
  243. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/modules.html +0 -0
  244. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/objects.inv +0 -0
  245. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/py-modindex.html +0 -0
  246. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/search.html +0 -0
  247. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/searchindex.js +0 -0
  248. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/build/html/tutorials.html +0 -0
  249. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/make.bat +0 -0
  250. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/Documentation.rst +0 -0
  251. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/Installation.rst +0 -0
  252. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/Medfl.LearningManager.rst +0 -0
  253. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/Medfl.NetManager.rst +0 -0
  254. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/Medfl.rst +0 -0
  255. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/_static/custom.css +0 -0
  256. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/conf.py +0 -0
  257. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/configuration_file.rst +0 -0
  258. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/FL_gen.png +0 -0
  259. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/FTL_comp.png +0 -0
  260. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/FlDatasetDiagramm.png +0 -0
  261. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/GDP.png +0 -0
  262. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/LDP.png +0 -0
  263. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/LearningManager.png +0 -0
  264. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/MEDfl_Diagramm.png +0 -0
  265. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/Modelinit.png +0 -0
  266. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/NetManager_Diagramm.png +0 -0
  267. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/NetworkCreation.png +0 -0
  268. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/createServer.png +0 -0
  269. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/learningresults.png +0 -0
  270. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/logos/mysqllogo.png +0 -0
  271. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/logos/phpmyadmin.png +0 -0
  272. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/logos/wampLogo.png +0 -0
  273. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/logos/xampplogo.png +0 -0
  274. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/modeltest.png +0 -0
  275. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/netMan.png +0 -0
  276. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/nodecreation.png +0 -0
  277. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/pipeline.png +0 -0
  278. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/Images/strategy.png +0 -0
  279. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/figures/MEDomics.png +0 -0
  280. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/index.rst +0 -0
  281. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/modules.rst +0 -0
  282. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/docs/source/tutorials.rst +0 -0
  283. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/global_params.yaml +0 -0
  284. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/medfl.egg-info/PKG-INFO +0 -0
  285. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/medfl.egg-info/SOURCES.txt +0 -0
  286. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/medfl.egg-info/dependency_links.txt +0 -0
  287. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/medfl.egg-info/requires.txt +0 -0
  288. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/medfl.egg-info/top_level.txt +0 -0
  289. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/.ipynb_checkpoints/trainedModels/binary_classifier.pth +0 -0
  290. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/.ipynb_checkpoints/trainedModels/eicu_binary_classifier.pth +0 -0
  291. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/.ipynb_checkpoints/trainedModels/grid_search_classifier.pth +0 -0
  292. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/.ipynb_checkpoints/trainedModels/new_binary_classifier.pth +0 -0
  293. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/.ipynb_checkpoints/trainedModels/updated_model.pth +0 -0
  294. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/First_Tuto.ipynb +0 -0
  295. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/FL_gen.png +0 -0
  296. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/FTL_comp.png +0 -0
  297. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/FlDatasetDiagramm.png +0 -0
  298. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/GDP.png +0 -0
  299. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/LDP.png +0 -0
  300. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/LearningManager.png +0 -0
  301. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/MEDfl_Diagramm.png +0 -0
  302. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/MEDfl_bachmarking_plan.png +0 -0
  303. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/Modelinit.png +0 -0
  304. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/NetManager_Diagramm.png +0 -0
  305. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/NetworkCreation.png +0 -0
  306. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/createServer.png +0 -0
  307. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/learningresults.png +0 -0
  308. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/logos/mysqllogo.png +0 -0
  309. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/logos/phpmyadmin.png +0 -0
  310. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/logos/wampLogo.png +0 -0
  311. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/logos/xampplogo.png +0 -0
  312. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/modeltest.png +0 -0
  313. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/netMan.png +0 -0
  314. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/nodecreation.png +0 -0
  315. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/optuna_optim_diag.png +0 -0
  316. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/pipeline.png +0 -0
  317. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/Images/strategy.png +0 -0
  318. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/banchmarking/MEDfl_benchmarks.ipynb +0 -0
  319. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/banchmarking/banchmarking_plan.md +0 -0
  320. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/banchmarking/benchmarks_results.txt +0 -0
  321. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_1.ipynb +0 -0
  322. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_2.ipynb +0 -0
  323. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/banchmarking/transfer_learning/TL_activated.ipynb +0 -0
  324. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/banchmarking/transfer_learning/TL_dectivated.ipynb +0 -0
  325. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/chunk_1.csv +0 -0
  326. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/chunk_2.csv +0 -0
  327. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/chunk_3.csv +0 -0
  328. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/config_1/part_1.csv +0 -0
  329. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/config_1/part_2.csv +0 -0
  330. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/config_1/part_3.csv +0 -0
  331. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/config_1/test_1.csv +0 -0
  332. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/config_1/test_2.csv +0 -0
  333. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/eicu_sapsii_data.csv +0 -0
  334. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/eicu_sapsii_data_test.csv +0 -0
  335. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/eicu_sapsii_data_test_1.csv +0 -0
  336. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/masterDataSet/Mimic_ouael.csv +0 -0
  337. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/masterDataSet/Mimic_train.csv +0 -0
  338. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/masterDataSet/eICU.csv +0 -0
  339. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/nodesData/output_1.csv +0 -0
  340. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/nodesData/output_2.csv +0 -0
  341. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/nodesData/output_3.csv +0 -0
  342. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/nodesData/output_4.csv +0 -0
  343. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/nodesData/output_5.csv +0 -0
  344. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/test_1.csv +0 -0
  345. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/test_2.csv +0 -0
  346. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/test_3.csv +0 -0
  347. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/data/validation/Mimic_validation.csv +0 -0
  348. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/eicu_test.csv +0 -0
  349. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/eicu_test_1.csv +0 -0
  350. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/eicu_test_2.csv +0 -0
  351. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/eicu_test_3.csv +0 -0
  352. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/sapsii_score_knnimputed_eicu.csv +0 -0
  353. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/1_DB.ipynb +0 -0
  354. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/2_NetManager.ipynb +0 -0
  355. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/3_TransferLearning copy.ipynb +0 -0
  356. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/3_TransferLearning.ipynb +0 -0
  357. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/4_LearningManager.ipynb +0 -0
  358. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/5_LearningResults.ipynb +0 -0
  359. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/6_ModelChoice.ipynb +0 -0
  360. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/7_ParamsOptimiser.ipynb +0 -0
  361. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/8_complete_tutorial.ipynb +0 -0
  362. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/newplot2.png +0 -0
  363. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/notebooks/tutorial/newplot4.png +0 -0
  364. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/requirements.txt +0 -0
  365. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/setup.cfg +0 -0
  366. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/setup_mysql.sh +0 -0
  367. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/__init__.py +0 -0
  368. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/__pycache__/test_dataset.cpython-38.pyc +0 -0
  369. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/__pycache__/test_federated_dataset.cpython-38.pyc +0 -0
  370. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/__pycache__/test_flpipeline.cpython-38.pyc +0 -0
  371. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/__pycache__/test_flsetup.cpython-38.pyc +0 -0
  372. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/__pycache__/test_network.cpython-38.pyc +0 -0
  373. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/__pycache__/test_node.cpython-38.pyc +0 -0
  374. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/test_dataset.py +0 -0
  375. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/test_federated_dataset.py +0 -0
  376. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/test_flpipeline.py +0 -0
  377. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/test_flsetup.py +0 -0
  378. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/test_network.py +0 -0
  379. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/tests/test_node.py +0 -0
  380. {medfl-2.0.4.dev0 → MEDfl-2.0.4.dev2}/workflows/migration.yml +0 -0
@@ -1,2 +1,5 @@
1
1
  __pycache__/
2
2
  MEDfl.egg-info/
3
+ fl-env/
4
+ dist/
5
+ build/
@@ -0,0 +1,108 @@
1
+ # client.py
2
+ """
3
+ Federated Learning Client with Optional Differential Privacy.
4
+
5
+ """
6
+
7
+ import argparse
8
+ import pandas as pd
9
+ import flwr as fl
10
+ import torch
11
+ import torch.nn as nn
12
+ import torch.optim as optim
13
+ from torch.utils.data import TensorDataset, DataLoader
14
+ from sklearn.metrics import accuracy_score, roc_auc_score
15
+ from model import Net # Local model definition
16
+ import socket
17
+ import platform
18
+
19
+
20
+ class DPConfig:
21
+ """
22
+ Configuration for Differential Privacy (DP) settings.
23
+
24
+ Attributes:
25
+ noise_multiplier (float): Noise multiplier for DP.
26
+ max_grad_norm (float): Maximum gradient norm (clipping threshold).
27
+ batch_size (int): Batch size for training.
28
+ secure_rng (bool): Whether to use a secure RNG for DP noise.
29
+ """
30
+
31
+ def __init__(
32
+ self,
33
+ noise_multiplier: float = 1.0,
34
+ max_grad_norm: float = 1.0,
35
+ batch_size: int = 32,
36
+ secure_rng: bool = False,
37
+ ):
38
+ self.noise_multiplier = noise_multiplier
39
+ self.max_grad_norm = max_grad_norm
40
+ self.batch_size = batch_size
41
+ self.secure_rng = secure_rng
42
+
43
+
44
+ class FlowerClient(fl.client.NumPyClient):
45
+ """
46
+ FlowerClient: A federated learning client that trains a PyTorch model
47
+ and optionally applies differential privacy.
48
+
49
+ """
50
+
51
+ def __init__(
52
+ self,
53
+ server_address: str,
54
+ data_path: str = "data/data.csv",
55
+ dp_config: DPConfig = None,
56
+ ):
57
+ """
58
+ Initialize client by loading data, creating model, optimizer,
59
+ and optionally enabling DP.
60
+
61
+ Args:
62
+ server_address (str): Flower server address.
63
+ data_path (str): Path to CSV dataset.
64
+ dp_config (DPConfig): Optional DP configuration.
65
+ """
66
+ self.server_address = server_address
67
+
68
+ # ---------- Load Data ----------
69
+ df = pd.read_csv(data_path)
70
+ X = df.iloc[:, :-1].values
71
+ y = df.iloc[:, -1].values
72
+
73
+ self.X_tensor = torch.tensor(X, dtype=torch.float32)
74
+ self.y_tensor = torch.tensor(y, dtype=torch.float32)
75
+
76
+ batch_size = dp_config.batch_size if dp_config else 32
77
+ dataset = TensorDataset(self.X_tensor, self.y_tensor)
78
+ self.train_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
79
+
80
+ # ---------- Model and Optimizer ----------
81
+ input_dim = X.shape[1]
82
+ self.model = Net(input_dim)
83
+ self.criterion = nn.BCEWithLogitsLoss()
84
+ self.optimizer = optim.SGD(self.model.parameters(), lr=0.01)
85
+
86
+ # ---------- Differential Privacy ----------
87
+ self.privacy_engine = None
88
+ if dp_config is not None:
89
+ try:
90
+ from opacus import PrivacyEngine
91
+
92
+ self.privacy_engine = PrivacyEngine()
93
+ self.model, self.optimizer, self.train_loader = self.privacy_engine.make_private(
94
+ module=self.model,
95
+ optimizer=self.optimizer,
96
+ data_loader=self.train_loader,
97
+ noise_multiplier=dp_config.noise_multiplier,
98
+ max_grad_norm=dp_config.max_grad_norm,
99
+ secure_rng=dp_config.secure_rng,
100
+ )
101
+ except ImportError:
102
+ print("⚠️ Opacus not installed, running without DP.")
103
+
104
+ def get_parameters(self, config):
105
+ """
106
+ Get model parameters as a list of NumPy arrays.
107
+ """
108
+ return [val.cpu().numpy() for val in self.mo]()
@@ -0,0 +1,47 @@
1
+ import torch.nn as nn
2
+ import torch.nn.functional as F
3
+
4
+ class Net(nn.Module):
5
+ """
6
+ Net defines a simple feedforward neural network with two hidden layers
7
+
8
+ """
9
+
10
+ def __init__(self, input_dim):
11
+ """
12
+ Initialize the layers of the network.
13
+
14
+ Args:
15
+ input_dim (int): Number of input features.
16
+ """
17
+ super().__init__()
18
+ # First fully connected layer: input_dim → 64
19
+ self.fc1 = nn.Linear(input_dim, 64)
20
+ # Second fully connected layer: 64 → 32
21
+ self.fc2 = nn.Linear(64, 32)
22
+ # Output layer: 32 → 1
23
+ self.fc3 = nn.Linear(32, 1)
24
+ # Dropout with 30% probability
25
+ self.dropout = nn.Dropout(0.3)
26
+ # Batch normalization layers for hidden layers
27
+ self.batchnorm1 = nn.BatchNorm1d(64)
28
+ self.batchnorm2 = nn.BatchNorm1d(32)
29
+
30
+ def forward(self, x):
31
+ """
32
+ Define the forward pass of the network.
33
+
34
+ Args:
35
+ x (torch.Tensor): Input tensor of shape (batch_size, input_dim).
36
+
37
+ Returns:
38
+ torch.Tensor: Output logits of shape (batch_size, 1).
39
+ """
40
+ # Hidden layer 1: linear → batchnorm → ReLU → dropout
41
+ x = F.relu(self.batchnorm1(self.fc1(x)))
42
+ x = self.dropout(x)
43
+ # Hidden layer 2: linear → batchnorm → ReLU → dropout
44
+ x = F.relu(self.batchnorm2(self.fc2(x)))
45
+ x = self.dropout(x)
46
+ # Output layer: linear
47
+ return self.fc3(x) # raw logits for BCEWithLogitsLoss
@@ -0,0 +1,135 @@
1
+ import flwr as fl
2
+ from flwr.server.strategy import FedAvg
3
+ from flwr.server.server import ServerConfig
4
+ from typing import Optional, Any
5
+ from MEDfl.rw.strategy import Strategy
6
+ import asyncio
7
+ from flwr.server.client_manager import ClientManager
8
+ from flwr.server.client_proxy import ClientProxy
9
+ from flwr.common import GetPropertiesIns
10
+ from flwr.common import GetPropertiesIns
11
+
12
+
13
+ class FederatedServer:
14
+ """
15
+ FederatedServer wraps the launch and configuration of a Flower federated learning server.
16
+
17
+ Attributes:
18
+ server_address (str): Server host and port in the format "host:port".
19
+ server_config (ServerConfig): Configuration for the Flower server.
20
+ strategy_wrapper (Strategy): Wrapper around the actual Flower strategy.
21
+ strategy (flwr.server.Strategy): Actual Flower strategy instance.
22
+ certificates (Any): Optional TLS certificates.
23
+ connected_clients (list): List of connected client IDs.
24
+
25
+ Methods:
26
+ start():
27
+ Launch the Flower server with the specified strategy and log client connections.
28
+ """
29
+
30
+ def __init__(
31
+ self,
32
+ host: str = "0.0.0.0",
33
+ port: int = 8080,
34
+ num_rounds: int = 3,
35
+ strategy: Optional[Strategy] = None,
36
+ certificates: Optional[Any] = None,
37
+ ):
38
+ """
39
+ Initialize the FederatedServer.
40
+
41
+ Args:
42
+ host (str): Hostname or IP to bind the server to.
43
+ port (int): Port to listen on.
44
+ num_rounds (int): Number of federated learning rounds to execute.
45
+ strategy (Optional[Strategy]): Optional custom strategy wrapper.
46
+ certificates (Optional[Any]): Optional TLS certificates.
47
+ """
48
+ # Server address and configuration
49
+ self.server_address = f"{host}:{port}"
50
+ self.server_config = ServerConfig(num_rounds=num_rounds)
51
+
52
+ # Use custom or default strategy
53
+ self.strategy_wrapper = strategy or Strategy()
54
+ self.strategy_wrapper.create_strategy()
55
+ if self.strategy_wrapper.strategy_object is None:
56
+ raise ValueError("Strategy object not initialized. Call create_strategy() first.")
57
+ self.strategy = self.strategy_wrapper.strategy_object
58
+
59
+ self.certificates = certificates
60
+ self.connected_clients = [] # Track connected client IDs
61
+
62
+
63
+ def start(self) -> None:
64
+ """
65
+ Start the Flower server with the configured strategy and track client connections.
66
+ """
67
+ print(f"Using strategy: {self.strategy_wrapper.name}")
68
+ print(f"Starting Flower server on {self.server_address} with strategy {self.strategy_wrapper.name}")
69
+
70
+ # Use a custom client manager that logs client connections
71
+ client_manager = TrackingClientManager(self)
72
+
73
+ # Launch the Flower server
74
+ fl.server.start_server(
75
+ server_address=self.server_address,
76
+ config=self.server_config,
77
+ strategy=self.strategy,
78
+ certificates=self.certificates,
79
+ client_manager=client_manager,
80
+ )
81
+
82
+
83
+ class TrackingClientManager(fl.server.client_manager.SimpleClientManager):
84
+ """
85
+ TrackingClientManager extends the default SimpleClientManager to log client connections.
86
+
87
+ Attributes:
88
+ server (FederatedServer): The FederatedServer instance this manager belongs to.
89
+ client_properties (dict): Placeholder for storing client-specific properties.
90
+ """
91
+
92
+ def __init__(self, server: FederatedServer):
93
+ """
94
+ Initialize the TrackingClientManager.
95
+
96
+ Args:
97
+ server (FederatedServer): Reference to the FederatedServer.
98
+ """
99
+ super().__init__()
100
+ self.server = server
101
+ self.client_properties = {}
102
+
103
+ def register(self, client: ClientProxy) -> bool:
104
+ """
105
+ Register a client and log its connection.
106
+
107
+ Args:
108
+ client (ClientProxy): The client proxy being registered.
109
+
110
+ Returns:
111
+ bool: True if the client was registered successfully.
112
+ """
113
+ success = super().register(client)
114
+ if success and client.cid not in self.server.connected_clients:
115
+ # Run the asynchronous hostname fetch synchronously
116
+ asyncio.run(self._fetch_and_log_hostname(client))
117
+ return success
118
+
119
+ async def _fetch_and_log_hostname(self, client: ClientProxy):
120
+ """
121
+ Asynchronously fetch and log the client's hostname or CID.
122
+
123
+ Args:
124
+ client (ClientProxy): The client proxy.
125
+ """
126
+ # Optional: uncomment to fetch hostname from client properties
127
+ # try:
128
+ # ins = GetPropertiesIns(config={})
129
+ # props = await client.get_properties(ins=ins, timeout=10.0, group_id=0)
130
+ # hostname = props.properties.get("hostname", "unknown")
131
+ # except Exception as e:
132
+ # hostname = f"Error: {e}"
133
+
134
+ print(f"✅ Client connected - CID: {client.cid}")
135
+ self.server.connected_clients.append(client.cid)
@@ -0,0 +1,135 @@
1
+ import flwr as fl
2
+ from typing import Callable, Optional, Dict, Any, Tuple, List
3
+ from flwr.common import GetPropertiesIns
4
+ from flwr.server.client_manager import ClientManager
5
+ from flwr.server.client_proxy import ClientProxy
6
+
7
+ # ===================================================
8
+ # Custom metric aggregation functions
9
+ # ===================================================
10
+
11
+ def aggregate_fit_metrics(
12
+ results: List[Tuple[int, Dict[str, float]]]
13
+ ) -> Dict[str, float]:
14
+ total = sum(n for n, _ in results)
15
+ loss = sum(m.get("train_loss", 0.0) * n for n, m in results) / total
16
+ acc = sum(m.get("train_accuracy", 0.0) * n for n, m in results) / total
17
+ auc = sum(m.get("train_auc", 0.0) * n for n, m in results) / total
18
+ return {"train_loss": loss, "train_accuracy": acc, "train_auc": auc}
19
+
20
+ def aggregate_eval_metrics(
21
+ results: List[Tuple[int, Dict[str, float]]]
22
+ ) -> Dict[str, float]:
23
+ total = sum(n for n, _ in results)
24
+ loss = sum(m.get("eval_loss", 0.0) * n for n, m in results) / total
25
+ acc = sum(m.get("eval_accuracy", 0.0) * n for n, m in results) / total
26
+ auc = sum(m.get("eval_auc", 0.0) * n for n, m in results) / total
27
+ return {"eval_loss": loss, "eval_accuracy": acc, "eval_auc": auc}
28
+
29
+ # ===================================================
30
+ # Strategy Wrapper
31
+ # ===================================================
32
+
33
+ class Strategy:
34
+ """
35
+ Flower Strategy wrapper:
36
+ - Custom metric aggregation
37
+ - Per-client & aggregated metric logging
38
+ - Synchronous get_properties() inspection in configure_fit()
39
+ """
40
+
41
+ def __init__(
42
+ self,
43
+ name: str = "FedAvg",
44
+ fraction_fit: float = 1.0,
45
+ fraction_evaluate: float = 1.0,
46
+ min_fit_clients: int = 2,
47
+ min_evaluate_clients: int = 2,
48
+ min_available_clients: int = 2,
49
+ initial_parameters: Optional[List[Any]] = None,
50
+ evaluate_fn: Optional[Callable] = None,
51
+ fit_metrics_aggregation_fn: Optional[Callable] = None,
52
+ evaluate_metrics_aggregation_fn: Optional[Callable] = None,
53
+ ) -> None:
54
+ self.name = name
55
+ self.fraction_fit = fraction_fit
56
+ self.fraction_evaluate = fraction_evaluate
57
+ self.min_fit_clients = min_fit_clients
58
+ self.min_evaluate_clients = min_evaluate_clients
59
+ self.min_available_clients = min_available_clients
60
+ self.initial_parameters = initial_parameters or []
61
+ self.evaluate_fn = evaluate_fn
62
+
63
+ self.fit_metrics_aggregation_fn = fit_metrics_aggregation_fn or aggregate_fit_metrics
64
+ self.evaluate_metrics_aggregation_fn = evaluate_metrics_aggregation_fn or aggregate_eval_metrics
65
+
66
+ self.strategy_object: Optional[fl.server.strategy.Strategy] = None
67
+
68
+ def create_strategy(self) -> None:
69
+ StrategyClass = getattr(fl.server.strategy, self.name)
70
+ params: Dict[str, Any] = {
71
+ "fraction_fit": self.fraction_fit,
72
+ "fraction_evaluate": self.fraction_evaluate,
73
+ "min_fit_clients": self.min_fit_clients,
74
+ "min_evaluate_clients": self.min_evaluate_clients,
75
+ "min_available_clients": self.min_available_clients,
76
+ "evaluate_fn": self.evaluate_fn,
77
+ "fit_metrics_aggregation_fn": self.fit_metrics_aggregation_fn,
78
+ "evaluate_metrics_aggregation_fn": self.evaluate_metrics_aggregation_fn,
79
+ }
80
+ if self.initial_parameters:
81
+ params["initial_parameters"] = fl.common.ndarrays_to_parameters(self.initial_parameters)
82
+
83
+ strat = StrategyClass(**params)
84
+
85
+ # Wrap aggregate_fit to log metrics
86
+ original_agg_fit = strat.aggregate_fit
87
+ def logged_agg_fit(server_round, results, failures):
88
+ print(f"\n[Server] 🔄 Round {server_round} - Client Training Metrics:")
89
+ for i, (client_id, fit_res) in enumerate(results):
90
+ print(f" CTM Round {server_round} Client:{client_id.cid}: {fit_res.metrics}")
91
+ agg_params, metrics = original_agg_fit(server_round, results, failures)
92
+ print(f"[Server] ✅ Round {server_round} - Aggregated Training Metrics: {metrics}\n")
93
+ return agg_params, metrics
94
+ strat.aggregate_fit = logged_agg_fit
95
+
96
+ # Wrap aggregate_evaluate to log metrics
97
+ original_agg_eval = strat.aggregate_evaluate
98
+ def logged_agg_eval(server_round, results, failures):
99
+ print(f"\n[Server] 📊 Round {server_round} - Client Evaluation Metrics:")
100
+ for i, (client_id, eval_res) in enumerate(results):
101
+ print(f" CEM Round {server_round} Client:{client_id.cid}: {eval_res.metrics}")
102
+ loss, metrics = original_agg_eval(server_round, results, failures)
103
+ print(f"[Server] ✅ Round {server_round} - Aggregated Evaluation Metrics:")
104
+ print(f" Loss: {loss}, Metrics: {metrics}\n")
105
+ return loss, metrics
106
+ strat.aggregate_evaluate = logged_agg_eval
107
+
108
+ # Wrap configure_fit to inspect client properties synchronously
109
+ original_conf_fit = strat.configure_fit
110
+ def wrapped_conf_fit(
111
+ server_round: int,
112
+ parameters,
113
+ client_manager: ClientManager
114
+ ):
115
+ selected = original_conf_fit(
116
+ server_round=server_round,
117
+ parameters=parameters,
118
+ client_manager=client_manager
119
+ )
120
+
121
+ # Synchronously fetch & log properties
122
+ ins = GetPropertiesIns(config={})
123
+ for client, _ in selected:
124
+ try:
125
+ props = client.get_properties(ins=ins, timeout=10.0, group_id=0)
126
+ print(f"\n📋 [Round {server_round}] Client {client.cid} Properties:")
127
+ for k, v in props.properties.items():
128
+ print(f" {k}: {v}")
129
+ except Exception as e:
130
+ print(f"⚠️ Failed to get properties from {client.cid}: {e}")
131
+
132
+ return selected
133
+
134
+ strat.configure_fit = wrapped_conf_fit
135
+ self.strategy_object = strat
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: MEDfl
3
- Version: 2.0.4.dev0
3
+ Version: 2.0.4.dev2
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
@@ -17,36 +17,6 @@ Classifier: Programming Language :: Python :: 3.9
17
17
  Requires-Python: >=3.8,<3.13
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: flwr~=1.18.0
21
- Requires-Dist: matplotlib~=3.6.3
22
- Requires-Dist: numpy~=1.26.4
23
- Requires-Dist: opacus~=1.5.3
24
- Requires-Dist: pandas~=1.5.2
25
- Requires-Dist: PyYAML~=6.0
26
- Requires-Dist: setuptools~=68.0.0
27
- Requires-Dist: Sphinx~=5.3.0
28
- Requires-Dist: SQLAlchemy~=1.4.47
29
- Requires-Dist: torch>=2.0.0
30
- Requires-Dist: datetime~=5.1
31
- Requires-Dist: scikit-learn~=1.6.1
32
- Requires-Dist: sphinx-jsonschema==1.19.1
33
- Requires-Dist: sphinx-rtd-dark-mode==1.2.4
34
- Requires-Dist: plotly==5.19.0
35
- Requires-Dist: optuna==3.5.0
36
- Requires-Dist: mysql-connector-python~=9.3.0
37
- Requires-Dist: seaborn~=0.13.2
38
- Dynamic: author
39
- Dynamic: author-email
40
- Dynamic: classifier
41
- Dynamic: description
42
- Dynamic: description-content-type
43
- Dynamic: home-page
44
- Dynamic: keywords
45
- Dynamic: license-file
46
- Dynamic: project-url
47
- Dynamic: requires-dist
48
- Dynamic: requires-python
49
- Dynamic: summary
50
20
 
51
21
  # MEDfl: Federated Learning and Differential Privacy Simulation Tool for Tabular Data
52
22
  ![Python Versions](https://img.shields.io/badge/python-3.9-blue)
@@ -42,10 +42,8 @@ MEDfl/NetManager/node.py
42
42
  MEDfl/rw/__init__.py
43
43
  MEDfl/rw/client.py
44
44
  MEDfl/rw/model.py
45
- MEDfl/rw/rwConfig.py
46
45
  MEDfl/rw/server.py
47
46
  MEDfl/rw/strategy.py
48
- MEDfl/rw/verbose_server.py
49
47
  MEDfl/scripts/__init__.py
50
48
  MEDfl/scripts/base.py
51
49
  MEDfl/scripts/create_db.py
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: MEDfl
3
- Version: 2.0.4.dev0
3
+ Version: 2.0.4.dev2
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
@@ -17,36 +17,6 @@ Classifier: Programming Language :: Python :: 3.9
17
17
  Requires-Python: >=3.8,<3.13
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: flwr~=1.18.0
21
- Requires-Dist: matplotlib~=3.6.3
22
- Requires-Dist: numpy~=1.26.4
23
- Requires-Dist: opacus~=1.5.3
24
- Requires-Dist: pandas~=1.5.2
25
- Requires-Dist: PyYAML~=6.0
26
- Requires-Dist: setuptools~=68.0.0
27
- Requires-Dist: Sphinx~=5.3.0
28
- Requires-Dist: SQLAlchemy~=1.4.47
29
- Requires-Dist: torch>=2.0.0
30
- Requires-Dist: datetime~=5.1
31
- Requires-Dist: scikit-learn~=1.6.1
32
- Requires-Dist: sphinx-jsonschema==1.19.1
33
- Requires-Dist: sphinx-rtd-dark-mode==1.2.4
34
- Requires-Dist: plotly==5.19.0
35
- Requires-Dist: optuna==3.5.0
36
- Requires-Dist: mysql-connector-python~=9.3.0
37
- Requires-Dist: seaborn~=0.13.2
38
- Dynamic: author
39
- Dynamic: author-email
40
- Dynamic: classifier
41
- Dynamic: description
42
- Dynamic: description-content-type
43
- Dynamic: home-page
44
- Dynamic: keywords
45
- Dynamic: license-file
46
- Dynamic: project-url
47
- Dynamic: requires-dist
48
- Dynamic: requires-python
49
- Dynamic: summary
50
20
 
51
21
  # MEDfl: Federated Learning and Differential Privacy Simulation Tool for Tabular Data
52
22
  ![Python Versions](https://img.shields.io/badge/python-3.9-blue)
@@ -14,7 +14,7 @@ with open('requirements.txt') as f:
14
14
 
15
15
  setup(
16
16
  name="MEDfl",
17
- version="2.0.4.dev0",
17
+ version="2.0.4.dev2",
18
18
  author="MEDomics consortium",
19
19
  author_email="medomics.info@gmail.com",
20
20
  description="Python Open-source package for simulating federated learning and differential privacy",
@@ -1,39 +0,0 @@
1
- import flwr as fl
2
- import torch
3
- import torch.nn as nn
4
- import torch.optim as optim
5
- from model import Net
6
-
7
- # Dummy training data
8
- X_train = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
9
- y_train = torch.tensor([[1.0], [0.0]])
10
-
11
- class FlowerClient(fl.client.NumPyClient):
12
- def __init__(self):
13
- self.model = Net()
14
- self.loss_fn = nn.MSELoss()
15
- self.optimizer = optim.SGD(self.model.parameters(), lr=0.01)
16
-
17
- def get_parameters(self, config):
18
- return [val.cpu().numpy() for val in self.model.state_dict().values()]
19
-
20
- def set_parameters(self, parameters):
21
- params_dict = zip(self.model.state_dict().keys(), parameters)
22
- state_dict = {k: torch.tensor(v) for k, v in params_dict}
23
- self.model.load_state_dict(state_dict, strict=True)
24
-
25
- def fit(self, parameters, config):
26
- self.set_parameters(parameters)
27
- self.model.train()
28
- for _ in range(5):
29
- self.optimizer.zero_grad()
30
- output = self.model(X_train)
31
- loss = self.loss_fn(output, y_train)
32
- loss.backward()
33
- self.optimizer.step()
34
- return self.get_parameters(config), len(X_train), {}
35
-
36
- def evaluate(self, parameters, config):
37
- return 0.5, len(X_train), {}
38
-
39
- fl.client.start_numpy_client(server_address="100.65.215.27:8080", client=FlowerClient())
@@ -1,75 +0,0 @@
1
- # client.py
2
- import argparse
3
- import pandas as pd
4
- import flwr as fl
5
- import torch
6
- import torch.nn as nn
7
- import torch.optim as optim
8
- from MEDfl.rw.model import Net # your model definition in model.py
9
-
10
- class FlowerClient(fl.client.NumPyClient):
11
- def __init__(self, server_address: str, data_path: str = "data/data.csv"):
12
- self.server_address = server_address
13
-
14
- # 1. Load model
15
- self.model = Net()
16
- self.loss_fn = nn.MSELoss()
17
- self.optimizer = optim.SGD(self.model.parameters(), lr=0.01)
18
-
19
- # 2. Load data from CSV
20
- df = pd.read_csv(data_path)
21
- # Assume last column is label
22
- X = df.iloc[:, :-1].values
23
- y = df.iloc[:, -1].values
24
-
25
- self.X_train = torch.tensor(X, dtype=torch.float32)
26
- # If it's regression with single output; remove unsqueeze for multi-class
27
- self.y_train = torch.tensor(y, dtype=torch.float32).unsqueeze(1)
28
-
29
- def get_parameters(self, config):
30
- return [val.cpu().numpy() for val in self.model.state_dict().values()]
31
-
32
- def set_parameters(self, parameters):
33
- params_dict = zip(self.model.state_dict().keys(), parameters)
34
- state_dict = {k: torch.tensor(v) for k, v in params_dict}
35
- self.model.load_state_dict(state_dict, strict=True)
36
-
37
- def fit(self, parameters, config):
38
- self.set_parameters(parameters)
39
- self.model.train()
40
- for _ in range(5):
41
- self.optimizer.zero_grad()
42
- preds = self.model(self.X_train)
43
- loss = self.loss_fn(preds, self.y_train)
44
- loss.backward()
45
- self.optimizer.step()
46
- # Return updated params, number of examples, and an empty metrics dict
47
- return self.get_parameters(config), len(self.X_train), {}
48
-
49
- def evaluate(self, parameters, config):
50
- self.set_parameters(parameters)
51
- self.model.eval()
52
- with torch.no_grad():
53
- preds = self.model(self.X_train)
54
- loss = self.loss_fn(preds, self.y_train).item()
55
- return float(loss), len(self.X_train), {}
56
-
57
- if __name__ == "__main__":
58
- parser = argparse.ArgumentParser(description="Flower client")
59
- parser.add_argument(
60
- "--server_address",
61
- type=str,
62
- required=True,
63
- help="Address of the Flower server (e.g., 127.0.0.1:8080)",
64
- )
65
- parser.add_argument(
66
- "--data_path",
67
- type=str,
68
- default="data/data.csv",
69
- help="Path to your CSV training data",
70
- )
71
- args = parser.parse_args()
72
-
73
- # Instantiate and start the client
74
- client = FlowerClient(server_address=args.server_address, data_path=args.data_path)
75
- fl.client.start_numpy_client(server_address=client.server_address, client=client)
@@ -1,21 +0,0 @@
1
- from dataclasses import dataclass
2
-
3
- @dataclass
4
- class RealWorldConfig:
5
- """
6
- Configuration pour un déploiement fédéré en « real world ».
7
-
8
- Attributes:
9
- server_address: Adresse et port du serveur Flower (ex: "0.0.0.0:8080").
10
- num_rounds: Nombre total de tours (rounds) de fédération.
11
- fraction_fit: Fraction des clients participant à la phase de fit chaque round.
12
- fraction_eval: Fraction des clients participant à la phase d'évaluation chaque round.
13
- min_fit_clients: Nombre minimum de clients requis pour lancer la phase de fit.
14
- min_eval_clients: Nombre minimum de clients requis pour la phase d'évaluation.
15
- """
16
- server_address: str
17
- num_rounds: int
18
- fraction_fit: float
19
- fraction_eval: float
20
- min_fit_clients: int
21
- min_eval_clients: int