flwr-nightly 1.13.0.dev20241019__tar.gz → 1.13.0.dev20241022__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 (310) hide show
  1. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/PKG-INFO +1 -1
  2. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/pyproject.toml +4 -3
  3. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/app.py +11 -11
  4. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/node_state_tests.py +7 -8
  5. flwr_nightly-1.13.0.dev20241019/src/py/flwr/client/node_state.py → flwr_nightly-1.13.0.dev20241022/src/py/flwr/client/run_info_store.py +3 -3
  6. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/constant.py +2 -3
  7. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/app.py +51 -9
  8. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/driver/inmemory_driver.py +2 -2
  9. flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/serverapp/__init__.py +22 -0
  10. flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/serverapp/app.py +20 -0
  11. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/driver/driver_grpc.py +2 -2
  12. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/driver/driver_servicer.py +9 -7
  13. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +4 -2
  14. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +4 -2
  15. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -2
  16. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +7 -7
  17. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +7 -7
  18. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +23 -23
  19. flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/superlink/linkstate/__init__.py +28 -0
  20. flwr_nightly-1.13.0.dev20241019/src/py/flwr/server/superlink/state/in_memory_state.py → flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +8 -8
  21. flwr_nightly-1.13.0.dev20241019/src/py/flwr/server/superlink/state/state.py → flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/superlink/linkstate/linkstate.py +10 -10
  22. flwr_nightly-1.13.0.dev20241019/src/py/flwr/server/superlink/state/state_factory.py → flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +9 -9
  23. flwr_nightly-1.13.0.dev20241019/src/py/flwr/server/superlink/state/sqlite_state.py → flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +14 -14
  24. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/simulation/app.py +1 -1
  25. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +2 -2
  26. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/simulation/run_simulation.py +3 -3
  27. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/superexec/app.py +9 -2
  28. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/superexec/simulation.py +1 -1
  29. flwr_nightly-1.13.0.dev20241019/src/py/flwr/server/superlink/state/__init__.py +0 -28
  30. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/LICENSE +0 -0
  31. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/README.md +0 -0
  32. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/__init__.py +0 -0
  33. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/__init__.py +0 -0
  34. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/app.py +0 -0
  35. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/build.py +0 -0
  36. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/config_utils.py +0 -0
  37. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/example.py +0 -0
  38. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/install.py +0 -0
  39. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/log.py +0 -0
  40. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/__init__.py +0 -0
  41. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/new.py +0 -0
  42. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  43. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  44. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  45. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  46. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  47. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  48. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  49. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  50. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  51. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  52. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  53. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  54. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  55. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  56. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  57. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  58. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  59. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  60. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  61. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  62. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  63. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  64. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  65. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  66. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  67. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  68. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  69. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  70. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  71. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  72. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  73. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  74. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  75. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  76. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  77. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  78. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  79. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  80. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  81. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  82. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  83. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  84. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  85. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  86. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  87. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  88. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  89. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  90. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  91. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  92. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  93. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  94. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/run/__init__.py +0 -0
  95. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/run/run.py +0 -0
  96. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/cli/utils.py +0 -0
  97. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/__init__.py +0 -0
  98. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/client.py +0 -0
  99. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/client_app.py +0 -0
  100. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/clientapp/__init__.py +0 -0
  101. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/clientapp/app.py +0 -0
  102. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  103. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/clientapp/utils.py +0 -0
  104. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  105. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  106. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  107. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  108. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_client/connection.py +0 -0
  109. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  110. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  111. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  112. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  113. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/heartbeat.py +0 -0
  114. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/message_handler/__init__.py +0 -0
  115. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  116. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  117. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/__init__.py +0 -0
  118. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  119. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/comms_mods.py +0 -0
  120. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  121. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  122. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  123. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  124. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/mod/utils.py +0 -0
  125. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/numpy_client.py +0 -0
  126. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/rest_client/__init__.py +0 -0
  127. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/rest_client/connection.py +0 -0
  128. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/supernode/__init__.py +0 -0
  129. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/supernode/app.py +0 -0
  130. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/client/typing.py +0 -0
  131. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/__init__.py +0 -0
  132. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/address.py +0 -0
  133. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/config.py +0 -0
  134. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/context.py +0 -0
  135. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/date.py +0 -0
  136. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/differential_privacy.py +0 -0
  137. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  138. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/dp.py +0 -0
  139. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/exit_handlers.py +0 -0
  140. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/grpc.py +0 -0
  141. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/logger.py +0 -0
  142. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/message.py +0 -0
  143. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/object_ref.py +0 -0
  144. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/parameter.py +0 -0
  145. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/pyproject.py +0 -0
  146. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/record/__init__.py +0 -0
  147. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/record/configsrecord.py +0 -0
  148. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/record/conversion_utils.py +0 -0
  149. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/record/metricsrecord.py +0 -0
  150. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/record/parametersrecord.py +0 -0
  151. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/record/recordset.py +0 -0
  152. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/record/typeddict.py +0 -0
  153. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/recordset_compat.py +0 -0
  154. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/retry_invoker.py +0 -0
  155. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  156. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  157. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  158. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  159. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  160. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  161. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  162. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  163. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/serde.py +0 -0
  164. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/telemetry.py +0 -0
  165. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/typing.py +0 -0
  166. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/common/version.py +0 -0
  167. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/__init__.py +0 -0
  168. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  169. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  170. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/common_pb2.py +0 -0
  173. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/common_pb2.pyi +0 -0
  174. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/control_pb2.py +0 -0
  177. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/control_pb2.pyi +0 -0
  178. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/driver_pb2.py +0 -0
  181. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  182. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/error_pb2.py +0 -0
  185. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/error_pb2.pyi +0 -0
  186. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/exec_pb2.py +0 -0
  189. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  190. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fab_pb2.py +0 -0
  193. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  194. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fleet_pb2.py +0 -0
  197. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  198. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  201. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  202. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/message_pb2.py +0 -0
  205. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/message_pb2.pyi +0 -0
  206. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  207. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  208. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/node_pb2.py +0 -0
  209. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/node_pb2.pyi +0 -0
  210. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  211. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  212. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/recordset_pb2.py +0 -0
  213. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  214. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  215. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  216. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/run_pb2.py +0 -0
  217. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/run_pb2.pyi +0 -0
  218. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  219. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  220. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/task_pb2.py +0 -0
  221. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/task_pb2.pyi +0 -0
  222. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  223. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  224. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/transport_pb2.py +0 -0
  225. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  226. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  227. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  228. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/py.typed +0 -0
  229. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/__init__.py +0 -0
  230. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/client_manager.py +0 -0
  231. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/client_proxy.py +0 -0
  232. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/compat/__init__.py +0 -0
  233. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/compat/app.py +0 -0
  234. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/compat/app_utils.py +0 -0
  235. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  236. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/compat/legacy_context.py +0 -0
  237. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/criterion.py +0 -0
  238. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/driver/__init__.py +0 -0
  239. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/driver/driver.py +0 -0
  240. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  241. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/history.py +0 -0
  242. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/run_serverapp.py +0 -0
  243. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/server.py +0 -0
  244. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/server_app.py +0 -0
  245. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/server_config.py +0 -0
  246. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/serverapp_components.py +0 -0
  247. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/__init__.py +0 -0
  248. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/aggregate.py +0 -0
  249. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/bulyan.py +0 -0
  250. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  251. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  252. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  253. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  254. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  255. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  256. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedadam.py +0 -0
  257. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedavg.py +0 -0
  258. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  259. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  260. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  261. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedopt.py +0 -0
  262. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedprox.py +0 -0
  263. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  264. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  265. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  266. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  267. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  268. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/krum.py +0 -0
  269. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  270. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/strategy/strategy.py +0 -0
  271. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/__init__.py +0 -0
  272. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  273. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  274. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  275. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  276. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  277. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  278. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  279. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  280. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  281. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  282. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  283. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  284. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  285. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  286. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  287. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  288. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  289. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  290. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  291. {flwr_nightly-1.13.0.dev20241019/src/py/flwr/server/superlink/state → flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/superlink/linkstate}/utils.py +0 -0
  292. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/typing.py +0 -0
  293. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/utils/__init__.py +0 -0
  294. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/utils/tensorboard.py +0 -0
  295. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/utils/validator.py +0 -0
  296. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/workflow/__init__.py +0 -0
  297. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/workflow/constant.py +0 -0
  298. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  299. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  300. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  301. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  302. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/simulation/__init__.py +0 -0
  303. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  304. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  305. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  306. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/superexec/__init__.py +0 -0
  307. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/superexec/deployment.py +0 -0
  308. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/superexec/exec_grpc.py +0 -0
  309. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/src/py/flwr/superexec/exec_servicer.py +0 -0
  310. {flwr_nightly-1.13.0.dev20241019 → flwr_nightly-1.13.0.dev20241022}/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.13.0.dev20241019
