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