MEDfl 2.0.1__tar.gz → 2.0.3__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 (375) hide show
  1. medfl-2.0.3/MEDfl/rw/client.py +39 -0
  2. medfl-2.0.3/MEDfl/rw/model.py +75 -0
  3. medfl-2.0.3/MEDfl/rw/rwConfig.py +21 -0
  4. medfl-2.0.3/MEDfl/rw/server.py +42 -0
  5. medfl-2.0.3/MEDfl/rw/strategy.py +122 -0
  6. {medfl-2.0.1 → medfl-2.0.3}/MEDfl.egg-info/PKG-INFO +1 -1
  7. {medfl-2.0.1 → medfl-2.0.3}/MEDfl.egg-info/SOURCES.txt +6 -0
  8. {medfl-2.0.1 → medfl-2.0.3}/PKG-INFO +1 -1
  9. {medfl-2.0.1 → medfl-2.0.3}/setup.py +1 -1
  10. medfl-2.0.3/tests/__init__.py +0 -0
  11. {medfl-2.0.1 → medfl-2.0.3}/.github/workflows/main.yml +0 -0
  12. {medfl-2.0.1 → medfl-2.0.3}/.gitignore +0 -0
  13. {medfl-2.0.1 → medfl-2.0.3}/.idea/.gitignore +0 -0
  14. {medfl-2.0.1 → medfl-2.0.3}/.idea/MEDfl.iml +0 -0
  15. {medfl-2.0.1 → medfl-2.0.3}/.idea/inspectionProfiles/profiles_settings.xml +0 -0
  16. {medfl-2.0.1 → medfl-2.0.3}/.idea/misc.xml +0 -0
  17. {medfl-2.0.1 → medfl-2.0.3}/.idea/modules.xml +0 -0
  18. {medfl-2.0.1 → medfl-2.0.3}/.idea/vcs.xml +0 -0
  19. {medfl-2.0.1 → medfl-2.0.3}/LICENSE +0 -0
  20. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/__init__.py +0 -0
  21. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/client.py +0 -0
  22. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/dynamicModal.py +0 -0
  23. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/federated_dataset.py +0 -0
  24. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/flpipeline.py +0 -0
  25. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/model.py +0 -0
  26. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/params.yaml +0 -0
  27. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/params_optimiser.py +0 -0
  28. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/plot.py +0 -0
  29. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/server.py +0 -0
  30. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/strategy.py +0 -0
  31. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/LearningManager/utils.py +0 -0
  32. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/__init__.py +0 -0
  33. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/database_connector.py +0 -0
  34. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/dataset.py +0 -0
  35. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/flsetup.py +0 -0
  36. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/net_helper.py +0 -0
  37. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/net_manager_queries.py +0 -0
  38. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/network.py +0 -0
  39. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/NetManager/node.py +0 -0
  40. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/__init__.py +0 -0
  41. {medfl-2.0.1/alembic → medfl-2.0.3/MEDfl/rw}/__init__.py +0 -0
  42. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/scripts/__init__.py +0 -0
  43. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/scripts/base.py +0 -0
  44. {medfl-2.0.1 → medfl-2.0.3}/MEDfl/scripts/create_db.py +0 -0
  45. {medfl-2.0.1 → medfl-2.0.3}/MEDfl.egg-info/dependency_links.txt +0 -0
  46. {medfl-2.0.1 → medfl-2.0.3}/MEDfl.egg-info/requires.txt +0 -0
  47. {medfl-2.0.1 → medfl-2.0.3}/MEDfl.egg-info/top_level.txt +0 -0
  48. {medfl-2.0.1 → medfl-2.0.3}/README.md +0 -0
  49. {medfl-2.0.1 → medfl-2.0.3}/alembic/README +0 -0
  50. {medfl-2.0.1/tests → medfl-2.0.3/alembic}/__init__.py +0 -0
  51. {medfl-2.0.1 → medfl-2.0.3}/alembic/__pycache__/env.cpython-38.pyc +0 -0
  52. {medfl-2.0.1 → medfl-2.0.3}/alembic/alembic_logging.ini +0 -0
  53. {medfl-2.0.1 → medfl-2.0.3}/alembic/debug.log +0 -0
  54. {medfl-2.0.1 → medfl-2.0.3}/alembic/env.py +0 -0
  55. {medfl-2.0.1 → medfl-2.0.3}/alembic/script.py.mako +0 -0
  56. {medfl-2.0.1 → medfl-2.0.3}/alembic/versions/__pycache__/b159ee510a90_initial.cpython-38.pyc +0 -0
  57. {medfl-2.0.1 → medfl-2.0.3}/alembic/versions/b159ee510a90_initial.py +0 -0
  58. {medfl-2.0.1 → medfl-2.0.3}/alembic.ini +0 -0
  59. {medfl-2.0.1 → medfl-2.0.3}/docs/Makefile +0 -0
  60. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.buildinfo +0 -0
  61. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.doctrees/Medfl.LearningManager.doctree +0 -0
  62. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.doctrees/Medfl.NetManager.doctree +0 -0
  63. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.doctrees/Medfl.doctree +0 -0
  64. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.doctrees/environment.pickle +0 -0
  65. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.doctrees/index.doctree +0 -0
  66. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.doctrees/modules.doctree +0 -0
  67. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/.nojekyll +0 -0
  68. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/Medfl.LearningManager.html +0 -0
  69. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/Medfl.NetManager.html +0 -0
  70. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/Medfl.html +0 -0
  71. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/client.html +0 -0
  72. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
  73. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
  74. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/flpipeline.html +0 -0
  75. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/model.html +0 -0
  76. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/plot.html +0 -0
  77. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/server.html +0 -0
  78. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/strategy.html +0 -0
  79. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/LearningManager/utils.html +0 -0
  80. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/NetManager/dataset.html +0 -0
  81. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/NetManager/flsetup.html +0 -0
  82. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/NetManager/net_helper.html +0 -0
  83. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/NetManager/network.html +0 -0
  84. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/Medfl/NetManager/node.html +0 -0
  85. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_modules/index.html +0 -0
  86. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_sources/Medfl.LearningManager.rst.txt +0 -0
  87. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_sources/Medfl.NetManager.rst.txt +0 -0
  88. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_sources/Medfl.rst.txt +0 -0
  89. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_sources/index.rst.txt +0 -0
  90. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_sources/modules.rst.txt +0 -0
  91. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/MEDomics.png +0 -0
  92. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  93. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/basic.css +0 -0
  94. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/badge_only.css +0 -0
  95. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  96. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  97. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  98. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  99. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/fontawesome-webfont.eot +0 -0
  100. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/fontawesome-webfont.svg +0 -0
  101. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  102. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/fontawesome-webfont.woff +0 -0
  103. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  104. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-bold-italic.woff +0 -0
  105. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  106. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-bold.woff +0 -0
  107. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-bold.woff2 +0 -0
  108. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-normal-italic.woff +0 -0
  109. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  110. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-normal.woff +0 -0
  111. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/fonts/lato-normal.woff2 +0 -0
  112. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/css/theme.css +0 -0
  113. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/dark_mode_css/custom.css +0 -0
  114. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/dark_mode_css/dark.css +0 -0
  115. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/dark_mode_css/general.css +0 -0
  116. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/dark_mode_js/default_dark.js +0 -0
  117. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/dark_mode_js/default_light.js +0 -0
  118. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/dark_mode_js/theme_switcher.js +0 -0
  119. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/doctools.js +0 -0
  120. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/documentation_options.js +0 -0
  121. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/file.png +0 -0
  122. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/jquery.js +0 -0
  123. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/js/badge_only.js +0 -0
  124. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/js/html5shiv-printshiv.min.js +0 -0
  125. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/js/html5shiv.min.js +0 -0
  126. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/js/theme.js +0 -0
  127. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/language_data.js +0 -0
  128. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/minus.png +0 -0
  129. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/plus.png +0 -0
  130. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/pygments.css +0 -0
  131. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/searchtools.js +0 -0
  132. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/_static/sphinx_highlight.js +0 -0
  133. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/genindex.html +0 -0
  134. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/index.html +0 -0
  135. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/modules.html +0 -0
  136. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/objects.inv +0 -0
  137. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/py-modindex.html +0 -0
  138. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/search.html +0 -0
  139. {medfl-2.0.1 → medfl-2.0.3}/docs/_build/searchindex.js +0 -0
  140. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/Documentation.doctree +0 -0
  141. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/Installation.doctree +0 -0
  142. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/Medfl.LearningManager.doctree +0 -0
  143. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/Medfl.NetManager.doctree +0 -0
  144. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/Medfl.doctree +0 -0
  145. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/configuration_file.doctree +0 -0
  146. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/environment.pickle +0 -0
  147. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/index.doctree +0 -0
  148. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/modules.doctree +0 -0
  149. {medfl-2.0.1 → medfl-2.0.3}/docs/build/doctrees/tutorials.doctree +0 -0
  150. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/.buildinfo +0 -0
  151. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/.nojekyll +0 -0
  152. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/Documentation.html +0 -0
  153. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/Installation.html +0 -0
  154. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/Medfl.LearningManager.html +0 -0
  155. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/Medfl.NetManager.html +0 -0
  156. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/Medfl.html +0 -0
  157. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/FTL_comp.png +0 -0
  158. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/LearningManager.png +0 -0
  159. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/MEDfl_Diagramm.png +0 -0
  160. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/NetManager_Diagramm.png +0 -0
  161. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/learningresults.png +0 -0
  162. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/mysqllogo.png +0 -0
  163. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/phpmyadmin.png +0 -0
  164. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/wampLogo.png +0 -0
  165. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_images/xampplogo.png +0 -0
  166. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/client.html +0 -0
  167. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/dynamicModal.html +0 -0
  168. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/federated_dataset.html +0 -0
  169. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/flpipeline.html +0 -0
  170. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/model.html +0 -0
  171. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/plot.html +0 -0
  172. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/server.html +0 -0
  173. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/strategy.html +0 -0
  174. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/LearningManager/utils.html +0 -0
  175. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/NetManager/dataset.html +0 -0
  176. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/NetManager/flsetup.html +0 -0
  177. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/NetManager/net_helper.html +0 -0
  178. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/NetManager/network.html +0 -0
  179. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/Medfl/NetManager/node.html +0 -0
  180. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_modules/index.html +0 -0
  181. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/Documentation.rst.txt +0 -0
  182. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/Installation.rst.txt +0 -0
  183. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/Medfl.LearningManager.rst.txt +0 -0
  184. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/Medfl.NetManager.rst.txt +0 -0
  185. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/Medfl.rst.txt +0 -0
  186. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/configuration_file.rst.txt +0 -0
  187. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/index.rst.txt +0 -0
  188. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/modules.rst.txt +0 -0
  189. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_sources/tutorials.rst.txt +0 -0
  190. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/MEDomics.png +0 -0
  191. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/_sphinx_javascript_frameworks_compat.js +0 -0
  192. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/basic.css +0 -0
  193. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/badge_only.css +0 -0
  194. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff +0 -0
  195. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Bold.woff2 +0 -0
  196. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff +0 -0
  197. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/Roboto-Slab-Regular.woff2 +0 -0
  198. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.eot +0 -0
  199. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.svg +0 -0
  200. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.ttf +0 -0
  201. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff +0 -0
  202. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/fontawesome-webfont.woff2 +0 -0
  203. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-bold-italic.woff +0 -0
  204. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-bold-italic.woff2 +0 -0
  205. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-bold.woff +0 -0
  206. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-bold.woff2 +0 -0
  207. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-normal-italic.woff +0 -0
  208. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-normal-italic.woff2 +0 -0
  209. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-normal.woff +0 -0
  210. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/fonts/lato-normal.woff2 +0 -0
  211. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/css/theme.css +0 -0
  212. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/custom.css +0 -0
  213. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/dark_mode_css/custom.css +0 -0
  214. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/dark_mode_css/dark.css +0 -0
  215. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/dark_mode_css/general.css +0 -0
  216. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/dark_mode_js/default_dark.js +0 -0
  217. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/dark_mode_js/default_light.js +0 -0
  218. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/dark_mode_js/theme_switcher.js +0 -0
  219. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/doctools.js +0 -0
  220. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/documentation_options.js +0 -0
  221. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/file.png +0 -0
  222. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/jquery-3.6.0.js +0 -0
  223. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/jquery.js +0 -0
  224. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/js/badge_only.js +0 -0
  225. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/js/html5shiv-printshiv.min.js +0 -0
  226. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/js/html5shiv.min.js +0 -0
  227. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/js/theme.js +0 -0
  228. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/language_data.js +0 -0
  229. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/minus.png +0 -0
  230. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/plus.png +0 -0
  231. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/pygments.css +0 -0
  232. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/searchtools.js +0 -0
  233. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/sphinx_highlight.js +0 -0
  234. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/underscore-1.13.1.js +0 -0
  235. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/_static/underscore.js +0 -0
  236. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/configuration_file.html +0 -0
  237. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/genindex.html +0 -0
  238. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/index.html +0 -0
  239. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/modules.html +0 -0
  240. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/objects.inv +0 -0
  241. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/py-modindex.html +0 -0
  242. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/search.html +0 -0
  243. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/searchindex.js +0 -0
  244. {medfl-2.0.1 → medfl-2.0.3}/docs/build/html/tutorials.html +0 -0
  245. {medfl-2.0.1 → medfl-2.0.3}/docs/make.bat +0 -0
  246. {medfl-2.0.1 → medfl-2.0.3}/docs/source/Documentation.rst +0 -0
  247. {medfl-2.0.1 → medfl-2.0.3}/docs/source/Installation.rst +0 -0
  248. {medfl-2.0.1 → medfl-2.0.3}/docs/source/Medfl.LearningManager.rst +0 -0
  249. {medfl-2.0.1 → medfl-2.0.3}/docs/source/Medfl.NetManager.rst +0 -0
  250. {medfl-2.0.1 → medfl-2.0.3}/docs/source/Medfl.rst +0 -0
  251. {medfl-2.0.1 → medfl-2.0.3}/docs/source/_static/custom.css +0 -0
  252. {medfl-2.0.1 → medfl-2.0.3}/docs/source/conf.py +0 -0
  253. {medfl-2.0.1 → medfl-2.0.3}/docs/source/configuration_file.rst +0 -0
  254. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/FL_gen.png +0 -0
  255. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/FTL_comp.png +0 -0
  256. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/FlDatasetDiagramm.png +0 -0
  257. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/GDP.png +0 -0
  258. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/LDP.png +0 -0
  259. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/LearningManager.png +0 -0
  260. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/MEDfl_Diagramm.png +0 -0
  261. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/Modelinit.png +0 -0
  262. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/NetManager_Diagramm.png +0 -0
  263. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/NetworkCreation.png +0 -0
  264. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/createServer.png +0 -0
  265. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/learningresults.png +0 -0
  266. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/logos/mysqllogo.png +0 -0
  267. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/logos/phpmyadmin.png +0 -0
  268. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/logos/wampLogo.png +0 -0
  269. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/logos/xampplogo.png +0 -0
  270. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/modeltest.png +0 -0
  271. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/netMan.png +0 -0
  272. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/nodecreation.png +0 -0
  273. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/pipeline.png +0 -0
  274. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/Images/strategy.png +0 -0
  275. {medfl-2.0.1 → medfl-2.0.3}/docs/source/figures/MEDomics.png +0 -0
  276. {medfl-2.0.1 → medfl-2.0.3}/docs/source/index.rst +0 -0
  277. {medfl-2.0.1 → medfl-2.0.3}/docs/source/modules.rst +0 -0
  278. {medfl-2.0.1 → medfl-2.0.3}/docs/source/tutorials.rst +0 -0
  279. {medfl-2.0.1 → medfl-2.0.3}/global_params.yaml +0 -0
  280. {medfl-2.0.1 → medfl-2.0.3}/medfl.egg-info/PKG-INFO +0 -0
  281. {medfl-2.0.1 → medfl-2.0.3}/medfl.egg-info/SOURCES.txt +0 -0
  282. {medfl-2.0.1 → medfl-2.0.3}/medfl.egg-info/dependency_links.txt +0 -0
  283. {medfl-2.0.1 → medfl-2.0.3}/medfl.egg-info/requires.txt +0 -0
  284. {medfl-2.0.1 → medfl-2.0.3}/medfl.egg-info/top_level.txt +0 -0
  285. {medfl-2.0.1 → medfl-2.0.3}/notebooks/.ipynb_checkpoints/trainedModels/binary_classifier.pth +0 -0
  286. {medfl-2.0.1 → medfl-2.0.3}/notebooks/.ipynb_checkpoints/trainedModels/eicu_binary_classifier.pth +0 -0
  287. {medfl-2.0.1 → medfl-2.0.3}/notebooks/.ipynb_checkpoints/trainedModels/grid_search_classifier.pth +0 -0
  288. {medfl-2.0.1 → medfl-2.0.3}/notebooks/.ipynb_checkpoints/trainedModels/new_binary_classifier.pth +0 -0
  289. {medfl-2.0.1 → medfl-2.0.3}/notebooks/.ipynb_checkpoints/trainedModels/updated_model.pth +0 -0
  290. {medfl-2.0.1 → medfl-2.0.3}/notebooks/First_Tuto.ipynb +0 -0
  291. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/FL_gen.png +0 -0
  292. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/FTL_comp.png +0 -0
  293. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/FlDatasetDiagramm.png +0 -0
  294. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/GDP.png +0 -0
  295. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/LDP.png +0 -0
  296. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/LearningManager.png +0 -0
  297. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/MEDfl_Diagramm.png +0 -0
  298. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/MEDfl_bachmarking_plan.png +0 -0
  299. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/Modelinit.png +0 -0
  300. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/NetManager_Diagramm.png +0 -0
  301. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/NetworkCreation.png +0 -0
  302. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/createServer.png +0 -0
  303. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/learningresults.png +0 -0
  304. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/logos/mysqllogo.png +0 -0
  305. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/logos/phpmyadmin.png +0 -0
  306. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/logos/wampLogo.png +0 -0
  307. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/logos/xampplogo.png +0 -0
  308. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/modeltest.png +0 -0
  309. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/netMan.png +0 -0
  310. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/nodecreation.png +0 -0
  311. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/optuna_optim_diag.png +0 -0
  312. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/pipeline.png +0 -0
  313. {medfl-2.0.1 → medfl-2.0.3}/notebooks/Images/strategy.png +0 -0
  314. {medfl-2.0.1 → medfl-2.0.3}/notebooks/banchmarking/MEDfl_benchmarks.ipynb +0 -0
  315. {medfl-2.0.1 → medfl-2.0.3}/notebooks/banchmarking/banchmarking_plan.md +0 -0
  316. {medfl-2.0.1 → medfl-2.0.3}/notebooks/banchmarking/benchmarks_results.txt +0 -0
  317. {medfl-2.0.1 → medfl-2.0.3}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_1.ipynb +0 -0
  318. {medfl-2.0.1 → medfl-2.0.3}/notebooks/banchmarking/network_architecture/net_bachmarking_conf_2.ipynb +0 -0
  319. {medfl-2.0.1 → medfl-2.0.3}/notebooks/banchmarking/transfer_learning/TL_activated.ipynb +0 -0
  320. {medfl-2.0.1 → medfl-2.0.3}/notebooks/banchmarking/transfer_learning/TL_dectivated.ipynb +0 -0
  321. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/chunk_1.csv +0 -0
  322. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/chunk_2.csv +0 -0
  323. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/chunk_3.csv +0 -0
  324. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/config_1/part_1.csv +0 -0
  325. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/config_1/part_2.csv +0 -0
  326. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/config_1/part_3.csv +0 -0
  327. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/config_1/test_1.csv +0 -0
  328. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/config_1/test_2.csv +0 -0
  329. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/eicu_sapsii_data.csv +0 -0
  330. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/eicu_sapsii_data_test.csv +0 -0
  331. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/eicu_sapsii_data_test_1.csv +0 -0
  332. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/masterDataSet/Mimic_ouael.csv +0 -0
  333. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/masterDataSet/Mimic_train.csv +0 -0
  334. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/masterDataSet/eICU.csv +0 -0
  335. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/nodesData/output_1.csv +0 -0
  336. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/nodesData/output_2.csv +0 -0
  337. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/nodesData/output_3.csv +0 -0
  338. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/nodesData/output_4.csv +0 -0
  339. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/nodesData/output_5.csv +0 -0
  340. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/test_1.csv +0 -0
  341. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/test_2.csv +0 -0
  342. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/test_3.csv +0 -0
  343. {medfl-2.0.1 → medfl-2.0.3}/notebooks/data/validation/Mimic_validation.csv +0 -0
  344. {medfl-2.0.1 → medfl-2.0.3}/notebooks/eicu_test.csv +0 -0
  345. {medfl-2.0.1 → medfl-2.0.3}/notebooks/eicu_test_1.csv +0 -0
  346. {medfl-2.0.1 → medfl-2.0.3}/notebooks/eicu_test_2.csv +0 -0
  347. {medfl-2.0.1 → medfl-2.0.3}/notebooks/eicu_test_3.csv +0 -0
  348. {medfl-2.0.1 → medfl-2.0.3}/notebooks/sapsii_score_knnimputed_eicu.csv +0 -0
  349. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/1_DB.ipynb +0 -0
  350. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/2_NetManager.ipynb +0 -0
  351. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/3_TransferLearning copy.ipynb +0 -0
  352. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/3_TransferLearning.ipynb +0 -0
  353. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/4_LearningManager.ipynb +0 -0
  354. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/5_LearningResults.ipynb +0 -0
  355. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/6_ModelChoice.ipynb +0 -0
  356. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/7_ParamsOptimiser.ipynb +0 -0
  357. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/8_complete_tutorial.ipynb +0 -0
  358. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/newplot2.png +0 -0
  359. {medfl-2.0.1 → medfl-2.0.3}/notebooks/tutorial/newplot4.png +0 -0
  360. {medfl-2.0.1 → medfl-2.0.3}/requirements.txt +0 -0
  361. {medfl-2.0.1 → medfl-2.0.3}/setup.cfg +0 -0
  362. {medfl-2.0.1 → medfl-2.0.3}/setup_mysql.sh +0 -0
  363. {medfl-2.0.1 → medfl-2.0.3}/tests/__pycache__/test_dataset.cpython-38.pyc +0 -0
  364. {medfl-2.0.1 → medfl-2.0.3}/tests/__pycache__/test_federated_dataset.cpython-38.pyc +0 -0
  365. {medfl-2.0.1 → medfl-2.0.3}/tests/__pycache__/test_flpipeline.cpython-38.pyc +0 -0
  366. {medfl-2.0.1 → medfl-2.0.3}/tests/__pycache__/test_flsetup.cpython-38.pyc +0 -0
  367. {medfl-2.0.1 → medfl-2.0.3}/tests/__pycache__/test_network.cpython-38.pyc +0 -0
  368. {medfl-2.0.1 → medfl-2.0.3}/tests/__pycache__/test_node.cpython-38.pyc +0 -0
  369. {medfl-2.0.1 → medfl-2.0.3}/tests/test_dataset.py +0 -0
  370. {medfl-2.0.1 → medfl-2.0.3}/tests/test_federated_dataset.py +0 -0
  371. {medfl-2.0.1 → medfl-2.0.3}/tests/test_flpipeline.py +0 -0
  372. {medfl-2.0.1 → medfl-2.0.3}/tests/test_flsetup.py +0 -0
  373. {medfl-2.0.1 → medfl-2.0.3}/tests/test_network.py +0 -0
  374. {medfl-2.0.1 → medfl-2.0.3}/tests/test_node.py +0 -0
  375. {medfl-2.0.1 → medfl-2.0.3}/workflows/migration.yml +0 -0
