flwr-nightly 1.10.0.dev20240624__tar.gz → 1.10.0.dev20240707__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 (270) hide show
  1. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/PKG-INFO +1 -1
  2. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/pyproject.toml +2 -2
  3. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/build.py +2 -2
  4. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/run/run.py +13 -4
  5. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/__init__.py +2 -0
  6. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/app.py +15 -10
  7. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/client_app.py +29 -4
  8. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/message_handler/message_handler.py +3 -4
  9. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/node_state.py +6 -3
  10. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/node_state_tests.py +1 -1
  11. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/supernode/app.py +11 -3
  12. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/typing.py +2 -1
  13. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/constant.py +3 -0
  14. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/context.py +11 -1
  15. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/logger.py +13 -0
  16. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/message.py +0 -17
  17. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -1
  18. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +3 -8
  19. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/in_memory_state.py +4 -4
  20. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/sqlite_state.py +4 -4
  21. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/utils.py +6 -0
  22. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/app.py +51 -36
  23. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +16 -9
  24. flwr_nightly-1.10.0.dev20240707/src/py/flwr/superexec/deployment.py +109 -0
  25. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/LICENSE +0 -0
  26. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/README.md +0 -0
  27. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/__init__.py +0 -0
  28. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/__init__.py +0 -0
  29. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/app.py +0 -0
  30. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/config_utils.py +0 -0
  31. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/example.py +0 -0
  32. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/install.py +0 -0
  33. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/__init__.py +0 -0
  34. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/new.py +0 -0
  35. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  36. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  37. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  38. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  39. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  40. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  41. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  42. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/client.hf.py.tpl +0 -0
  43. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  44. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  45. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  46. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  47. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  48. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  49. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  50. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +0 -0
  51. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +0 -0
  52. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -0
  53. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  54. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  55. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -0
  56. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -0
  57. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl +0 -0
  58. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  59. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  60. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  61. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  62. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  63. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  64. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/task.hf.py.tpl +0 -0
  65. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  66. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  67. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  68. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  69. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  70. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl +0 -0
  71. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  72. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  73. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  74. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  75. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  76. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  77. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/run/__init__.py +0 -0
  78. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/utils.py +0 -0
  79. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/client.py +0 -0
  80. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  81. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  82. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  83. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  84. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_client/connection.py +0 -0
  85. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  86. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  87. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  88. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  89. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/heartbeat.py +0 -0
  90. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/message_handler/__init__.py +0 -0
  91. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  92. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/__init__.py +0 -0
  93. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  94. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/comms_mods.py +0 -0
  95. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  96. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  97. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  98. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  99. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/utils.py +0 -0
  100. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/numpy_client.py +0 -0
  101. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/rest_client/__init__.py +0 -0
  102. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/rest_client/connection.py +0 -0
  103. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/supernode/__init__.py +0 -0
  104. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/__init__.py +0 -0
  105. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/address.py +0 -0
  106. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/config.py +0 -0
  107. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/date.py +0 -0
  108. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/differential_privacy.py +0 -0
  109. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  110. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/dp.py +0 -0
  111. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/exit_handlers.py +0 -0
  112. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/grpc.py +0 -0
  113. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/object_ref.py +0 -0
  114. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/parameter.py +0 -0
  115. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/pyproject.py +0 -0
  116. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/__init__.py +0 -0
  117. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/configsrecord.py +0 -0
  118. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/conversion_utils.py +0 -0
  119. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/metricsrecord.py +0 -0
  120. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/parametersrecord.py +0 -0
  121. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/recordset.py +0 -0
  122. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/typeddict.py +0 -0
  123. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/recordset_compat.py +0 -0
  124. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/retry_invoker.py +0 -0
  125. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  126. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  127. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  128. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  129. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  130. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  131. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  132. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  133. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/serde.py +0 -0
  134. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/telemetry.py +0 -0
  135. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/typing.py +0 -0
  136. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/version.py +0 -0
  137. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/__init__.py +0 -0
  138. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2.py +0 -0
  139. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  140. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  141. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  142. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2.py +0 -0
  143. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2.pyi +0 -0
  144. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  145. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  146. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2.py +0 -0
  147. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  148. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  149. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  150. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2.py +0 -0
  151. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  152. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  153. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  154. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2.py +0 -0
  155. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  156. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  157. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  158. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  159. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  160. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  161. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  162. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2.py +0 -0
  163. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2.pyi +0 -0
  164. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  165. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  166. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2.py +0 -0
  167. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  168. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  169. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  170. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2.py +0 -0
  171. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2.pyi +0 -0
  172. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  173. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  174. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2.py +0 -0
  175. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2.pyi +0 -0
  176. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  177. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  178. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2.py +0 -0
  179. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  180. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  181. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  182. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/py.typed +0 -0
  183. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/__init__.py +0 -0
  184. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/app.py +0 -0
  185. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/client_manager.py +0 -0
  186. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/client_proxy.py +0 -0
  187. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/__init__.py +0 -0
  188. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/app.py +0 -0
  189. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/app_utils.py +0 -0
  190. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  191. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/legacy_context.py +0 -0
  192. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/criterion.py +0 -0
  193. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/__init__.py +0 -0
  194. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/driver.py +0 -0
  195. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  196. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  197. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/history.py +0 -0
  198. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/run_serverapp.py +0 -0
  199. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/server.py +0 -0
  200. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/server_app.py +0 -0
  201. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/server_config.py +0 -0
  202. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/__init__.py +0 -0
  203. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/aggregate.py +0 -0
  204. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/bulyan.py +0 -0
  205. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  206. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  207. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  208. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  209. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  210. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  211. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedadam.py +0 -0
  212. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedavg.py +0 -0
  213. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  214. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  215. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  216. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedopt.py +0 -0
  217. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedprox.py +0 -0
  218. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  219. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  220. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  221. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  222. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  223. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/krum.py +0 -0
  224. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  225. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/strategy.py +0 -0
  226. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/__init__.py +0 -0
  227. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  228. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  229. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
  230. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  231. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  232. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  233. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  234. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  235. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  236. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  237. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  238. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  239. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  240. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  241. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  242. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  243. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  244. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  245. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  246. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  247. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  248. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  249. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/state.py +0 -0
  250. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  251. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/typing.py +0 -0
  252. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/utils/__init__.py +0 -0
  253. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/utils/tensorboard.py +0 -0
  254. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/utils/validator.py +0 -0
  255. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/__init__.py +0 -0
  256. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/constant.py +0 -0
  257. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  258. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  259. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  260. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  261. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/__init__.py +0 -0
  262. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  263. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  264. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  265. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/run_simulation.py +0 -0
  266. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/__init__.py +0 -0
  267. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/app.py +0 -0
  268. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/exec_grpc.py +0 -0
  269. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/exec_servicer.py +0 -0
  270. {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/executor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.10.0.dev20240624
3
+ Version: 1.10.0.dev20240707
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.dev20240624"
7
+ version = "1.10.0.dev20240707"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -122,7 +122,7 @@ mdformat-gfm = "==0.3.5"
122
122
  mdformat-frontmatter = "==2.0.1"
123
123
  mdformat-beautysh = "==0.1.1"
124
124
  mdformat-myst = "==0.1.5"
125
- twine = "==4.0.2"
125
+ twine = "==5.1.1"
126
126
  pyroma = "==4.2"
127
127
  check-wheel-contents = "==0.4.0"
128
128
  GitPython = "==3.1.32"
@@ -31,7 +31,7 @@ from .utils import get_sha256_hash, is_valid_project_name
31
31
  def build(
32
32
  directory: Annotated[
33
33
  Optional[Path],
34
- typer.Option(help="The Flower project directory to bundle into a FAB"),
34
+ typer.Option(help="Path of the Flower project to bundle into a FAB"),
35
35
  ] = None,
36
36
  ) -> str:
37
37
  """Build a Flower project into a Flower App Bundle (FAB).
@@ -118,7 +118,7 @@ def build(
118
118
  fab_file.writestr(".info/CONTENT", list_file_content)
119
119
 
120
120
  typer.secho(
121
- f"🎊 Successfully built {fab_filename}.", fg=typer.colors.GREEN, bold=True
121
+ f"🎊 Successfully built {fab_filename}", fg=typer.colors.GREEN, bold=True
122
122
  )
123
123
 
124
124
  return fab_filename
@@ -17,12 +17,14 @@
17
17
  import sys
18
18
  from enum import Enum
19
19
  from logging import DEBUG
20
+ from pathlib import Path
20
21
  from typing import Optional
21
22
 
22
23
  import typer
23
24
  from typing_extensions import Annotated
24
25
 
25
26
  from flwr.cli import config_utils
27
+ from flwr.cli.build import build
26
28
  from flwr.common.constant import SUPEREXEC_DEFAULT_ADDRESS
27
29
  from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
28
30
  from flwr.common.logger import log
@@ -52,10 +54,14 @@ def run(
52
54
  case_sensitive=False, help="Use this flag to use the new SuperExec API"
53
55
  ),
54
56
  ] = False,
57
+ directory: Annotated[
58
+ Optional[Path],
59
+ typer.Option(help="Path of the Flower project to run"),
60
+ ] = None,
55
61
  ) -> None:
56
62
  """Run Flower project."""
57
63
  if use_superexec:
58
- _start_superexec_run()
64
+ _start_superexec_run(directory)
59
65
  return
60
66
 
61
67
  typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
@@ -109,7 +115,7 @@ def run(
109
115
  )
110
116
 
111
117
 
112
- def _start_superexec_run() -> None:
118
+ def _start_superexec_run(directory: Optional[Path]) -> None:
113
119
  def on_channel_state_change(channel_connectivity: str) -> None:
114
120
  """Log channel connectivity."""
115
121
  log(DEBUG, channel_connectivity)
@@ -124,5 +130,8 @@ def _start_superexec_run() -> None:
124
130
  channel.subscribe(on_channel_state_change)
125
131
  stub = ExecStub(channel)
126
132
 
127
- req = StartRunRequest()
128
- stub.StartRun(req)
133
+ fab_path = build(directory)
134
+
135
+ req = StartRunRequest(fab_file=Path(fab_path).read_bytes())
136
+ res = stub.StartRun(req)
137
+ typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
@@ -23,11 +23,13 @@ from .numpy_client import NumPyClient as NumPyClient
23
23
  from .supernode import run_client_app as run_client_app
24
24
  from .supernode import run_supernode as run_supernode
25
25
  from .typing import ClientFn as ClientFn
26
+ from .typing import ClientFnExt as ClientFnExt
26
27
 
27
28
  __all__ = [
28
29
  "Client",
29
30
  "ClientApp",
30
31
  "ClientFn",
32
+ "ClientFnExt",
31
33
  "NumPyClient",
32
34
  "mod",
33
35
  "run_client_app",
@@ -26,7 +26,7 @@ from grpc import RpcError
26
26
 
27
27
  from flwr.client.client import Client
28
28
  from flwr.client.client_app import ClientApp, LoadClientAppError
29
- from flwr.client.typing import ClientFn
29
+ from flwr.client.typing import ClientFnExt
30
30
  from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, Message, event
31
31
  from flwr.common.address import parse_address
32
32
  from flwr.common.constant import (
@@ -51,7 +51,7 @@ from .numpy_client import NumPyClient
51
51
 
52
52
 
53
53
  def _check_actionable_client(
54
- client: Optional[Client], client_fn: Optional[ClientFn]
54
+ client: Optional[Client], client_fn: Optional[ClientFnExt]
55
55
  ) -> None:
56
56
  if client_fn is None and client is None:
57
57
  raise ValueError(
@@ -72,7 +72,7 @@ def _check_actionable_client(
72
72
  def start_client(
73
73
  *,
74
74
  server_address: str,
75
- client_fn: Optional[ClientFn] = None,
75
+ client_fn: Optional[ClientFnExt] = None,
76
76
  client: Optional[Client] = None,
77
77
  grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
78
78
  root_certificates: Optional[Union[bytes, str]] = None,
@@ -92,7 +92,7 @@ def start_client(
92
92
  The IPv4 or IPv6 address of the server. If the Flower
93
93
  server runs on the same machine on port 8080, then `server_address`
94
94
  would be `"[::]:8080"`.
95
- client_fn : Optional[ClientFn]
95
+ client_fn : Optional[ClientFnExt]
96
96
  A callable that instantiates a Client. (default: None)
97
97
  client : Optional[flwr.client.Client]
98
98
  An implementation of the abstract base
@@ -136,7 +136,7 @@ def start_client(
136
136
 
137
137
  Starting an SSL-enabled gRPC client using system certificates:
138
138
 
139
- >>> def client_fn(cid: str):
139
+ >>> def client_fn(node_id: int, partition_id: Optional[int]):
140
140
  >>> return FlowerClient()
141
141
  >>>
142
142
  >>> start_client(
@@ -180,7 +180,7 @@ def _start_client_internal(
180
180
  *,
181
181
  server_address: str,
182
182
  load_client_app_fn: Optional[Callable[[str, str], ClientApp]] = None,
183
- client_fn: Optional[ClientFn] = None,
183
+ client_fn: Optional[ClientFnExt] = None,
184
184
  client: Optional[Client] = None,
185
185
  grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
186
186
  root_certificates: Optional[Union[bytes, str]] = None,
@@ -191,6 +191,7 @@ def _start_client_internal(
191
191
  ] = None,
192
192
  max_retries: Optional[int] = None,
193
193
  max_wait_time: Optional[float] = None,
194
+ partition_id: Optional[int] = None,
194
195
  ) -> None:
195
196
  """Start a Flower client node which connects to a Flower server.
196
197
 
@@ -202,7 +203,7 @@ def _start_client_internal(
202
203
  would be `"[::]:8080"`.
203
204
  load_client_app_fn : Optional[Callable[[], ClientApp]] (default: None)
204
205
  A function that can be used to load a `ClientApp` instance.
205
- client_fn : Optional[ClientFn]
206
+ client_fn : Optional[ClientFnExt]
206
207
  A callable that instantiates a Client. (default: None)
207
208
  client : Optional[flwr.client.Client]
208
209
  An implementation of the abstract base
@@ -234,6 +235,9 @@ def _start_client_internal(
234
235
  The maximum duration before the client stops trying to
235
236
  connect to the server in case of connection error.
236
237
  If set to None, there is no limit to the total time.
238
+ partitioni_id: Optional[int] (default: None)
239
+ The data partition index associated with this node. Better suited for
240
+ prototyping purposes.
237
241
  """
238
242
  if insecure is None:
239
243
  insecure = root_certificates is None
@@ -244,7 +248,8 @@ def _start_client_internal(
244
248
  if client_fn is None:
245
249
  # Wrap `Client` instance in `client_fn`
246
250
  def single_client_factory(
247
- cid: str, # pylint: disable=unused-argument
251
+ node_id: int, # pylint: disable=unused-argument
252
+ partition_id: Optional[int], # pylint: disable=unused-argument
248
253
  ) -> Client:
249
254
  if client is None: # Added this to keep mypy happy
250
255
  raise ValueError(
@@ -293,7 +298,7 @@ def _start_client_internal(
293
298
  retry_invoker = RetryInvoker(
294
299
  wait_gen_factory=exponential,
295
300
  recoverable_exceptions=connection_error_type,
296
- max_tries=max_retries,
301
+ max_tries=max_retries + 1 if max_retries is not None else None,
297
302
  max_time=max_wait_time,
298
303
  on_giveup=lambda retry_state: (
299
304
  log(
@@ -309,7 +314,7 @@ def _start_client_internal(
309
314
  on_backoff=_on_backoff,
310
315
  )
311
316
 
312
- node_state = NodeState()
317
+ node_state = NodeState(partition_id=partition_id)
313
318
  # run_id -> (fab_id, fab_version)
314
319
  run_info: Dict[int, Tuple[str, str]] = {}
315
320
 
@@ -15,19 +15,42 @@
15
15
  """Flower ClientApp."""
16
16
 
17
17
 
18
+ import inspect
18
19
  from typing import Callable, List, Optional
19
20
 
21
+ from flwr.client.client import Client
20
22
  from flwr.client.message_handler.message_handler import (
21
23
  handle_legacy_message_from_msgtype,
22
24
  )
23
25
  from flwr.client.mod.utils import make_ffn
24
- from flwr.client.typing import ClientFn, Mod
26
+ from flwr.client.typing import ClientFnExt, Mod
25
27
  from flwr.common import Context, Message, MessageType
26
- from flwr.common.logger import warn_preview_feature
28
+ from flwr.common.logger import warn_deprecated_feature, warn_preview_feature
27
29
 
28
30
  from .typing import ClientAppCallable
29
31
 
30
32
 
33
+ def _inspect_maybe_adapt_client_fn_signature(client_fn: ClientFnExt) -> ClientFnExt:
34
+ client_fn_args = inspect.signature(client_fn).parameters
35
+
36
+ if not all(key in client_fn_args for key in ["node_id", "partition_id"]):
37
+ 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())}"
41
+ )
42
+
43
+ # Wrap depcreated client_fn inside a function with the expected signature
44
+ 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
48
+
49
+ return adaptor_fn
50
+
51
+ return client_fn
52
+
53
+
31
54
  class ClientAppException(Exception):
32
55
  """Exception raised when an exception is raised while executing a ClientApp."""
33
56
 
@@ -48,7 +71,7 @@ class ClientApp:
48
71
  >>> class FlowerClient(NumPyClient):
49
72
  >>> # ...
50
73
  >>>
51
- >>> def client_fn(cid):
74
+ >>> def client_fn(node_id: int, partition_id: Optional[int]):
52
75
  >>> return FlowerClient().to_client()
53
76
  >>>
54
77
  >>> app = ClientApp(client_fn)
@@ -65,7 +88,7 @@ class ClientApp:
65
88
 
66
89
  def __init__(
67
90
  self,
68
- client_fn: Optional[ClientFn] = None, # Only for backward compatibility
91
+ client_fn: Optional[ClientFnExt] = None, # Only for backward compatibility
69
92
  mods: Optional[List[Mod]] = None,
70
93
  ) -> None:
71
94
  self._mods: List[Mod] = mods if mods is not None else []
@@ -74,6 +97,8 @@ class ClientApp:
74
97
  self._call: Optional[ClientAppCallable] = None
75
98
  if client_fn is not None:
76
99
 
100
+ client_fn = _inspect_maybe_adapt_client_fn_signature(client_fn)
101
+
77
102
  def ffn(
78
103
  message: Message,
79
104
  context: Context,
@@ -14,7 +14,6 @@
14
14
  # ==============================================================================
15
15
  """Client-side message handler."""
16
16
 
17
-
18
17
  from logging import WARN
19
18
  from typing import Optional, Tuple, cast
20
19
 
@@ -25,7 +24,7 @@ from flwr.client.client import (
25
24
  maybe_call_get_properties,
26
25
  )
27
26
  from flwr.client.numpy_client import NumPyClient
28
- from flwr.client.typing import ClientFn
27
+ from flwr.client.typing import ClientFnExt
29
28
  from flwr.common import ConfigsRecord, Context, Message, Metadata, RecordSet, log
30
29
  from flwr.common.constant import MessageType, MessageTypeLegacy
31
30
  from flwr.common.recordset_compat import (
@@ -90,10 +89,10 @@ def handle_control_message(message: Message) -> Tuple[Optional[Message], int]:
90
89
 
91
90
 
92
91
  def handle_legacy_message_from_msgtype(
93
- client_fn: ClientFn, message: Message, context: Context
92
+ client_fn: ClientFnExt, message: Message, context: Context
94
93
  ) -> Message:
95
94
  """Handle legacy message in the inner most mod."""
96
- client = client_fn(str(message.metadata.partition_id))
95
+ client = client_fn(message.metadata.dst_node_id, context.partition_id)
97
96
 
98
97
  # Check if NumPyClient is returend
99
98
  if isinstance(client, NumPyClient):
@@ -15,7 +15,7 @@
15
15
  """Node state."""
16
16
 
17
17
 
18
- from typing import Any, Dict
18
+ from typing import Any, Dict, Optional
19
19
 
20
20
  from flwr.common import Context, RecordSet
21
21
 
@@ -23,14 +23,17 @@ from flwr.common import Context, RecordSet
23
23
  class NodeState:
24
24
  """State of a node where client nodes execute runs."""
25
25
 
26
- def __init__(self) -> None:
26
+ def __init__(self, partition_id: Optional[int]) -> None:
27
27
  self._meta: Dict[str, Any] = {} # holds metadata about the node
28
28
  self.run_contexts: Dict[int, Context] = {}
29
+ self._partition_id = partition_id
29
30
 
30
31
  def register_context(self, run_id: int) -> None:
31
32
  """Register new run context for this node."""
32
33
  if run_id not in self.run_contexts:
33
- self.run_contexts[run_id] = Context(state=RecordSet())
34
+ self.run_contexts[run_id] = Context(
35
+ state=RecordSet(), partition_id=self._partition_id
36
+ )
34
37
 
35
38
  def retrieve_context(self, run_id: int) -> Context:
36
39
  """Get run context given a run_id."""
@@ -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()
44
+ node_state = NodeState(partition_id=None)
45
45
 
46
46
  for task in tasks:
47
47
  run_id = task.run_id
@@ -67,6 +67,7 @@ def run_supernode() -> None:
67
67
  authentication_keys=authentication_keys,
68
68
  max_retries=args.max_retries,
69
69
  max_wait_time=args.max_wait_time,
70
+ partition_id=args.partition_id,
70
71
  )
71
72
 
72
73
  # Graceful shutdown
@@ -344,8 +345,8 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
344
345
  "--max-retries",
345
346
  type=int,
346
347
  default=None,
347
- help="The maximum number of times the client will try to connect to the"
348
- "server before giving up in case of a connection error. By default,"
348
+ help="The maximum number of times the client will try to reconnect to the"
349
+ "SuperLink before giving up in case of a connection error. By default,"
349
350
  "it is set to None, meaning there is no limit to the number of tries.",
350
351
  )
351
352
  parser.add_argument(
@@ -353,7 +354,7 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
353
354
  type=float,
354
355
  default=None,
355
356
  help="The maximum duration before the client stops trying to"
356
- "connect to the server in case of connection error. By default, it"
357
+ "connect to the SuperLink in case of connection error. By default, it"
357
358
  "is set to None, meaning there is no limit to the total time.",
358
359
  )
359
360
  parser.add_argument(
@@ -373,6 +374,13 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
373
374
  type=str,
374
375
  help="The SuperNode's public key (as a path str) to enable authentication.",
375
376
  )
377
+ parser.add_argument(
378
+ "--partition-id",
379
+ type=int,
380
+ help="The data partition index associated with this SuperNode. Better suited "
381
+ "for prototyping purposes where a SuperNode might only load a fraction of an "
382
+ "artificially partitioned dataset (e.g. using `flwr-datasets`)",
383
+ )
376
384
 
377
385
 
378
386
  def _try_setup_client_authentication(
@@ -15,7 +15,7 @@
15
15
  """Custom types for Flower clients."""
16
16
 
17
17
 
18
- from typing import Callable
18
+ from typing import Callable, Optional
19
19
 
20
20
  from flwr.common import Context, Message
21
21
 
@@ -23,6 +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
27
 
27
28
  ClientAppCallable = Callable[[Message, Context], Message]
28
29
  Mod = Callable[[Message, Context, ClientAppCallable], Message]
@@ -46,6 +46,9 @@ PING_BASE_MULTIPLIER = 0.8
46
46
  PING_RANDOM_RANGE = (-0.1, 0.1)
47
47
  PING_MAX_INTERVAL = 1e300
48
48
 
49
+ # IDs
50
+ RUN_ID_NUM_BYTES = 8
51
+ NODE_ID_NUM_BYTES = 8
49
52
  GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY = "flower-version"
50
53
  GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY = "should-exit"
51
54
 
@@ -16,13 +16,14 @@
16
16
 
17
17
 
18
18
  from dataclasses import dataclass
19
+ from typing import Optional
19
20
 
20
21
  from .record import RecordSet
21
22
 
22
23
 
23
24
  @dataclass
24
25
  class Context:
25
- """State of your run.
26
+ """Context of your run.
26
27
 
27
28
  Parameters
28
29
  ----------
@@ -33,6 +34,15 @@ class Context:
33
34
  executing mods. It can also be used as a memory to access
34
35
  at different points during the lifecycle of this entity (e.g. across
35
36
  multiple rounds)
37
+ partition_id : Optional[int] (default: None)
38
+ An index that specifies the data partition that the ClientApp using this Context
39
+ object should make use of. Setting this attribute is better suited for
40
+ simulation or proto typing setups.
36
41
  """
37
42
 
38
43
  state: RecordSet
44
+ partition_id: Optional[int]
45
+
46
+ def __init__(self, state: RecordSet, partition_id: Optional[int] = None) -> None:
47
+ self.state = state
48
+ self.partition_id = partition_id
@@ -197,6 +197,19 @@ def warn_deprecated_feature(name: str) -> None:
197
197
  )
198
198
 
199
199
 
200
+ def warn_unsupported_feature(name: str) -> None:
201
+ """Warn the user when they use an unsupported feature."""
202
+ log(
203
+ WARN,
204
+ """UNSUPPORTED FEATURE: %s
205
+
206
+ This is an unsupported feature. It will be removed
207
+ entirely in future versions of Flower.
208
+ """,
209
+ name,
210
+ )
211
+
212
+
200
213
  def set_logger_propagation(
201
214
  child_logger: logging.Logger, value: bool = True
202
215
  ) -> logging.Logger:
@@ -48,10 +48,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
48
48
  message_type : str
49
49
  A string that encodes the action to be executed on
50
50
  the receiving end.
51
- partition_id : Optional[int]
52
- An identifier that can be used when loading a particular
53
- data partition for a ClientApp. Making use of this identifier
54
- is more relevant when conducting simulations.
55
51
  """
56
52
 
57
53
  def __init__( # pylint: disable=too-many-arguments
@@ -64,7 +60,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
64
60
  group_id: str,
65
61
  ttl: float,
66
62
  message_type: str,
67
- partition_id: int | None = None,
68
63
  ) -> None:
69
64
  var_dict = {
70
65
  "_run_id": run_id,
@@ -75,7 +70,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
75
70
  "_group_id": group_id,
76
71
  "_ttl": ttl,
77
72
  "_message_type": message_type,
78
- "_partition_id": partition_id,
79
73
  }
80
74
  self.__dict__.update(var_dict)
81
75
 
@@ -149,16 +143,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
149
143
  """Set message_type."""
150
144
  self.__dict__["_message_type"] = value
151
145
 
152
- @property
153
- def partition_id(self) -> int | None:
154
- """An identifier telling which data partition a ClientApp should use."""
155
- return cast(int, self.__dict__["_partition_id"])
156
-
157
- @partition_id.setter
158
- def partition_id(self, value: int) -> None:
159
- """Set partition_id."""
160
- self.__dict__["_partition_id"] = value
161
-
162
146
  def __repr__(self) -> str:
163
147
  """Return a string representation of this instance."""
164
148
  view = ", ".join([f"{k.lstrip('_')}={v!r}" for k, v in self.__dict__.items()])
@@ -398,5 +382,4 @@ def _create_reply_metadata(msg: Message, ttl: float) -> Metadata:
398
382
  group_id=msg.metadata.group_id,
399
383
  ttl=ttl,
400
384
  message_type=msg.metadata.message_type,
401
- partition_id=msg.metadata.partition_id,
402
385
  )
@@ -168,7 +168,7 @@ class RayBackend(Backend):
168
168
 
169
169
  Return output message and updated context.
170
170
  """
171
- partition_id = message.metadata.partition_id
171
+ partition_id = context.partition_id
172
172
 
173
173
  try:
174
174
  # Submit a task to the pool
@@ -57,7 +57,6 @@ async def worker(
57
57
  queue: "asyncio.Queue[TaskIns]",
58
58
  node_states: Dict[int, NodeState],
59
59
  state_factory: StateFactory,
60
- nodes_mapping: NodeToPartitionMapping,
61
60
  backend: Backend,
62
61
  ) -> None:
63
62
  """Get TaskIns from queue and pass it to an actor in the pool to execute it."""
@@ -74,8 +73,6 @@ async def worker(
74
73
 
75
74
  # Convert TaskIns to Message
76
75
  message = message_from_taskins(task_ins)
77
- # Set partition_id
78
- message.metadata.partition_id = nodes_mapping[node_id]
79
76
 
80
77
  # Let backend process message
81
78
  out_mssg, updated_context = await backend.process_message(
@@ -187,9 +184,7 @@ async def run(
187
184
  # Add workers (they submit Messages to Backend)
188
185
  worker_tasks = [
189
186
  asyncio.create_task(
190
- worker(
191
- app_fn, queue, node_states, state_factory, nodes_mapping, backend
192
- )
187
+ worker(app_fn, queue, node_states, state_factory, backend)
193
188
  )
194
189
  for _ in range(backend.num_workers)
195
190
  ]
@@ -291,8 +286,8 @@ def start_vce(
291
286
 
292
287
  # Construct mapping of NodeStates
293
288
  node_states: Dict[int, NodeState] = {}
294
- for node_id in nodes_mapping:
295
- node_states[node_id] = NodeState()
289
+ for node_id, partition_id in nodes_mapping.items():
290
+ node_states[node_id] = NodeState(partition_id=partition_id)
296
291
 
297
292
  # Load backend config
298
293
  log(DEBUG, "Supported backends: %s", list(supported_backends.keys()))
@@ -15,7 +15,6 @@
15
15
  """In-memory State implementation."""
16
16
 
17
17
 
18
- import os
19
18
  import threading
20
19
  import time
21
20
  from logging import ERROR
@@ -23,12 +22,13 @@ from typing import Dict, List, Optional, Set, Tuple
23
22
  from uuid import UUID, uuid4
24
23
 
25
24
  from flwr.common import log, now
25
+ from flwr.common.constant import NODE_ID_NUM_BYTES, RUN_ID_NUM_BYTES
26
26
  from flwr.common.typing import Run
27
27
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
28
28
  from flwr.server.superlink.state.state import State
29
29
  from flwr.server.utils import validate_task_ins_or_res
30
30
 
31
- from .utils import make_node_unavailable_taskres
31
+ from .utils import generate_rand_int_from_bytes, make_node_unavailable_taskres
32
32
 
33
33
 
34
34
  class InMemoryState(State): # pylint: disable=R0902,R0904
@@ -216,7 +216,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
216
216
  ) -> int:
217
217
  """Create, store in state, and return `node_id`."""
218
218
  # Sample a random int64 as node_id
219
- node_id: int = int.from_bytes(os.urandom(8), "little", signed=True)
219
+ node_id = generate_rand_int_from_bytes(NODE_ID_NUM_BYTES)
220
220
 
221
221
  with self.lock:
222
222
  if node_id in self.node_ids:
@@ -279,7 +279,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
279
279
  """Create a new run for the specified `fab_id` and `fab_version`."""
280
280
  # Sample a random int64 as run_id
281
281
  with self.lock:
282
- run_id: int = int.from_bytes(os.urandom(8), "little", signed=True)
282
+ run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
283
283
 
284
284
  if run_id not in self.run_ids:
285
285
  self.run_ids[run_id] = Run(
@@ -15,7 +15,6 @@
15
15
  """SQLite based implemenation of server state."""
16
16
 
17
17
 
18
- import os
19
18
  import re
20
19
  import sqlite3
21
20
  import time
@@ -24,6 +23,7 @@ from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, Union, cast
24
23
  from uuid import UUID, uuid4
25
24
 
26
25
  from flwr.common import log, now
26
+ from flwr.common.constant import NODE_ID_NUM_BYTES, RUN_ID_NUM_BYTES
27
27
  from flwr.common.typing import Run
28
28
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
29
29
  from flwr.proto.recordset_pb2 import RecordSet # pylint: disable=E0611
@@ -31,7 +31,7 @@ from flwr.proto.task_pb2 import Task, TaskIns, TaskRes # pylint: disable=E0611
31
31
  from flwr.server.utils.validator import validate_task_ins_or_res
32
32
 
33
33
  from .state import State
34
- from .utils import make_node_unavailable_taskres
34
+ from .utils import generate_rand_int_from_bytes, make_node_unavailable_taskres
35
35
 
36
36
  SQL_CREATE_TABLE_NODE = """
37
37
  CREATE TABLE IF NOT EXISTS node(
@@ -541,7 +541,7 @@ class SqliteState(State): # pylint: disable=R0904
541
541
  ) -> int:
542
542
  """Create, store in state, and return `node_id`."""
543
543
  # Sample a random int64 as node_id
544
- node_id: int = int.from_bytes(os.urandom(8), "little", signed=True)
544
+ node_id = generate_rand_int_from_bytes(NODE_ID_NUM_BYTES)
545
545
 
546
546
  query = "SELECT node_id FROM node WHERE public_key = :public_key;"
547
547
  row = self.query(query, {"public_key": public_key})
@@ -616,7 +616,7 @@ class SqliteState(State): # pylint: disable=R0904
616
616
  def create_run(self, fab_id: str, fab_version: str) -> int:
617
617
  """Create a new run for the specified `fab_id` and `fab_version`."""
618
618
  # Sample a random int64 as run_id
619
- run_id: int = int.from_bytes(os.urandom(8), "little", signed=True)
619
+ run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
620
620
 
621
621
  # Check conflicts
622
622
  query = "SELECT COUNT(*) FROM run WHERE run_id = ?;"