flwr-nightly 1.13.0.dev20241028__tar.gz → 1.13.0.dev20241030__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 (314) hide show
  1. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/PKG-INFO +1 -1
  2. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/pyproject.toml +1 -1
  3. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/build.py +2 -2
  4. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/log.py +46 -17
  5. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/constant.py +6 -0
  6. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/date.py +3 -3
  7. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/logger.py +103 -0
  8. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/serde.py +22 -0
  9. flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/driver_pb2.py +52 -0
  10. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/driver_pb2.pyi +0 -5
  11. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/driver_pb2_grpc.py +69 -0
  12. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/driver_pb2_grpc.pyi +27 -0
  13. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/exec_pb2.py +6 -6
  14. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/exec_pb2.pyi +8 -2
  15. flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/log_pb2.py +29 -0
  16. flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/log_pb2.pyi +39 -0
  17. flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/task_pb2_grpc.py +4 -0
  18. flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/task_pb2_grpc.pyi +4 -0
  19. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/app.py +1 -5
  20. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/driver/driver.py +14 -0
  21. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/driver/grpc_driver.py +8 -15
  22. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/driver/inmemory_driver.py +3 -11
  23. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/run_serverapp.py +3 -4
  24. flwr_nightly-1.13.0.dev20241030/src/py/flwr/server/serverapp/app.py +271 -0
  25. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/driver/driver_servicer.py +36 -9
  26. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +28 -2
  27. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/linkstate/linkstate.py +35 -0
  28. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +50 -0
  29. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/simulation/run_simulation.py +2 -1
  30. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/superexec/deployment.py +22 -40
  31. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/superexec/exec_servicer.py +23 -62
  32. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/superexec/executor.py +3 -4
  33. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/superexec/simulation.py +4 -7
  34. flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/driver_pb2.py +0 -51
  35. flwr_nightly-1.13.0.dev20241028/src/py/flwr/server/serverapp/app.py +0 -141
  36. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/LICENSE +0 -0
  37. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/README.md +0 -0
  38. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/__init__.py +0 -0
  39. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/__init__.py +0 -0
  40. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/app.py +0 -0
  41. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/config_utils.py +0 -0
  42. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/example.py +0 -0
  43. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/install.py +0 -0
  44. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/__init__.py +0 -0
  45. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/new.py +0 -0
  46. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  47. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  48. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  49. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  50. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  51. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  52. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  53. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  54. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  55. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  56. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  57. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  58. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  59. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  60. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  61. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  62. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  63. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  64. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  65. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  66. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  67. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  68. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  69. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  70. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  71. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  72. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  73. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  74. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  75. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  76. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  77. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  78. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  79. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  80. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  81. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  82. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  83. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  84. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  85. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  86. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  87. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  88. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  89. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  90. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  91. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  92. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  93. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  94. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  95. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  96. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  97. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  98. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/run/__init__.py +0 -0
  99. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/run/run.py +0 -0
  100. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/cli/utils.py +0 -0
  101. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/__init__.py +0 -0
  102. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/app.py +0 -0
  103. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/client.py +0 -0
  104. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/client_app.py +0 -0
  105. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/clientapp/__init__.py +0 -0
  106. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/clientapp/app.py +0 -0
  107. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  108. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/clientapp/utils.py +0 -0
  109. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  110. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  111. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  112. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  113. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_client/connection.py +0 -0
  114. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  115. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  116. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  117. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  118. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/heartbeat.py +0 -0
  119. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/message_handler/__init__.py +0 -0
  120. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  121. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  122. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/__init__.py +0 -0
  123. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  124. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/comms_mods.py +0 -0
  125. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  126. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  127. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  128. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  129. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/mod/utils.py +0 -0
  130. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/numpy_client.py +0 -0
  131. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/rest_client/__init__.py +0 -0
  132. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/rest_client/connection.py +0 -0
  133. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/run_info_store.py +0 -0
  134. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/supernode/__init__.py +0 -0
  135. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/supernode/app.py +0 -0
  136. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/client/typing.py +0 -0
  137. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/__init__.py +0 -0
  138. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/address.py +0 -0
  139. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/config.py +0 -0
  140. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/context.py +0 -0
  141. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/differential_privacy.py +0 -0
  142. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  143. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/dp.py +0 -0
  144. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/exit_handlers.py +0 -0
  145. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/grpc.py +0 -0
  146. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/message.py +0 -0
  147. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/object_ref.py +0 -0
  148. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/parameter.py +0 -0
  149. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/pyproject.py +0 -0
  150. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/record/__init__.py +0 -0
  151. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/record/configsrecord.py +0 -0
  152. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/record/conversion_utils.py +0 -0
  153. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/record/metricsrecord.py +0 -0
  154. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/record/parametersrecord.py +0 -0
  155. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/record/recordset.py +0 -0
  156. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/record/typeddict.py +0 -0
  157. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/recordset_compat.py +0 -0
  158. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/retry_invoker.py +0 -0
  159. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  160. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  161. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  162. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  163. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  164. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  165. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  166. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  167. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/telemetry.py +0 -0
  168. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/typing.py +0 -0
  169. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/common/version.py +0 -0
  170. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/__init__.py +0 -0
  171. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  172. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  173. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  174. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  175. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/common_pb2.py +0 -0
  176. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/common_pb2.pyi +0 -0
  177. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  178. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  179. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/control_pb2.py +0 -0
  180. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/control_pb2.pyi +0 -0
  181. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
  182. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  183. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/error_pb2.py +0 -0
  184. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/error_pb2.pyi +0 -0
  185. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  186. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  187. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fab_pb2.py +0 -0
  190. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  191. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fleet_pb2.py +0 -0
  194. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  195. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  198. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  199. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  201. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/message_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  202. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/message_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  203. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/message_pb2.py +0 -0
  204. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/message_pb2.pyi +0 -0
  205. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/node_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  206. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/node_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  207. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/node_pb2.py +0 -0
  208. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/node_pb2.pyi +0 -0
  209. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/recordset_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  210. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/recordset_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  211. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/recordset_pb2.py +0 -0
  212. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  213. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/run_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  214. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/run_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  215. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/run_pb2.py +0 -0
  216. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/run_pb2.pyi +0 -0
  217. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/task_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  218. /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/task_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241030/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  219. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/task_pb2.py +0 -0
  220. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/task_pb2.pyi +0 -0
  221. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/transport_pb2.py +0 -0
  222. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  223. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  224. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  225. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/py.typed +0 -0
  226. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/__init__.py +0 -0
  227. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/client_manager.py +0 -0
  228. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/client_proxy.py +0 -0
  229. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/compat/__init__.py +0 -0
  230. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/compat/app.py +0 -0
  231. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/compat/app_utils.py +0 -0
  232. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  233. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/compat/legacy_context.py +0 -0
  234. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/criterion.py +0 -0
  235. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/driver/__init__.py +0 -0
  236. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/history.py +0 -0
  237. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/server.py +0 -0
  238. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/server_app.py +0 -0
  239. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/server_config.py +0 -0
  240. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/serverapp/__init__.py +0 -0
  241. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/serverapp_components.py +0 -0
  242. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/__init__.py +0 -0
  243. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/aggregate.py +0 -0
  244. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/bulyan.py +0 -0
  245. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  246. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  247. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  248. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  249. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  250. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  251. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedadam.py +0 -0
  252. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedavg.py +0 -0
  253. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  254. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  255. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  256. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedopt.py +0 -0
  257. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedprox.py +0 -0
  258. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  259. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  260. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  261. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  262. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  263. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/krum.py +0 -0
  264. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  265. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/strategy/strategy.py +0 -0
  266. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/__init__.py +0 -0
  267. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  268. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
  269. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  270. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  271. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  272. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  273. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  274. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  275. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  276. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  277. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  278. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  279. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  280. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  281. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  282. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  283. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  284. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  285. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  286. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  287. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  288. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  289. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  290. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  291. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  292. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  293. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  294. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  295. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  296. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/typing.py +0 -0
  297. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/utils/__init__.py +0 -0
  298. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/utils/tensorboard.py +0 -0
  299. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/utils/validator.py +0 -0
  300. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/workflow/__init__.py +0 -0
  301. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/workflow/constant.py +0 -0
  302. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  303. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  304. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  305. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  306. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/simulation/__init__.py +0 -0
  307. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/simulation/app.py +0 -0
  308. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  309. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  310. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  311. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  312. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/superexec/__init__.py +0 -0
  313. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/superexec/app.py +0 -0
  314. {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241030}/src/py/flwr/superexec/exec_grpc.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.13.0.dev20241028
