flwr-nightly 1.11.1.dev20240911__tar.gz → 1.12.0.dev20240830__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.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/PKG-INFO +1 -1
  2. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/pyproject.toml +1 -1
  3. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/new.py +37 -23
  4. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +29 -19
  5. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +3 -0
  6. flwr_nightly-1.12.0.dev20240830/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +23 -0
  7. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +13 -16
  8. flwr_nightly-1.12.0.dev20240830/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +38 -0
  9. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/client_app.py +2 -2
  10. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +3 -2
  11. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/recordset.py +1 -1
  12. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/typeddict.py +1 -24
  13. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +1 -2
  14. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +12 -21
  15. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/ray_actor.py +2 -2
  16. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/run_simulation.py +2 -14
  17. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/app.py +1 -3
  18. flwr_nightly-1.11.1.dev20240911/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -38
  19. flwr_nightly-1.11.1.dev20240911/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -46
  20. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/LICENSE +0 -0
  21. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/README.md +0 -0
  22. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/__init__.py +0 -0
  23. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/__init__.py +0 -0
  24. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/app.py +0 -0
  25. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/build.py +0 -0
  26. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/config_utils.py +0 -0
  27. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/example.py +0 -0
  28. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/install.py +0 -0
  29. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/__init__.py +0 -0
  30. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  31. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  32. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  33. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  34. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  35. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  36. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  37. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  38. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  39. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  40. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  41. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  42. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  43. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  44. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  45. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  46. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  47. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  48. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  49. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  50. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  51. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  52. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  53. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  54. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  55. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  56. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  57. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  58. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  59. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  60. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  61. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  62. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  63. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  64. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  65. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  66. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  67. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  68. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  69. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  70. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  71. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  72. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  73. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  74. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  75. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/run/__init__.py +0 -0
  76. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/run/run.py +0 -0
  77. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/utils.py +0 -0
  78. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/__init__.py +0 -0
  79. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/app.py +0 -0
  80. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/client.py +0 -0
  81. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/__init__.py +0 -0
  82. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/app.py +0 -0
  83. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  84. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/utils.py +0 -0
  85. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  86. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  87. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  88. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  89. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_client/connection.py +0 -0
  90. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  91. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  92. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  93. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/heartbeat.py +0 -0
  94. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/message_handler/__init__.py +0 -0
  95. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  96. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  97. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/__init__.py +0 -0
  98. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  99. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/comms_mods.py +0 -0
  100. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  101. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  102. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  103. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  104. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/utils.py +0 -0
  105. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/node_state.py +0 -0
  106. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/node_state_tests.py +0 -0
  107. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/numpy_client.py +0 -0
  108. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/rest_client/__init__.py +0 -0
  109. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/rest_client/connection.py +0 -0
  110. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/supernode/__init__.py +0 -0
  111. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/supernode/app.py +0 -0
  112. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/typing.py +0 -0
  113. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/__init__.py +0 -0
  114. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/address.py +0 -0
  115. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/config.py +0 -0
  116. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/constant.py +0 -0
  117. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/context.py +0 -0
  118. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/date.py +0 -0
  119. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/differential_privacy.py +0 -0
  120. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  121. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/dp.py +0 -0
  122. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/exit_handlers.py +0 -0
  123. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/grpc.py +0 -0
  124. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/logger.py +0 -0
  125. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/message.py +0 -0
  126. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/object_ref.py +0 -0
  127. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/parameter.py +0 -0
  128. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/pyproject.py +0 -0
  129. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/__init__.py +0 -0
  130. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/configsrecord.py +0 -0
  131. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/conversion_utils.py +0 -0
  132. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/metricsrecord.py +0 -0
  133. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/parametersrecord.py +0 -0
  134. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/recordset_compat.py +0 -0
  135. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/retry_invoker.py +0 -0
  136. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  137. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  138. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  139. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  140. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  141. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  142. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  143. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  144. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/serde.py +0 -0
  145. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/telemetry.py +0 -0
  146. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/typing.py +0 -0
  147. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/version.py +0 -0
  148. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/__init__.py +0 -0
  149. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  150. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  151. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  152. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  153. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2.py +0 -0
  154. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2.pyi +0 -0
  155. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2.py +0 -0
  158. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  159. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2.py +0 -0
  162. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2.pyi +0 -0
  163. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2.py +0 -0
  166. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  167. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2.py +0 -0
  170. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  171. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2.py +0 -0
  174. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  175. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  178. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  179. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2.py +0 -0
  182. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2.pyi +0 -0
  183. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2.py +0 -0
  186. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2.pyi +0 -0
  187. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2.py +0 -0
  190. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  191. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2.py +0 -0
  194. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2.pyi +0 -0
  195. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2.py +0 -0
  198. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2.pyi +0 -0
  199. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2.py +0 -0
  202. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  203. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/py.typed +0 -0
  206. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/__init__.py +0 -0
  207. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/app.py +0 -0
  208. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/client_manager.py +0 -0
  209. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/client_proxy.py +0 -0
  210. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/__init__.py +0 -0
  211. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/app.py +0 -0
  212. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/app_utils.py +0 -0
  213. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  214. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/legacy_context.py +0 -0
  215. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/criterion.py +0 -0
  216. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/__init__.py +0 -0
  217. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/driver.py +0 -0
  218. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  219. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  220. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/history.py +0 -0
  221. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/run_serverapp.py +0 -0
  222. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/server.py +0 -0
  223. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/server_app.py +0 -0
  224. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/server_config.py +0 -0
  225. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/serverapp_components.py +0 -0
  226. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/__init__.py +0 -0
  227. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/aggregate.py +0 -0
  228. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/bulyan.py +0 -0
  229. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  230. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  231. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  232. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  233. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  234. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  235. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedadam.py +0 -0
  236. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedavg.py +0 -0
  237. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  238. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  239. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  240. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedopt.py +0 -0
  241. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedprox.py +0 -0
  242. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  243. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  244. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  245. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  246. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  247. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/krum.py +0 -0
  248. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  249. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/strategy.py +0 -0
  250. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/__init__.py +0 -0
  251. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  252. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  253. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  254. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  255. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  256. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  257. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  258. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  259. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  260. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  261. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  262. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  263. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  264. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  265. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  266. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  267. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  268. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  269. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  270. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  271. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  272. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  273. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  274. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  275. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  276. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  277. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  278. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  279. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/state.py +0 -0
  280. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  281. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/utils.py +0 -0
  282. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/typing.py +0 -0
  283. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/utils/__init__.py +0 -0
  284. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/utils/tensorboard.py +0 -0
  285. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/utils/validator.py +0 -0
  286. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/__init__.py +0 -0
  287. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/constant.py +0 -0
  288. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  289. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  290. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  291. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  292. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/__init__.py +0 -0
  293. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/app.py +0 -0
  294. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  295. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  296. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  297. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/__init__.py +0 -0
  298. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/deployment.py +0 -0
  299. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/exec_grpc.py +0 -0
  300. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/exec_servicer.py +0 -0
  301. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/executor.py +0 -0
  302. {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/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.1.dev20240911
3
+ Version: 1.12.0.dev20240830
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.1.dev20240911"
7
+ version = "1.12.0.dev20240830"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -136,23 +136,36 @@ def new(
136
136
  username = prompt_text("Please provide your Flower username")
137
137
 
138
138
  if framework is not None:
139
- framework_str = str(framework.value)
139
+ framework_str_upper = str(framework.value)
140
140
  else:
141
- framework_str = prompt_options(
141
+ framework_value = 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()
145
153
 
146
154
  llm_challenge_str = None
147
- if framework_str == MlFramework.FLOWERTUNE:
155
+ if framework_str == "flowertune":
148
156
  llm_challenge_value = prompt_options(
149
157
  "Please select LLM challenge by typing in the number",
150
158
  sorted([challenge.value for challenge in LlmChallengeName]),
151
159
  )
152
- llm_challenge_str = llm_challenge_value.lower()
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()
153
167
 
154
- if framework_str == MlFramework.BASELINE:
155
- framework_str = "baseline"
168
+ is_baseline_project = framework_str == "baseline"
156
169
 
157
170
  print(
158
171
  typer.style(
@@ -163,21 +176,19 @@ def new(
163
176
  )
164
177
 
165
178
  context = {
166
- "framework_str": framework_str,
179
+ "framework_str": framework_str_upper,
167
180
  "import_name": import_name.replace("-", "_"),
168
181
  "package_name": package_name,
169
182
  "project_name": app_name,
170
183
  "username": username,
171
184
  }
172
185
 
173
- template_name = framework_str.lower()
174
-
175
186
  # List of files to render
176
187
  if llm_challenge_str:
177
188
  files = {
178
189
  ".gitignore": {"template": "app/.gitignore.tpl"},
179
- "pyproject.toml": {"template": f"app/pyproject.{template_name}.toml.tpl"},
180
- "README.md": {"template": f"app/README.{template_name}.md.tpl"},
190
+ "pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
191
+ "README.md": {"template": f"app/README.{framework_str}.md.tpl"},
181
192
  f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
182
193
  f"{import_name}/server_app.py": {
183
194
  "template": "app/code/flwr_tune/server_app.py.tpl"
@@ -185,6 +196,7 @@ def new(
185
196
  f"{import_name}/client_app.py": {
186
197
  "template": "app/code/flwr_tune/client_app.py.tpl"
187
198
  },
199
+ f"{import_name}/app.py": {"template": "app/code/flwr_tune/app.py.tpl"},
188
200
  f"{import_name}/models.py": {
189
201
  "template": "app/code/flwr_tune/models.py.tpl"
190
202
  },
@@ -224,42 +236,44 @@ def new(
224
236
  files = {
225
237
  ".gitignore": {"template": "app/.gitignore.tpl"},
226
238
  "README.md": {"template": "app/README.md.tpl"},
227
- "pyproject.toml": {"template": f"app/pyproject.{template_name}.toml.tpl"},
239
+ "pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
228
240
  f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
229
241
  f"{import_name}/server_app.py": {
230
- "template": f"app/code/server.{template_name}.py.tpl"
242
+ "template": f"app/code/server.{framework_str}.py.tpl"
231
243
  },
232
244
  f"{import_name}/client_app.py": {
233
- "template": f"app/code/client.{template_name}.py.tpl"
245
+ "template": f"app/code/client.{framework_str}.py.tpl"
234
246
  },
235
247
  }
236
248
 
237
249
  # Depending on the framework, generate task.py file
238
250
  frameworks_with_tasks = [
239
- MlFramework.PYTORCH.value,
240
- MlFramework.JAX.value,
241
- MlFramework.HUGGINGFACE.value,
242
- MlFramework.MLX.value,
243
- MlFramework.TENSORFLOW.value,
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(),
244
256
  ]
245
257
  if framework_str in frameworks_with_tasks:
246
258
  files[f"{import_name}/task.py"] = {
247
- "template": f"app/code/task.{template_name}.py.tpl"
259
+ "template": f"app/code/task.{framework_str}.py.tpl"
248
260
  }
249
261
 
250
- if framework_str == "baseline":
262
+ if is_baseline_project:
251
263
  # Include additional files for baseline template
252
264
  for file_name in ["model", "dataset", "strategy", "utils", "__init__"]:
253
265
  files[f"{import_name}/{file_name}.py"] = {
254
- "template": f"app/code/{file_name}.{template_name}.py.tpl"
266
+ "template": f"app/code/{file_name}.{framework_str}.py.tpl"
255
267
  }
256
268
 
257
269
  # Replace README.md
258
- files["README.md"]["template"] = f"app/README.{template_name}.md.tpl"
270
+ files["README.md"]["template"] = f"app/README.{framework_str}.md.tpl"
259
271
 
260
272
  # Add LICENSE
261
273
  files["LICENSE"] = {"template": "app/LICENSE.tpl"}
262
274
 
275
+ context["framework_str"] = "baseline"
276
+
263
277
  for file_path, value in files.items():
264
278
  render_and_create(
265
279
  file_path=project_dir / file_path,
@@ -1,11 +1,18 @@
1
1
  """$project_name: A Flower / $framework_str app."""
2
2
 
3
- import torch
4
3
  from flwr.client import ClientApp, NumPyClient
5
4
  from flwr.common import Context
6
5
  from transformers import AutoModelForSequenceClassification
7
6
 
8
- from $import_name.task import get_weights, load_data, set_weights, test, train
7
+ from $import_name.task import (
8
+ get_weights,
9
+ load_data,
10
+ set_weights,
11
+ train,
12
+ test,
13
+ CHECKPOINT,
14
+ DEVICE,
15
+ )
9
16
 
10
17
 
11
18
  # Flower client
@@ -15,34 +22,37 @@ class FlowerClient(NumPyClient):
15
22
  self.trainloader = trainloader
16
23
  self.testloader = testloader
17
24
  self.local_epochs = local_epochs
18
- self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
19
- self.net.to(self.device)
20
25
 
21
- def fit(self, parameters, config):
26
+ def get_parameters(self, config):
27
+ return get_weights(self.net)
28
+
29
+ def set_parameters(self, parameters):
22
30
  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), {}
31
+
32
+ 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), {}
25
40
 
26
41
  def evaluate(self, parameters, config):
27
- set_weights(self.net, parameters)
28
- loss, accuracy = test(self.net, self.testloader, self.device)
42
+ self.set_parameters(parameters)
43
+ loss, accuracy = test(self.net, self.testloader)
29
44
  return float(loss), len(self.testloader), {"accuracy": accuracy}
30
45
 
31
46
 
32
47
  def client_fn(context: Context):
48
+ # Load model and data
49
+ net = AutoModelForSequenceClassification.from_pretrained(
50
+ CHECKPOINT, num_labels=2
51
+ ).to(DEVICE)
33
52
 
34
- # Get this client's dataset partition
35
53
  partition_id = context.node_config["partition-id"]
36
54
  num_partitions = context.node_config["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
-
55
+ trainloader, valloader = load_data(partition_id, num_partitions)
46
56
  local_epochs = context.run_config["local-epochs"]
47
57
 
48
58
  # Return Client instance
@@ -17,6 +17,9 @@ 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
+
20
23
  def fit(self, parameters, config):
21
24
  self.model.set_weights(parameters)
22
25
  self.model.fit(
@@ -0,0 +1,23 @@
1
+ """$project_name: A Flower / $framework_str app."""
2
+
3
+ from flwr.common import Context
4
+ from flwr.server.strategy import FedAvg
5
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
6
+
7
+
8
+ def server_fn(context: Context):
9
+ # Read from config
10
+ num_rounds = context.run_config["num-server-rounds"]
11
+
12
+ # Define strategy
13
+ strategy = FedAvg(
14
+ fraction_fit=1.0,
15
+ fraction_evaluate=1.0,
16
+ )
17
+ config = ServerConfig(num_rounds=num_rounds)
18
+
19
+ return ServerAppComponents(strategy=strategy, config=config)
20
+
21
+
22
+ # Create ServerApp
23
+ app = ServerApp(server_fn=server_fn)
@@ -4,25 +4,24 @@ 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
9
7
  from evaluate import load as load_metric
10
- from flwr_datasets import FederatedDataset
11
- from flwr_datasets.partitioner import IidPartitioner
12
8
  from torch.optim import AdamW
13
9
  from torch.utils.data import DataLoader
14
10
  from transformers import AutoTokenizer, DataCollatorWithPadding
15
11
 
12
+ from flwr_datasets import FederatedDataset
13
+ from flwr_datasets.partitioner import IidPartitioner
14
+
15
+
16
16
  warnings.filterwarnings("ignore", category=UserWarning)
17
- warnings.filterwarnings("ignore", category=FutureWarning)
18
- disable_progress_bar()
19
- transformers.logging.set_verbosity_error()
17
+ DEVICE = torch.device("cpu")
18
+ CHECKPOINT = "distilbert-base-uncased" # transformer model checkpoint
20
19
 
21
20
 
22
21
  fds = None # Cache FederatedDataset
23
22
 
24
23
 
25
- def load_data(partition_id: int, num_partitions: int, model_name: str):
24
+ def load_data(partition_id: int, num_partitions: int):
26
25
  """Load IMDB data (training and eval)"""
27
26
  # Only initialize `FederatedDataset` once
28
27
  global fds
@@ -36,12 +35,10 @@ def load_data(partition_id: int, num_partitions: int, model_name: str):
36
35
  # Divide data: 80% train, 20% test
37
36
  partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
38
37
 
39
- tokenizer = AutoTokenizer.from_pretrained(model_name)
38
+ tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)
40
39
 
41
40
  def tokenize_function(examples):
42
- return tokenizer(
43
- examples["text"], truncation=True, add_special_tokens=True, max_length=512
44
- )
41
+ return tokenizer(examples["text"], truncation=True)
45
42
 
46
43
  partition_train_test = partition_train_test.map(tokenize_function, batched=True)
47
44
  partition_train_test = partition_train_test.remove_columns("text")
@@ -62,12 +59,12 @@ def load_data(partition_id: int, num_partitions: int, model_name: str):
62
59
  return trainloader, testloader
63
60
 
64
61
 
65
- def train(net, trainloader, epochs, device):
62
+ def train(net, trainloader, epochs):
66
63
  optimizer = AdamW(net.parameters(), lr=5e-5)
67
64
  net.train()
68
65
  for _ in range(epochs):
69
66
  for batch in trainloader:
70
- batch = {k: v.to(device) for k, v in batch.items()}
67
+ batch = {k: v.to(DEVICE) for k, v in batch.items()}
71
68
  outputs = net(**batch)
72
69
  loss = outputs.loss
73
70
  loss.backward()
@@ -75,12 +72,12 @@ def train(net, trainloader, epochs, device):
75
72
  optimizer.zero_grad()
76
73
 
77
74
 
78
- def test(net, testloader, device):
75
+ def test(net, testloader):
79
76
  metric = load_metric("accuracy")
80
77
  loss = 0
81
78
  net.eval()
82
79
  for batch in testloader:
83
- batch = {k: v.to(device) for k, v in batch.items()}
80
+ batch = {k: v.to(DEVICE) for k, v in batch.items()}
84
81
  with torch.no_grad():
85
82
  outputs = net(**batch)
86
83
  logits = outputs.logits
@@ -0,0 +1,38 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "$package_name"
7
+ version = "1.0.0"
8
+ description = ""
9
+ license = "Apache-2.0"
10
+ dependencies = [
11
+ "flwr[simulation]>=1.10.0",
12
+ "flwr-datasets>=0.3.0",
13
+ "torch==2.2.1",
14
+ "transformers>=4.30.0,<5.0",
15
+ "evaluate>=0.4.0,<1.0",
16
+ "datasets>=2.0.0, <3.0",
17
+ "scikit-learn>=1.3.1, <2.0",
18
+ ]
19
+
20
+ [tool.hatch.build.targets.wheel]
21
+ packages = ["."]
22
+
23
+ [tool.flwr.app]
24
+ publisher = "$username"
25
+
26
+ [tool.flwr.app.components]
27
+ serverapp = "$import_name.server_app:app"
28
+ clientapp = "$import_name.client_app:app"
29
+
30
+ [tool.flwr.app.config]
31
+ num-server-rounds = 3
32
+ local-epochs = 1
33
+
34
+ [tool.flwr.federations]
35
+ default = "localhost"
36
+
37
+ [tool.flwr.federations.localhost]
38
+ options.num-supernodes = 10
@@ -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]
44
45
 
45
46
  if len(client_fn_args) != 1:
46
47
  _alert_erroneous_client_fn()
47
48
 
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(context: Context):
266
+ >>> def client_fn(cid) -> Client:
267
267
  >>> return FlowerClient().to_client()
268
268
  >>>
269
269
  >>> app = ClientApp(
@@ -130,12 +130,13 @@ class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type:
130
130
  if self.shared_secret is None:
131
131
  raise RuntimeError("Failure to compute hmac")
132
132
 
133
- message_bytes = request.SerializeToString(deterministic=True)
134
133
  metadata.append(
135
134
  (
136
135
  _AUTH_TOKEN_HEADER,
137
136
  base64.urlsafe_b64encode(
138
- compute_hmac(self.shared_secret, message_bytes)
137
+ compute_hmac(
138
+ self.shared_secret, request.SerializeToString(True)
139
+ )
139
140
  ),
140
141
  )
141
142
  )
@@ -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 ConfigsRecord, MetricsRecord, ParametersRecord
122
+ >>> from flwr.common import ConfigsRecords, MetricsRecords, ParametersRecord
123
123
  >>>
124
124
  >>> # Let's begin with an empty record
125
125
  >>> my_recordset = RecordSet()
@@ -15,18 +15,7 @@
15
15
  """Typed dict base class for *Records."""
16
16
 
17
17
 
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
- )
18
+ from typing import Callable, Dict, Generic, Iterator, MutableMapping, TypeVar, cast
30
19
 
31
20
  K = TypeVar("K") # Key type
32
21
  V = TypeVar("V") # Value type
@@ -84,15 +73,3 @@ class TypedDict(MutableMapping[K, V], Generic[K, V]):
84
73
  if isinstance(other, dict):
85
74
  return data == other
86
75
  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()
@@ -188,8 +188,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
188
188
  self, public_key: ec.EllipticCurvePublicKey, request: Request, hmac_value: bytes
189
189
  ) -> bool:
190
190
  shared_secret = generate_shared_key(self.server_private_key, public_key)
191
- message_bytes = request.SerializeToString(deterministic=True)
192
- return verify_hmac(shared_secret, message_bytes, hmac_value)
191
+ return verify_hmac(shared_secret, request.SerializeToString(True), hmac_value)
193
192
 
194
193
  def _create_authenticated_node(
195
194
  self,
@@ -52,11 +52,16 @@ class RayBackend(Backend):
52
52
 
53
53
  # Validate client resources
54
54
  self.client_resources_key = "client_resources"
55
- self.client_resources = self._validate_client_resources(config=backend_config)
55
+ client_resources = self._validate_client_resources(config=backend_config)
56
56
 
57
- # Valide actor resources
58
- self.actor_kwargs = self._validate_actor_arguments(config=backend_config)
59
- self.pool: Optional[BasicActorPool] = None
57
+ # Create actor pool
58
+ actor_kwargs = self._validate_actor_arguments(config=backend_config)
59
+
60
+ self.pool = BasicActorPool(
61
+ actor_type=ClientAppActor,
62
+ client_resources=client_resources,
63
+ actor_kwargs=actor_kwargs,
64
+ )
60
65
 
61
66
  self.app_fn: Optional[Callable[[], ClientApp]] = None
62
67
 
@@ -117,24 +122,14 @@ class RayBackend(Backend):
117
122
  @property
118
123
  def num_workers(self) -> int:
119
124
  """Return number of actors in pool."""
120
- return self.pool.num_actors if self.pool else 0
125
+ return self.pool.num_actors
121
126
 
122
127
  def is_worker_idle(self) -> bool:
123
128
  """Report whether the pool has idle actors."""
124
- return self.pool.is_actor_available() if self.pool else False
129
+ return self.pool.is_actor_available()
125
130
 
126
131
  def build(self, app_fn: Callable[[], ClientApp]) -> None:
127
132
  """Build pool of Ray actors that this backend will submit jobs to."""
128
- # Create Actor Pool
129
- try:
130
- self.pool = BasicActorPool(
131
- actor_type=ClientAppActor,
132
- client_resources=self.client_resources,
133
- actor_kwargs=self.actor_kwargs,
134
- )
135
- except Exception as ex:
136
- raise ex
137
-
138
133
  self.pool.add_actors_to_pool(self.pool.actors_capacity)
139
134
  # Set ClientApp callable that ray actors will use
140
135
  self.app_fn = app_fn
@@ -151,9 +146,6 @@ class RayBackend(Backend):
151
146
  """
152
147
  partition_id = context.node_config[PARTITION_ID_KEY]
153
148
 
154
- if self.pool is None:
155
- raise ValueError("The actor pool is empty, unfit to process messages.")
156
-
157
149
  if self.app_fn is None:
158
150
  raise ValueError(
159
151
  "Unspecified function to load a `ClientApp`. "
@@ -187,7 +179,6 @@ class RayBackend(Backend):
187
179
 
188
180
  def terminate(self) -> None:
189
181
  """Terminate all actors in actor pool."""
190
- if self.pool:
191
- self.pool.terminate_all_actors()
182
+ self.pool.terminate_all_actors()
192
183
  ray.shutdown()
193
184
  log(DEBUG, "Terminated %s", self.__class__.__name__)
@@ -124,14 +124,14 @@ def pool_size_from_resources(client_resources: Dict[str, Union[int, float]]) ->
124
124
  WARNING,
125
125
  "The ActorPool is empty. The system (CPUs=%s, GPUs=%s) "
126
126
  "does not meet the criteria to host at least one client with resources:"
127
- " %s. Lowering these resources could help.",
127
+ " %s. Lowering the `client_resources` could help.",
128
128
  num_cpus,
129
129
  num_gpus,
130
130
  client_resources,
131
131
  )
132
132
  raise ValueError(
133
133
  "ActorPool is empty. Stopping Simulation. "
134
- "Check `num_cpus` and/or `num_gpus` passed to the simulation engine"
134
+ "Check 'client_resources' passed to `start_simulation`"
135
135
  )
136
136
 
137
137
  return total_num_actors
@@ -216,7 +216,6 @@ def run_simulation_from_cli() -> None:
216
216
  app_dir=app_dir,
217
217
  run=run,
218
218
  enable_tf_gpu_growth=args.enable_tf_gpu_growth,
219
- delay_start=args.delay_start,
220
219
  verbose_logging=args.verbose,
221
220
  server_app_run_config=fused_config,
222
221
  is_app=is_app,
@@ -310,6 +309,7 @@ def run_serverapp_th(
310
309
  f_stop: threading.Event,
311
310
  has_exception: threading.Event,
312
311
  enable_tf_gpu_growth: bool,
312
+ delay_launch: int = 3,
313
313
  ) -> threading.Thread:
314
314
  """Run SeverApp in a thread."""
315
315
 
@@ -365,6 +365,7 @@ def run_serverapp_th(
365
365
  server_app,
366
366
  ),
367
367
  )
368
+ sleep(delay_launch)
368
369
  serverapp_th.start()
369
370
  return serverapp_th
370
371
 
@@ -379,7 +380,6 @@ def _main_loop(
379
380
  enable_tf_gpu_growth: bool,
380
381
  run: Run,
381
382
  exit_event: EventType,
382
- delay_start: int,
383
383
  flwr_dir: Optional[str] = None,
384
384
  client_app: Optional[ClientApp] = None,
385
385
  client_app_attr: Optional[str] = None,
@@ -419,9 +419,6 @@ def _main_loop(
419
419
  enable_tf_gpu_growth=enable_tf_gpu_growth,
420
420
  )
421
421
 
422
- # Buffer time so the `ServerApp` in separate thread is ready
423
- log(DEBUG, "Buffer time delay: %ds", delay_start)
424
- sleep(delay_start)
425
422
  # Start Simulation Engine
426
423
  vce.start_vce(
427
424
  num_supernodes=num_supernodes,
@@ -470,7 +467,6 @@ def _run_simulation(
470
467
  flwr_dir: Optional[str] = None,
471
468
  run: Optional[Run] = None,
472
469
  enable_tf_gpu_growth: bool = False,
473
- delay_start: int = 5,
474
470
  verbose_logging: bool = False,
475
471
  is_app: bool = False,
476
472
  ) -> None:
@@ -527,7 +523,6 @@ def _run_simulation(
527
523
  enable_tf_gpu_growth,
528
524
  run,
529
525
  exit_event,
530
- delay_start,
531
526
  flwr_dir,
532
527
  client_app,
533
528
  client_app_attr,
@@ -615,13 +610,6 @@ def _parse_args_run_simulation() -> argparse.ArgumentParser:
615
610
  "Read more about how `tf.config.experimental.set_memory_growth()` works in "
616
611
  "the TensorFlow documentation: https://www.tensorflow.org/api/stable.",
617
612
  )
618
- parser.add_argument(
619
- "--delay-start",
620
- type=int,
621
- default=3,
622
- help="Buffer time (in seconds) to delay the start the simulation engine after "
623
- "the `ServerApp`, which runs in a separate thread, has been launched.",
624
- )
625
613
  parser.add_argument(
626
614
  "--verbose",
627
615
  action="store_true",
@@ -56,9 +56,7 @@ def run_superexec() -> None:
56
56
  address=address,
57
57
  executor=_load_executor(args),
58
58
  certificates=certificates,
59
- config=parse_config_args(
60
- [args.executor_config] if args.executor_config else args.executor_config
61
- ),
59
+ config=parse_config_args([args.executor_config]),
62
60
  )
63
61
 
64
62
  grpc_servers = [superexec_server]