flwr-nightly 1.13.0.dev20241022__tar.gz → 1.13.0.dev20241024__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 (312) hide show
  1. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/PKG-INFO +1 -1
  2. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/pyproject.toml +1 -1
  3. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/app.py +2 -3
  4. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/supernode/app.py +6 -8
  5. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/constant.py +29 -0
  6. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/typing.py +9 -0
  7. flwr_nightly-1.13.0.dev20241024/src/py/flwr/proto/driver_pb2.py +51 -0
  8. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/driver_pb2.pyi +59 -0
  9. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/driver_pb2_grpc.py +68 -0
  10. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/driver_pb2_grpc.pyi +26 -0
  11. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/app.py +74 -3
  12. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/run_serverapp.py +13 -9
  13. flwr_nightly-1.13.0.dev20241024/src/py/flwr/server/serverapp/app.py +78 -0
  14. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/driver/driver_servicer.py +16 -0
  15. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +113 -12
  16. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/linkstate/linkstate.py +78 -1
  17. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +173 -27
  18. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/linkstate/utils.py +69 -2
  19. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/simulation/run_simulation.py +23 -7
  20. flwr_nightly-1.13.0.dev20241024/src/py/flwr/superexec/app.py +58 -0
  21. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/superexec/deployment.py +34 -25
  22. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/superexec/exec_grpc.py +15 -8
  23. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/superexec/exec_servicer.py +11 -1
  24. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/superexec/executor.py +19 -0
  25. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/superexec/simulation.py +8 -0
  26. flwr_nightly-1.13.0.dev20241022/src/py/flwr/client/node_state_tests.py +0 -65
  27. flwr_nightly-1.13.0.dev20241022/src/py/flwr/proto/driver_pb2.py +0 -42
  28. flwr_nightly-1.13.0.dev20241022/src/py/flwr/server/serverapp/app.py +0 -20
  29. flwr_nightly-1.13.0.dev20241022/src/py/flwr/superexec/app.py +0 -193
  30. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/LICENSE +0 -0
  31. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/README.md +0 -0
  32. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/__init__.py +0 -0
  33. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/__init__.py +0 -0
  34. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/app.py +0 -0
  35. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/build.py +0 -0
  36. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/config_utils.py +0 -0
  37. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/example.py +0 -0
  38. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/install.py +0 -0
  39. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/log.py +0 -0
  40. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/__init__.py +0 -0
  41. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/new.py +0 -0
  42. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  43. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  44. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  45. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  46. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  47. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  48. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  49. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  50. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  51. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  52. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  53. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  54. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  55. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  56. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  57. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  58. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  59. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  60. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  61. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  62. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  63. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  64. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  65. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  66. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  67. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  68. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  69. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  70. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  71. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  72. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  73. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  74. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  75. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  76. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  77. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  78. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  79. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  80. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  81. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  82. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  83. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  84. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  85. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  86. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  87. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  88. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  89. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  90. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  91. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  92. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  93. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  94. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/run/__init__.py +0 -0
  95. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/run/run.py +0 -0
  96. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/cli/utils.py +0 -0
  97. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/__init__.py +0 -0
  98. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/client.py +0 -0
  99. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/client_app.py +0 -0
  100. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/clientapp/__init__.py +0 -0
  101. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/clientapp/app.py +0 -0
  102. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  103. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/clientapp/utils.py +0 -0
  104. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  105. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  106. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  107. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  108. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_client/connection.py +0 -0
  109. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  110. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  111. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  112. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  113. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/heartbeat.py +0 -0
  114. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/message_handler/__init__.py +0 -0
  115. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  116. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  117. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/__init__.py +0 -0
  118. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  119. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/comms_mods.py +0 -0
  120. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  121. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  122. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  123. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  124. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/mod/utils.py +0 -0
  125. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/numpy_client.py +0 -0
  126. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/rest_client/__init__.py +0 -0
  127. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/rest_client/connection.py +0 -0
  128. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/run_info_store.py +0 -0
  129. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/supernode/__init__.py +0 -0
  130. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/client/typing.py +0 -0
  131. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/__init__.py +0 -0
  132. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/address.py +0 -0
  133. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/config.py +0 -0
  134. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/context.py +0 -0
  135. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/date.py +0 -0
  136. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/differential_privacy.py +0 -0
  137. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  138. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/dp.py +0 -0
  139. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/exit_handlers.py +0 -0
  140. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/grpc.py +0 -0
  141. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/logger.py +0 -0
  142. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/message.py +0 -0
  143. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/object_ref.py +0 -0
  144. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/parameter.py +0 -0
  145. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/pyproject.py +0 -0
  146. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/record/__init__.py +0 -0
  147. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/record/configsrecord.py +0 -0
  148. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/record/conversion_utils.py +0 -0
  149. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/record/metricsrecord.py +0 -0
  150. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/record/parametersrecord.py +0 -0
  151. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/record/recordset.py +0 -0
  152. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/record/typeddict.py +0 -0
  153. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/recordset_compat.py +0 -0
  154. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/retry_invoker.py +0 -0
  155. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  156. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  157. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  158. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  159. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  160. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  161. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  162. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  163. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/serde.py +0 -0
  164. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/telemetry.py +0 -0
  165. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/common/version.py +0 -0
  166. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/__init__.py +0 -0
  167. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  168. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  169. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  170. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  171. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/common_pb2.py +0 -0
  172. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/common_pb2.pyi +0 -0
  173. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  174. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  175. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/control_pb2.py +0 -0
  176. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/control_pb2.pyi +0 -0
  177. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  178. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  179. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/error_pb2.py +0 -0
  180. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/error_pb2.pyi +0 -0
  181. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  182. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  183. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/exec_pb2.py +0 -0
  184. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  185. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  186. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  187. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fab_pb2.py +0 -0
  188. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  189. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  190. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  191. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fleet_pb2.py +0 -0
  192. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  193. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  194. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  195. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  196. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  197. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  198. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  199. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/message_pb2.py +0 -0
  200. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/message_pb2.pyi +0 -0
  201. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  202. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  203. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/node_pb2.py +0 -0
  204. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/node_pb2.pyi +0 -0
  205. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  206. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  207. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/recordset_pb2.py +0 -0
  208. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  209. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  210. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  211. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/run_pb2.py +0 -0
  212. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/run_pb2.pyi +0 -0
  213. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  214. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  215. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/task_pb2.py +0 -0
  216. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/task_pb2.pyi +0 -0
  217. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  218. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  219. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/transport_pb2.py +0 -0
  220. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  221. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  222. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  223. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/py.typed +0 -0
  224. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/__init__.py +0 -0
  225. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/client_manager.py +0 -0
  226. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/client_proxy.py +0 -0
  227. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/compat/__init__.py +0 -0
  228. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/compat/app.py +0 -0
  229. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/compat/app_utils.py +0 -0
  230. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  231. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/compat/legacy_context.py +0 -0
  232. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/criterion.py +0 -0
  233. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/driver/__init__.py +0 -0
  234. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/driver/driver.py +0 -0
  235. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  236. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  237. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/history.py +0 -0
  238. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/server.py +0 -0
  239. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/server_app.py +0 -0
  240. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/server_config.py +0 -0
  241. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/serverapp/__init__.py +0 -0
  242. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/serverapp_components.py +0 -0
  243. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/__init__.py +0 -0
  244. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/aggregate.py +0 -0
  245. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/bulyan.py +0 -0
  246. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  247. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  248. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  249. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  250. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  251. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  252. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedadam.py +0 -0
  253. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedavg.py +0 -0
  254. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  255. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  256. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  257. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedopt.py +0 -0
  258. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedprox.py +0 -0
  259. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  260. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  261. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  262. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  263. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  264. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/krum.py +0 -0
  265. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  266. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/strategy/strategy.py +0 -0
  267. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/__init__.py +0 -0
  268. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  269. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  270. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  271. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  272. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  273. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  274. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  275. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  276. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  277. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  278. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  279. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  280. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  281. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  282. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  283. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  284. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  285. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  286. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  287. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  288. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  289. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  290. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  291. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  292. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  293. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  294. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  295. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  296. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/typing.py +0 -0
  297. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/utils/__init__.py +0 -0
  298. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/utils/tensorboard.py +0 -0
  299. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/utils/validator.py +0 -0
  300. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/workflow/__init__.py +0 -0
  301. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/workflow/constant.py +0 -0
  302. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  303. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  304. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  305. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  306. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/simulation/__init__.py +0 -0
  307. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/simulation/app.py +0 -0
  308. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  309. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  310. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  311. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  312. {flwr_nightly-1.13.0.dev20241022 → flwr_nightly-1.13.0.dev20241024}/src/py/flwr/superexec/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.13.0.dev20241022