3
+ Version: 1.13.0.dev20241030
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.dev20241028"
7
+ version = "1.13.0.dev20241030"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -81,8 +81,8 @@ def build(
81
81
  if not is_valid_project_name(app.name):
82
82
  typer.secho(
83
83
  f"❌ The project name {app.name} is invalid, "
84
- "a valid project name must start with a letter or an underscore, "
85
- "and can only contain letters, digits, and underscores.",
84
+ "a valid project name must start with a letter, "
85
+ "and can only contain letters, digits, and hyphens.",
86
86
  fg=typer.colors.RED,
87
87
  bold=True,
88
88
  )
@@ -18,29 +18,30 @@ import sys
18
18
  import time
19
19
  from logging import DEBUG, ERROR, INFO
20
20
  from pathlib import Path
21
- from typing import Annotated, Optional
21
+ from typing import Annotated, Optional, cast
22
22
 
23
23
  import grpc
24
24
  import typer
25
25
 
26
26
  from flwr.cli.config_utils import load_and_validate
27
+ from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
27
28
  from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
28
29
  from flwr.common.logger import log as logger
29
30
  from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
30
31
  from flwr.proto.exec_pb2_grpc import ExecStub
31
32
 
32
- CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
33
-
34
33
 
35
34
  def start_stream(
36
35
  run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
37
36
  ) -> None:
38
37
  """Start log streaming for a given run ID."""
38
+ stub = ExecStub(channel)
39
+ after_timestamp = 0.0
39
40
  try:
41
+ logger(INFO, "Starting logstream for run_id `%s`", run_id)
40
42
  while True:
41
- logger(INFO, "Starting logstream for run_id `%s`", run_id)
42
- stream_logs(run_id, channel, refresh_period)
43
- time.sleep(2)
43
+ after_timestamp = stream_logs(run_id, stub, refresh_period, after_timestamp)
44
+ time.sleep(CONN_RECONNECT_INTERVAL)
44
45
  logger(DEBUG, "Reconnecting to logstream")
45
46
  except KeyboardInterrupt:
46
47
  logger(INFO, "Exiting logstream")
@@ -54,16 +55,44 @@ def start_stream(
54
55
  channel.close()
55
56
 
56
57
 
57
- def stream_logs(run_id: int, channel: grpc.Channel, duration: int) -> None:
58
- """Stream logs from the beginning of a run with connection refresh."""
59
- start_time = time.time()
60
- stub = ExecStub(channel)
61
- req = StreamLogsRequest(run_id=run_id)
58
+ def stream_logs(
59
+ run_id: int, stub: ExecStub, duration: int, after_timestamp: float
60
+ ) -> float:
61
+ """Stream logs from the beginning of a run with connection refresh.
62
+
63
+ Parameters
64
+ ----------
65
+ run_id : int
66
+ The identifier of the run.
67
+ stub : ExecStub
68
+ The gRPC stub to interact with the Exec service.
69
+ duration : int
70
+ The timeout duration for each stream connection in seconds.
71
+ after_timestamp : float
72
+ The timestamp to start streaming logs from.
73
+
74
+ Returns
75
+ -------
76
+ float
77
+ The latest timestamp from the streamed logs or the provided `after_timestamp`
78
+ if no logs are returned.
79
+ """
80
+ req = StreamLogsRequest(run_id=run_id, after_timestamp=after_timestamp)
81
+
82
+ latest_timestamp = 0.0
83
+ res = None
84
+ try:
85
+ for res in stub.StreamLogs(req, timeout=duration):
86
+ print(res.log_output, end="")
87
+ except grpc.RpcError as e:
88
+ # pylint: disable=E1101
89
+ if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
90
+ raise e
91
+ finally:
92
+ if res is not None:
93
+ latest_timestamp = cast(float, res.latest_timestamp)
62
94
 
63
- for res in stub.StreamLogs(req):
64
- print(res.log_output)
65
- if time.time() - start_time > duration:
66
- break
95
+ return max(latest_timestamp, after_timestamp)
67
96
 
68
97
 
69
98
  def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
@@ -181,11 +210,11 @@ def log(
181
210
  )
182
211
  raise typer.Exit(code=1)
183
212
 
184
- _log_with_superexec(federation_config, run_id, stream)
213
+ _log_with_exec_api(federation_config, run_id, stream)
185
214
 
186
215
 
187
216
  # pylint: disable-next=too-many-branches
188
- def _log_with_superexec(
217
+ def _log_with_exec_api(
189
218
  federation_config: dict[str, str],
190
219
  run_id: int,
191
220
  stream: bool,
@@ -87,6 +87,12 @@ MESSAGE_TTL_TOLERANCE = 1e-1
87
87
  ISOLATION_MODE_SUBPROCESS = "subprocess"
88
88
  ISOLATION_MODE_PROCESS = "process"
89
89
 
90
+ # Log streaming configurations
91
+ CONN_REFRESH_PERIOD = 60 # Stream connection refresh period
92
+ CONN_RECONNECT_INTERVAL = 0.5 # Reconnect interval between two stream connections
93
+ LOG_STREAM_INTERVAL = 0.5 # Log stream interval for `ExecServicer.StreamLogs`
94
+ LOG_UPLOAD_INTERVAL = 0.2 # Minimum interval between two log uploads
95
+
90
96
 
91
97
  class MessageType:
92
98
  """Message type."""
@@ -15,9 +15,9 @@
15
15
  """Flower date utils."""
16
16
 
17
17
 
18
- from datetime import datetime, timezone
18
+ import datetime
19
19
 
20
20
 
21
- def now() -> datetime:
21
+ def now() -> datetime.datetime:
22
22
  """Construct a datetime from time.time() with time zone set to UTC."""
23
- return datetime.now(tz=timezone.utc)
23
+ return datetime.datetime.now(tz=datetime.timezone.utc)
@@ -16,10 +16,22 @@
16
16
 
17
17
 
18
18
  import logging
19
+ import sys
20
+ import threading
21
+ import time
19
22
  from logging import WARN, LogRecord
20
23
  from logging.handlers import HTTPHandler
24
+ from queue import Empty, Queue
21
25
  from typing import TYPE_CHECKING, Any, Optional, TextIO
22
26
 
27
+ import grpc
28
+
29
+ from flwr.proto.driver_pb2_grpc import DriverStub # pylint: disable=E0611
30
+ from flwr.proto.log_pb2 import PushLogsRequest # pylint: disable=E0611
31
+ from flwr.proto.node_pb2 import Node # pylint: disable=E0611
32
+
33
+ from .constant import LOG_UPLOAD_INTERVAL
34
+
23
35
  # Create logger
24
36
  LOGGER_NAME = "flwr"
25
37
  FLOWER_LOGGER = logging.getLogger(LOGGER_NAME)
@@ -259,3 +271,94 @@ def set_logger_propagation(
259
271
  if not child_logger.propagate:
260
272
  child_logger.log(logging.DEBUG, "Logger propagate set to False")
261
273
  return child_logger
274
+
275
+
276
+ def mirror_output_to_queue(log_queue: Queue[Optional[str]]) -> None:
277
+ """Mirror stdout and stderr output to the provided queue."""
278
+
279
+ def get_write_fn(stream: TextIO) -> Any:
280
+ original_write = stream.write
281
+
282
+ def fn(s: str) -> int:
283
+ ret = original_write(s)
284
+ stream.flush()
285
+ log_queue.put(s)
286
+ return ret
287
+
288
+ return fn
289
+
290
+ sys.stdout.write = get_write_fn(sys.stdout) # type: ignore[method-assign]
291
+ sys.stderr.write = get_write_fn(sys.stderr) # type: ignore[method-assign]
292
+ console_handler.stream = sys.stdout
293
+
294
+
295
+ def restore_output() -> None:
296
+ """Restore stdout and stderr.
297
+
298
+ This will stop mirroring output to queues.
299
+ """
300
+ sys.stdout = sys.__stdout__
301
+ sys.stderr = sys.__stderr__
302
+ console_handler.stream = sys.stdout
303
+
304
+
305
+ def _log_uploader(
306
+ log_queue: Queue[Optional[str]], node_id: int, run_id: int, stub: DriverStub
307
+ ) -> None:
308
+ """Upload logs to the SuperLink."""
309
+ exit_flag = False
310
+ node = Node(node_id=node_id, anonymous=False)
311
+ msgs: list[str] = []
312
+ while True:
313
+ # Fetch all messages from the queue
314
+ try:
315
+ while True:
316
+ msg = log_queue.get_nowait()
317
+ # Quit the loops if the returned message is `None`
318
+ # This is a signal that the run has finished
319
+ if msg is None:
320
+ exit_flag = True
321
+ break
322
+ msgs.append(msg)
323
+ except Empty:
324
+ pass
325
+
326
+ # Upload if any logs
327
+ if msgs:
328
+ req = PushLogsRequest(
329
+ node=node,
330
+ run_id=run_id,
331
+ logs=msgs,
332
+ )
333
+ try:
334
+ stub.PushLogs(req)
335
+ msgs.clear()
336
+ except grpc.RpcError as e:
337
+ # Ignore minor network errors
338
+ # pylint: disable-next=no-member
339
+ if e.code() != grpc.StatusCode.UNAVAILABLE:
340
+ raise e
341
+
342
+ if exit_flag:
343
+ break
344
+
345
+ time.sleep(LOG_UPLOAD_INTERVAL)
346
+
347
+
348
+ def start_log_uploader(
349
+ log_queue: Queue[Optional[str]], node_id: int, run_id: int, stub: DriverStub
350
+ ) -> threading.Thread:
351
+ """Start the log uploader thread and return it."""
352
+ thread = threading.Thread(
353
+ target=_log_uploader, args=(log_queue, node_id, run_id, stub)
354
+ )
355
+ thread.start()
356
+ return thread
357
+
358
+
359
+ def stop_log_uploader(
360
+ log_queue: Queue[Optional[str]], log_uploader: threading.Thread
361
+ ) -> None:
362
+ """Stop the log uploader thread."""
363
+ log_queue.put(None)
364
+ log_uploader.join()
@@ -40,6 +40,7 @@ from flwr.proto.recordset_pb2 import ParametersRecord as ProtoParametersRecord
40
40
  from flwr.proto.recordset_pb2 import RecordSet as ProtoRecordSet
41
41
  from flwr.proto.recordset_pb2 import SintList, StringList, UintList
42
42
  from flwr.proto.run_pb2 import Run as ProtoRun
43
+ from flwr.proto.run_pb2 import RunStatus as ProtoRunStatus
43
44
  from flwr.proto.task_pb2 import Task, TaskIns, TaskRes
44
45
  from flwr.proto.transport_pb2 import (
45
46
  ClientMessage,
@@ -910,3 +911,24 @@ def clientappstatus_from_proto(
910
911
  if msg.code == ClientAppOutputCode.UNKNOWN_ERROR:
911
912
  code = typing.ClientAppOutputCode.UNKNOWN_ERROR
912
913
  return typing.ClientAppOutputStatus(code=code, message=msg.message)
914
+
915
+
916
+ # === Run status ===
917
+
918
+
919
+ def run_status_to_proto(run_status: typing.RunStatus) -> ProtoRunStatus:
920
+ """Serialize `RunStatus` to ProtoBuf."""
921
+ return ProtoRunStatus(
922
+ status=run_status.status,
923
+ sub_status=run_status.sub_status,
924
+ details=run_status.details,
925
+ )
926
+
927
+
928
+ def run_status_from_proto(run_status_proto: ProtoRunStatus) -> typing.RunStatus:
929
+ """Deserialize `RunStatus` from ProtoBuf."""
930
+ return typing.RunStatus(
931
+ status=run_status_proto.status,
932
+ sub_status=run_status_proto.sub_status,
933
+ details=run_status_proto.details,
934
+ )
@@ -0,0 +1,52 @@
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 log_pb2 as flwr_dot_proto_dot_log__pb2
16
+ from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
17
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
18
+ from flwr.proto import task_pb2 as flwr_dot_proto_dot_task__pb2
19
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
20
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
21
+
22
+
23
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x66lwr/proto/driver.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/log.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\"\x1c\n\x1aPullServerAppInputsRequest\"\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\xc5\x06\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\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x62\x06proto3')
24
+
25
+ _globals = globals()
26
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
27
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.driver_pb2', _globals)
28
+ if _descriptor._USE_C_DESCRIPTORS == False:
29
+ DESCRIPTOR._options = None
30
+ _globals['_GETNODESREQUEST']._serialized_start=177
31
+ _globals['_GETNODESREQUEST']._serialized_end=210
32
+ _globals['_GETNODESRESPONSE']._serialized_start=212
33
+ _globals['_GETNODESRESPONSE']._serialized_end=263
34
+ _globals['_PUSHTASKINSREQUEST']._serialized_start=265
35
+ _globals['_PUSHTASKINSREQUEST']._serialized_end=329
36
+ _globals['_PUSHTASKINSRESPONSE']._serialized_start=331
37
+ _globals['_PUSHTASKINSRESPONSE']._serialized_end=370
38
+ _globals['_PULLTASKRESREQUEST']._serialized_start=372
39
+ _globals['_PULLTASKRESREQUEST']._serialized_end=442
40
+ _globals['_PULLTASKRESRESPONSE']._serialized_start=444
41
+ _globals['_PULLTASKRESRESPONSE']._serialized_end=509
42
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_start=511
43
+ _globals['_PULLSERVERAPPINPUTSREQUEST']._serialized_end=539
44
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=541
45
+ _globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=668
46
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=670
47
+ _globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=753
48
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=755
49
+ _globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=785
50
+ _globals['_DRIVER']._serialized_start=788
51
+ _globals['_DRIVER']._serialized_end=1625
52
+ # @@protoc_insertion_point(module_scope)
@@ -98,13 +98,8 @@ global___PullTaskResResponse = PullTaskResResponse
98
98
  class PullServerAppInputsRequest(google.protobuf.message.Message):
99
99
  """PullServerAppInputs messages"""
100
100
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
101
- RUN_ID_FIELD_NUMBER: builtins.int
102
- run_id: builtins.int
103
101
  def __init__(self,
104
- *,
105
- run_id: builtins.int = ...,
106
102
  ) -> None: ...
107
- def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
108
103
  global___PullServerAppInputsRequest = PullServerAppInputsRequest
109
104
 
110
105
  class PullServerAppInputsResponse(google.protobuf.message.Message):
@@ -4,6 +4,7 @@ import grpc
4
4
 
5
5
  from flwr.proto import driver_pb2 as flwr_dot_proto_dot_driver__pb2
6
6
  from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
7
+ from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
7
8
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
8
9
 
9
10
 
@@ -56,6 +57,16 @@ class DriverStub(object):
56
57
  request_serializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsRequest.SerializeToString,
57
58
  response_deserializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.FromString,
58
59
  )
60
+ self.UpdateRunStatus = channel.unary_unary(
61
+ '/flwr.proto.Driver/UpdateRunStatus',
62
+ request_serializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.SerializeToString,
63
+ response_deserializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusResponse.FromString,
64
+ )
65
+ self.PushLogs = channel.unary_unary(
66
+ '/flwr.proto.Driver/PushLogs',
67
+ request_serializer=flwr_dot_proto_dot_log__pb2.PushLogsRequest.SerializeToString,
68
+ response_deserializer=flwr_dot_proto_dot_log__pb2.PushLogsResponse.FromString,
69
+ )
59
70
 
60
71
 
61
72
  class DriverServicer(object):
@@ -117,6 +128,20 @@ class DriverServicer(object):
117
128
  context.set_details('Method not implemented!')
118
129
  raise NotImplementedError('Method not implemented!')
119
130
 
131
+ def UpdateRunStatus(self, request, context):
132
+ """Update the status of a given run
133
+ """
134
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
135
+ context.set_details('Method not implemented!')
136
+ raise NotImplementedError('Method not implemented!')
137
+
138
+ def PushLogs(self, request, context):
139
+ """Push ServerApp logs
140
+ """
141
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
142
+ context.set_details('Method not implemented!')
143
+ raise NotImplementedError('Method not implemented!')
144
+
120
145
 
121
146
  def add_DriverServicer_to_server(servicer, server):
122
147
  rpc_method_handlers = {
@@ -160,6 +185,16 @@ def add_DriverServicer_to_server(servicer, server):
160
185
  request_deserializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsRequest.FromString,
161
186
  response_serializer=flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.SerializeToString,
162
187
  ),
188
+ 'UpdateRunStatus': grpc.unary_unary_rpc_method_handler(
189
+ servicer.UpdateRunStatus,
190
+ request_deserializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.FromString,
191
+ response_serializer=flwr_dot_proto_dot_run__pb2.UpdateRunStatusResponse.SerializeToString,
192
+ ),
193
+ 'PushLogs': grpc.unary_unary_rpc_method_handler(
194
+ servicer.PushLogs,
195
+ request_deserializer=flwr_dot_proto_dot_log__pb2.PushLogsRequest.FromString,
196
+ response_serializer=flwr_dot_proto_dot_log__pb2.PushLogsResponse.SerializeToString,
197
+ ),
163
198
  }
164
199
  generic_handler = grpc.method_handlers_generic_handler(
165
200
  'flwr.proto.Driver', rpc_method_handlers)
@@ -305,3 +340,37 @@ class Driver(object):
305
340
  flwr_dot_proto_dot_driver__pb2.PushServerAppOutputsResponse.FromString,
306
341
  options, channel_credentials,
307
342
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
343
+
344
+ @staticmethod
345
+ def UpdateRunStatus(request,
346
+ target,
347
+ options=(),
348
+ channel_credentials=None,
349
+ call_credentials=None,
350
+ insecure=False,
351
+ compression=None,
352
+ wait_for_ready=None,
353
+ timeout=None,
354
+ metadata=None):
355
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/UpdateRunStatus',
356
+ flwr_dot_proto_dot_run__pb2.UpdateRunStatusRequest.SerializeToString,
357
+ flwr_dot_proto_dot_run__pb2.UpdateRunStatusResponse.FromString,
358
+ options, channel_credentials,
359
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
360
+
361
+ @staticmethod
362
+ def PushLogs(request,
363
+ target,
364
+ options=(),
365
+ channel_credentials=None,
366
+ call_credentials=None,
367
+ insecure=False,
368
+ compression=None,
369
+ wait_for_ready=None,
370
+ timeout=None,
371
+ metadata=None):
372
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.Driver/PushLogs',
373
+ flwr_dot_proto_dot_log__pb2.PushLogsRequest.SerializeToString,
374
+ flwr_dot_proto_dot_log__pb2.PushLogsResponse.FromString,
375
+ options, channel_credentials,
376
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
@@ -5,6 +5,7 @@ isort:skip_file
5
5
  import abc
6
6
  import flwr.proto.driver_pb2
7
7
  import flwr.proto.fab_pb2
8
+ import flwr.proto.log_pb2
8
9
  import flwr.proto.run_pb2
9
10
  import grpc
10
11
 
@@ -50,6 +51,16 @@ class DriverStub:
50
51
  flwr.proto.driver_pb2.PushServerAppOutputsResponse]
51
52
  """Push ServerApp outputs"""
52
53
 
54
+ UpdateRunStatus: grpc.UnaryUnaryMultiCallable[
55
+ flwr.proto.run_pb2.UpdateRunStatusRequest,
56
+ flwr.proto.run_pb2.UpdateRunStatusResponse]
57
+ """Update the status of a given run"""
58
+
59
+ PushLogs: grpc.UnaryUnaryMultiCallable[
60
+ flwr.proto.log_pb2.PushLogsRequest,
61
+ flwr.proto.log_pb2.PushLogsResponse]
62
+ """Push ServerApp logs"""
63
+
53
64
 
54
65
  class DriverServicer(metaclass=abc.ABCMeta):
55
66
  @abc.abstractmethod
@@ -116,5 +127,21 @@ class DriverServicer(metaclass=abc.ABCMeta):
116
127
  """Push ServerApp outputs"""
117
128
  pass
118
129
 
130
+ @abc.abstractmethod
131
+ def UpdateRunStatus(self,
132
+ request: flwr.proto.run_pb2.UpdateRunStatusRequest,
133
+ context: grpc.ServicerContext,
134
+ ) -> flwr.proto.run_pb2.UpdateRunStatusResponse:
135
+ """Update the status of a given run"""
136
+ pass
137
+
138
+ @abc.abstractmethod
139
+ def PushLogs(self,
140
+ request: flwr.proto.log_pb2.PushLogsRequest,
141
+ context: grpc.ServicerContext,
142
+ ) -> flwr.proto.log_pb2.PushLogsResponse:
143
+ """Push ServerApp logs"""
144
+ pass
145
+
119
146
 
120
147
  def add_DriverServicer_to_server(servicer: DriverServicer, server: grpc.Server) -> None: ...
@@ -16,7 +16,7 @@ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
16
16
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
17
17
 
18
18
 
19
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"#\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"(\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t2\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\x32\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
20
20
 
21
21
  _globals = globals()
22
22
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -36,9 +36,9 @@ if _descriptor._USE_C_DESCRIPTORS == False:
36
36
  _globals['_STARTRUNRESPONSE']._serialized_start=441
37
37
  _globals['_STARTRUNRESPONSE']._serialized_end=475
38
38
  _globals['_STREAMLOGSREQUEST']._serialized_start=477
39
- _globals['_STREAMLOGSREQUEST']._serialized_end=512
40
- _globals['_STREAMLOGSRESPONSE']._serialized_start=514
41
- _globals['_STREAMLOGSRESPONSE']._serialized_end=554
42
- _globals['_EXEC']._serialized_start=557
43
- _globals['_EXEC']._serialized_end=717
39
+ _globals['_STREAMLOGSREQUEST']._serialized_end=537
40
+ _globals['_STREAMLOGSRESPONSE']._serialized_start=539
41
+ _globals['_STREAMLOGSRESPONSE']._serialized_end=605
42
+ _globals['_EXEC']._serialized_start=608
43
+ _globals['_EXEC']._serialized_end=768
44
44
  # @@protoc_insertion_point(module_scope)
@@ -78,21 +78,27 @@ global___StartRunResponse = StartRunResponse
78
78
  class StreamLogsRequest(google.protobuf.message.Message):
79
79
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
80
80
  RUN_ID_FIELD_NUMBER: builtins.int
81
+ AFTER_TIMESTAMP_FIELD_NUMBER: builtins.int
81
82
  run_id: builtins.int
83
+ after_timestamp: builtins.float
82
84
  def __init__(self,
83
85
  *,
84
86
  run_id: builtins.int = ...,
87
+ after_timestamp: builtins.float = ...,
85
88
  ) -> None: ...
86
- def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
89
+ def ClearField(self, field_name: typing_extensions.Literal["after_timestamp",b"after_timestamp","run_id",b"run_id"]) -> None: ...
87
90
  global___StreamLogsRequest = StreamLogsRequest
88
91
 
89
92
  class StreamLogsResponse(google.protobuf.message.Message):
90
93
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
91
94
  LOG_OUTPUT_FIELD_NUMBER: builtins.int
95
+ LATEST_TIMESTAMP_FIELD_NUMBER: builtins.int
92
96
  log_output: typing.Text
97
+ latest_timestamp: builtins.float
93
98
  def __init__(self,
94
99
  *,
95
100
  log_output: typing.Text = ...,
101
+ latest_timestamp: builtins.float = ...,
96
102
  ) -> None: ...
97
- def ClearField(self, field_name: typing_extensions.Literal["log_output",b"log_output"]) -> None: ...
103
+ def ClearField(self, field_name: typing_extensions.Literal["latest_timestamp",b"latest_timestamp","log_output",b"log_output"]) -> None: ...
98
104
  global___StreamLogsResponse = StreamLogsResponse
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/log.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
+
17
+
18
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x14\x66lwr/proto/log.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\"O\n\x0fPushLogsRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12\x0c\n\x04logs\x18\x03 \x03(\t\"\x12\n\x10PushLogsResponseb\x06proto3')
19
+
20
+ _globals = globals()
21
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.log_pb2', _globals)
23
+ if _descriptor._USE_C_DESCRIPTORS == False:
24
+ DESCRIPTOR._options = None
25
+ _globals['_PUSHLOGSREQUEST']._serialized_start=59
26
+ _globals['_PUSHLOGSREQUEST']._serialized_end=138
27
+ _globals['_PUSHLOGSRESPONSE']._serialized_start=140
28
+ _globals['_PUSHLOGSRESPONSE']._serialized_end=158
29
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,39 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import flwr.proto.node_pb2
7
+ import google.protobuf.descriptor
8
+ import google.protobuf.internal.containers
9
+ import google.protobuf.message
10
+ import typing
11
+ import typing_extensions
12
+
13
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
14
+
15
+ class PushLogsRequest(google.protobuf.message.Message):
16
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
17
+ NODE_FIELD_NUMBER: builtins.int
18
+ RUN_ID_FIELD_NUMBER: builtins.int
19
+ LOGS_FIELD_NUMBER: builtins.int
20
+ @property
21
+ def node(self) -> flwr.proto.node_pb2.Node: ...
22
+ run_id: builtins.int
23
+ @property
24
+ def logs(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
25
+ def __init__(self,
26
+ *,
27
+ node: typing.Optional[flwr.proto.node_pb2.Node] = ...,
28
+ run_id: builtins.int = ...,
29
+ logs: typing.Optional[typing.Iterable[typing.Text]] = ...,
30
+ ) -> None: ...
31
+ def HasField(self, field_name: typing_extensions.Literal["node",b"node"]) -> builtins.bool: ...
32
+ def ClearField(self, field_name: typing_extensions.Literal["logs",b"logs","node",b"node","run_id",b"run_id"]) -> None: ...
33
+ global___PushLogsRequest = PushLogsRequest
34
+
35
+ class PushLogsResponse(google.protobuf.message.Message):
36
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
37
+ def __init__(self,
38
+ ) -> None: ...
39
+ global___PushLogsResponse = PushLogsResponse
@@ -0,0 +1,4 @@
1
+ # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
+ """Client and server classes corresponding to protobuf-defined services."""
3
+ import grpc
4
+