3
+ Version: 1.13.0.dev20241022
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.13.0.dev20241019"
7
+ version = "1.13.0.dev20241022"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -50,13 +50,14 @@ exclude = ["src/py/**/*_test.py"]
50
50
  # `flwr` CLI
51
51
  flwr = "flwr.cli.app:app"
52
52
  # SuperExec (can run with either Deployment Engine or Simulation Engine)
53
- flower-superexec = "flwr.superexec.app:run_superexec"
53
+ flower-superexec = "flwr.superexec.app:run_superexec" # Deprecated
54
54
  # Simulation Engine
55
55
  flower-simulation = "flwr.simulation.run_simulation:run_simulation_from_cli"
56
56
  # Deployment Engine
57
57
  flower-superlink = "flwr.server.app:run_superlink"
58
58
  flower-supernode = "flwr.client.supernode.app:run_supernode"
59
- flower-server-app = "flwr.server.run_serverapp:run_server_app"
59
+ flwr-serverapp = "flwr.server.serverapp:flwr_serverapp"
60
+ flower-server-app = "flwr.server.run_serverapp:run_server_app" # Deprecated
60
61
  flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
61
62
  flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
62
63
 
@@ -52,15 +52,15 @@ from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
52
52
  from flwr.common.typing import Fab, Run, UserConfig
