flwr-nightly 1.12.0.dev20241007__tar.gz → 1.12.0.dev20241009__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.

Potentially problematic release.


This version of flwr-nightly might be problematic. Click here for more details.

Files changed (309) hide show
  1. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/PKG-INFO +1 -1
  2. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/pyproject.toml +1 -1
  3. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/new.py +2 -0
  4. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +11 -17
  5. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +16 -36
  6. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +4 -5
  7. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +8 -11
  8. flwr_nightly-1.12.0.dev20241009/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +63 -0
  9. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +9 -3
  10. flwr_nightly-1.12.0.dev20241009/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +31 -0
  11. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +7 -2
  12. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +13 -1
  13. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +2 -2
  14. flwr_nightly-1.12.0.dev20241009/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +7 -0
  15. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +3 -3
  16. flwr_nightly-1.12.0.dev20241009/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +67 -0
  17. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +3 -2
  18. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -0
  19. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +2 -0
  20. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/constant.py +3 -0
  21. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/compat/driver_client_proxy.py +15 -29
  22. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/driver/inmemory_driver.py +5 -1
  23. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/state/in_memory_state.py +25 -0
  24. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/state/sqlite_state.py +41 -1
  25. flwr_nightly-1.12.0.dev20241007/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -97
  26. flwr_nightly-1.12.0.dev20241007/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -20
  27. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/LICENSE +0 -0
  28. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/README.md +0 -0
  29. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/__init__.py +0 -0
  30. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/__init__.py +0 -0
  31. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/app.py +0 -0
  32. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/build.py +0 -0
  33. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/config_utils.py +0 -0
  34. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/example.py +0 -0
  35. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/install.py +0 -0
  36. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/log.py +0 -0
  37. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/__init__.py +0 -0
  38. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  39. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  40. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  41. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  42. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  43. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  44. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  45. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  46. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  47. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  48. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  49. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  50. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  51. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  52. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  53. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  54. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  55. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  56. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  57. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  58. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  59. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  60. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  61. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +1 -1
  62. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  63. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  64. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  65. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +1 -1
  66. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  67. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  68. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  69. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  70. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  71. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  72. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  73. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  74. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/run/__init__.py +0 -0
  75. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/run/run.py +0 -0
  76. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/cli/utils.py +0 -0
  77. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/__init__.py +0 -0
  78. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/app.py +0 -0
  79. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/client.py +0 -0
  80. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/client_app.py +0 -0
  81. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/clientapp/__init__.py +0 -0
  82. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/clientapp/app.py +0 -0
  83. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  84. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/clientapp/utils.py +0 -0
  85. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  86. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  87. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  88. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  89. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_client/connection.py +0 -0
  90. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  91. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  92. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  93. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  94. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/heartbeat.py +0 -0
  95. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/message_handler/__init__.py +0 -0
  96. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  97. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  98. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/__init__.py +0 -0
  99. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  100. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/comms_mods.py +0 -0
  101. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  102. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  103. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  104. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  105. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/mod/utils.py +0 -0
  106. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/node_state.py +0 -0
  107. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/node_state_tests.py +0 -0
  108. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/numpy_client.py +0 -0
  109. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/rest_client/__init__.py +0 -0
  110. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/rest_client/connection.py +0 -0
  111. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/supernode/__init__.py +0 -0
  112. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/supernode/app.py +0 -0
  113. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/client/typing.py +0 -0
  114. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/__init__.py +0 -0
  115. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/address.py +0 -0
  116. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/config.py +0 -0
  117. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/context.py +0 -0
  118. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/date.py +0 -0
  119. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/differential_privacy.py +0 -0
  120. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  121. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/dp.py +0 -0
  122. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/exit_handlers.py +0 -0
  123. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/grpc.py +0 -0
  124. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/logger.py +0 -0
  125. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/message.py +0 -0
  126. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/object_ref.py +0 -0
  127. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/parameter.py +0 -0
  128. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/pyproject.py +0 -0
  129. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/record/__init__.py +0 -0
  130. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/record/configsrecord.py +0 -0
  131. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/record/conversion_utils.py +0 -0
  132. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/record/metricsrecord.py +0 -0
  133. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/record/parametersrecord.py +0 -0
  134. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/record/recordset.py +0 -0
  135. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/record/typeddict.py +0 -0
  136. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/recordset_compat.py +0 -0
  137. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/retry_invoker.py +0 -0
  138. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  139. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  140. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  141. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  142. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  143. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  144. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  145. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  146. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/serde.py +0 -0
  147. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/telemetry.py +0 -0
  148. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/typing.py +0 -0
  149. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/common/version.py +0 -0
  150. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/__init__.py +0 -0
  151. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  152. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  153. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  154. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  155. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/common_pb2.py +0 -0
  156. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/common_pb2.pyi +0 -0
  157. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  158. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  159. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/control_pb2.py +0 -0
  160. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/control_pb2.pyi +0 -0
  161. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  162. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  163. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/driver_pb2.py +0 -0
  164. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  165. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  166. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  167. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/error_pb2.py +0 -0
  168. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/error_pb2.pyi +0 -0
  169. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  170. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  171. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/exec_pb2.py +0 -0
  172. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  173. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  174. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  175. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fab_pb2.py +0 -0
  176. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  177. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  178. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  179. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fleet_pb2.py +0 -0
  180. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  181. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  182. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  183. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  184. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  185. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  186. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  187. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/message_pb2.py +0 -0
  188. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/message_pb2.pyi +0 -0
  189. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  190. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  191. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/node_pb2.py +0 -0
  192. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/node_pb2.pyi +0 -0
  193. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  194. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  195. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/recordset_pb2.py +0 -0
  196. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  197. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  198. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  199. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/run_pb2.py +0 -0
  200. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/run_pb2.pyi +0 -0
  201. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  202. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  203. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/task_pb2.py +0 -0
  204. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/task_pb2.pyi +0 -0
  205. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  206. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  207. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/transport_pb2.py +0 -0
  208. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  209. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  210. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  211. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/py.typed +0 -0
  212. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/__init__.py +0 -0
  213. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/app.py +0 -0
  214. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/client_manager.py +0 -0
  215. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/client_proxy.py +0 -0
  216. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/compat/__init__.py +0 -0
  217. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/compat/app.py +0 -0
  218. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/compat/app_utils.py +0 -0
  219. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/compat/legacy_context.py +0 -0
  220. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/criterion.py +0 -0
  221. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/driver/__init__.py +0 -0
  222. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/driver/driver.py +0 -0
  223. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  224. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/history.py +0 -0
  225. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/run_serverapp.py +0 -0
  226. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/server.py +0 -0
  227. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/server_app.py +0 -0
  228. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/server_config.py +0 -0
  229. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/serverapp_components.py +0 -0
  230. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/__init__.py +0 -0
  231. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/aggregate.py +0 -0
  232. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/bulyan.py +0 -0
  233. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  234. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  235. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  236. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  237. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  238. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  239. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedadam.py +0 -0
  240. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedavg.py +0 -0
  241. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  242. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  243. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  244. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedopt.py +0 -0
  245. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedprox.py +0 -0
  246. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  247. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  248. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  249. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  250. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  251. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/krum.py +0 -0
  252. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  253. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/strategy/strategy.py +0 -0
  254. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/__init__.py +0 -0
  255. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  256. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  257. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  258. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  259. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  260. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  261. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  262. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  263. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  264. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  265. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  266. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  267. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  268. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  269. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  270. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  271. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  272. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  273. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  274. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  275. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  276. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  277. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  278. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  279. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  280. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  281. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  282. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  283. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/state/state.py +0 -0
  284. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  285. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/superlink/state/utils.py +0 -0
  286. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/typing.py +0 -0
  287. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/utils/__init__.py +0 -0
  288. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/utils/tensorboard.py +0 -0
  289. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/utils/validator.py +0 -0
  290. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/workflow/__init__.py +0 -0
  291. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/workflow/constant.py +0 -0
  292. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  293. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  294. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  295. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  296. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/simulation/__init__.py +0 -0
  297. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/simulation/app.py +0 -0
  298. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  299. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  300. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  301. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  302. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/simulation/run_simulation.py +0 -0
  303. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/superexec/__init__.py +0 -0
  304. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/superexec/app.py +0 -0
  305. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/superexec/deployment.py +0 -0
  306. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/superexec/exec_grpc.py +0 -0
  307. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/superexec/exec_servicer.py +0 -0
  308. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/superexec/executor.py +0 -0
  309. {flwr_nightly-1.12.0.dev20241007 → flwr_nightly-1.12.0.dev20241009}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.12.0.dev20241007
