flwr-nightly 1.11.0.dev20240828__tar.gz → 1.11.1.dev20240911__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 (302) hide show
  1. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/PKG-INFO +1 -1
  2. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/pyproject.toml +10 -6
  3. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/new.py +23 -37
  4. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +19 -29
  5. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -3
  6. flwr_nightly-1.11.1.dev20240911/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +38 -0
  7. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +16 -13
  8. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +9 -1
  9. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/__init__.py +0 -4
  10. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/client_app.py +2 -2
  11. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +15 -7
  12. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/recordset.py +1 -1
  13. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/typeddict.py +24 -1
  14. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/telemetry.py +36 -30
  15. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/__init__.py +0 -4
  16. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/app.py +0 -5
  17. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/grpc_driver.py +1 -3
  18. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -1
  19. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +21 -12
  20. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/ray_actor.py +2 -2
  21. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/run_simulation.py +37 -8
  22. flwr_nightly-1.11.1.dev20240911/src/py/flwr/superexec/__init__.py +15 -0
  23. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/app.py +3 -1
  24. flwr_nightly-1.11.0.dev20240828/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -23
  25. flwr_nightly-1.11.0.dev20240828/src/py/flwr/superexec/__init__.py +0 -21
  26. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/LICENSE +0 -0
  27. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/README.md +0 -0
  28. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/__init__.py +0 -0
  29. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/__init__.py +0 -0
  30. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/app.py +0 -0
  31. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/build.py +0 -0
  32. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/config_utils.py +0 -0
  33. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/example.py +0 -0
  34. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/install.py +0 -0
  35. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/__init__.py +0 -0
  36. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  37. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  38. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  39. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  40. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  41. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  42. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  43. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  44. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  45. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  46. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  47. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  48. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  49. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  50. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  51. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  52. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  53. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  54. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  55. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  56. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  57. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  58. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  59. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  60. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  61. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  62. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  63. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  64. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  65. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  66. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  67. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  68. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  69. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  70. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  71. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  72. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  73. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  74. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  75. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  76. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  77. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  78. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  79. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  80. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  81. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/run/__init__.py +0 -0
  82. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/run/run.py +0 -0
  83. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/utils.py +0 -0
  84. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/app.py +0 -0
  85. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/client.py +0 -0
  86. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/__init__.py +0 -0
  87. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/app.py +0 -0
  88. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  89. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/utils.py +0 -0
  90. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  91. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  92. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  93. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  94. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_client/connection.py +0 -0
  95. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  96. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  97. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  98. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/heartbeat.py +0 -0
  99. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/message_handler/__init__.py +0 -0
  100. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  101. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  102. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/__init__.py +0 -0
  103. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  104. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/comms_mods.py +0 -0
  105. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  106. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  107. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  108. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  109. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/utils.py +0 -0
  110. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/node_state.py +0 -0
  111. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/node_state_tests.py +0 -0
  112. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/numpy_client.py +0 -0
  113. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/rest_client/__init__.py +0 -0
  114. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/rest_client/connection.py +0 -0
  115. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/supernode/__init__.py +0 -0
  116. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/supernode/app.py +0 -0
  117. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/typing.py +0 -0
  118. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/__init__.py +0 -0
  119. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/address.py +0 -0
  120. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/config.py +0 -0
  121. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/constant.py +0 -0
  122. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/context.py +0 -0
  123. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/date.py +0 -0
  124. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/differential_privacy.py +0 -0
  125. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  126. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/dp.py +0 -0
  127. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/exit_handlers.py +0 -0
  128. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/grpc.py +0 -0
  129. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/logger.py +0 -0
  130. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/message.py +0 -0
  131. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/object_ref.py +0 -0
  132. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/parameter.py +0 -0
  133. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/pyproject.py +0 -0
  134. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/__init__.py +0 -0
  135. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/configsrecord.py +0 -0
  136. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/conversion_utils.py +0 -0
  137. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/metricsrecord.py +0 -0
  138. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/parametersrecord.py +0 -0
  139. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/recordset_compat.py +0 -0
  140. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/retry_invoker.py +0 -0
  141. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  142. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  143. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  144. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  145. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  146. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  147. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  148. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  149. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/serde.py +0 -0
  150. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/typing.py +0 -0
  151. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/version.py +0 -0
  152. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/__init__.py +0 -0
  153. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  154. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  155. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2.py +0 -0
  158. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2.pyi +0 -0
  159. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2.py +0 -0
  162. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  163. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2.py +0 -0
  166. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2.pyi +0 -0
  167. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2.py +0 -0
  170. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  171. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2.py +0 -0
  174. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  175. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2.py +0 -0
  178. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  179. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  182. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  183. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2.py +0 -0
  186. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2.pyi +0 -0
  187. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2.py +0 -0
  190. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2.pyi +0 -0
  191. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2.py +0 -0
  194. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  195. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2.py +0 -0
  198. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2.pyi +0 -0
  199. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2.py +0 -0
  202. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2.pyi +0 -0
  203. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2.py +0 -0
  206. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  207. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  208. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  209. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/py.typed +0 -0
  210. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/app.py +0 -0
  211. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/client_manager.py +0 -0
  212. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/client_proxy.py +0 -0
  213. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/__init__.py +0 -0
  214. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/app_utils.py +0 -0
  215. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  216. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/legacy_context.py +0 -0
  217. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/criterion.py +0 -0
  218. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/__init__.py +0 -0
  219. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/driver.py +0 -0
  220. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  221. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/history.py +0 -0
  222. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/run_serverapp.py +0 -0
  223. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/server.py +0 -0
  224. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/server_app.py +0 -0
  225. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/server_config.py +0 -0
  226. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/serverapp_components.py +0 -0
  227. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/__init__.py +0 -0
  228. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/aggregate.py +0 -0
  229. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/bulyan.py +0 -0
  230. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  231. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  232. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  233. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  234. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  235. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  236. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedadam.py +0 -0
  237. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedavg.py +0 -0
  238. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  239. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  240. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  241. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedopt.py +0 -0
  242. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedprox.py +0 -0
  243. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  244. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  245. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  246. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  247. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  248. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/krum.py +0 -0
  249. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  250. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/strategy.py +0 -0
  251. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/__init__.py +0 -0
  252. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  253. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  254. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  255. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  256. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  257. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  258. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  259. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  260. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  261. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  262. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  263. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  264. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  265. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  266. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  267. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  268. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  269. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  270. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  271. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  272. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  273. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  274. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  275. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  276. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  277. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  278. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  279. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  280. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/state.py +0 -0
  281. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  282. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/utils.py +0 -0
  283. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/typing.py +0 -0
  284. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/utils/__init__.py +0 -0
  285. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/utils/tensorboard.py +0 -0
  286. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/utils/validator.py +0 -0
  287. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/__init__.py +0 -0
  288. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/constant.py +0 -0
  289. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  290. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  291. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  292. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  293. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/__init__.py +0 -0
  294. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/app.py +0 -0
  295. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  296. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  297. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  298. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/deployment.py +0 -0
  299. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/exec_grpc.py +0 -0
  300. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/exec_servicer.py +0 -0
  301. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/executor.py +0 -0
  302. {flwr_nightly-1.11.0.dev20240828 → flwr_nightly-1.11.1.dev20240911}/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.11.0.dev20240828
