flwr-nightly 1.11.0.dev20240829__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 (301) hide show
  1. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/PKG-INFO +1 -1
  2. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/pyproject.toml +1 -1
  3. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/new.py +23 -37
  4. {flwr_nightly-1.11.0.dev20240829 → 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.dev20240829 → 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.dev20240829 → 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.dev20240829 → 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.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/client_app.py +2 -2
  10. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +2 -3
  11. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/recordset.py +1 -1
  12. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/typeddict.py +24 -1
  13. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -1
  14. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +21 -12
  15. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/ray_actor.py +2 -2
  16. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/run_simulation.py +14 -2
  17. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/app.py +3 -1
  18. flwr_nightly-1.11.0.dev20240829/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -23
  19. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/LICENSE +0 -0
  20. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/README.md +0 -0
  21. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/__init__.py +0 -0
  22. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/__init__.py +0 -0
  23. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/app.py +0 -0
  24. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/build.py +0 -0
  25. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/config_utils.py +0 -0
  26. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/example.py +0 -0
  27. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/install.py +0 -0
  28. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/__init__.py +0 -0
  29. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  30. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  31. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  32. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  33. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  34. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  35. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  36. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  37. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  38. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  39. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  40. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  41. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  42. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  43. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  44. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  45. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  46. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  47. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  48. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  49. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  50. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  51. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  52. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  53. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  54. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  55. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  56. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  57. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  58. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  59. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  60. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  61. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  62. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  63. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  64. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  65. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  66. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  67. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  68. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  69. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  70. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  71. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  72. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  73. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  74. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/run/__init__.py +0 -0
  75. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/run/run.py +0 -0
  76. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/cli/utils.py +0 -0
  77. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/__init__.py +0 -0
  78. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/app.py +0 -0
  79. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/client.py +0 -0
  80. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/__init__.py +0 -0
  81. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/app.py +0 -0
  82. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  83. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/clientapp/utils.py +0 -0
  84. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  85. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  86. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  87. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  88. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_client/connection.py +0 -0
  89. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  90. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  91. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  92. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/heartbeat.py +0 -0
  93. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/message_handler/__init__.py +0 -0
  94. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  95. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  96. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/__init__.py +0 -0
  97. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  98. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/comms_mods.py +0 -0
  99. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  100. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  101. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  102. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  103. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/mod/utils.py +0 -0
  104. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/node_state.py +0 -0
  105. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/node_state_tests.py +0 -0
  106. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/numpy_client.py +0 -0
  107. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/rest_client/__init__.py +0 -0
  108. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/rest_client/connection.py +0 -0
  109. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/supernode/__init__.py +0 -0
  110. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/supernode/app.py +0 -0
  111. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/client/typing.py +0 -0
  112. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/__init__.py +0 -0
  113. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/address.py +0 -0
  114. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/config.py +0 -0
  115. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/constant.py +0 -0
  116. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/context.py +0 -0
  117. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/date.py +0 -0
  118. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/differential_privacy.py +0 -0
  119. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  120. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/dp.py +0 -0
  121. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/exit_handlers.py +0 -0
  122. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/grpc.py +0 -0
  123. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/logger.py +0 -0
  124. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/message.py +0 -0
  125. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/object_ref.py +0 -0
  126. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/parameter.py +0 -0
  127. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/pyproject.py +0 -0
  128. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/__init__.py +0 -0
  129. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/configsrecord.py +0 -0
  130. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/conversion_utils.py +0 -0
  131. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/metricsrecord.py +0 -0
  132. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/record/parametersrecord.py +0 -0
  133. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/recordset_compat.py +0 -0
  134. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/retry_invoker.py +0 -0
  135. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  136. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  137. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  138. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  139. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  140. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  141. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  142. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  143. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/serde.py +0 -0
  144. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/telemetry.py +0 -0
  145. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/typing.py +0 -0
  146. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/common/version.py +0 -0
  147. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/__init__.py +0 -0
  148. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  149. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  150. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  151. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  152. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2.py +0 -0
  153. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2.pyi +0 -0
  154. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  155. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  156. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2.py +0 -0
  157. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  158. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  159. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  160. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2.py +0 -0
  161. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2.pyi +0 -0
  162. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2.py +0 -0
  165. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  166. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2.py +0 -0
  169. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  170. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2.py +0 -0
  173. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  174. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  177. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  178. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2.py +0 -0
  181. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2.pyi +0 -0
  182. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2.py +0 -0
  185. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2.pyi +0 -0
  186. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2.py +0 -0
  189. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  190. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2.py +0 -0
  193. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2.pyi +0 -0
  194. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2.py +0 -0
  197. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2.pyi +0 -0
  198. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2.py +0 -0
  201. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  202. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/py.typed +0 -0
  205. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/__init__.py +0 -0
  206. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/app.py +0 -0
  207. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/client_manager.py +0 -0
  208. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/client_proxy.py +0 -0
  209. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/__init__.py +0 -0
  210. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/app.py +0 -0
  211. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/app_utils.py +0 -0
  212. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  213. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/compat/legacy_context.py +0 -0
  214. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/criterion.py +0 -0
  215. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/__init__.py +0 -0
  216. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/driver.py +0 -0
  217. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  218. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  219. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/history.py +0 -0
  220. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/run_serverapp.py +0 -0
  221. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/server.py +0 -0
  222. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/server_app.py +0 -0
  223. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/server_config.py +0 -0
  224. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/serverapp_components.py +0 -0
  225. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/__init__.py +0 -0
  226. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/aggregate.py +0 -0
  227. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/bulyan.py +0 -0
  228. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  229. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  230. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  231. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  232. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  233. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  234. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedadam.py +0 -0
  235. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedavg.py +0 -0
  236. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  237. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  238. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  239. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedopt.py +0 -0
  240. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedprox.py +0 -0
  241. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  242. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  243. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  244. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  245. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  246. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/krum.py +0 -0
  247. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  248. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/strategy/strategy.py +0 -0
  249. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/__init__.py +0 -0
  250. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  251. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  252. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  253. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  254. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  255. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  256. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  257. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  258. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  259. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  260. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  261. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  262. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  263. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  264. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  265. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  266. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  267. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  268. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  269. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  270. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  271. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  272. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  273. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  274. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  275. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  276. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  277. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  278. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/state.py +0 -0
  279. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  280. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/superlink/state/utils.py +0 -0
  281. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/typing.py +0 -0
  282. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/utils/__init__.py +0 -0
  283. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/utils/tensorboard.py +0 -0
  284. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/utils/validator.py +0 -0
  285. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/__init__.py +0 -0
  286. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/constant.py +0 -0
  287. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  288. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  289. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  290. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  291. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/__init__.py +0 -0
  292. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/app.py +0 -0
  293. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  294. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  295. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  296. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/__init__.py +0 -0
  297. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/deployment.py +0 -0
  298. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/exec_grpc.py +0 -0
  299. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/exec_servicer.py +0 -0
  300. {flwr_nightly-1.11.0.dev20240829 → flwr_nightly-1.11.1.dev20240911}/src/py/flwr/superexec/executor.py +0 -0
  301. {flwr_nightly-1.11.0.dev20240829 → 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.dev20240829
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.dev20240829"
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>"]
@@ -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
@@ -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(
@@ -130,13 +130,12 @@ 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)
133
134
  metadata.append(
134
135
  (
135
136
  _AUTH_TOKEN_HEADER,
136
137
  base64.urlsafe_b64encode(
137
- compute_hmac(
138
- self.shared_secret, request.SerializeToString(True)
139
- )
138
+ compute_hmac(self.shared_secret, message_bytes)
140
139
  ),
141
140
  )
142
141
  )
@@ -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()
@@ -188,7 +188,8 @@ 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
- return verify_hmac(shared_secret, request.SerializeToString(True), hmac_value)
191
+ message_bytes = request.SerializeToString(deterministic=True)
192
+ return verify_hmac(shared_secret, message_bytes, hmac_value)
192
193
 
193
194
  def _create_authenticated_node(
194
195
  self,
@@ -52,16 +52,11 @@ class RayBackend(Backend):
52
52
 
53
53
  # Validate client resources
54
54
  self.client_resources_key = "client_resources"
55
- client_resources = self._validate_client_resources(config=backend_config)
55
+ self.client_resources = self._validate_client_resources(config=backend_config)
56
56
 
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
- )
57
+ # Valide actor resources
58
+ self.actor_kwargs = self._validate_actor_arguments(config=backend_config)
59
+ self.pool: Optional[BasicActorPool] = None
65
60
 
66
61
  self.app_fn: Optional[Callable[[], ClientApp]] = None
67
62
 
@@ -122,14 +117,24 @@ class RayBackend(Backend):
122
117
  @property
123
118
  def num_workers(self) -> int:
124
119
  """Return number of actors in pool."""
125
- return self.pool.num_actors
120
+ return self.pool.num_actors if self.pool else 0
126
121
 
127
122
  def is_worker_idle(self) -> bool:
128
123
  """Report whether the pool has idle actors."""
129
- return self.pool.is_actor_available()
124
+ return self.pool.is_actor_available() if self.pool else False
130
125
 
131
126
  def build(self, app_fn: Callable[[], ClientApp]) -> None:
132
127
  """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
+
133
138
  self.pool.add_actors_to_pool(self.pool.actors_capacity)
134
139
  # Set ClientApp callable that ray actors will use
135
140
  self.app_fn = app_fn
@@ -146,6 +151,9 @@ class RayBackend(Backend):
146
151
  """
147
152
  partition_id = context.node_config[PARTITION_ID_KEY]
148
153
 
154
+ if self.pool is None:
155
+ raise ValueError("The actor pool is empty, unfit to process messages.")
156
+
149
157
  if self.app_fn is None:
150
158
  raise ValueError(
151
159
  "Unspecified function to load a `ClientApp`. "
@@ -179,6 +187,7 @@ class RayBackend(Backend):
179
187
 
180
188
  def terminate(self) -> None:
181
189
  """Terminate all actors in actor pool."""
182
- self.pool.terminate_all_actors()
190
+ if self.pool:
191
+ self.pool.terminate_all_actors()
183
192
  ray.shutdown()
184
193
  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 the `client_resources` could help.",
127
+ " %s. Lowering these 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 'client_resources' passed to `start_simulation`"
134
+ "Check `num_cpus` and/or `num_gpus` passed to the simulation engine"
135
135
  )
136
136
 
137
137
  return total_num_actors
@@ -216,6 +216,7 @@ 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,
219
220
  verbose_logging=args.verbose,
220
221
  server_app_run_config=fused_config,
221
222
  is_app=is_app,
@@ -309,7 +310,6 @@ def run_serverapp_th(
309
310
  f_stop: threading.Event,
310
311
  has_exception: threading.Event,
311
312
  enable_tf_gpu_growth: bool,
312
- delay_launch: int = 3,
313
313
  ) -> threading.Thread:
314
314
  """Run SeverApp in a thread."""
315
315
 
@@ -365,7 +365,6 @@ def run_serverapp_th(
365
365
  server_app,
366
366
  ),
367
367
  )
368
- sleep(delay_launch)
369
368
  serverapp_th.start()
370
369
  return serverapp_th
371
370
 
@@ -380,6 +379,7 @@ def _main_loop(
380
379
  enable_tf_gpu_growth: bool,
381
380
  run: Run,
382
381
  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,6 +419,9 @@ 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)
422
425
  # Start Simulation Engine
423
426
  vce.start_vce(
424
427
  num_supernodes=num_supernodes,
@@ -467,6 +470,7 @@ def _run_simulation(
467
470
  flwr_dir: Optional[str] = None,
468
471
  run: Optional[Run] = None,
469
472
  enable_tf_gpu_growth: bool = False,
473
+ delay_start: int = 5,
470
474
  verbose_logging: bool = False,
471
475
  is_app: bool = False,
472
476
  ) -> None:
@@ -523,6 +527,7 @@ def _run_simulation(
523
527
  enable_tf_gpu_growth,
524
528
  run,
525
529
  exit_event,
530
+ delay_start,
526
531
  flwr_dir,
527
532
  client_app,
528
533
  client_app_attr,
@@ -610,6 +615,13 @@ def _parse_args_run_simulation() -> argparse.ArgumentParser:
610
615
  "Read more about how `tf.config.experimental.set_memory_growth()` works in "
611
616
  "the TensorFlow documentation: https://www.tensorflow.org/api/stable.",
612
617
  )
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
+ )
613
625
  parser.add_argument(
614
626
  "--verbose",
615
627
  action="store_true",
@@ -56,7 +56,9 @@ def run_superexec() -> None:
56
56
  address=address,
57
57
  executor=_load_executor(args),
58
58
  certificates=certificates,
59
- config=parse_config_args([args.executor_config]),
59
+ config=parse_config_args(
60
+ [args.executor_config] if args.executor_config else args.executor_config
61
+ ),
60
62
  )
61
63
 
62
64
  grpc_servers = [superexec_server]