53
53
  from flwr.proto.clientappio_pb2_grpc import add_ClientAppIoServicer_to_server
54
54
  from flwr.server.superlink.fleet.grpc_bidi.grpc_server import generic_create_grpc_server
55
- from flwr.server.superlink.state.utils import generate_rand_int_from_bytes
55
+ from flwr.server.superlink.linkstate.utils import generate_rand_int_from_bytes
56
56
 
57
57
  from .clientapp.clientappio_servicer import ClientAppInputs, ClientAppIoServicer
58
58
  from .grpc_adapter_client.connection import grpc_adapter
59
59
  from .grpc_client.connection import grpc_connection
60
60
  from .grpc_rere_client.connection import grpc_request_response
61
61
  from .message_handler.message_handler import handle_control_message
62
- from .node_state import NodeState
63
62
  from .numpy_client import NumPyClient
63
+ from .run_info_store import DeprecatedRunInfoStore
64
64
 
65
65
  ISOLATION_MODE_SUBPROCESS = "subprocess"
66
66
  ISOLATION_MODE_PROCESS = "process"
@@ -364,8 +364,8 @@ def start_client_internal(
364
364
  on_backoff=_on_backoff,
365
365
  )
366
366
 
367
- # NodeState gets initialized when the first connection is established
368
- node_state: Optional[NodeState] = None
367
+ # DeprecatedRunInfoStore gets initialized when the first connection is established
368
+ run_info_store: Optional[DeprecatedRunInfoStore] = None
369
369
 
370
370
  runs: dict[int, Run] = {}
371
371
 