3
+ Version: 1.11.1.dev20240911
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.11.0.dev20240828"
7
+ version = "1.11.1.dev20240911"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -52,14 +52,18 @@ exclude = [
52
52
  ]
53
53
 
54
54
  [tool.poetry.scripts]
55
+ # `flwr` CLI
55
56
  flwr = "flwr.cli.app:app"
56
- flower-superlink = "flwr.server:run_superlink"
57
- flower-superexec = "flwr.superexec:run_superexec"
58
- flower-supernode = "flwr.client:run_supernode"
59
- flower-client-app = "flwr.client:run_client_app"
60
- flower-server-app = "flwr.server:run_server_app"
57
+ # SuperExec (can run with either Deployment Engine or Simulation Engine)
58
+ flower-superexec = "flwr.superexec.app:run_superexec"
59
+ # Simulation Engine
61
60
  flower-simulation = "flwr.simulation.run_simulation:run_simulation_from_cli"
61
+ # Deployment Engine
62
+ flower-superlink = "flwr.server.app:run_superlink"
63
+ flower-supernode = "flwr.client.supernode.app:run_supernode"
64
+ flower-server-app = "flwr.server.run_serverapp:run_server_app"
62
65
  flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
66
+ flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
63
67
 
64
68
  [tool.poetry.dependencies]
65
69
  python = "^3.8"