3
+ Version: 1.12.0.dev20241009
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.12.0.dev20241007"
7
+ version = "1.12.0.dev20241009"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -240,6 +240,8 @@ def new(
240
240
  MlFramework.HUGGINGFACE.value,
241
241
  MlFramework.MLX.value,
242
242
  MlFramework.TENSORFLOW.value,
243
+ MlFramework.SKLEARN.value,
244
+ MlFramework.NUMPY.value,
243
245
  ]
244
246
  if framework_str in frameworks_with_tasks:
245
247
  files[f"{import_name}/task.py"] = {
@@ -1,9 +1,9 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
3
  import jax
4
- from flwr.client import NumPyClient, ClientApp
5
- from flwr.common import Context
6
4
 
5
+ from flwr.client import ClientApp, NumPyClient
6
+ from flwr.common import Context
7
7
  from $import_name.task import (
8
8
  evaluation,
9
9
  get_params,
@@ -17,37 +17,31 @@ from $import_name.task import (
17
17
 
18
18
  # Define Flower Client and client_fn
19
19
  class FlowerClient(NumPyClient):
20
- def __init__(self):
20
+ def __init__(self, input_dim):
21
21
  self.train_x, self.train_y, self.test_x, self.test_y = load_data()
22
22
  self.grad_fn = jax.grad(loss_fn)
23
- model_shape = self.train_x.shape[1:]
24
-
25
- self.params = load_model(model_shape)
26
-
27
- def get_parameters(self, config):
28
- return get_params(self.params)
29
-
30
- def set_parameters(self, parameters):
31
- set_params(self.params, parameters)
23
+ self.params = load_model((input_dim,))
32
24
 
33
25
  def fit(self, parameters, config):
34
- self.set_parameters(parameters)
26
+ set_params(self.params, parameters)
35
27
  self.params, loss, num_examples = train(
36
28
  self.params, self.grad_fn, self.train_x, self.train_y
37
29
  )
38
- parameters = self.get_parameters(config={})
39
- return parameters, num_examples, {"loss": float(loss)}
30
+ return get_params(self.params), num_examples, {"loss": float(loss)}
40
31
 
41
32
  def evaluate(self, parameters, config):
42
- self.set_parameters(parameters)
33
+ set_params(self.params, parameters)
43
34
  loss, num_examples = evaluation(
44
35
  self.params, self.grad_fn, self.test_x, self.test_y
45
36
  )
46
37
  return float(loss), num_examples, {"loss": float(loss)}
47
38
 
39
+
48
40
  def client_fn(context: Context):
41
+ input_dim = context.run_config["input-dim"]
42
+
49
43
  # Return Client instance
50
- return FlowerClient().to_client()
44
+ return FlowerClient(input_dim).to_client()
51
45
 
52
46
 
53
47
  # Flower ClientApp
@@ -3,17 +3,18 @@
3
3
  import mlx.core as mx
4
4
  import mlx.nn as nn
5
5
  import mlx.optimizers as optim
6
- from flwr.client import NumPyClient, ClientApp
7
- from flwr.common import Context
8
6
 
7
+ from flwr.client import ClientApp, NumPyClient
8
+ from flwr.common import Context
9
+ from flwr.common.config import UserConfig
9
10
  from $import_name.task import (
11
+ MLP,
10
12
  batch_iterate,
11
13
  eval_fn,
12
14
  get_params,
13
15
  load_data,
14
16
  loss_fn,
15
17
  set_params,
16
- MLP,
17
18
  )
18
19
 
19
20
 
@@ -22,37 +23,24 @@ class FlowerClient(NumPyClient):
22
23
  def __init__(
23
24
  self,
24
25
  data,
25
- num_layers,
26
- hidden_dim,
26
+ run_config: UserConfig,
27
27
  num_classes,
28
- batch_size,
29
- learning_rate,
30
- num_epochs,
31
28
  ):
32
- self.num_layers = num_layers
33
- self.hidden_dim = hidden_dim
34
- self.num_classes = num_classes
35
- self.batch_size = batch_size
36
- self.learning_rate = learning_rate
37
- self.num_epochs = num_epochs
29
+ num_layers = run_config["num-layers"]
30
+ hidden_dim = run_config["hidden-dim"]
31
+ input_dim = run_config["input-dim"]
32
+ batch_size = run_config["batch-size"]
33
+ learning_rate = run_config["lr"]
34
+ self.num_epochs = run_config["local-epochs"]
38
35
 
39
36
  self.train_images, self.train_labels, self.test_images, self.test_labels = data
40
- self.model = MLP(
41
- num_layers, self.train_images.shape[-1], hidden_dim, num_classes
42
- )
37
+ self.model = MLP(num_layers, input_dim, hidden_dim, num_classes)
43
38
  self.optimizer = optim.SGD(learning_rate=learning_rate)
44
39
  self.loss_and_grad_fn = nn.value_and_grad(self.model, loss_fn)
45
- self.num_epochs = num_epochs
46
40
  self.batch_size = batch_size
47
41
 
48
- def get_parameters(self, config):
49
- return get_params(self.model)
50
-
51
- def set_parameters(self, parameters):
52
- set_params(self.model, parameters)
53
-
54
42
  def fit(self, parameters, config):
55
- self.set_parameters(parameters)
43
+ set_params(self.model, parameters)
56
44
  for _ in range(self.num_epochs):
57
45
  for X, y in batch_iterate(
58
46
  self.batch_size, self.train_images, self.train_labels
@@ -60,10 +48,10 @@ class FlowerClient(NumPyClient):
60
48
  _, grads = self.loss_and_grad_fn(self.model, X, y)
61
49
  self.optimizer.update(self.model, grads)
62
50
  mx.eval(self.model.parameters(), self.optimizer.state)
63
- return self.get_parameters(config={}), len(self.train_images), {}
51
+ return get_params(self.model), len(self.train_images), {}
64
52
 
65
53
  def evaluate(self, parameters, config):
66
- self.set_parameters(parameters)
54
+ set_params(self.model, parameters)
67
55
  accuracy = eval_fn(self.model, self.test_images, self.test_labels)
68
56
  loss = loss_fn(self.model, self.test_images, self.test_labels)
69
57
  return loss.item(), len(self.test_images), {"accuracy": accuracy.item()}
@@ -73,18 +61,10 @@ def client_fn(context: Context):
73
61
  partition_id = context.node_config["partition-id"]
74
62
  num_partitions = context.node_config["num-partitions"]
75
63
  data = load_data(partition_id, num_partitions)
76
-
77
- num_layers = context.run_config["num-layers"]
78
- hidden_dim = context.run_config["hidden-dim"]
79
64
  num_classes = 10
80
- batch_size = context.run_config["batch-size"]
81
- learning_rate = context.run_config["lr"]
82
- num_epochs = context.run_config["local-epochs"]
83
65
 
84
66
  # Return Client instance
85
- return FlowerClient(
86
- data, num_layers, hidden_dim, num_classes, batch_size, learning_rate, num_epochs
87
- ).to_client()
67
+ return FlowerClient(data, context.run_config, num_classes).to_client()
88
68
 
89
69
 
90
70
  # Flower ClientApp
@@ -1,16 +1,15 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
- from flwr.client import NumPyClient, ClientApp
3
+ from flwr.client import ClientApp, NumPyClient
4
4
  from flwr.common import Context
5
- import numpy as np
5
+ from $import_name.task import get_dummy_model
6
6
 
7
7
 
8
8
  class FlowerClient(NumPyClient):
9
- def get_parameters(self, config):
10
- return [np.ones((1, 1))]
11
9
 
12
10
  def fit(self, parameters, config):
13
- return ([np.ones((1, 1))], 1, {})
11
+ model = get_dummy_model()
12
+ return [model], 1, {}
14
13
 
15
14
  def evaluate(self, parameters, config):
16
15
  return float(0.0), 1, {"accuracy": float(1.0)}
@@ -1,17 +1,10 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
3
  import torch
4
- from flwr.client import NumPyClient, ClientApp
5
- from flwr.common import Context
6
4
 
7
- from $import_name.task import (
8
- Net,
9
- load_data,
10
- get_weights,
11
- set_weights,
12
- train,
13
- test,
14
- )
5
+ from flwr.client import ClientApp, NumPyClient
6
+ from flwr.common import Context
7
+ from $import_name.task import Net, get_weights, load_data, set_weights, test, train
15
8
 
16
9
 
17
10
  # Define Flower Client and client_fn
@@ -32,7 +25,11 @@ class FlowerClient(NumPyClient):
32
25
  self.local_epochs,
33
26
  self.device,
34
27
  )
35
- return get_weights(self.net), len(self.trainloader.dataset), {"train_loss": train_loss}
28
+ return (
29
+ get_weights(self.net),
30
+ len(self.trainloader.dataset),
31
+ {"train_loss": train_loss},
32
+ )
36
33
 
37
34
  def evaluate(self, parameters, config):
38
35
  set_weights(self.net, parameters)
@@ -0,0 +1,63 @@
1
+ """$project_name: A Flower / $framework_str app."""
2
+
3
+ import warnings
4
+
5
+ from sklearn.metrics import log_loss
6
+
7
+ from flwr.client import ClientApp, NumPyClient
8
+ from flwr.common import Context
9
+ from $import_name.task import (
10
+ get_model,
11
+ get_model_params,
12
+ load_data,
13
+ set_initial_params,
14
+ set_model_params,
15
+ )
16
+
17
+
18
+ class FlowerClient(NumPyClient):
19
+ def __init__(self, model, X_train, X_test, y_train, y_test):
20
+ self.model = model
21
+ self.X_train = X_train
22
+ self.X_test = X_test
23
+ self.y_train = y_train
24
+ self.y_test = y_test
25
+
26
+ def fit(self, parameters, config):
27
+ set_model_params(self.model, parameters)
28
+
29
+ # Ignore convergence failure due to low local epochs
30
+ with warnings.catch_warnings():
31
+ warnings.simplefilter("ignore")
32
+ self.model.fit(self.X_train, self.y_train)
33
+
34
+ return get_model_params(self.model), len(self.X_train), {}
35
+
36
+ def evaluate(self, parameters, config):
37
+ set_model_params(self.model, parameters)
38
+
39
+ loss = log_loss(self.y_test, self.model.predict_proba(self.X_test))
40
+ accuracy = self.model.score(self.X_test, self.y_test)
41
+
42
+ return loss, len(self.X_test), {"accuracy": accuracy}
43
+
44
+
45
+ def client_fn(context: Context):
46
+ partition_id = context.node_config["partition-id"]
47
+ num_partitions = context.node_config["num-partitions"]
48
+
49
+ X_train, X_test, y_train, y_test = load_data(partition_id, num_partitions)
50
+
51
+ # Create LogisticRegression Model
52
+ penalty = context.run_config["penalty"]
53
+ local_epochs = context.run_config["local-epochs"]
54
+ model = get_model(penalty, local_epochs)
55
+
56
+ # Setting initial parameters, akin to model.compile for keras models
57
+ set_initial_params(model)
58
+
59
+ return FlowerClient(model, X_train, X_test, y_train, y_test).to_client()
60
+
61
+
62
+ # Flower ClientApp
63
+ app = ClientApp(client_fn=client_fn)
@@ -1,16 +1,22 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
- from flwr.common import Context
4
- from flwr.server.strategy import FedAvg
3
+ from flwr.common import Context, ndarrays_to_parameters
5
4
  from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
+ from flwr.server.strategy import FedAvg
6
+ from $import_name.task import get_params, load_model
6
7
 
7
8
 
8
9
  def server_fn(context: Context):
9
10
  # Read from config
10
11
  num_rounds = context.run_config["num-server-rounds"]
12
+ input_dim = context.run_config["input-dim"]
13
+
14
+ # Initialize global model
15
+ params = get_params(load_model((input_dim,)))
16
+ initial_parameters = ndarrays_to_parameters(params)
11
17
 
12
18
  # Define strategy
13
- strategy = FedAvg()
19
+ strategy = FedAvg(initial_parameters=initial_parameters)
14
20
  config = ServerConfig(num_rounds=num_rounds)
15
21
 
16
22
  return ServerAppComponents(strategy=strategy, config=config)
@@ -0,0 +1,31 @@
1
+ """$project_name: A Flower / $framework_str app."""
2
+
3
+ from flwr.common import Context, ndarrays_to_parameters
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
+ from flwr.server.strategy import FedAvg
6
+ from $import_name.task import MLP, get_params
7
+
8
+
9
+ def server_fn(context: Context):
10
+ # Read from config
11
+ num_rounds = context.run_config["num-server-rounds"]
12
+
13
+ num_classes = 10
14
+ num_layers = context.run_config["num-layers"]
15
+ input_dim = context.run_config["input-dim"]
16
+ hidden_dim = context.run_config["hidden-dim"]
17
+
18
+ # Initialize global model
19
+ model = MLP(num_layers, input_dim, hidden_dim, num_classes)
20
+ params = get_params(model)
21
+ initial_parameters = ndarrays_to_parameters(params)
22
+
23
+ # Define strategy
24
+ strategy = FedAvg(initial_parameters=initial_parameters)
25
+ config = ServerConfig(num_rounds=num_rounds)
26
+
27
+ return ServerAppComponents(strategy=strategy, config=config)
28
+
29
+
30
+ # Create ServerApp
31
+ app = ServerApp(server_fn=server_fn)
@@ -1,16 +1,21 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
- from flwr.common import Context
3
+ from flwr.common import Context, ndarrays_to_parameters
4
4
  from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
5
  from flwr.server.strategy import FedAvg
6
+ from $import_name.task import get_dummy_model
6
7
 
7
8
 
8
9
  def server_fn(context: Context):
9
10
  # Read from config
10
11
  num_rounds = context.run_config["num-server-rounds"]
11
12
 
13
+ # Initial model
14
+ model = get_dummy_model()
15
+ dummy_parameters = ndarrays_to_parameters([model])
16
+
12
17
  # Define strategy
13
- strategy = FedAvg()
18
+ strategy = FedAvg(initial_parameters=dummy_parameters)
14
19
  config = ServerConfig(num_rounds=num_rounds)
15
20
 
16
21
  return ServerAppComponents(strategy=strategy, config=config)
@@ -1,19 +1,31 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
- from flwr.common import Context
3
+ from flwr.common import Context, ndarrays_to_parameters
4
4
  from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
5
  from flwr.server.strategy import FedAvg
6
+ from $import_name.task import get_model, get_model_params, set_initial_params
6
7
 
7
8
 
8
9
  def server_fn(context: Context):
9
10
  # Read from config
10
11
  num_rounds = context.run_config["num-server-rounds"]
11
12
 
13
+ # Create LogisticRegression Model
14
+ penalty = context.run_config["penalty"]
15
+ local_epochs = context.run_config["local-epochs"]
16
+ model = get_model(penalty, local_epochs)
17
+
18
+ # Setting initial parameters, akin to model.compile for keras models
19
+ set_initial_params(model)
20
+
21
+ initial_parameters = ndarrays_to_parameters(get_model_params(model))
22
+
12
23
  # Define strategy
13
24
  strategy = FedAvg(
14
25
  fraction_fit=1.0,
15
26
  fraction_evaluate=1.0,
16
27
  min_available_clients=2,
28
+ initial_parameters=initial_parameters,
17
29
  )
18
30
  config = ServerConfig(num_rounds=num_rounds)
19
31
 
@@ -2,9 +2,9 @@
2
2
 
3
3
  import jax
4
4
  import jax.numpy as jnp
5
+ import numpy as np
5
6
  from sklearn.datasets import make_regression
6
7
  from sklearn.model_selection import train_test_split
7
- import numpy as np
8
8
 
9
9
  key = jax.random.PRNGKey(0)
10
10
 
@@ -33,7 +33,7 @@ def train(params, grad_fn, X, y):
33
33
  num_examples = X.shape[0]
34
34
  for epochs in range(50):
35
35
  grads = grad_fn(params, X, y)
36
- params = jax.tree_map(lambda p, g: p - 0.05 * g, params, grads)
36
+ params = jax.tree.map(lambda p, g: p - 0.05 * g, params, grads)
37
37
  loss = loss_fn(params, X, y)
38
38
  return params, loss, num_examples
39
39
 
@@ -0,0 +1,7 @@
1
+ """$project_name: A Flower / $framework_str app."""
2
+
3
+ import numpy as np
4
+
5
+
6
+ def get_dummy_model():
7
+ return np.ones((1, 1))
@@ -5,10 +5,10 @@ from collections import OrderedDict
5
5
  import torch
6
6
  import torch.nn as nn
7
7
  import torch.nn.functional as F
8
- from torch.utils.data import DataLoader
9
- from torchvision.transforms import Compose, Normalize, ToTensor
10
8
  from flwr_datasets import FederatedDataset
11
9
  from flwr_datasets.partitioner import IidPartitioner
10
+ from torch.utils.data import DataLoader
11
+ from torchvision.transforms import Compose, Normalize, ToTensor
12
12
 
13
13
 
14
14
  class Net(nn.Module):
@@ -67,7 +67,7 @@ def train(net, trainloader, epochs, device):
67
67
  """Train the model on the training set."""
68
68
  net.to(device) # move model to GPU if available
69
69
  criterion = torch.nn.CrossEntropyLoss().to(device)
70
- optimizer = torch.optim.SGD(net.parameters(), lr=0.1, momentum=0.9)
70
+ optimizer = torch.optim.Adam(net.parameters(), lr=0.01)
71
71
  net.train()
72
72
  running_loss = 0.0
73
73
  for _ in range(epochs):
@@ -0,0 +1,67 @@
1
+ """$project_name: A Flower / $framework_str app."""
2
+
3
+ import numpy as np
4
+ from flwr_datasets import FederatedDataset
5
+ from flwr_datasets.partitioner import IidPartitioner
6
+ from sklearn.linear_model import LogisticRegression
7
+
8
+ fds = None # Cache FederatedDataset
9
+
10
+
11
+ def load_data(partition_id: int, num_partitions: int):
12
+ """Load partition MNIST data."""
13
+ # Only initialize `FederatedDataset` once
14
+ global fds
15
+ if fds is None:
16
+ partitioner = IidPartitioner(num_partitions=num_partitions)
17
+ fds = FederatedDataset(
18
+ dataset="mnist",
19
+ partitioners={"train": partitioner},
20
+ )
21
+
22
+ dataset = fds.load_partition(partition_id, "train").with_format("numpy")
23
+
24
+ X, y = dataset["image"].reshape((len(dataset), -1)), dataset["label"]
25
+
26
+ # Split the on edge data: 80% train, 20% test
27
+ X_train, X_test = X[: int(0.8 * len(X))], X[int(0.8 * len(X)) :]
28
+ y_train, y_test = y[: int(0.8 * len(y))], y[int(0.8 * len(y)) :]
29
+
30
+ return X_train, X_test, y_train, y_test
31
+
32
+
33
+ def get_model(penalty: str, local_epochs: int):
34
+
35
+ return LogisticRegression(
36
+ penalty=penalty,
37
+ max_iter=local_epochs,
38
+ warm_start=True,
39
+ )
40
+
41
+
42
+ def get_model_params(model):
43
+ if model.fit_intercept:
44
+ params = [
45
+ model.coef_,
46
+ model.intercept_,
47
+ ]
48
+ else:
49
+ params = [model.coef_]
50
+ return params
51
+
52
+
53
+ def set_model_params(model, params):
54
+ model.coef_ = params[0]
55
+ if model.fit_intercept:
56
+ model.intercept_ = params[1]
57
+ return model
58
+
59
+
60
+ def set_initial_params(model):
61
+ n_classes = 10 # MNIST has 10 classes
62
+ n_features = 784 # Number of features in dataset
63
+ model.classes_ = np.array([i for i in range(10)])
64
+
65
+ model.coef_ = np.zeros((n_classes, n_features))
66
+ if model.fit_intercept:
67
+ model.intercept_ = np.zeros((n_classes,))
@@ -9,8 +9,8 @@ description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
11
  "flwr[simulation]>=1.10.0",
12
- "jax==0.4.13",
13
- "jaxlib==0.4.13",
12
+ "jax==0.4.30",
13
+ "jaxlib==0.4.30",
14
14
  "scikit-learn==1.3.2",
15
15
  ]
16
16
 
@@ -26,6 +26,7 @@ clientapp = "$import_name.client_app:app"
26
26
 
27
27
  [tool.flwr.app.config]
28
28
  num-server-rounds = 3
29
+ input-dim = 3
29
30
 
30
31
  [tool.flwr.federations]
31
32
  default = "local-simulation"
@@ -28,6 +28,7 @@ clientapp = "$import_name.client_app:app"
28
28
  num-server-rounds = 3
29
29
  local-epochs = 1
30
30
  num-layers = 2
31
+ input-dim = 784 # 28*28
31
32
  hidden-dim = 32
32
33
  batch-size = 256
33
34
  lr = 0.1
@@ -25,6 +25,8 @@ clientapp = "$import_name.client_app:app"
25
25
 
26
26
  [tool.flwr.app.config]
27
27
  num-server-rounds = 3
28
+ penalty = "l2"
29
+ local-epochs = 1
28
30
 
29
31
  [tool.flwr.federations]
30
32
  default = "local-simulation"
@@ -63,7 +63,10 @@ NODE_ID_NUM_BYTES = 8
63
63
 
64
64
  # Constants for FAB
65
65
  APP_DIR = "apps"
66
+ FAB_ALLOWED_EXTENSIONS = {".py", ".toml", ".md"}
66
67
  FAB_CONFIG_FILE = "pyproject.toml"
68
+ FAB_DATE = (2024, 10, 1, 0, 0, 0)
69
+ FAB_HASH_TRUNCATION = 8
67
70
  FLWR_HOME = "FLWR_HOME"
68
71
 
69
72
  # Constants entries in Node config for Simulation
@@ -15,7 +15,6 @@
15
15
  """Flower ClientProxy implementation for Driver API."""
16
16
 
17
17
 
18
- import time
19
18
  from typing import Optional
20
19
 
21
20
  from flwr import common
@@ -25,8 +24,6 @@ from flwr.server.client_proxy import ClientProxy
25
24
 
26
25
  from ..driver.driver import Driver
27
26
 
28
- SLEEP_TIME = 1
29
-
30
27
 
31
28
  class DriverClientProxy(ClientProxy):
32
29
  """Flower client proxy which delegates work using the Driver API."""
@@ -122,29 +119,18 @@ class DriverClientProxy(ClientProxy):
122
119
  ttl=timeout,
123
120
  )
124
121
 
125
- # Push message
126
- message_ids = list(self.driver.push_messages(messages=[message]))
127
- if len(message_ids) != 1:
128
- raise ValueError("Unexpected number of message_ids")
129
-
130
- message_id = message_ids[0]
131
- if message_id == "":
132
- raise ValueError(f"Failed to send message to node {self.node_id}")
133
-
134
- if timeout:
135
- start_time = time.time()
136
-
137
- while True:
138
- messages = list(self.driver.pull_messages(message_ids))
139
- if len(messages) == 1:
140
- msg: Message = messages[0]
141
- if msg.has_error():
142
- raise ValueError(
143
- f"Message contains an Error (reason: {msg.error.reason}). "
144
- "It originated during client-side execution of a message."
145
- )
146
- return msg.content
147
-
148
- if timeout is not None and time.time() > start_time + timeout:
149
- raise RuntimeError("Timeout reached")
150
- time.sleep(SLEEP_TIME)
122
+ # Send message and wait for reply
123
+ messages = list(self.driver.send_and_receive(messages=[message]))
124
+
125
+ # A single reply is expected
126
+ if len(messages) != 1:
127
+ raise ValueError(f"Expected one Message but got: {len(messages)}")
128
+
129
+ # Only messages without errors can be handled beyond these point
130
+ msg: Message = messages[0]
131
+ if msg.has_error():
132
+ raise ValueError(
133
+ f"Message contains an Error (reason: {msg.error.reason}). "
134
+ "It originated during client-side execution of a message."
135
+ )
136
+ return msg.content