@@ -382,7 +382,7 @@ def start_client_internal(
382
382
  receive, send, create_node, delete_node, get_run, get_fab = conn
383
383
 
384
384
  # Register node when connecting the first time
385
- if node_state is None:
385
+ if run_info_store is None:
386
386
  if create_node is None:
387
387
  if transport not in ["grpc-bidi", None]:
388
388
  raise NotImplementedError(
@@ -391,7 +391,7 @@ def start_client_internal(
391
391
  )
392
392
  # gRPC-bidi doesn't have the concept of node_id,
393
393
  # so we set it to -1
394
- node_state = NodeState(
394
+ run_info_store = DeprecatedRunInfoStore(
395
395
  node_id=-1,
396
396
  node_config={},
397
397
  )
@@ -402,7 +402,7 @@ def start_client_internal(
402
402
  ) # pylint: disable=not-callable
403
403
  if node_id is None:
404
404
  raise ValueError("Node registration failed")
405
- node_state = NodeState(
405
+ run_info_store = DeprecatedRunInfoStore(
406
406
  node_id=node_id,
407
407
  node_config=node_config,
408
408
  )
@@ -461,7 +461,7 @@ def start_client_internal(
461
461
  run.fab_id, run.fab_version = fab_id, fab_version
462
462
 
463
463
  # Register context for this run
464
- node_state.register_context(
464
+ run_info_store.register_context(
465
465
  run_id=run_id,
466
466
  run=run,
467
467
  flwr_path=flwr_path,
@@ -469,7 +469,7 @@ def start_client_internal(
469
469
  )
470
470
 
471
471
  # Retrieve context for this run
472
- context = node_state.retrieve_context(run_id=run_id)
472
+ context = run_info_store.retrieve_context(run_id=run_id)
473
473
  # Create an error reply message that will never be used to prevent
474
474
  # the used-before-assignment linting error
475
475
  reply_message = message.create_error_reply(
@@ -542,7 +542,7 @@ def start_client_internal(
542
542
  # Raise exception, crash process
543
543
  raise ex
544
544
 
545
- # Don't update/change NodeState
545
+ # Don't update/change DeprecatedRunInfoStore
546
546
 
547
547
  e_code = ErrorCode.CLIENT_APP_RAISED_EXCEPTION
548
548
  # Ex fmt: "<class 'ZeroDivisionError'>:<'division by zero'>"
@@ -567,7 +567,7 @@ def start_client_internal(
567
567
  )
568
568
  else:
569
569
  # No exception, update node state
570
- node_state.update_context(
570
+ run_info_store.update_context(
571
571
  run_id=run_id,
572
572
  context=context,
573
573
  )
@@ -17,7 +17,7 @@
17
17
 
18
18
  from typing import cast
19
19
 
20
- from flwr.client.node_state import NodeState
20
+ from flwr.client.run_info_store import DeprecatedRunInfoStore
21
21
  from flwr.common import ConfigsRecord, Context
22
22
  from flwr.proto.task_pb2 import TaskIns # pylint: disable=E0611
23
23
 
@@ -34,32 +34,31 @@ def _run_dummy_task(context: Context) -> Context:
34
34
 
35
35
 
36
36
  def test_multirun_in_node_state() -> None:
37
- """Test basic NodeState logic."""
37
+ """Test basic DeprecatedRunInfoStore logic."""
38
38
  # Tasks to perform
39
39
  tasks = [TaskIns(run_id=run_id) for run_id in [0, 1, 1, 2, 3, 2, 1, 5]]
40
40
  # the "tasks" is to count how many times each run is executed
41
41
  expected_values = {0: "1", 1: "1" * 3, 2: "1" * 2, 3: "1", 5: "1"}
42
42
 
43
- # NodeState
44
- node_state = NodeState(node_id=0, node_config={})
43
+ node_info_store = DeprecatedRunInfoStore(node_id=0, node_config={})
45
44
 
46
45
  for task in tasks:
47
46
  run_id = task.run_id
48
47
 
49
48
  # Register
50
- node_state.register_context(run_id=run_id)
49
+ node_info_store.register_context(run_id=run_id)
51
50
 
52
51
  # Get run state
53
- context = node_state.retrieve_context(run_id=run_id)
52
+ context = node_info_store.retrieve_context(run_id=run_id)
54
53
 
55
54
  # Run "task"
56
55
  updated_state = _run_dummy_task(context)
57
56
 
58
57
  # Update run state
59
- node_state.update_context(run_id=run_id, context=updated_state)
58
+ node_info_store.update_context(run_id=run_id, context=updated_state)
60
59
 
61
60
  # Verify values
62
- for run_id, run_info in node_state.run_infos.items():
61
+ for run_id, run_info in node_info_store.run_infos.items():
63
62
  assert (
64
63
  run_info.context.state.configs_records["counter"]["count"]
65
64
  == expected_values[run_id]
@@ -1,4 +1,4 @@
1
- # Copyright 2023 Flower Labs GmbH. All Rights Reserved.
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Node state."""
15
+ """Deprecated Run Info Store."""
16
16
 
17
17
 
18
18
  from dataclasses import dataclass
@@ -36,7 +36,7 @@ class RunInfo:
36
36
  initial_run_config: UserConfig
37
37
 
38
38
 
39
- class NodeState:
39
+ class DeprecatedRunInfoStore:
40
40
  """State of a node where client nodes execute runs."""
41
41
 
42
42
  def __init__(
@@ -40,15 +40,14 @@ TRANSPORT_TYPES = [
40
40
  # Addresses
41
41
  # SuperNode
42
42
  CLIENTAPPIO_API_DEFAULT_ADDRESS = "0.0.0.0:9094"
43
- # SuperExec
44
- EXEC_API_DEFAULT_ADDRESS = "0.0.0.0:9093"
45
43
  # SuperLink
46
44
  DRIVER_API_DEFAULT_ADDRESS = "0.0.0.0:9091"
47
45
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS = "0.0.0.0:9092"
48
46
  FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS = (
49
47
  "[::]:8080" # IPv6 to keep start_server compatible
50
48
  )
51
- FLEET_API_REST_DEFAULT_ADDRESS = "0.0.0.0:9093"
49
+ FLEET_API_REST_DEFAULT_ADDRESS = "0.0.0.0:9095"
50
+ EXEC_API_DEFAULT_ADDRESS = "0.0.0.0:9093"
52
51
 
53
52
  # Constants for ping
54
53
  PING_DEFAULT_INTERVAL = 30
@@ -35,9 +35,10 @@ from cryptography.hazmat.primitives.serialization import (
35
35
 
36
36
  from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, event
37
37
  from flwr.common.address import parse_address
38
- from flwr.common.config import get_flwr_dir
38
+ from flwr.common.config import get_flwr_dir, parse_config_args
39
39
  from flwr.common.constant import (
40
40
  DRIVER_API_DEFAULT_ADDRESS,
41
+ EXEC_API_DEFAULT_ADDRESS,
41
42
  FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
42
43
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
43
44
  FLEET_API_REST_DEFAULT_ADDRESS,
@@ -56,6 +57,8 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
56
57
  add_FleetServicer_to_server,
57
58
  )
58
59
  from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
60
+ from flwr.superexec.app import load_executor
61
+ from flwr.superexec.exec_grpc import run_superexec_api_grpc
59
62
 
60
63
  from .client_manager import ClientManager
61
64
  from .history import History
@@ -71,7 +74,7 @@ from .superlink.fleet.grpc_bidi.grpc_server import (
71
74
  )
72
75
  from .superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
73
76
  from .superlink.fleet.grpc_rere.server_interceptor import AuthenticateServerInterceptor
74
- from .superlink.state import StateFactory
77
+ from .superlink.linkstate import LinkStateFactory
75
78
 
76
79
  DATABASE = ":flwr-in-memory-state:"
77
80
  BASE_DIR = get_flwr_dir() / "superlink" / "ffs"
@@ -205,14 +208,15 @@ def run_superlink() -> None:
205
208
 
206
209
  event(EventType.RUN_SUPERLINK_ENTER)
207
210
 
208
- # Parse IP address
211
+ # Parse IP addresses
209
212
  driver_address, _, _ = _format_address(args.driver_api_address)
213
+ exec_address, _, _ = _format_address(args.exec_api_address)
210
214
 
211
215
  # Obtain certificates
212
216
  certificates = _try_obtain_certificates(args)
213
217
 
214
218
  # Initialize StateFactory
215
- state_factory = StateFactory(args.database)
219
+ state_factory = LinkStateFactory(args.database)
216
220
 
217
221
  # Initialize FfsFactory
218
222
  ffs_factory = FfsFactory(args.storage_dir)
@@ -224,8 +228,9 @@ def run_superlink() -> None:
224
228
  ffs_factory=ffs_factory,
225
229
  certificates=certificates,
226
230
  )
227
-
228
231
  grpc_servers = [driver_server]
232
+
233
+ # Start Fleet API
229
234
  bckg_threads = []
230
235
  if not args.fleet_api_address:
231
236
  if args.fleet_api_type in [
@@ -250,7 +255,6 @@ def run_superlink() -> None:
250
255
  )
251
256
  num_workers = 1
252
257
 
253
- # Start Fleet API
254
258
  if args.fleet_api_type == TRANSPORT_TYPE_REST:
255
259
  if (
256
260
  importlib.util.find_spec("requests")
@@ -318,6 +322,17 @@ def run_superlink() -> None:
318
322
  else:
319
323
  raise ValueError(f"Unknown fleet_api_type: {args.fleet_api_type}")
320
324
 
325
+ # Start Exec API
326
+ exec_server: grpc.Server = run_superexec_api_grpc(
327
+ address=exec_address,
328
+ executor=load_executor(args),
329
+ certificates=certificates,
330
+ config=parse_config_args(
331
+ [args.executor_config] if args.executor_config else args.executor_config
332
+ ),
333
+ )
334
+ grpc_servers.append(exec_server)
335
+
321
336
  # Graceful shutdown
322
337
  register_exit_handlers(
323
338
  event_type=EventType.RUN_SUPERLINK_LEAVE,
@@ -489,7 +504,7 @@ def _try_obtain_certificates(
489
504
 
490
505
  def _run_fleet_api_grpc_rere(
491
506
  address: str,
492
- state_factory: StateFactory,
507
+ state_factory: LinkStateFactory,
493
508
  ffs_factory: FfsFactory,
494
509
  certificates: Optional[tuple[bytes, bytes, bytes]],
495
510
  interceptors: Optional[Sequence[grpc.ServerInterceptor]] = None,
@@ -517,7 +532,7 @@ def _run_fleet_api_grpc_rere(
517
532
 
518
533
  def _run_fleet_api_grpc_adapter(
519
534
  address: str,
520
- state_factory: StateFactory,
535
+ state_factory: LinkStateFactory,
521
536
  ffs_factory: FfsFactory,
522
537
  certificates: Optional[tuple[bytes, bytes, bytes]],
523
538
  ) -> grpc.Server:
@@ -548,7 +563,7 @@ def _run_fleet_api_rest(
548
563
  port: int,
549
564
  ssl_keyfile: Optional[str],
550
565
  ssl_certfile: Optional[str],
551
- state_factory: StateFactory,
566
+ state_factory: LinkStateFactory,
552
567
  ffs_factory: FfsFactory,
553
568
  num_workers: int,
554
569
  ) -> None:
@@ -587,6 +602,7 @@ def _parse_args_run_superlink() -> argparse.ArgumentParser:
587
602
  _add_args_common(parser=parser)
588
603
  _add_args_driver_api(parser=parser)
589
604
  _add_args_fleet_api(parser=parser)
605
+ _add_args_exec_api(parser=parser)
590
606
 
591
607
  return parser
592
608
 
@@ -681,3 +697,29 @@ def _add_args_fleet_api(parser: argparse.ArgumentParser) -> None:
681
697
  type=int,
682
698
  help="Set the number of concurrent workers for the Fleet API server.",
683
699
  )
700
+
701
+
702
+ def _add_args_exec_api(parser: argparse.ArgumentParser) -> None:
703
+ """Add command line arguments for Exec API."""
704
+ parser.add_argument(
705
+ "--exec-api-address",
706
+ help="Exec API server address (IPv4, IPv6, or a domain name)",
707
+ default=EXEC_API_DEFAULT_ADDRESS,
708
+ )
709
+ parser.add_argument(
710
+ "--executor",
711
+ help="For example: `deployment:exec` or `project.package.module:wrapper.exec`. "
712
+ "The default is `flwr.superexec.deployment:executor`",
713
+ default="flwr.superexec.deployment:executor",
714
+ )
715
+ parser.add_argument(
716
+ "--executor-dir",
717
+ help="The directory for the executor.",
718
+ default=".",
719
+ )
720
+ parser.add_argument(
721
+ "--executor-config",
722
+ help="Key-value pairs for the executor config, separated by spaces. "
723
+ "For example:\n\n`--executor-config 'verbose=true "
724
+ 'root-certificates="certificates/superlink-ca.crt"\'`',
725
+ )
@@ -25,7 +25,7 @@ from flwr.common import DEFAULT_TTL, Message, Metadata, RecordSet
25
25
  from flwr.common.serde import message_from_taskres, message_to_taskins
26
26
  from flwr.common.typing import Run
27
27
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
28
- from flwr.server.superlink.state import StateFactory
28
+ from flwr.server.superlink.linkstate import LinkStateFactory
29
29
 
30
30
  from .driver import Driver
31
31
 
@@ -46,7 +46,7 @@ class InMemoryDriver(Driver):
46
46
  def __init__(
47
47
  self,
48
48
  run_id: int,
49
- state_factory: StateFactory,
49
+ state_factory: LinkStateFactory,
50
50
  pull_interval: float = 0.1,
51
51
  ) -> None:
52
52
  self._run_id = run_id
@@ -0,0 +1,22 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Flower AppIO service."""
16
+
17
+
18
+ from .app import flwr_serverapp as flwr_serverapp
19
+
20
+ __all__ = [
21
+ "flwr_serverapp",
22
+ ]
@@ -0,0 +1,20 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Flower ServerApp process."""
16
+
17
+
18
+ def flwr_serverapp() -> None:
19
+ """Run process-isolated Flower ServerApp."""
20
+ raise NotImplementedError()
@@ -25,7 +25,7 @@ from flwr.proto.driver_pb2_grpc import ( # pylint: disable=E0611
25
25
  add_DriverServicer_to_server,
26
26
  )
27
27
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
28
- from flwr.server.superlink.state import StateFactory
28
+ from flwr.server.superlink.linkstate import LinkStateFactory
29
29
 
30
30
  from ..fleet.grpc_bidi.grpc_server import generic_create_grpc_server
31
31
  from .driver_servicer import DriverServicer
@@ -33,7 +33,7 @@ from .driver_servicer import DriverServicer
33
33
 
34
34
  def run_driver_api_grpc(
35
35
  address: str,
36
- state_factory: StateFactory,
36
+ state_factory: LinkStateFactory,
37
37
  ffs_factory: FfsFactory,
38
38
  certificates: Optional[tuple[bytes, bytes, bytes]],
39
39
  ) -> grpc.Server:
@@ -51,14 +51,16 @@ from flwr.proto.run_pb2 import ( # pylint: disable=E0611
51
51
  from flwr.proto.task_pb2 import TaskRes # pylint: disable=E0611
52
52
  from flwr.server.superlink.ffs.ffs import Ffs
53
53
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
54
- from flwr.server.superlink.state import State, StateFactory
54
+ from flwr.server.superlink.linkstate import LinkState, LinkStateFactory
55
55
  from flwr.server.utils.validator import validate_task_ins_or_res
56
56
 
57
57
 
58
58
  class DriverServicer(driver_pb2_grpc.DriverServicer):
59
59
  """Driver API servicer."""
60
60
 
61
- def __init__(self, state_factory: StateFactory, ffs_factory: FfsFactory) -> None:
61
+ def __init__(
62
+ self, state_factory: LinkStateFactory, ffs_factory: FfsFactory
63
+ ) -> None:
62
64
  self.state_factory = state_factory
63
65
  self.ffs_factory = ffs_factory
64
66
 
@@ -67,7 +69,7 @@ class DriverServicer(driver_pb2_grpc.DriverServicer):
67
69
  ) -> GetNodesResponse:
68
70
  """Get available nodes."""
69
71
  log(DEBUG, "DriverServicer.GetNodes")
70
- state: State = self.state_factory.state()
72
+ state: LinkState = self.state_factory.state()
71
73
  all_ids: set[int] = state.get_nodes(request.run_id)
72
74
  nodes: list[Node] = [
73
75
  Node(node_id=node_id, anonymous=False) for node_id in all_ids
@@ -79,7 +81,7 @@ class DriverServicer(driver_pb2_grpc.DriverServicer):
79
81
  ) -> CreateRunResponse:
80
82
  """Create run ID."""
81
83
  log(DEBUG, "DriverServicer.CreateRun")
82
- state: State = self.state_factory.state()
84
+ state: LinkState = self.state_factory.state()
83
85
  if request.HasField("fab"):
84
86
  fab = fab_from_proto(request.fab)
85
87
  ffs: Ffs = self.ffs_factory.ffs()
@@ -116,7 +118,7 @@ class DriverServicer(driver_pb2_grpc.DriverServicer):
116
118
  _raise_if(bool(validation_errors), ", ".join(validation_errors))
117
119
 
118
120
  # Init state
119
- state: State = self.state_factory.state()
121
+ state: LinkState = self.state_factory.state()
120
122
 
121
123
  # Store each TaskIns
122
124
  task_ids: list[Optional[UUID]] = []
@@ -138,7 +140,7 @@ class DriverServicer(driver_pb2_grpc.DriverServicer):
138
140
  task_ids: set[UUID] = {UUID(task_id) for task_id in request.task_ids}
139
141
 
140
142
  # Init state
141
- state: State = self.state_factory.state()
143
+ state: LinkState = self.state_factory.state()
142
144
 
143
145
  # Register callback
144
146
  def on_rpc_done() -> None:
@@ -167,7 +169,7 @@ class DriverServicer(driver_pb2_grpc.DriverServicer):
167
169
  log(DEBUG, "DriverServicer.GetRun")
168
170
 
169
171
  # Init state
170
- state: State = self.state_factory.state()
172
+ state: LinkState = self.state_factory.state()
171
173
 
172
174
  # Retrieve run information
173
175
  run = state.get_run(request.run_id)
@@ -48,7 +48,7 @@ from flwr.proto.grpcadapter_pb2 import MessageContainer # pylint: disable=E0611
48
48
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
49
49
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
50
50
  from flwr.server.superlink.fleet.message_handler import message_handler
51
- from flwr.server.superlink.state import StateFactory
51
+ from flwr.server.superlink.linkstate import LinkStateFactory
52
52
 
53
53
  T = TypeVar("T", bound=GrpcMessage)
54
54
 
@@ -77,7 +77,9 @@ def _handle(
77
77
  class GrpcAdapterServicer(grpcadapter_pb2_grpc.GrpcAdapterServicer):
78
78
  """Fleet API via GrpcAdapter servicer."""
79
79
 
80
- def __init__(self, state_factory: StateFactory, ffs_factory: FfsFactory) -> None:
80
+ def __init__(
81
+ self, state_factory: LinkStateFactory, ffs_factory: FfsFactory
82
+ ) -> None:
81
83
  self.state_factory = state_factory
82
84
  self.ffs_factory = ffs_factory
83
85
 
@@ -37,13 +37,15 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
37
37
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
38
38
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
39
39
  from flwr.server.superlink.fleet.message_handler import message_handler
40
- from flwr.server.superlink.state import StateFactory
40
+ from flwr.server.superlink.linkstate import LinkStateFactory
41
41
 
42
42
 
43
43
  class FleetServicer(fleet_pb2_grpc.FleetServicer):
44
44
  """Fleet API servicer."""
45
45
 
46
- def __init__(self, state_factory: StateFactory, ffs_factory: FfsFactory) -> None:
46
+ def __init__(
47
+ self, state_factory: LinkStateFactory, ffs_factory: FfsFactory
48
+ ) -> None:
47
49
  self.state_factory = state_factory
48
50
  self.ffs_factory = ffs_factory
49
51
 
@@ -45,7 +45,7 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
45
45
  )
46
46
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
47
47
  from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
48
- from flwr.server.superlink.state import State
48
+ from flwr.server.superlink.linkstate import LinkState
49
49
 
50
50
  _PUBLIC_KEY_HEADER = "public-key"
51
51
  _AUTH_TOKEN_HEADER = "auth-token"
@@ -84,7 +84,7 @@ def _get_value_from_tuples(
84
84
  class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
85
85
  """Server interceptor for node authentication."""
86
86
 
87
- def __init__(self, state: State):
87
+ def __init__(self, state: LinkState):
88
88
  self.state = state
89
89
 
90
90
  self.node_public_keys = state.get_node_public_keys()
@@ -43,12 +43,12 @@ from flwr.proto.run_pb2 import ( # pylint: disable=E0611
43
43
  )
44
44
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
45
45
  from flwr.server.superlink.ffs.ffs import Ffs
46
- from flwr.server.superlink.state import State
46
+ from flwr.server.superlink.linkstate import LinkState
47
47
 
48
48
 
49
49
  def create_node(
50
50
  request: CreateNodeRequest, # pylint: disable=unused-argument
51
- state: State,
51
+ state: LinkState,
52
52
  ) -> CreateNodeResponse:
53
53
  """."""
54
54
  # Create node
@@ -56,7 +56,7 @@ def create_node(
56
56
  return CreateNodeResponse(node=Node(node_id=node_id, anonymous=False))
57
57
 
58
58
 
59
- def delete_node(request: DeleteNodeRequest, state: State) -> DeleteNodeResponse:
59
+ def delete_node(request: DeleteNodeRequest, state: LinkState) -> DeleteNodeResponse:
60
60
  """."""
61
61
  # Validate node_id
62
62
  if request.node.anonymous or request.node.node_id == 0:
@@ -69,14 +69,14 @@ def delete_node(request: DeleteNodeRequest, state: State) -> DeleteNodeResponse:
69
69
 
70
70
  def ping(
71
71
  request: PingRequest, # pylint: disable=unused-argument
72
- state: State, # pylint: disable=unused-argument
72
+ state: LinkState, # pylint: disable=unused-argument
73
73
  ) -> PingResponse:
74
74
  """."""
75
75
  res = state.acknowledge_ping(request.node.node_id, request.ping_interval)
76
76
  return PingResponse(success=res)
77
77
 
78
78
 
79
- def pull_task_ins(request: PullTaskInsRequest, state: State) -> PullTaskInsResponse:
79
+ def pull_task_ins(request: PullTaskInsRequest, state: LinkState) -> PullTaskInsResponse:
80
80
  """Pull TaskIns handler."""
81
81
  # Get node_id if client node is not anonymous
82
82
  node = request.node # pylint: disable=no-member
@@ -92,7 +92,7 @@ def pull_task_ins(request: PullTaskInsRequest, state: State) -> PullTaskInsRespo
92
92
  return response
93
93
 
94
94
 
95
- def push_task_res(request: PushTaskResRequest, state: State) -> PushTaskResResponse:
95
+ def push_task_res(request: PushTaskResRequest, state: LinkState) -> PushTaskResResponse:
96
96
  """Push TaskRes handler."""
97
97
  # pylint: disable=no-member
98
98
  task_res: TaskRes = request.task_res_list[0]
@@ -113,7 +113,7 @@ def push_task_res(request: PushTaskResRequest, state: State) -> PushTaskResRespo
113
113
 
114
114
 
115
115
  def get_run(
116
- request: GetRunRequest, state: State # pylint: disable=W0613
116
+ request: GetRunRequest, state: LinkState # pylint: disable=W0613
117
117
  ) -> GetRunResponse:
118
118
  """Get run information."""
119
119
  run = state.get_run(request.run_id)