@@ -0,0 +1,39 @@
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())
@@ -0,0 +1,75 @@
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)
@@ -0,0 +1,21 @@
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
@@ -0,0 +1,42 @@
1
+
2
+ import flwr as fl
3
+ from flwr.server.strategy import FedAvg
4
+ from flwr.server.server import ServerConfig
5
+ from typing import Optional, Any
6
+ from MEDfl.rw.strategy import Strategy
7
+
8
+ class FederatedServer:
9
+ """
10
+ Wrapper for launching a Flower federated-learning server,
11
+ using a Strategy instance as its strategy attribute.
12
+ """
13
+ def __init__(
14
+ self,
15
+ host: str = "0.0.0.0",
16
+ port: int = 8080,
17
+ num_rounds: int = 3,
18
+ strategy: Optional[Strategy] = None,
19
+ certificates: Optional[Any] = None,
20
+ ):
21
+ self.server_address = f"{host}:{port}"
22
+ self.server_config = ServerConfig(num_rounds=num_rounds)
23
+ # If no custom strategy provided, use default
24
+ self.strategy_wrapper = strategy or Strategy()
25
+ # Build the actual Flower strategy object
26
+ self.strategy_wrapper.create_strategy()
27
+ if self.strategy_wrapper.strategy_object is None:
28
+ raise ValueError("Strategy object not initialized. Call create_strategy() first.")
29
+ self.strategy = self.strategy_wrapper.strategy_object
30
+ self.certificates = certificates
31
+
32
+ def start(self) -> None:
33
+ """
34
+ Start the Flower server with the configured strategy.
35
+ """
36
+ print(f"Starting Flower server on {self.server_address} with strategy {self.strategy_wrapper.name}")
37
+ fl.server.start_server(
38
+ server_address=self.server_address,
39
+ config=self.server_config,
40
+ strategy=self.strategy,
41
+ certificates=self.certificates,
42
+ )
@@ -0,0 +1,122 @@
1
+ import flwr as fl
2
+ from typing import Callable, Optional, Dict, Any, Tuple, List
3
+
4
+ # Custom aggregation for client-returned metrics
5
+
6
+ from typing import List, Tuple, Dict
7
+
8
+ # Custom aggregation for client-returned metrics
9
+ def aggregate_fit_metrics(
10
+ results: List[Tuple[int, Dict[str, float]]]
11
+ ) -> Dict[str, float]:
12
+ """
13
+ Weighted aggregation of training metrics across clients.
14
+ Expects each tuple (num_examples, metrics_dict) to include
15
+ 'train_loss', 'train_accuracy', 'train_auc'.
16
+ """
17
+ # Sum total examples
18
+ total_examples = sum(num_examples for num_examples, _ in results)
19
+ # Weighted averages
20
+ loss = sum(metrics.get("train_loss", 0.0) * num_examples
21
+ for num_examples, metrics in results) / total_examples
22
+ accuracy = sum(metrics.get("train_accuracy", 0.0) * num_examples
23
+ for num_examples, metrics in results) / total_examples
24
+ auc = sum(metrics.get("train_auc", 0.0) * num_examples
25
+ for num_examples, metrics in results) / total_examples
26
+ return {"train_loss": loss, "train_accuracy": accuracy, "train_auc": auc}
27
+
28
+
29
+ def aggregate_eval_metrics(
30
+ results: List[Tuple[int, Dict[str, float]]]
31
+ ) -> Dict[str, float]:
32
+ """
33
+ Weighted aggregation of evaluation metrics across clients.
34
+ Expects each tuple (num_examples, metrics_dict) to include
35
+ 'eval_loss', 'eval_accuracy', 'eval_auc'.
36
+ """
37
+ total_examples = sum(num_examples for num_examples, _ in results)
38
+ loss = sum(metrics.get("eval_loss", 0.0) * num_examples
39
+ for num_examples, metrics in results) / total_examples
40
+ accuracy = sum(metrics.get("eval_accuracy", 0.0) * num_examples
41
+ for num_examples, metrics in results) / total_examples
42
+ auc = sum(metrics.get("eval_auc", 0.0) * num_examples
43
+ for num_examples, metrics in results) / total_examples
44
+ return {"eval_loss": loss, "eval_accuracy": accuracy, "eval_auc": auc}
45
+
46
+ class Strategy:
47
+ """
48
+ A wrapper for Flower server strategies, with custom metric aggregation
49
+ and console logs on aggregation/evaluation completion.
50
+ """
51
+ def __init__(
52
+ self,
53
+ name: str = "FedAvg",
54
+ fraction_fit: float = 1.0,
55
+ fraction_evaluate: float = 1.0,
56
+ min_fit_clients: int = 2,
57
+ min_evaluate_clients: int = 2,
58
+ min_available_clients: int = 2,
59
+ initial_parameters: Optional[List[Any]] = None,
60
+ evaluate_fn: Optional[Callable[
61
+ [int, fl.common.Parameters, Dict[str, Any]],
62
+ Tuple[float, Dict[str, float]]
63
+ ]] = None,
64
+ fit_metrics_aggregation_fn: Optional[
65
+ Callable[[List[Tuple[int, fl.common.FitRes]]], Dict[str, float]]
66
+ ] = None,
67
+ evaluate_metrics_aggregation_fn: Optional[
68
+ Callable[[List[Tuple[int, fl.common.EvaluateRes]]], Dict[str, float]]
69
+ ] = None,
70
+ ) -> None:
71
+ self.name = name
72
+ self.fraction_fit = fraction_fit
73
+ self.fraction_evaluate = fraction_evaluate
74
+ self.min_fit_clients = min_fit_clients
75
+ self.min_evaluate_clients = min_evaluate_clients
76
+ self.min_available_clients = min_available_clients
77
+ self.initial_parameters = initial_parameters or []
78
+ self.evaluate_fn = evaluate_fn
79
+ # Use custom aggregators if provided, else default to ours
80
+ self.fit_metrics_aggregation_fn = fit_metrics_aggregation_fn or aggregate_fit_metrics
81
+ self.evaluate_metrics_aggregation_fn = evaluate_metrics_aggregation_fn or aggregate_eval_metrics
82
+ self.strategy_object: Optional[fl.server.strategy.Strategy] = None
83
+
84
+ def create_strategy(self) -> None:
85
+ # 1) Instantiate the underlying Flower strategy
86
+ StrategyClass = getattr(fl.server.strategy, self.name)
87
+ params: Dict[str, Any] = {
88
+ "fraction_fit": self.fraction_fit,
89
+ "fraction_evaluate": self.fraction_evaluate,
90
+ "min_fit_clients": self.min_fit_clients,
91
+ "min_evaluate_clients": self.min_evaluate_clients,
92
+ "min_available_clients": self.min_available_clients,
93
+ "evaluate_fn": self.evaluate_fn,
94
+ # Plug in our custom aggregators
95
+ "fit_metrics_aggregation_fn": self.fit_metrics_aggregation_fn,
96
+ "evaluate_metrics_aggregation_fn": self.evaluate_metrics_aggregation_fn,
97
+ }
98
+ if self.initial_parameters:
99
+ params["initial_parameters"] = fl.common.ndarrays_to_parameters(
100
+ self.initial_parameters
101
+ )
102
+
103
+ strat = StrategyClass(**params)
104
+
105
+ # 2) Wrap aggregate_fit to log
106
+ original_agg_fit = strat.aggregate_fit
107
+ def logged_aggregate_fit(rnd, results, failures):
108
+ aggregated_params, metrics = original_agg_fit(rnd, results, failures)
109
+ print(f"[Server] ✔ Round {rnd} fit complete → Metrics: {metrics}")
110
+ return aggregated_params, metrics
111
+ strat.aggregate_fit = logged_aggregate_fit # type: ignore
112
+
113
+ # 3) Wrap aggregate_evaluate to log
114
+ original_agg_eval = strat.aggregate_evaluate
115
+ def logged_aggregate_evaluate(rnd, results, failures):
116
+ loss, metrics = original_agg_eval(rnd, results, failures)
117
+ print(results)
118
+ print(f"[Server] ✔ Round {rnd} eval complete → Loss: {loss}, Metrics: {metrics}")
119
+ return loss, metrics
120
+ strat.aggregate_evaluate = logged_aggregate_evaluate # type: ignore
121
+
122
+ self.strategy_object = strat
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MEDfl
3
- Version: 2.0.1
3
+ Version: 2.0.3
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
@@ -39,6 +39,12 @@ MEDfl/NetManager/net_helper.py
39
39
  MEDfl/NetManager/net_manager_queries.py
40
40
  MEDfl/NetManager/network.py
41
41
  MEDfl/NetManager/node.py
42
+ MEDfl/rw/__init__.py
43
+ MEDfl/rw/client.py
44
+ MEDfl/rw/model.py
45
+ MEDfl/rw/rwConfig.py
46
+ MEDfl/rw/server.py
47
+ MEDfl/rw/strategy.py
42
48
  MEDfl/scripts/__init__.py
43
49
  MEDfl/scripts/base.py
44
50
  MEDfl/scripts/create_db.py
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: MEDfl
3
- Version: 2.0.1
3
+ Version: 2.0.3
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
@@ -14,7 +14,7 @@ with open('requirements.txt') as f:
14
14
 
15
15
  setup(
16
16
  name="MEDfl",
17
- version="2.0.1",
17
+ version="2.0.3",
18
18
  author="MEDomics consortium",
19
19
  author_email="medomics.info@gmail.com",
20
20
  description="Python Open-source package for simulating federated learning and differential privacy",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes