flwr-nightly 1.10.0.dev20240712__tar.gz → 1.10.0.dev20240714__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 (282) hide show
  1. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/PKG-INFO +1 -1
  2. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/pyproject.toml +1 -1
  3. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/client.hf.py.tpl +6 -2
  4. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +2 -1
  5. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +5 -2
  6. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +2 -1
  7. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +5 -2
  8. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +4 -2
  9. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +5 -2
  10. flwr_nightly-1.10.0.dev20240714/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl +19 -0
  11. flwr_nightly-1.10.0.dev20240714/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +16 -0
  12. flwr_nightly-1.10.0.dev20240714/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +16 -0
  13. flwr_nightly-1.10.0.dev20240714/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +16 -0
  14. flwr_nightly-1.10.0.dev20240714/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +27 -0
  15. flwr_nightly-1.10.0.dev20240714/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +20 -0
  16. flwr_nightly-1.10.0.dev20240714/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +27 -0
  17. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/task.hf.py.tpl +2 -2
  18. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +2 -2
  19. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +1 -1
  20. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/run/run.py +1 -1
  21. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/app.py +4 -7
  22. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/client_app.py +28 -8
  23. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/message_handler/message_handler.py +1 -1
  24. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/node_state.py +3 -3
  25. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/node_state_tests.py +1 -1
  26. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/typing.py +2 -2
  27. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/constant.py +3 -0
  28. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/context.py +1 -8
  29. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +2 -1
  30. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +14 -3
  31. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/simulation/app.py +4 -3
  32. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +20 -9
  33. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/superexec/app.py +11 -5
  34. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/superexec/deployment.py +85 -21
  35. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/superexec/exec_grpc.py +5 -2
  36. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/superexec/executor.py +18 -1
  37. flwr_nightly-1.10.0.dev20240712/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl +0 -17
  38. flwr_nightly-1.10.0.dev20240712/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -12
  39. flwr_nightly-1.10.0.dev20240712/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -15
  40. flwr_nightly-1.10.0.dev20240712/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -12
  41. flwr_nightly-1.10.0.dev20240712/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -28
  42. flwr_nightly-1.10.0.dev20240712/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -17
  43. flwr_nightly-1.10.0.dev20240712/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -27
  44. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/LICENSE +0 -0
  45. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/README.md +0 -0
  46. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/__init__.py +0 -0
  47. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/__init__.py +0 -0
  48. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/app.py +0 -0
  49. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/build.py +0 -0
  50. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/config_utils.py +0 -0
  51. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/example.py +0 -0
  52. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/install.py +0 -0
  53. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/__init__.py +0 -0
  54. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/new.py +0 -0
  55. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  56. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  57. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  58. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  59. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  60. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  61. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  62. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  63. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +0 -0
  64. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +0 -0
  65. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -0
  66. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  67. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  68. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -0
  69. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -0
  70. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  71. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  72. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  73. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl +0 -0
  74. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  75. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  76. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  77. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  78. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  79. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  80. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/run/__init__.py +0 -0
  81. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/cli/utils.py +0 -0
  82. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/__init__.py +0 -0
  83. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/client.py +0 -0
  84. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  85. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  86. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  87. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  88. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_client/connection.py +0 -0
  89. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  90. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  91. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  92. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  93. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/heartbeat.py +0 -0
  94. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/message_handler/__init__.py +0 -0
  95. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  96. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/__init__.py +0 -0
  97. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  98. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/comms_mods.py +0 -0
  99. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  100. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  101. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  102. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  103. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/mod/utils.py +0 -0
  104. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/numpy_client.py +0 -0
  105. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/rest_client/__init__.py +0 -0
  106. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/rest_client/connection.py +0 -0
  107. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/supernode/__init__.py +0 -0
  108. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/client/supernode/app.py +0 -0
  109. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/__init__.py +0 -0
  110. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/address.py +0 -0
  111. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/config.py +0 -0
  112. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/date.py +0 -0
  113. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/differential_privacy.py +0 -0
  114. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  115. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/dp.py +0 -0
  116. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/exit_handlers.py +0 -0
  117. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/grpc.py +0 -0
  118. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/logger.py +0 -0
  119. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/message.py +0 -0
  120. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/object_ref.py +0 -0
  121. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/parameter.py +0 -0
  122. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/pyproject.py +0 -0
  123. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/record/__init__.py +0 -0
  124. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/record/configsrecord.py +0 -0
  125. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/record/conversion_utils.py +0 -0
  126. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/record/metricsrecord.py +0 -0
  127. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/record/parametersrecord.py +0 -0
  128. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/record/recordset.py +0 -0
  129. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/record/typeddict.py +0 -0
  130. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/recordset_compat.py +0 -0
  131. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/retry_invoker.py +0 -0
  132. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  133. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  134. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  135. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  136. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  137. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  138. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  139. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  140. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/serde.py +0 -0
  141. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/telemetry.py +0 -0
  142. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/typing.py +0 -0
  143. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/common/version.py +0 -0
  144. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/__init__.py +0 -0
  145. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/common_pb2.py +0 -0
  146. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/common_pb2.pyi +0 -0
  147. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  148. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  149. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/driver_pb2.py +0 -0
  150. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  151. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  152. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  153. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/error_pb2.py +0 -0
  154. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/error_pb2.pyi +0 -0
  155. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/exec_pb2.py +0 -0
  158. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  159. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fab_pb2.py +0 -0
  162. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  163. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fleet_pb2.py +0 -0
  166. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  167. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  170. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  171. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/node_pb2.py +0 -0
  174. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/node_pb2.pyi +0 -0
  175. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/recordset_pb2.py +0 -0
  178. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  179. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/run_pb2.py +0 -0
  182. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/run_pb2.pyi +0 -0
  183. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/task_pb2.py +0 -0
  186. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/task_pb2.pyi +0 -0
  187. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/transport_pb2.py +0 -0
  190. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  191. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/py.typed +0 -0
  194. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/__init__.py +0 -0
  195. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/app.py +0 -0
  196. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/client_manager.py +0 -0
  197. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/client_proxy.py +0 -0
  198. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/compat/__init__.py +0 -0
  199. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/compat/app.py +0 -0
  200. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/compat/app_utils.py +0 -0
  201. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  202. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/compat/legacy_context.py +0 -0
  203. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/criterion.py +0 -0
  204. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/driver/__init__.py +0 -0
  205. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/driver/driver.py +0 -0
  206. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  207. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  208. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/history.py +0 -0
  209. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/run_serverapp.py +0 -0
  210. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/server.py +0 -0
  211. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/server_app.py +0 -0
  212. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/server_config.py +0 -0
  213. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/serverapp_components.py +0 -0
  214. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/__init__.py +0 -0
  215. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/aggregate.py +0 -0
  216. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/bulyan.py +0 -0
  217. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  218. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  219. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  220. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  221. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  222. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  223. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedadam.py +0 -0
  224. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedavg.py +0 -0
  225. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  226. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  227. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  228. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedopt.py +0 -0
  229. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedprox.py +0 -0
  230. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  231. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  232. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  233. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  234. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  235. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/krum.py +0 -0
  236. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  237. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/strategy/strategy.py +0 -0
  238. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/__init__.py +0 -0
  239. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  240. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  241. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  242. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  243. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  244. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  245. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  246. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  247. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  248. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  249. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  250. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  251. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  252. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  253. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  254. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  255. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  256. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  257. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  258. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  259. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  260. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  261. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
  262. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
  263. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/state/state.py +0 -0
  264. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  265. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/superlink/state/utils.py +0 -0
  266. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/typing.py +0 -0
  267. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/utils/__init__.py +0 -0
  268. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/utils/tensorboard.py +0 -0
  269. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/utils/validator.py +0 -0
  270. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/workflow/__init__.py +0 -0
  271. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/workflow/constant.py +0 -0
  272. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  273. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  274. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  275. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  276. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/simulation/__init__.py +0 -0
  277. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  278. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  279. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  280. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/simulation/run_simulation.py +0 -0
  281. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/superexec/__init__.py +0 -0
  282. {flwr_nightly-1.10.0.dev20240712 → flwr_nightly-1.10.0.dev20240714}/src/py/flwr/superexec/exec_servicer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240712
3
+ Version: 1.10.0.dev20240714
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.10.0.dev20240712"
7
+ version = "1.10.0.dev20240714"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -1,6 +1,7 @@
1
1
  """$project_name: A Flower / HuggingFace Transformers app."""
2
2
 
3
3
  from flwr.client import ClientApp, NumPyClient
4
+ from flwr.common import Context
4
5
  from transformers import AutoModelForSequenceClassification
5
6
 
6
7
  from $import_name.task import (
@@ -38,12 +39,15 @@ class FlowerClient(NumPyClient):
38
39
  return float(loss), len(self.testloader), {"accuracy": accuracy}
39
40
 
40
41
 
41
- def client_fn(cid):
42
+ def client_fn(context: Context):
42
43
  # Load model and data
43
44
  net = AutoModelForSequenceClassification.from_pretrained(
44
45
  CHECKPOINT, num_labels=2
45
46
  ).to(DEVICE)
46
- trainloader, valloader = load_data(int(cid), 2)
47
+
48
+ partition_id = int(context.node_config['partition-id'])
49
+ num_partitions = int(context.node_config['num-partitions])
50
+ trainloader, valloader = load_data(partition_id, num_partitions)
47
51
 
48
52
  # Return Client instance
49
53
  return FlowerClient(net, trainloader, valloader).to_client()
@@ -2,6 +2,7 @@
2
2
 
3
3
  import jax
4
4
  from flwr.client import NumPyClient, ClientApp
5
+ from flwr.common import Context
5
6
 
6
7
  from $import_name.task import (
7
8
  evaluation,
@@ -44,7 +45,7 @@ class FlowerClient(NumPyClient):
44
45
  )
45
46
  return float(loss), num_examples, {"loss": float(loss)}
46
47
 
47
- def client_fn(cid):
48
+ def client_fn(context: Context):
48
49
  # Return Client instance
49
50
  return FlowerClient().to_client()
50
51
 
@@ -4,6 +4,7 @@ import mlx.core as mx
4
4
  import mlx.nn as nn
5
5
  import mlx.optimizers as optim
6
6
  from flwr.client import NumPyClient, ClientApp
7
+ from flwr.common import Context
7
8
 
8
9
  from $import_name.task import (
9
10
  batch_iterate,
@@ -57,8 +58,10 @@ class FlowerClient(NumPyClient):
57
58
  return loss.item(), len(self.test_images), {"accuracy": accuracy.item()}
58
59
 
59
60
 
60
- def client_fn(cid):
61
- data = load_data(int(cid), 2)
61
+ def client_fn(context: Context):
62
+ partition_id = int(context.node_config["partition-id"])
63
+ num_partitions = int(context.node_config["num-partitions"])
64
+ data = load_data(partition_id, num_partitions)
62
65
 
63
66
  # Return Client instance
64
67
  return FlowerClient(data).to_client()
@@ -1,6 +1,7 @@
1
1
  """$project_name: A Flower / NumPy app."""
2
2
 
3
3
  from flwr.client import NumPyClient, ClientApp
4
+ from flwr.common import Context
4
5
  import numpy as np
5
6
 
6
7
 
@@ -15,7 +16,7 @@ class FlowerClient(NumPyClient):
15
16
  return float(0.0), 1, {"accuracy": float(1.0)}
16
17
 
17
18
 
18
- def client_fn(cid: str):
19
+ def client_fn(context: Context):
19
20
  return FlowerClient().to_client()
20
21
 
21
22
 
@@ -1,6 +1,7 @@
1
1
  """$project_name: A Flower / PyTorch app."""
2
2
 
3
3
  from flwr.client import NumPyClient, ClientApp
4
+ from flwr.common import Context
4
5
 
5
6
  from $import_name.task import (
6
7
  Net,
@@ -31,10 +32,12 @@ class FlowerClient(NumPyClient):
31
32
  return loss, len(self.valloader.dataset), {"accuracy": accuracy}
32
33
 
33
34
 
34
- def client_fn(cid):
35
+ def client_fn(context: Context):
35
36
  # Load model and data
36
37
  net = Net().to(DEVICE)
37
- trainloader, valloader = load_data(int(cid), 2)
38
+ partition_id = int(context.node_config["partition-id"])
39
+ num_partitions = int(context.node_config["num-partitions"])
40
+ trainloader, valloader = load_data(partition_id, num_partitions)
38
41
 
39
42
  # Return Client instance
40
43
  return FlowerClient(net, trainloader, valloader).to_client()
@@ -4,6 +4,7 @@ import warnings
4
4
 
5
5
  import numpy as np
6
6
  from flwr.client import NumPyClient, ClientApp
7
+ from flwr.common import Context
7
8
  from flwr_datasets import FederatedDataset
8
9
  from sklearn.linear_model import LogisticRegression
9
10
  from sklearn.metrics import log_loss
@@ -68,8 +69,9 @@ class FlowerClient(NumPyClient):
68
69
 
69
70
  fds = FederatedDataset(dataset="mnist", partitioners={"train": 2})
70
71
 
71
- def client_fn(cid: str):
72
- dataset = fds.load_partition(int(cid), "train").with_format("numpy")
72
+ def client_fn(context: Context):
73
+ partition_id = int(context.node_config["partition-id"])
74
+ dataset = fds.load_partition(partition_id, "train").with_format("numpy")
73
75
 
74
76
  X, y = dataset["image"].reshape((len(dataset), -1)), dataset["label"]
75
77
 
@@ -1,6 +1,7 @@
1
1
  """$project_name: A Flower / TensorFlow app."""
2
2
 
3
3
  from flwr.client import NumPyClient, ClientApp
4
+ from flwr.common import Context
4
5
 
5
6
  from $import_name.task import load_data, load_model
6
7
 
@@ -28,10 +29,12 @@ class FlowerClient(NumPyClient):
28
29
  return loss, len(self.x_test), {"accuracy": accuracy}
29
30
 
30
31
 
31
- def client_fn(cid):
32
+ def client_fn(context: Context):
32
33
  # Load model and data
33
34
  net = load_model()
34
- x_train, y_train, x_test, y_test = load_data(int(cid), 2)
35
+
36
+ partition_id = int(context.node_config["partition-id"])
37
+ x_train, y_train, x_test, y_test = load_data(partition_id, 2)
35
38
 
36
39
  # Return Client instance
37
40
  return FlowerClient(net, x_train, y_train, x_test, y_test).to_client()
@@ -0,0 +1,19 @@
1
+ """$project_name: A Flower / HuggingFace Transformers 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
+ # Define strategy
10
+ strategy = FedAvg(
11
+ fraction_fit=1.0,
12
+ fraction_evaluate=1.0,
13
+ )
14
+ config = ServerConfig(num_rounds=3)
15
+
16
+ return ServerAppComponents(strategy=strategy, config=config)
17
+
18
+ # Create ServerApp
19
+ app = ServerApp(server_fn=server_fn)
@@ -0,0 +1,16 @@
1
+ """$project_name: A Flower / JAX 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
+ # Define strategy
10
+ strategy = FedAvg()
11
+ config = ServerConfig(num_rounds=3)
12
+
13
+ return ServerAppComponents(strategy=strategy, config=config)
14
+
15
+ # Create ServerApp
16
+ app = ServerApp(server_fn=server_fn)
@@ -0,0 +1,16 @@
1
+ """$project_name: A Flower / MLX app."""
2
+
3
+ from flwr.common import Context
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
+ from flwr.server.strategy import FedAvg
6
+
7
+
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg()
11
+ config = ServerConfig(num_rounds=3)
12
+
13
+ return ServerAppComponents(strategy=strategy, config=config)
14
+
15
+ # Create ServerApp
16
+ app = ServerApp(server_fn=server_fn)
@@ -0,0 +1,16 @@
1
+ """$project_name: A Flower / NumPy app."""
2
+
3
+ from flwr.common import Context
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
+ from flwr.server.strategy import FedAvg
6
+
7
+
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg()
11
+ config = ServerConfig(num_rounds=3)
12
+
13
+ return ServerAppComponents(strategy=strategy, config=config)
14
+
15
+ # Create ServerApp
16
+ app = ServerApp(server_fn=server_fn)
@@ -0,0 +1,27 @@
1
+ """$project_name: A Flower / PyTorch 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
+
7
+ from $import_name.task import Net, get_weights
8
+
9
+
10
+ # Initialize model parameters
11
+ ndarrays = get_weights(Net())
12
+ parameters = ndarrays_to_parameters(ndarrays)
13
+
14
+ def server_fn(context: Context):
15
+ # Define strategy
16
+ strategy = FedAvg(
17
+ fraction_fit=1.0,
18
+ fraction_evaluate=1.0,
19
+ min_available_clients=2,
20
+ initial_parameters=parameters,
21
+ )
22
+ config = ServerConfig(num_rounds=3)
23
+
24
+ return ServerAppComponents(strategy=strategy, config=config)
25
+
26
+ # Create ServerApp
27
+ app = ServerApp(server_fn=server_fn)
@@ -0,0 +1,20 @@
1
+ """$project_name: A Flower / Scikit-Learn app."""
2
+
3
+ from flwr.common import Context
4
+ from flwr.server import ServerApp, ServerAppComponents, ServerConfig
5
+ from flwr.server.strategy import FedAvg
6
+
7
+
8
+ def server_fn(context: Context):
9
+ # Define strategy
10
+ strategy = FedAvg(
11
+ fraction_fit=1.0,
12
+ fraction_evaluate=1.0,
13
+ min_available_clients=2,
14
+ )
15
+ config = ServerConfig(num_rounds=3)
16
+
17
+ return ServerAppComponents(strategy=strategy, config=config)
18
+
19
+ # Create ServerApp
20
+ app = ServerApp(server_fn=server_fn)
@@ -0,0 +1,27 @@
1
+ """$project_name: A Flower / TensorFlow 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
+
7
+ from $import_name.task import load_model
8
+
9
+ # Define config
10
+ config = ServerConfig(num_rounds=3)
11
+
12
+ parameters = ndarrays_to_parameters(load_model().get_weights())
13
+
14
+ def server_fn(context: Context):
15
+ # Define strategy
16
+ strategy = strategy = FedAvg(
17
+ fraction_fit=1.0,
18
+ fraction_evaluate=1.0,
19
+ min_available_clients=2,
20
+ initial_parameters=parameters,
21
+ )
22
+ config = ServerConfig(num_rounds=3)
23
+
24
+ return ServerAppComponents(strategy=strategy, config=config)
25
+
26
+ # Create ServerApp
27
+ app = ServerApp(server_fn=server_fn)
@@ -16,9 +16,9 @@ DEVICE = torch.device("cpu")
16
16
  CHECKPOINT = "distilbert-base-uncased" # transformer model checkpoint
17
17
 
18
18
 
19
- def load_data(partition_id, num_clients):
19
+ def load_data(partition_id: int, num_partitions: int):
20
20
  """Load IMDB data (training and eval)"""
21
- fds = FederatedDataset(dataset="imdb", partitioners={"train": num_clients})
21
+ fds = FederatedDataset(dataset="imdb", partitioners={"train": num_partitions})
22
22
  partition = fds.load_partition(partition_id)
23
23
  # Divide data: 80% train, 20% test
24
24
  partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
@@ -43,8 +43,8 @@ def batch_iterate(batch_size, X, y):
43
43
  yield X[ids], y[ids]
44
44
 
45
45
 
46
- def load_data(partition_id, num_clients):
47
- fds = FederatedDataset(dataset="mnist", partitioners={"train": num_clients})
46
+ def load_data(partition_id: int, num_partitions: int):
47
+ fds = FederatedDataset(dataset="mnist", partitioners={"train": num_partitions})
48
48
  partition = fds.load_partition(partition_id)
49
49
  partition_splits = partition.train_test_split(test_size=0.2, seed=42)
50
50
 
@@ -34,7 +34,7 @@ class Net(nn.Module):
34
34
  return self.fc3(x)
35
35
 
36
36
 
37
- def load_data(partition_id, num_partitions):
37
+ def load_data(partition_id: int, num_partitions: int):
38
38
  """Load partition CIFAR10 data."""
39
39
  fds = FederatedDataset(dataset="cifar10", partitioners={"train": num_partitions})
40
40
  partition = fds.load_partition(partition_id)
@@ -62,7 +62,7 @@ def run(
62
62
  config_overrides: Annotated[
63
63
  Optional[str],
64
64
  typer.Option(
65
- "--config",
65
+ "--run-config",
66
66
  "-c",
67
67
  help="Override configuration key-value pairs",
68
68
  ),
@@ -28,7 +28,7 @@ from grpc import RpcError
28
28
  from flwr.client.client import Client
29
29
  from flwr.client.client_app import ClientApp, LoadClientAppError
30
30
  from flwr.client.typing import ClientFnExt
31
- from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, Message, event
31
+ from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
32
32
  from flwr.common.address import parse_address
33
33
  from flwr.common.constant import (
34
34
  MISSING_EXTRA_REST,
@@ -138,8 +138,8 @@ def start_client(
138
138
 
139
139
  Starting an SSL-enabled gRPC client using system certificates:
140
140
 
141
- >>> def client_fn(node_id: int, partition_id: Optional[int]):
142
- >>> return FlowerClient()
141
+ >>> def client_fn(context: Context):
142
+ >>> return FlowerClient().to_client()
143
143
  >>>
144
144
  >>> start_client(
145
145
  >>> server_address=localhost:8080,
@@ -253,8 +253,7 @@ def _start_client_internal(
253
253
  if client_fn is None:
254
254
  # Wrap `Client` instance in `client_fn`
255
255
  def single_client_factory(
256
- node_id: int, # pylint: disable=unused-argument
257
- partition_id: Optional[int], # pylint: disable=unused-argument
256
+ context: Context, # pylint: disable=unused-argument
258
257
  ) -> Client:
259
258
  if client is None: # Added this to keep mypy happy
260
259
  raise ValueError(
@@ -349,7 +348,6 @@ def _start_client_internal(
349
348
  node_state = NodeState(
350
349
  node_id=-1,
351
350
  node_config={},
352
- partition_id=None,
353
351
  )
354
352
  else:
355
353
  # Call create_node fn to register node
@@ -361,7 +359,6 @@ def _start_client_internal(
361
359
  node_state = NodeState(
362
360
  node_id=node_id,
363
361
  node_config=node_config,
364
- partition_id=None,
365
362
  )
366
363
 
367
364
  app_state_tracker.register_signal_handler()
@@ -30,21 +30,41 @@ from flwr.common.logger import warn_deprecated_feature, warn_preview_feature
30
30
  from .typing import ClientAppCallable
31
31
 
32
32
 
33
+ def _alert_erroneous_client_fn() -> None:
34
+ raise ValueError(
35
+ "A `ClientApp` cannot make use of a `client_fn` that does "
36
+ "not have a signature in the form: `def client_fn(context: "
37
+ "Context)`. You can import the `Context` like this: "
38
+ "`from flwr.common import Context`"
39
+ )
40
+
41
+
33
42
  def _inspect_maybe_adapt_client_fn_signature(client_fn: ClientFnExt) -> ClientFnExt:
34
43
  client_fn_args = inspect.signature(client_fn).parameters
44
+ first_arg = list(client_fn_args.keys())[0]
45
+
46
+ if len(client_fn_args) != 1:
47
+ _alert_erroneous_client_fn()
48
+
49
+ first_arg_type = client_fn_args[first_arg].annotation
35
50
 
36
- if not all(key in client_fn_args for key in ["node_id", "partition_id"]):
51
+ if first_arg_type is str or first_arg == "cid":
52
+ # Warn previous signature for `client_fn` seems to be used
37
53
  warn_deprecated_feature(
38
- "`client_fn` now expects a signature `def client_fn(node_id: int, "
39
- "partition_id: Optional[int])`.\nYou provided `client_fn` with signature: "
40
- f"{dict(client_fn_args.items())}"
54
+ "`client_fn` now expects a signature `def client_fn(context: Context)`."
55
+ "The provided `client_fn` has signature: "
56
+ f"{dict(client_fn_args.items())}. You can import the `Context` like this:"
57
+ " `from flwr.common import Context`"
41
58
  )
42
59
 
43
60
  # Wrap depcreated client_fn inside a function with the expected signature
44
61
  def adaptor_fn(
45
- node_id: int, partition_id: Optional[int] # pylint: disable=unused-argument
46
- ) -> Client:
47
- return client_fn(str(partition_id)) # type: ignore
62
+ context: Context,
63
+ ) -> Client: # pylint: disable=unused-argument
64
+ # if patition-id is defined, pass it. Else pass node_id that should
65
+ # always be defined during Context init.
66
+ cid = context.node_config.get("partition-id", context.node_id)
67
+ return client_fn(str(cid)) # type: ignore
48
68
 
49
69
  return adaptor_fn
50
70
 
@@ -71,7 +91,7 @@ class ClientApp:
71
91
  >>> class FlowerClient(NumPyClient):
72
92
  >>> # ...
73
93
  >>>
74
- >>> def client_fn(node_id: int, partition_id: Optional[int]):
94
+ >>> def client_fn(context: Context):
75
95
  >>> return FlowerClient().to_client()
76
96
  >>>
77
97
  >>> app = ClientApp(client_fn)
@@ -92,7 +92,7 @@ def handle_legacy_message_from_msgtype(
92
92
  client_fn: ClientFnExt, message: Message, context: Context
93
93
  ) -> Message:
94
94
  """Handle legacy message in the inner most mod."""
95
- client = client_fn(message.metadata.dst_node_id, context.partition_id)
95
+ client = client_fn(context)
96
96
 
97
97
  # Check if NumPyClient is returend
98
98
  if isinstance(client, NumPyClient):
@@ -36,12 +36,13 @@ class NodeState:
36
36
  """State of a node where client nodes execute runs."""
37
37
 
38
38
  def __init__(
39
- self, node_id: int, node_config: Dict[str, str], partition_id: Optional[int]
39
+ self,
40
+ node_id: int,
41
+ node_config: Dict[str, str],
40
42
  ) -> None:
41
43
  self.node_id = node_id
42
44
  self.node_config = node_config
43
45
  self.run_infos: Dict[int, RunInfo] = {}
44
- self._partition_id = partition_id
45
46
 
46
47
  def register_context(
47
48
  self,
@@ -59,7 +60,6 @@ class NodeState:
59
60
  node_config=self.node_config,
60
61
  state=RecordSet(),
61
62
  run_config=initial_run_config.copy(),
62
- partition_id=self._partition_id,
63
63
  ),
64
64
  )
65
65
 
@@ -41,7 +41,7 @@ def test_multirun_in_node_state() -> None:
41
41
  expected_values = {0: "1", 1: "1" * 3, 2: "1" * 2, 3: "1", 5: "1"}
42
42
 
43
43
  # NodeState
44
- node_state = NodeState(node_id=0, node_config={}, partition_id=None)
44
+ node_state = NodeState(node_id=0, node_config={})
45
45
 
46
46
  for task in tasks:
47
47
  run_id = task.run_id
@@ -15,7 +15,7 @@
15
15
  """Custom types for Flower clients."""
16
16
 
17
17
 
18
- from typing import Callable, Optional
18
+ from typing import Callable
19
19
 
20
20
  from flwr.common import Context, Message
21
21
 
@@ -23,7 +23,7 @@ from .client import Client as Client
23
23
 
24
24
  # Compatibility
25
25
  ClientFn = Callable[[str], Client]
26
- ClientFnExt = Callable[[int, Optional[int]], Client]
26
+ ClientFnExt = Callable[[Context], Client]
27
27
 
28
28
  ClientAppCallable = Callable[[Message, Context], Message]
29
29
  Mod = Callable[[Message, Context, ClientAppCallable], Message]
@@ -57,6 +57,9 @@ APP_DIR = "apps"
57
57
  FAB_CONFIG_FILE = "pyproject.toml"
58
58
  FLWR_HOME = "FLWR_HOME"
59
59
 
60
+ # Constants entries in Node config for Simulation
61
+ PARTITION_ID_KEY = "partition-id"
62
+ NUM_PARTITIONS_KEY = "num-partitions"
60
63
 
61
64
  GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY = "flower-version"
62
65
  GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY = "should-exit"
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
  from dataclasses import dataclass
19
- from typing import Dict, Optional
19
+ from typing import Dict
20
20
 
21
21
  from .record import RecordSet
22
22
 
@@ -43,17 +43,12 @@ class Context:
43
43
  A config (key/value mapping) held by the entity in a given run and that will
44
44
  stay local. It can be used at any point during the lifecycle of this entity
45
45
  (e.g. across multiple rounds)
46
- partition_id : Optional[int] (default: None)
47
- An index that specifies the data partition that the ClientApp using this Context
48
- object should make use of. Setting this attribute is better suited for
49
- simulation or proto typing setups.
50
46
  """
51
47
 
52
48
  node_id: int
53
49
  node_config: Dict[str, str]
54
50
  state: RecordSet
55
51
  run_config: Dict[str, str]
56
- partition_id: Optional[int]
57
52
 
58
53
  def __init__( # pylint: disable=too-many-arguments
59
54
  self,
@@ -61,10 +56,8 @@ class Context:
61
56
  node_config: Dict[str, str],
62
57
  state: RecordSet,
63
58
  run_config: Dict[str, str],
64
- partition_id: Optional[int] = None,
65
59
  ) -> None:
66
60
  self.node_id = node_id
67
61
  self.node_config = node_config
68
62
  self.state = state
69
63
  self.run_config = run_config
70
- self.partition_id = partition_id
@@ -21,6 +21,7 @@ from typing import Callable, Dict, List, Tuple, Union
21
21
  import ray
22
22
 
23
23
  from flwr.client.client_app import ClientApp
24
+ from flwr.common.constant import PARTITION_ID_KEY
24
25
  from flwr.common.context import Context
25
26
  from flwr.common.logger import log
26
27
  from flwr.common.message import Message
@@ -168,7 +169,7 @@ class RayBackend(Backend):
168
169
 
169
170
  Return output message and updated context.
170
171
  """
171
- partition_id = context.partition_id
172
+ partition_id = context.node_config[PARTITION_ID_KEY]
172
173
 
173
174
  try:
174
175
  # Submit a task to the pool
@@ -29,7 +29,12 @@ from typing import Callable, Dict, Optional
29
29
 
30
30
  from flwr.client.client_app import ClientApp, ClientAppException, LoadClientAppError
31
31
  from flwr.client.node_state import NodeState
32
- from flwr.common.constant import PING_MAX_INTERVAL, ErrorCode
32
+ from flwr.common.constant import (
33
+ NUM_PARTITIONS_KEY,
34
+ PARTITION_ID_KEY,
35
+ PING_MAX_INTERVAL,
36
+ ErrorCode,
37
+ )
33
38
  from flwr.common.logger import log
34
39
  from flwr.common.message import Error
35
40
  from flwr.common.object_ref import load_app
@@ -73,7 +78,7 @@ def worker(
73
78
  task_ins: TaskIns = taskins_queue.get(timeout=1.0)
74
79
  node_id = task_ins.task.consumer.node_id
75
80
 
76
- # Register and retrieve runstate
81
+ # Register and retrieve context
77
82
  node_states[node_id].register_context(run_id=task_ins.run_id)
78
83
  context = node_states[node_id].retrieve_context(run_id=task_ins.run_id)
79
84
 
@@ -283,9 +288,15 @@ def start_vce(
283
288
 
284
289
  # Construct mapping of NodeStates
285
290
  node_states: Dict[int, NodeState] = {}
291
+ # Number of unique partitions
292
+ num_partitions = len(set(nodes_mapping.values()))
286
293
  for node_id, partition_id in nodes_mapping.items():
287
294
  node_states[node_id] = NodeState(
288
- node_id=node_id, node_config={}, partition_id=partition_id
295
+ node_id=node_id,
296
+ node_config={
297
+ PARTITION_ID_KEY: str(partition_id),
298
+ NUM_PARTITIONS_KEY: str(num_partitions),
299
+ },
289
300
  )
290
301
 
291
302
  # Load backend config