@@ -136,36 +136,23 @@ def new(
136
136
  username = prompt_text("Please provide your Flower username")
137
137
 
138
138
  if framework is not None:
139
- framework_str_upper = str(framework.value)
139
+ framework_str = str(framework.value)
140
140
  else:
141
- framework_value = prompt_options(
141
+ framework_str = prompt_options(
142
142
  "Please select ML framework by typing in the number",
143
143
  [mlf.value for mlf in MlFramework],
144
144
  )
145
- selected_value = [
146
- name
147
- for name, value in vars(MlFramework).items()
148
- if value == framework_value
149
- ]
150
- framework_str_upper = selected_value[0]
151
-
152
- framework_str = framework_str_upper.lower()
153
145
 
154
146
  llm_challenge_str = None
155
- if framework_str == "flowertune":
147
+ if framework_str == MlFramework.FLOWERTUNE:
156
148
  llm_challenge_value = prompt_options(
157
149
  "Please select LLM challenge by typing in the number",
158
150
  sorted([challenge.value for challenge in LlmChallengeName]),
159
151
  )
160
- selected_value = [
161
- name
162
- for name, value in vars(LlmChallengeName).items()
163
- if value == llm_challenge_value
164
- ]
165
- llm_challenge_str = selected_value[0]
166
- llm_challenge_str = llm_challenge_str.lower()
152
+ llm_challenge_str = llm_challenge_value.lower()
167
153
 
168
- is_baseline_project = framework_str == "baseline"
154
+ if framework_str == MlFramework.BASELINE:
155
+ framework_str = "baseline"
169
156
 
170
157
  print(
171
158
  typer.style(
@@ -176,19 +163,21 @@ def new(
176
163
  )
177
164
 
178
165
  context = {
179
- "framework_str": framework_str_upper,
166
+ "framework_str": framework_str,
180
167
  "import_name": import_name.replace("-", "_"),
181
168
  "package_name": package_name,
182
169
  "project_name": app_name,
183
170
  "username": username,
184
171
  }
185
172
 
173
+ template_name = framework_str.lower()
174
+
186
175
  # List of files to render
187
176
  if llm_challenge_str:
188
177
  files = {
189
178
  ".gitignore": {"template": "app/.gitignore.tpl"},
190
- "pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
191
- "README.md": {"template": f"app/README.{framework_str}.md.tpl"},
179
+ "pyproject.toml": {"template": f"app/pyproject.{template_name}.toml.tpl"},
180
+ "README.md": {"template": f"app/README.{template_name}.md.tpl"},
192
181
  f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
193
182
  f"{import_name}/server_app.py": {
194
183
  "template": "app/code/flwr_tune/server_app.py.tpl"
@@ -196,7 +185,6 @@ def new(
196
185
  f"{import_name}/client_app.py": {
197
186
  "template": "app/code/flwr_tune/client_app.py.tpl"
198
187
  },
199
- f"{import_name}/app.py": {"template": "app/code/flwr_tune/app.py.tpl"},
200
188
  f"{import_name}/models.py": {
201
189
  "template": "app/code/flwr_tune/models.py.tpl"
202
190
  },
@@ -236,44 +224,42 @@ def new(
236
224
  files = {
237
225
  ".gitignore": {"template": "app/.gitignore.tpl"},
238
226
  "README.md": {"template": "app/README.md.tpl"},
239
- "pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
227
+ "pyproject.toml": {"template": f"app/pyproject.{template_name}.toml.tpl"},
240
228
  f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
241
229
  f"{import_name}/server_app.py": {
242
- "template": f"app/code/server.{framework_str}.py.tpl"
230
+ "template": f"app/code/server.{template_name}.py.tpl"
243
231
  },
244
232
  f"{import_name}/client_app.py": {
245
- "template": f"app/code/client.{framework_str}.py.tpl"
233
+ "template": f"app/code/client.{template_name}.py.tpl"
246
234
  },
247
235
  }
248
236
 
249
237
  # Depending on the framework, generate task.py file
250
238
  frameworks_with_tasks = [
251
- MlFramework.PYTORCH.value.lower(),
252
- MlFramework.JAX.value.lower(),
253
- MlFramework.HUGGINGFACE.value.lower(),
254
- MlFramework.MLX.value.lower(),
255
- MlFramework.TENSORFLOW.value.lower(),
239
+ MlFramework.PYTORCH.value,
240
+ MlFramework.JAX.value,
241
+ MlFramework.HUGGINGFACE.value,
242
+ MlFramework.MLX.value,
243
+ MlFramework.TENSORFLOW.value,
256
244
  ]
257
245
  if framework_str in frameworks_with_tasks:
258
246
  files[f"{import_name}/task.py"] = {
259
- "template": f"app/code/task.{framework_str}.py.tpl"
247
+ "template": f"app/code/task.{template_name}.py.tpl"
260
248
  }
261
249
 
262
- if is_baseline_project:
250
+ if framework_str == "baseline":
263
251
  # Include additional files for baseline template
264
252
  for file_name in ["model", "dataset", "strategy", "utils", "__init__"]:
265
253
  files[f"{import_name}/{file_name}.py"] = {
266
- "template": f"app/code/{file_name}.{framework_str}.py.tpl"
254
+ "template": f"app/code/{file_name}.{template_name}.py.tpl"
267
255
  }
268
256
 
269
257
  # Replace README.md
270
- files["README.md"]["template"] = f"app/README.{framework_str}.md.tpl"
258
+ files["README.md"]["template"] = f"app/README.{template_name}.md.tpl"
271
259
 
272
260
  # Add LICENSE
273
261
  files["LICENSE"] = {"template": "app/LICENSE.tpl"}
274
262
 
275
- context["framework_str"] = "baseline"
276
-
277
263
  for file_path, value in files.items():
278
264
  render_and_create(
279
265
  file_path=project_dir / file_path,
@@ -1,18 +1,11 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
+ import torch
3
4
  from flwr.client import ClientApp, NumPyClient
4
5
  from flwr.common import Context
5
6
  from transformers import AutoModelForSequenceClassification
6
7
 
7
- from $import_name.task import (
8
- get_weights,
9
- load_data,
10
- set_weights,
11
- train,
12
- test,
13
- CHECKPOINT,
14
- DEVICE,
15
- )
8
+ from $import_name.task import get_weights, load_data, set_weights, test, train
16
9
 
17
10
 
18
11
  # Flower client
@@ -22,37 +15,34 @@ class FlowerClient(NumPyClient):
22
15
  self.trainloader = trainloader
23
16
  self.testloader = testloader
24
17
  self.local_epochs = local_epochs
25
-
26
- def get_parameters(self, config):
27
- return get_weights(self.net)
28
-
29
- def set_parameters(self, parameters):
30
- set_weights(self.net, parameters)
18
+ self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
19
+ self.net.to(self.device)
31
20
 
32
21
  def fit(self, parameters, config):
33
- self.set_parameters(parameters)
34
- train(
35
- self.net,
36
- self.trainloader,
37
- epochs=self.local_epochs,
38
- )
39
- return self.get_parameters(config={}), len(self.trainloader), {}
22
+ set_weights(self.net, parameters)
23
+ train(self.net, self.trainloader, epochs=self.local_epochs, device=self.device)
24
+ return get_weights(self.net), len(self.trainloader), {}
40
25
 
41
26
  def evaluate(self, parameters, config):
42
- self.set_parameters(parameters)
43
- loss, accuracy = test(self.net, self.testloader)
27
+ set_weights(self.net, parameters)
28
+ loss, accuracy = test(self.net, self.testloader, self.device)
44
29
  return float(loss), len(self.testloader), {"accuracy": accuracy}
45
30
 
46
31
 
47
32
  def client_fn(context: Context):
48
- # Load model and data
49
- net = AutoModelForSequenceClassification.from_pretrained(
50
- CHECKPOINT, num_labels=2
51
- ).to(DEVICE)
52
33
 
34
+ # Get this client's dataset partition
53
35
  partition_id = context.node_config["partition-id"]
54
36
  num_partitions = context.node_config["num-partitions"]
55
- trainloader, valloader = load_data(partition_id, num_partitions)
37
+ model_name = context.run_config["model-name"]
38
+ trainloader, valloader = load_data(partition_id, num_partitions, model_name)
39
+
40
+ # Load model
41
+ num_labels = context.run_config["num-labels"]
42
+ net = AutoModelForSequenceClassification.from_pretrained(
43
+ model_name, num_labels=num_labels
44
+ )
45
+
56
46
  local_epochs = context.run_config["local-epochs"]
57
47
 
58
48
  # Return Client instance
@@ -17,9 +17,6 @@ class FlowerClient(NumPyClient):
17
17
  self.batch_size = batch_size
18
18
  self.verbose = verbose
19
19
 
20
- def get_parameters(self, config):
21
- return self.model.get_weights()
22
-
23
20
  def fit(self, parameters, config):
24
21
  self.model.set_weights(parameters)
25
22
  self.model.fit(
@@ -0,0 +1,38 @@
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 transformers import AutoModelForSequenceClassification
7
+
8
+ from $import_name.task import get_weights
9
+
10
+
11
+ def server_fn(context: Context):
12
+ # Read from config
13
+ num_rounds = context.run_config["num-server-rounds"]
14
+ fraction_fit = context.run_config["fraction-fit"]
15
+
16
+ # Initialize global model
17
+ model_name = context.run_config["model-name"]
18
+ num_labels = context.run_config["num-labels"]
19
+ net = AutoModelForSequenceClassification.from_pretrained(
20
+ model_name, num_labels=num_labels
21
+ )
22
+
23
+ weights = get_weights(net)
24
+ initial_parameters = ndarrays_to_parameters(weights)
25
+
26
+ # Define strategy
27
+ strategy = FedAvg(
28
+ fraction_fit=fraction_fit,
29
+ fraction_evaluate=1.0,
30
+ initial_parameters=initial_parameters,
31
+ )
32
+ config = ServerConfig(num_rounds=num_rounds)
33
+
34
+ return ServerAppComponents(strategy=strategy, config=config)
35
+
36
+
37
+ # Create ServerApp
38
+ app = ServerApp(server_fn=server_fn)
@@ -4,24 +4,25 @@ import warnings
4
4
  from collections import OrderedDict
5
5
 
6
6
  import torch
7
+ import transformers
8
+ from datasets.utils.logging import disable_progress_bar
7
9
  from evaluate import load as load_metric
10
+ from flwr_datasets import FederatedDataset
11
+ from flwr_datasets.partitioner import IidPartitioner
8
12
  from torch.optim import AdamW
9
13
  from torch.utils.data import DataLoader
10
14
  from transformers import AutoTokenizer, DataCollatorWithPadding
11
15
 
12
- from flwr_datasets import FederatedDataset
13
- from flwr_datasets.partitioner import IidPartitioner
14
-
15
-
16
16
  warnings.filterwarnings("ignore", category=UserWarning)
17
- DEVICE = torch.device("cpu")
18
- CHECKPOINT = "distilbert-base-uncased" # transformer model checkpoint
17
+ warnings.filterwarnings("ignore", category=FutureWarning)
18
+ disable_progress_bar()
19
+ transformers.logging.set_verbosity_error()
19
20
 
20
21
 
21
22
  fds = None # Cache FederatedDataset
22
23
 
23
24
 
24
- def load_data(partition_id: int, num_partitions: int):
25
+ def load_data(partition_id: int, num_partitions: int, model_name: str):
25
26
  """Load IMDB data (training and eval)"""
26
27
  # Only initialize `FederatedDataset` once
27
28
  global fds
@@ -35,10 +36,12 @@ def load_data(partition_id: int, num_partitions: int):
35
36
  # Divide data: 80% train, 20% test
36
37
  partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
37
38
 
38
- tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)
39
+ tokenizer = AutoTokenizer.from_pretrained(model_name)
39
40
 
40
41
  def tokenize_function(examples):
41
- return tokenizer(examples["text"], truncation=True)
42
+ return tokenizer(
43
+ examples["text"], truncation=True, add_special_tokens=True, max_length=512
44
+ )
42
45
 
43
46
  partition_train_test = partition_train_test.map(tokenize_function, batched=True)
44
47
  partition_train_test = partition_train_test.remove_columns("text")
@@ -59,12 +62,12 @@ def load_data(partition_id: int, num_partitions: int):
59
62
  return trainloader, testloader
60
63
 
61
64
 
62
- def train(net, trainloader, epochs):
65
+ def train(net, trainloader, epochs, device):
63
66
  optimizer = AdamW(net.parameters(), lr=5e-5)
64
67
  net.train()
65
68
  for _ in range(epochs):
66
69
  for batch in trainloader:
67
- batch = {k: v.to(DEVICE) for k, v in batch.items()}
70
+ batch = {k: v.to(device) for k, v in batch.items()}
68
71
  outputs = net(**batch)
69
72
  loss = outputs.loss
70
73
  loss.backward()
@@ -72,12 +75,12 @@ def train(net, trainloader, epochs):
72
75
  optimizer.zero_grad()
73
76
 
74
77
 
75
- def test(net, testloader):
78
+ def test(net, testloader, device):
76
79
  metric = load_metric("accuracy")
77
80
  loss = 0
78
81
  net.eval()
79
82
  for batch in testloader:
80
- batch = {k: v.to(DEVICE) for k, v in batch.items()}
83
+ batch = {k: v.to(device) for k, v in batch.items()}
81
84
  with torch.no_grad():
82
85
  outputs = net(**batch)
83
86
  logits = outputs.logits
@@ -8,7 +8,7 @@ version = "1.0.0"
8
8
  description = ""
9
9
  license = "Apache-2.0"
10
10
  dependencies = [
11
- "flwr[simulation]>=1.10.0",
11
+ "flwr[simulation]>=1.11.0",
12
12
  "flwr-datasets>=0.3.0",
13
13
  "torch==2.2.1",
14
14
  "transformers>=4.30.0,<5.0",
@@ -29,10 +29,18 @@ clientapp = "$import_name.client_app:app"
29
29
 
30
30
  [tool.flwr.app.config]
31
31
  num-server-rounds = 3
32
+ fraction-fit = 0.5
32
33
  local-epochs = 1
34
+ model-name = "prajjwal1/bert-tiny" # Set a larger model if you have access to more GPU resources
35
+ num-labels = 2
33
36
 
34
37
  [tool.flwr.federations]
35
38
  default = "localhost"
36
39
 
37
40
  [tool.flwr.federations.localhost]
38
41
  options.num-supernodes = 10
42
+
43
+ [tool.flwr.federations.localhost-gpu]
44
+ options.num-supernodes = 10
45
+ options.backend.client-resources.num-cpus = 4 # each ClientApp assumes to use 4CPUs
46
+ options.backend.client-resources.num-gpus = 0.25 # at most 4 ClientApps will run in a given GPU
@@ -20,8 +20,6 @@ from .app import start_numpy_client as start_numpy_client
20
20
  from .client import Client as Client
21
21
  from .client_app import ClientApp as ClientApp
22
22
  from .numpy_client import NumPyClient as NumPyClient
23
- from .supernode import run_client_app as run_client_app
24
- from .supernode import run_supernode as run_supernode
25
23
  from .typing import ClientFn as ClientFn
26
24
  from .typing import ClientFnExt as ClientFnExt
27
25
 
@@ -32,8 +30,6 @@ __all__ = [
32
30
  "ClientFnExt",
33
31
  "NumPyClient",
34
32
  "mod",
35
- "run_client_app",
36
- "run_supernode",
37
33
  "start_client",
38
34
  "start_numpy_client",
39
35
  ]
@@ -41,11 +41,11 @@ def _alert_erroneous_client_fn() -> None:
41
41
 
42
42
  def _inspect_maybe_adapt_client_fn_signature(client_fn: ClientFnExt) -> ClientFnExt:
43
43
  client_fn_args = inspect.signature(client_fn).parameters
44
- first_arg = list(client_fn_args.keys())[0]
45
44
 
46
45
  if len(client_fn_args) != 1:
47
46
  _alert_erroneous_client_fn()
48
47
 
48
+ first_arg = list(client_fn_args.keys())[0]
49
49
  first_arg_type = client_fn_args[first_arg].annotation
50
50
 
51
51
  if first_arg_type is str or first_arg == "cid":
@@ -263,7 +263,7 @@ def _registration_error(fn_name: str) -> ValueError:
263
263
  >>> class FlowerClient(NumPyClient):
264
264
  >>> # ...
265
265
  >>>
266
- >>> def client_fn(cid) -> Client:
266
+ >>> def client_fn(context: Context):
267
267
  >>> return FlowerClient().to_client()
268
268
  >>>
269
269
  >>> app = ClientApp(
@@ -17,11 +17,13 @@
17
17
 
18
18
  import base64
19
19
  import collections
20
+ from logging import WARNING
20
21
  from typing import Any, Callable, Optional, Sequence, Tuple, Union
21
22
 
22
23
  import grpc
23
24
  from cryptography.hazmat.primitives.asymmetric import ec
24
25
 
26
+ from flwr.common.logger import log
25
27
  from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
26
28
  bytes_to_public_key,
27
29
  compute_hmac,
@@ -128,13 +130,12 @@ class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type:
128
130
  if self.shared_secret is None:
129
131
  raise RuntimeError("Failure to compute hmac")
130
132
 
133
+ message_bytes = request.SerializeToString(deterministic=True)
131
134
  metadata.append(
132
135
  (
133
136
  _AUTH_TOKEN_HEADER,
134
137
  base64.urlsafe_b64encode(
135
- compute_hmac(
136
- self.shared_secret, request.SerializeToString(True)
137
- )
138
+ compute_hmac(self.shared_secret, message_bytes)
138
139
  ),
139
140
  )
140
141
  )
@@ -151,8 +152,15 @@ class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type:
151
152
  server_public_key_bytes = base64.urlsafe_b64decode(
152
153
  _get_value_from_tuples(_PUBLIC_KEY_HEADER, response.initial_metadata())
153
154
  )
154
- self.server_public_key = bytes_to_public_key(server_public_key_bytes)
155
- self.shared_secret = generate_shared_key(
156
- self.private_key, self.server_public_key
157
- )
155
+
156
+ if server_public_key_bytes != b"":
157
+ self.server_public_key = bytes_to_public_key(server_public_key_bytes)
158
+ else:
159
+ log(WARNING, "Can't get server public key, SuperLink may be offline")
160
+
161
+ if self.server_public_key is not None:
162
+ self.shared_secret = generate_shared_key(
163
+ self.private_key, self.server_public_key
164
+ )
165
+
158
166
  return response
@@ -119,7 +119,7 @@ class RecordSet:
119
119
  Let's see an example.
120
120
 
121
121
  >>> from flwr.common import RecordSet
122
- >>> from flwr.common import ConfigsRecords, MetricsRecords, ParametersRecord
122
+ >>> from flwr.common import ConfigsRecord, MetricsRecord, ParametersRecord
123
123
  >>>
124
124
  >>> # Let's begin with an empty record
125
125
  >>> my_recordset = RecordSet()
@@ -15,7 +15,18 @@
15
15
  """Typed dict base class for *Records."""
16
16
 
17
17
 
18
- from typing import Callable, Dict, Generic, Iterator, MutableMapping, TypeVar, cast
18
+ from typing import (
19
+ Callable,
20
+ Dict,
21
+ Generic,
22
+ ItemsView,
23
+ Iterator,
24
+ KeysView,
25
+ MutableMapping,
26
+ TypeVar,
27
+ ValuesView,
28
+ cast,
29
+ )
19
30
 
20
31
  K = TypeVar("K") # Key type
21
32
  V = TypeVar("V") # Value type
@@ -73,3 +84,15 @@ class TypedDict(MutableMapping[K, V], Generic[K, V]):
73
84
  if isinstance(other, dict):
74
85
  return data == other
75
86
  return NotImplemented
87
+
88
+ def keys(self) -> KeysView[K]:
89
+ """D.keys() -> a set-like object providing a view on D's keys."""
90
+ return cast(Dict[K, V], self.__dict__["_data"]).keys()
91
+
92
+ def values(self) -> ValuesView[V]:
93
+ """D.values() -> an object providing a view on D's values."""
94
+ return cast(Dict[K, V], self.__dict__["_data"]).values()
95
+
96
+ def items(self) -> ItemsView[K, V]:
97
+ """D.items() -> a set-like object providing a view on D's items."""
98
+ return cast(Dict[K, V], self.__dict__["_data"]).items()
@@ -132,53 +132,59 @@ class EventType(str, Enum):
132
132
  # Ping
133
133
  PING = auto()
134
134
 
135
- # Client: start_client
135
+ # --- LEGACY FUNCTIONS -------------------------------------------------------------
136
+
137
+ # Legacy: `start_client` function
136
138
  START_CLIENT_ENTER = auto()
137
139
  START_CLIENT_LEAVE = auto()
138
140
 
139
- # Server: start_server
141
+ # Legacy: `start_server` function
140
142
  START_SERVER_ENTER = auto()
141
143
  START_SERVER_LEAVE = auto()
142
144
 
143
- # Driver API
144
- RUN_DRIVER_API_ENTER = auto()
145
- RUN_DRIVER_API_LEAVE = auto()
145
+ # Legacy: `start_simulation` function
146
+ START_SIMULATION_ENTER = auto()
147
+ START_SIMULATION_LEAVE = auto()
146
148
 
147
- # Fleet API
148
- RUN_FLEET_API_ENTER = auto()
149
- RUN_FLEET_API_LEAVE = auto()
149
+ # --- `flwr` CLI -------------------------------------------------------------------
150
150
 
151
- # Driver API and Fleet API
152
- RUN_SUPERLINK_ENTER = auto()
153
- RUN_SUPERLINK_LEAVE = auto()
151
+ # Not yet implemented
154
152
 
155
- # Simulation
156
- START_SIMULATION_ENTER = auto()
157
- START_SIMULATION_LEAVE = auto()
153
+ # --- SuperExec --------------------------------------------------------------------
158
154
 
159
- # Driver: Driver
160
- DRIVER_CONNECT = auto()
161
- DRIVER_DISCONNECT = auto()
155
+ # SuperExec
156
+ RUN_SUPEREXEC_ENTER = auto()
157
+ RUN_SUPEREXEC_LEAVE = auto()
162
158
 
163
- # Driver: start_driver
164
- START_DRIVER_ENTER = auto()
165
- START_DRIVER_LEAVE = auto()
159
+ # --- Simulation Engine ------------------------------------------------------------
166
160
 
167
- # flower-client-app
168
- RUN_CLIENT_APP_ENTER = auto()
169
- RUN_CLIENT_APP_LEAVE = auto()
161
+ # CLI: flower-simulation
162
+ CLI_FLOWER_SIMULATION_ENTER = auto()
163
+ CLI_FLOWER_SIMULATION_LEAVE = auto()
170
164
 
171
- # flower-server-app
172
- RUN_SERVER_APP_ENTER = auto()
173
- RUN_SERVER_APP_LEAVE = auto()
165
+ # Python API: `run_simulation`
166
+ PYTHON_API_RUN_SIMULATION_ENTER = auto()
167
+ PYTHON_API_RUN_SIMULATION_LEAVE = auto()
174
168
 
175
- # SuperNode
169
+ # --- Deployment Engine ------------------------------------------------------------
170
+
171
+ # CLI: `flower-superlink`
172
+ RUN_SUPERLINK_ENTER = auto()
173
+ RUN_SUPERLINK_LEAVE = auto()
174
+
175
+ # CLI: `flower-supernode`
176
176
  RUN_SUPERNODE_ENTER = auto()
177
177
  RUN_SUPERNODE_LEAVE = auto()
178
178
 
179
- # SuperExec
180
- RUN_SUPEREXEC_ENTER = auto()
181
- RUN_SUPEREXEC_LEAVE = auto()
179
+ # CLI: `flower-server-app`
180
+ RUN_SERVER_APP_ENTER = auto()
181
+ RUN_SERVER_APP_LEAVE = auto()
182
+
183
+ # --- DEPRECATED -------------------------------------------------------------------
184
+
185
+ # [DEPRECATED] CLI: `flower-client-app`
186
+ RUN_CLIENT_APP_ENTER = auto()
187
+ RUN_CLIENT_APP_LEAVE = auto()
182
188
 
183
189
 
184
190
  # Use the ThreadPoolExecutor with max_workers=1 to have a queue
@@ -17,14 +17,12 @@
17
17
 
18
18
  from . import strategy
19
19
  from . import workflow as workflow
20
- from .app import run_superlink as run_superlink
21
20
  from .app import start_server as start_server
22
21
  from .client_manager import ClientManager as ClientManager
23
22
  from .client_manager import SimpleClientManager as SimpleClientManager
24
23
  from .compat import LegacyContext as LegacyContext
25
24
  from .driver import Driver as Driver
26
25
  from .history import History as History
27
- from .run_serverapp import run_server_app as run_server_app
28
26
  from .server import Server as Server
29
27
  from .server_app import ServerApp as ServerApp
30
28
  from .server_config import ServerConfig as ServerConfig
@@ -40,8 +38,6 @@ __all__ = [
40
38
  "ServerAppComponents",
41
39
  "ServerConfig",
42
40
  "SimpleClientManager",
43
- "run_server_app",
44
- "run_superlink",
45
41
  "start_server",
46
42
  "strategy",
47
43
  "workflow",