3
+ Version: 1.13.0.dev20241024
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.dev20241022"
7
+ version = "1.13.0.dev20241024"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -37,6 +37,8 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, ev
37
37
  from flwr.common.address import parse_address
38
38
  from flwr.common.constant import (
39
39
  CLIENTAPPIO_API_DEFAULT_ADDRESS,
40
+ ISOLATION_MODE_PROCESS,
41
+ ISOLATION_MODE_SUBPROCESS,
40
42
  MISSING_EXTRA_REST,
41
43
  RUN_ID_NUM_BYTES,
42
44
  TRANSPORT_TYPE_GRPC_ADAPTER,
@@ -62,9 +64,6 @@ from .message_handler.message_handler import handle_control_message
62
64
  from .numpy_client import NumPyClient
63
65
  from .run_info_store import DeprecatedRunInfoStore
64
66
 
65
- ISOLATION_MODE_SUBPROCESS = "subprocess"
66
- ISOLATION_MODE_PROCESS = "process"
67
-
68
67
 
69
68
  def _check_actionable_client(
70
69
  client: Optional[Client], client_fn: Optional[ClientFnExt]
@@ -31,6 +31,8 @@ from flwr.common import EventType, event
31
31
  from flwr.common.config import parse_config_args
32
32
  from flwr.common.constant import (
33
33
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
34
+ ISOLATION_MODE_PROCESS,
35
+ ISOLATION_MODE_SUBPROCESS,
34
36
  TRANSPORT_TYPE_GRPC_ADAPTER,
35
37
  TRANSPORT_TYPE_GRPC_RERE,
36
38
  TRANSPORT_TYPE_REST,
@@ -38,11 +40,7 @@ from flwr.common.constant import (
38
40
  from flwr.common.exit_handlers import register_exit_handlers
39
41
  from flwr.common.logger import log, warn_deprecated_feature
40
42
 
41
- from ..app import (
42
- ISOLATION_MODE_PROCESS,
43
- ISOLATION_MODE_SUBPROCESS,
44
- start_client_internal,
45
- )
43
+ from ..app import start_client_internal
46
44
  from ..clientapp.utils import get_load_client_app_fn
47
45
 
48
46
 
@@ -200,10 +198,10 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
200
198
  ISOLATION_MODE_SUBPROCESS,
201
199
  ISOLATION_MODE_PROCESS,
202
200
  ],
203
- help="Isolation mode when running `ClientApp` (optional, possible values: "
204
- "`subprocess`, `process`). By default, `ClientApp` runs in the same process "
201
+ help="Isolation mode when running a `ClientApp` (optional, possible values: "
202
+ "`subprocess`, `process`). By default, a `ClientApp` runs in the same process "
205
203
  "that executes the SuperNode. Use `subprocess` to configure SuperNode to run "
206
- "`ClientApp` in a subprocess. Use `process` to indicate that a separate "
204
+ "a `ClientApp` in a subprocess. Use `process` to indicate that a separate "
207
205
  "independent process gets created outside of SuperNode.",
208
206
  )
209
207
  parser.add_argument(
@@ -83,6 +83,10 @@ GRPC_ADAPTER_METADATA_MESSAGE_QUALNAME_KEY = "grpc-message-qualname"
83
83
  # Message TTL
84
84
  MESSAGE_TTL_TOLERANCE = 1e-1
85
85
 
86
+ # Isolation modes
87
+ ISOLATION_MODE_SUBPROCESS = "subprocess"
88
+ ISOLATION_MODE_PROCESS = "process"
89
+
86
90
 
87
91
  class MessageType:
88
92
  """Message type."""
@@ -128,3 +132,28 @@ class ErrorCode:
128
132
  def __new__(cls) -> ErrorCode:
129
133
  """Prevent instantiation."""
130
134
  raise TypeError(f"{cls.__name__} cannot be instantiated.")
135
+
136
+
137
+ class Status:
138
+ """Run status."""
139
+
140
+ PENDING = "pending"
141
+ STARTING = "starting"
142
+ RUNNING = "running"
143
+ FINISHED = "finished"
144
+
145
+ def __new__(cls) -> Status:
146
+ """Prevent instantiation."""
147
+ raise TypeError(f"{cls.__name__} cannot be instantiated.")
148
+
149
+
150
+ class SubStatus:
151
+ """Run sub-status."""
152
+
153
+ COMPLETED = "completed"
154
+ FAILED = "failed"
155
+ STOPPED = "stopped"
156
+
157
+ def __new__(cls) -> SubStatus:
158
+ """Prevent instantiation."""
159
+ raise TypeError(f"{cls.__name__} cannot be instantiated.")
@@ -218,6 +218,15 @@ class Run:
218
218
  override_config: UserConfig
219
219
 
220
220
 
221
+ @dataclass
222
+ class RunStatus:
223
+ """Run status information."""
224
+
225
+ status: str
226
+ sub_status: str
227
+ details: str
228
+
229
+
221
230
  @dataclass
222
231
  class Fab:
223
232
  """Fab file representation."""
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/driver.proto
4
+ # Protobuf Python Version: 4.25.0
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
16
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
17
+ from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
18
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
19
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
20
+
21
+
22
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x15\x66lwr/proto/task.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\"!\n\x0fGetNodesRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"3\n\x10GetNodesResponse\x12\x1f\n\x05nodes\x18\x01 \x03(\x0b\x32\x10.flwr.proto.Node\"@\n\x12PushTaskInsRequest\x12*\n\rtask_ins_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskIns\"\'\n\x13PushTaskInsResponse\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"F\n\x12PullTaskResRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x10\n\x08task_ids\x18\x02 \x03(\t\"A\n\x13PullTaskResResponse\x12*\n\rtask_res_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.TaskRes\",\n\x1aPullServerAppInputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\x7f\n\x1bPullServerAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"S\n\x1bPushServerAppOutputsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12$\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x13.flwr.proto.Context\"\x1e\n\x1cPushServerAppOutputsResponse2\x9e\x05\n\x06\x44river\x12J\n\tCreateRun\x12\x1c.flwr.proto.CreateRunRequest\x1a\x1d.flwr.proto.CreateRunResponse\"\x00\x12G\n\x08GetNodes\x12\x1b.flwr.proto.GetNodesRequest\x1a\x1c.flwr.proto.GetNodesResponse\"\x00\x12P\n\x0bPushTaskIns\x12\x1e.flwr.proto.PushTaskInsRequest\x1a\x1f.flwr.proto.PushTaskInsResponse\"\x00\x12P\n\x0bPullTaskRes\x12\x1e.flwr.proto.PullTaskResRequest\x1a\x1f.flwr.proto.PullTaskResResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12h\n\x13PullServerAppInputs\x12&.flwr.proto.PullServerAppInputsRequest\x1a\'.flwr.proto.PullServerAppInputsResponse\"\x00\x12k\n\x14PushServerAppOutputs\x12\'.flwr.proto.PushServerAppOutputsRequest\x1a(.flwr.proto.PushServerAppOutputsResponse\"\x00\x62\x06proto3')
23
+
24
+ _globals = globals()
25
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
26
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.driver_pb2', _globals)
27
+ if _descriptor._USE_C_DESCRIPTORS == False:
28
+ DESCRIPTOR._options = None
29
+ _globals['_GETNODESREQUEST']._serialized_start=155
30
+ _globals['_GETNODESREQUEST']._serialized_end=188
31
+ _globals['_GETNODESRESPONSE']._serialized_start=190
32
+ _globals['_GETNODESRESPONSE']._serialized_end=241
33
+ _globals['_PUSHTASKINSREQUEST']._serialized_start=243
34
+ _globals['_PUSHTASKINSREQUEST']._serialized_end=307
35
+ _globals['_PUSHTASKINSRESPONSE']._serialized_start=309
36
+ _globals['_PUSHTASKINSRESPONSE']._serialized_end=348
37
+ _globals['_PULLTASKRESREQUEST']._serialized_start=350
38
+ _globals['_PULLTASKRESREQUEST']._serialized_end=420
39
+ _globals['_PULLTASKRESRESPONSE']._serialized_start=422
40
+ _globals['_PULLTASKRESRESPONSE']._serialized_end=487
41
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=489
42
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=533
43
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=535
44
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=662
45
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=664
46
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=747
47
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=749
48
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=779
49
+ _globals['_DRIVER']._serialized_start=782
50
+ _globals['_DRIVER']._serialized_end=1452
51
+ # @@protoc_insertion_point(module_scope)
@@ -3,7 +3,10 @@
3
3
  isort:skip_file
4
4
  """
5
5
  import builtins
6
+ import flwr.proto.fab_pb2
7
+ import flwr.proto.message_pb2
6
8
  import flwr.proto.node_pb2
9
+ import flwr.proto.run_pb2
7
10
  import flwr.proto.task_pb2
8
11
  import google.protobuf.descriptor
9
12
  import google.protobuf.internal.containers
@@ -91,3 +94,59 @@ class PullTaskResResponse(google.protobuf.message.Message):
91
94
  ) -> None: ...
92
95
  def ClearField(self, field_name: typing_extensions.Literal["task_res_list",b"task_res_list"]) -> None: ...
93
96
  global___PullTaskResResponse = PullTaskResResponse
97
+
98
+ class PullServerAppInputsRequest(google.protobuf.message.Message):
99
+ """PullServerAppInputs messages"""
100
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
101
+ RUN_ID_FIELD_NUMBER: builtins.int
102
+ run_id: builtins.int
103
+ def __init__(self,
104
+ *,
105
+ run_id: builtins.int = ...,
106
+ ) -> None: ...
107
+ def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
108
+ global___PullServerAppInputsRequest = PullServerAppInputsRequest
109
+
110
+ class PullServerAppInputsResponse(google.protobuf.message.Message):
111
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
112
+ CONTEXT_FIELD_NUMBER: builtins.int
113
+ RUN_FIELD_NUMBER: builtins.int
114
+ FAB_FIELD_NUMBER: builtins.int
115
+ @property
116
+ def context(self) -> flwr.proto.message_pb2.Context: ...
117
+ @property
118
+ def run(self) -> flwr.proto.run_pb2.Run: ...
119
+ @property
120
+ def fab(self) -> flwr.proto.fab_pb2.Fab: ...
121
+ def __init__(self,
122
+ *,
123
+ context: typing.Optional[flwr.proto.message_pb2.Context] = ...,
124
+ run: typing.Optional[flwr.proto.run_pb2.Run] = ...,
125
+ fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
126
+ ) -> None: ...
127
+ def HasField(self, field_name: typing_extensions.Literal["context",b"context","fab",b"fab","run",b"run"]) -> builtins.bool: ...
128
+ def ClearField(self, field_name: typing_extensions.Literal["context",b"context","fab",b"fab","run",b"run"]) -> None: ...
129
+ global___PullServerAppInputsResponse = PullServerAppInputsResponse
130
+
131
+ class PushServerAppOutputsRequest(google.protobuf.message.Message):
132
+ """PushServerAppOutputs messages"""
133
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
134
+ RUN_ID_FIELD_NUMBER: builtins.int
135
+ CONTEXT_FIELD_NUMBER: builtins.int
136
+ run_id: builtins.int
137
+ @property
138
+ def context(self) -> flwr.proto.message_pb2.Context: ...
139
+ def __init__(self,
140
+ *,
141
+ run_id: builtins.int = ...,
142
+ context: typing.Optional[flwr.proto.message_pb2.Context] = ...,
143
+ ) -> None: ...
144
+ def HasField(self, field_name: typing_extensions.Literal["context",b"context"]) -> builtins.bool: ...
145
+ def ClearField(self, field_name: typing_extensions.Literal["context",b"context","run_id",b"run_id"]) -> None: ...
146
+ global___PushServerAppOutputsRequest = PushServerAppOutputsRequest
147
+
148
+ class PushServerAppOutputsResponse(google.protobuf.message.Message):
149
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
150
+ def __init__(self,
151
+ ) -> None: ...
152
+ global___PushServerAppOutputsResponse = PushServerAppOutputsResponse
@@ -46,6 +46,16 @@ class DriverStub(object):
46
46
  request_serializer=flwr_dot_proto_dot_fab__pb2.GetFabRequest.SerializeToString,
47
47
  response_deserializer=flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
48
48
  )
49
+ self.PullServerAppInputs = channel.unary_unary(
50
+ '/flwr.proto.Driver/PullServerAppInputs',
51
+ request_serializer=flwr_dot_proto_dot_driver__pb2.PullServerAppInputsRequest.SerializeToString,
52
+ response_deserializer=flwr_dot_proto_dot_driver__pb2.PullServerAppInputsResponse.FromString,
53
+ )
54
+ self.PushServerAppOutputs = channel.unary_unary(
55
+ '/flwr.proto.Driver/PushServerAppOutputs',
56
+ request_serializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsRequest.SerializeToString,
57
+ response_deserializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.FromString,
58
+ )
49
59
 
50
60
 
51
61
  class DriverServicer(object):
@@ -93,6 +103,20 @@ class DriverServicer(object):
93
103
  context.set_details('Method not implemented!')
94
104
  raise NotImplementedError('Method not implemented!')
95
105
 
106
+ def PullServerAppInputs(self, request, context):
107
+ """Pull ServerApp inputs
108
+ """
109
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
110
+ context.set_details('Method not implemented!')
111
+ raise NotImplementedError('Method not implemented!')
112
+
113
+ def PushServerAppOutputs(self, request, context):
114
+ """Push ServerApp outputs
115
+ """
116
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
117
+ context.set_details('Method not implemented!')
118
+ raise NotImplementedError('Method not implemented!')
119
+
96
120
 
97
121
  def add_DriverServicer_to_server(servicer, server):
98
122
  rpc_method_handlers = {
@@ -126,6 +150,16 @@ def add_DriverServicer_to_server(servicer, server):
126
150
  request_deserializer=flwr_dot_proto_dot_fab__pb2.GetFabRequest.FromString,
127
151
  response_serializer=flwr_dot_proto_dot_fab__pb2.GetFabResponse.SerializeToString,
128
152
  ),
153
+ 'PullServerAppInputs': grpc.unary_unary_rpc_method_handler(
154
+ servicer.PullServerAppInputs,
155
+ request_deserializer=flwr_dot_proto_dot_driver__pb2.PullServerAppInputsRequest.FromString,
156
+ response_serializer=flwr_dot_proto_dot_driver__pb2.PullServerAppInputsResponse.SerializeToString,
157
+ ),
158
+ 'PushServerAppOutputs': grpc.unary_unary_rpc_method_handler(
159
+ servicer.PushServerAppOutputs,
160
+ request_deserializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsRequest.FromString,
161
+ response_serializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.SerializeToString,
162
+ ),
129
163
  }
130
164
  generic_handler = grpc.method_handlers_generic_handler(
131
165
  'flwr.proto.Driver', rpc_method_handlers)
@@ -237,3 +271,37 @@ class Driver(object):
237
271
  flwr_dot_proto_dot_fab__pb2.GetFabResponse.FromString,
238
272
  options, channel_credentials,
239
273
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
274
+
275
+ @staticmethod
276
+ def PullServerAppInputs(request,
277
+ target,
278
+ options=(),
279
+ channel_credentials=None,
280
+ call_credentials=None,
281
+ insecure=False,
282
+ compression=None,
283
+ wait_for_ready=None,
284
+ timeout=None,
285
+ metadata=None):
286
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/PullServerAppInputs',
287
+ flwr_dot_proto_dot_driver__pb2.PullServerAppInputsRequest.SerializeToString,
288
+ flwr_dot_proto_dot_driver__pb2.PullServerAppInputsResponse.FromString,
289
+ options, channel_credentials,
290
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
291
+
292
+ @staticmethod
293
+ def PushServerAppOutputs(request,
294
+ target,
295
+ options=(),
296
+ channel_credentials=None,
297
+ call_credentials=None,
298
+ insecure=False,
299
+ compression=None,
300
+ wait_for_ready=None,
301
+ timeout=None,
302
+ metadata=None):
303
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/PushServerAppOutputs',
304
+ flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsRequest.SerializeToString,
305
+ flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.FromString,
306
+ options, channel_credentials,
307
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -40,6 +40,16 @@ class DriverStub:
40
40
  flwr.proto.fab_pb2.GetFabResponse]
41
41
  """Get FAB"""
42
42
 
43
+ PullServerAppInputs: grpc.UnaryUnaryMultiCallable[
44
+ flwr.proto.driver_pb2.PullServerAppInputsRequest,
45
+ flwr.proto.driver_pb2.PullServerAppInputsResponse]
46
+ """Pull ServerApp inputs"""
47
+
48
+ PushServerAppOutputs: grpc.UnaryUnaryMultiCallable[
49
+ flwr.proto.driver_pb2.PushServerAppOutputsRequest,
50
+ flwr.proto.driver_pb2.PushServerAppOutputsResponse]
51
+ """Push ServerApp outputs"""
52
+
43
53
 
44
54
  class DriverServicer(metaclass=abc.ABCMeta):
45
55
  @abc.abstractmethod
@@ -90,5 +100,21 @@ class DriverServicer(metaclass=abc.ABCMeta):
90
100
  """Get FAB"""
91
101
  pass
92
102
 
103
+ @abc.abstractmethod
104
+ def PullServerAppInputs(self,
105
+ request: flwr.proto.driver_pb2.PullServerAppInputsRequest,
106
+ context: grpc.ServicerContext,
107
+ ) -> flwr.proto.driver_pb2.PullServerAppInputsResponse:
108
+ """Pull ServerApp inputs"""
109
+ pass
110
+
111
+ @abc.abstractmethod
112
+ def PushServerAppOutputs(self,
113
+ request: flwr.proto.driver_pb2.PushServerAppOutputsRequest,
114
+ context: grpc.ServicerContext,
115
+ ) -> flwr.proto.driver_pb2.PushServerAppOutputsResponse:
116
+ """Push ServerApp outputs"""
117
+ pass
118
+
93
119
 
94
120
  def add_DriverServicer_to_server(servicer: DriverServicer, server: grpc.Server) -> None: ...
@@ -17,12 +17,14 @@
17
17
  import argparse
18
18
  import csv
19
19
  import importlib.util
20
+ import subprocess
20
21
  import sys
21
22
  import threading
22
23
  from collections.abc import Sequence
23
- from logging import INFO, WARN
24
+ from logging import DEBUG, INFO, WARN
24
25
  from os.path import isfile
25
26
  from pathlib import Path
27
+ from time import sleep
26
28
  from typing import Optional
27
29
 
28
30
  import grpc
@@ -42,10 +44,13 @@ from flwr.common.constant import (
42
44
  FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
43
45
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
44
46
  FLEET_API_REST_DEFAULT_ADDRESS,
47
+ ISOLATION_MODE_PROCESS,
48
+ ISOLATION_MODE_SUBPROCESS,
45
49
  MISSING_EXTRA_REST,
46
50
  TRANSPORT_TYPE_GRPC_ADAPTER,
47
51
  TRANSPORT_TYPE_GRPC_RERE,
48
52
  TRANSPORT_TYPE_REST,
53
+ Status,
49
54
  )
50
55
  from flwr.common.exit_handlers import register_exit_handlers
51
56
  from flwr.common.logger import log
@@ -53,12 +58,13 @@ from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
53
58
  private_key_to_bytes,
54
59
  public_key_to_bytes,
55
60
  )
61
+ from flwr.common.typing import RunStatus
56
62
  from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
57
63
  add_FleetServicer_to_server,
58
64
  )
59
65
  from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
60
66
  from flwr.superexec.app import load_executor
61
- from flwr.superexec.exec_grpc import run_superexec_api_grpc
67
+ from flwr.superexec.exec_grpc import run_exec_api_grpc
62
68
 
63
69
  from .client_manager import ClientManager
64
70
  from .history import History
@@ -323,8 +329,10 @@ def run_superlink() -> None:
323
329
  raise ValueError(f"Unknown fleet_api_type: {args.fleet_api_type}")
324
330
 
325
331
  # Start Exec API
326
- exec_server: grpc.Server = run_superexec_api_grpc(
332
+ exec_server: grpc.Server = run_exec_api_grpc(
327
333
  address=exec_address,
334
+ state_factory=state_factory,
335
+ ffs_factory=ffs_factory,
328
336
  executor=load_executor(args),
329
337
  certificates=certificates,
330
338
  config=parse_config_args(
@@ -333,6 +341,15 @@ def run_superlink() -> None:
333
341
  )
334
342
  grpc_servers.append(exec_server)
335
343
 
344
+ if args.isolation == ISOLATION_MODE_SUBPROCESS:
345
+ # Scheduler thread
346
+ scheduler_th = threading.Thread(
347
+ target=_flwr_serverapp_scheduler,
348
+ args=(state_factory, args.driver_api_address),
349
+ )
350
+ scheduler_th.start()
351
+ bckg_threads.append(scheduler_th)
352
+
336
353
  # Graceful shutdown
337
354
  register_exit_handlers(
338
355
  event_type=EventType.RUN_SUPERLINK_LEAVE,
@@ -349,6 +366,47 @@ def run_superlink() -> None:
349
366
  driver_server.wait_for_termination(timeout=1)
350
367
 
351
368
 
369
+ def _flwr_serverapp_scheduler(
370
+ state_factory: LinkStateFactory, driver_api_address: str
371
+ ) -> None:
372
+ log(DEBUG, "Started flwr-serverapp scheduler thread.")
373
+
374
+ state = state_factory.state()
375
+
376
+ # Periodically check for a pending run in the LinkState
377
+ while True:
378
+ sleep(3)
379
+ pending_run_id = state.get_pending_run_id()
380
+
381
+ if pending_run_id:
382
+
383
+ # Set run as starting
384
+ state.update_run_status(
385
+ run_id=pending_run_id, new_status=RunStatus(Status.STARTING, "", "")
386
+ )
387
+ log(
388
+ INFO,
389
+ "Launching `flwr-serverapp` subprocess with run-id %d. "
390
+ "Connects to SuperLink on %s",
391
+ pending_run_id,
392
+ driver_api_address,
393
+ )
394
+ # Start ServerApp subprocess
395
+ command = [
396
+ "flwr-serverapp",
397
+ "--superlink",
398
+ driver_api_address,
399
+ "--run-id",
400
+ str(pending_run_id),
401
+ ]
402
+ subprocess.run(
403
+ command,
404
+ stdout=None,
405
+ stderr=None,
406
+ check=True,
407
+ )
408
+
409
+
352
410
  def _format_address(address: str) -> tuple[str, str, int]:
353
411
  parsed_address = parse_address(address)
354
412
  if not parsed_address:
@@ -634,6 +692,19 @@ def _add_args_common(parser: argparse.ArgumentParser) -> None:
634
692
  "to create a secure connection.",
635
693
  type=str,
636
694
  )
695
+ parser.add_argument(
696
+ "--isolation",
697
+ default=ISOLATION_MODE_SUBPROCESS,
698
+ required=False,
699
+ choices=[
700
+ ISOLATION_MODE_SUBPROCESS,
701
+ ISOLATION_MODE_PROCESS,
702
+ ],
703
+ help="Isolation mode when running a `ServerApp` (`subprocess` by default, "
704
+ "possible values: `subprocess`, `process`). Use `subprocess` to configure "
705
+ "SuperLink to run a `ServerApp` in a subprocess. Use `process` to indicate "
706
+ "that a separate independent process gets created outside of SuperLink.",
707
+ )
637
708
  parser.add_argument(
638
709
  "--database",
639
710
  help="A string representing the path to the database "
@@ -34,7 +34,6 @@ from flwr.common.config import (
34
34
  from flwr.common.constant import DRIVER_API_DEFAULT_ADDRESS
35
35
  from flwr.common.logger import log, update_console_handler, warn_deprecated_feature
36
36
  from flwr.common.object_ref import load_app
37
- from flwr.common.typing import UserConfig
38
37
  from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
39
38
  from flwr.proto.run_pb2 import ( # pylint: disable=E0611
40
39
  CreateRunRequest,
@@ -46,13 +45,14 @@ from .driver.grpc_driver import GrpcDriver
46
45
  from .server_app import LoadServerAppError, ServerApp
47
46
 
48
47
 
48
+ # pylint: disable-next=too-many-arguments,too-many-positional-arguments
49
49
  def run(
50
50
  driver: Driver,
51
+ context: Context,
51
52
  server_app_dir: str,
52
- server_app_run_config: UserConfig,
53
53
  server_app_attr: Optional[str] = None,
54
54
  loaded_server_app: Optional[ServerApp] = None,
55
- ) -> None:
55
+ ) -> Context:
56
56
  """Run ServerApp with a given Driver."""
57
57
  if not (server_app_attr is None) ^ (loaded_server_app is None):
58
58
  raise ValueError(
@@ -78,15 +78,11 @@ def run(
78
78
 
79
79
  server_app = _load()
80
80
 
81
- # Initialize Context
82
- context = Context(
83
- node_id=0, node_config={}, state=RecordSet(), run_config=server_app_run_config
84
- )
85
-
86
81
  # Call ServerApp
87
82
  server_app(driver=driver, context=context)
88
83
 
89
84
  log(DEBUG, "ServerApp finished running.")
85
+ return context
90
86
 
91
87
 
92
88
  # pylint: disable-next=too-many-branches,too-many-statements,too-many-locals
@@ -225,11 +221,19 @@ def run_server_app() -> None:
225
221
  root_certificates,
226
222
  )
227
223
 
224
+ # Initialize Context
225
+ context = Context(
226
+ node_id=0,
227
+ node_config={},
228
+ state=RecordSet(),
229
+ run_config=server_app_run_config,
230
+ )
231
+
228
232
  # Run the ServerApp with the Driver
229
233
  run(
230
234
  driver=driver,
235
+ context=context,
231
236
  server_app_dir=app_path,
232
- server_app_run_config=server_app_run_config,
233
237
  server_app_attr=server_app_attr,
234
238
  )
235
239
 
@@ -0,0 +1,78 @@
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
+ import argparse
18
+ from logging import DEBUG, INFO
19
+ from typing import Optional
20
+
21
+ from flwr.common.logger import log
22
+ from flwr.server.driver.grpc_driver import GrpcDriver
23
+
24
+
25
+ def flwr_serverapp() -> None:
26
+ """Run process-isolated Flower ServerApp."""
27
+ log(INFO, "Starting Flower ServerApp")
28
+
29
+ parser = argparse.ArgumentParser(
30
+ description="Run a Flower ServerApp",
31
+ )
32
+ parser.add_argument(
33
+ "--superlink",
34
+ type=str,
35
+ help="Address of SuperLink's DriverAPI",
36
+ )
37
+ parser.add_argument(
38
+ "--run-id",
39
+ type=int,
40
+ required=False,
41
+ help="Id of the Run this process should start. If not supplied, this "
42
+ "function will request a pending run to the LinkState.",
43
+ )
44
+ args = parser.parse_args()
45
+
46
+ log(
47
+ DEBUG,
48
+ "Staring isolated `ServerApp` connected to SuperLink DriverAPI at %s "
49
+ "for run-id %s",
50
+ args.superlink,
51
+ args.run_id,
52
+ )
53
+ run_serverapp(superlink=args.superlink, run_id=args.run_id)
54
+
55
+
56
+ def run_serverapp( # pylint: disable=R0914
57
+ superlink: str,
58
+ run_id: Optional[int] = None,
59
+ ) -> None:
60
+ """Run Flower ServerApp process.
61
+
62
+ Parameters
63
+ ----------
64
+ superlink : str
65
+ Address of SuperLink
66
+ run_id : Optional[int] (default: None)
67
+ Unique identifier of a Run registered at the LinkState. If not supplied,
68
+ this function will request a pending run to the LinkState.
69
+ """
70
+ _ = GrpcDriver(
71
+ run_id=run_id if run_id else 0,
72
+ driver_service_address=superlink,
73
+ root_certificates=None,
74
+ )
75
+
76
+ # Then, GetServerInputs
77
+
78
+ # Then, run ServerApp