flwr-nightly 1.13.0.dev20241028__tar.gz → 1.13.0.dev20241029__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.
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/PKG-INFO +1 -1
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/pyproject.toml +1 -1
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/date.py +3 -3
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/logger.py +31 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/serde.py +22 -0
- flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/driver_pb2.py +52 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/driver_pb2_grpc.py +69 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/driver_pb2_grpc.pyi +27 -0
- flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/log_pb2.py +29 -0
- flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/log_pb2.pyi +39 -0
- flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/task_pb2_grpc.py +4 -0
- flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/task_pb2_grpc.pyi +4 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/driver/driver.py +14 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/driver/grpc_driver.py +8 -15
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/driver/inmemory_driver.py +3 -11
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/run_serverapp.py +3 -4
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/serverapp/app.py +119 -7
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/driver/driver_servicer.py +27 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +28 -2
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/linkstate/linkstate.py +35 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +50 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/simulation/run_simulation.py +2 -1
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/superexec/deployment.py +3 -37
- flwr_nightly-1.13.0.dev20241029/src/py/flwr/superexec/exec_servicer.py +79 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/superexec/executor.py +3 -4
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/superexec/simulation.py +4 -7
- flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/driver_pb2.py +0 -51
- flwr_nightly-1.13.0.dev20241028/src/py/flwr/superexec/exec_servicer.py +0 -146
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/README.md +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/message_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/message_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/message_pb2.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/node_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/node_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/node_pb2.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/recordset_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/recordset_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/run_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/run_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/run_pb2.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/task_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241028/src/py/flwr/proto/task_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241029/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/superexec/exec_grpc.py +0 -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.
|
|
7
|
+
version = "1.13.0.dev20241029"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
{flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/date.py
RENAMED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
"""Flower date utils."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
|
|
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)
|
{flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/logger.py
RENAMED
|
@@ -16,8 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
import logging
|
|
19
|
+
import sys
|
|
19
20
|
from logging import WARN, LogRecord
|
|
20
21
|
from logging.handlers import HTTPHandler
|
|
22
|
+
from queue import Queue
|
|
21
23
|
from typing import TYPE_CHECKING, Any, Optional, TextIO
|
|
22
24
|
|
|
23
25
|
# Create logger
|
|
@@ -259,3 +261,32 @@ def set_logger_propagation(
|
|
|
259
261
|
if not child_logger.propagate:
|
|
260
262
|
child_logger.log(logging.DEBUG, "Logger propagate set to False")
|
|
261
263
|
return child_logger
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def mirror_output_to_queue(log_queue: Queue[str]) -> None:
|
|
267
|
+
"""Mirror stdout and stderr output to the provided queue."""
|
|
268
|
+
|
|
269
|
+
def get_write_fn(stream: TextIO) -> Any:
|
|
270
|
+
original_write = stream.write
|
|
271
|
+
|
|
272
|
+
def fn(s: str) -> int:
|
|
273
|
+
ret = original_write(s)
|
|
274
|
+
stream.flush()
|
|
275
|
+
log_queue.put(s)
|
|
276
|
+
return ret
|
|
277
|
+
|
|
278
|
+
return fn
|
|
279
|
+
|
|
280
|
+
sys.stdout.write = get_write_fn(sys.stdout) # type: ignore[method-assign]
|
|
281
|
+
sys.stderr.write = get_write_fn(sys.stderr) # type: ignore[method-assign]
|
|
282
|
+
console_handler.stream = sys.stdout
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
def restore_output() -> None:
|
|
286
|
+
"""Restore stdout and stderr.
|
|
287
|
+
|
|
288
|
+
This will stop mirroring output to queues.
|
|
289
|
+
"""
|
|
290
|
+
sys.stdout = sys.__stdout__
|
|
291
|
+
sys.stderr = sys.__stderr__
|
|
292
|
+
console_handler.stream = sys.stdout
|
{flwr_nightly-1.13.0.dev20241028 → flwr_nightly-1.13.0.dev20241029}/src/py/flwr/common/serde.py
RENAMED
|
@@ -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\",\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\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=555
|
|
44
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_start=557
|
|
45
|
+
_globals['_PULLSERVERAPPINPUTSRESPONSE']._serialized_end=684
|
|
46
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_start=686
|
|
47
|
+
_globals['_PUSHSERVERAPPOUTPUTSREQUEST']._serialized_end=769
|
|
48
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_start=771
|
|
49
|
+
_globals['_PUSHSERVERAPPOUTPUTSRESPONSE']._serialized_end=801
|
|
50
|
+
_globals['_DRIVER']._serialized_start=804
|
|
51
|
+
_globals['_DRIVER']._serialized_end=1641
|
|
52
|
+
# @@protoc_insertion_point(module_scope)
|
|
@@ -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: ...
|
|
@@ -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
|
|
@@ -26,6 +26,20 @@ from flwr.common.typing import Run
|
|
|
26
26
|
class Driver(ABC):
|
|
27
27
|
"""Abstract base Driver class for the Driver API."""
|
|
28
28
|
|
|
29
|
+
@abstractmethod
|
|
30
|
+
def init_run(self, run_id: int) -> None:
|
|
31
|
+
"""Request a run to the SuperLink with a given `run_id`.
|
|
32
|
+
|
|
33
|
+
If a Run with the specified `run_id` exists, a local Run
|
|
34
|
+
object will be created. It enables further functionality
|
|
35
|
+
in the driver, such as sending `Messages`.
|
|
36
|
+
|
|
37
|
+
Parameters
|
|
38
|
+
----------
|
|
39
|
+
run_id : int
|
|
40
|
+
The `run_id` of the Run this Driver object operates in.
|
|
41
|
+
"""
|
|
42
|
+
|
|
29
43
|
@property
|
|
30
44
|
@abstractmethod
|
|
31
45
|
def run(self) -> Run:
|
|
@@ -60,8 +60,6 @@ class GrpcDriver(Driver):
|
|
|
60
60
|
|
|
61
61
|
Parameters
|
|
62
62
|
----------
|
|
63
|
-
run_id : int
|
|
64
|
-
The identifier of the run.
|
|
65
63
|
driver_service_address : str (default: "[::]:9091")
|
|
66
64
|
The address (URL, IPv6, IPv4) of the SuperLink Driver API service.
|
|
67
65
|
root_certificates : Optional[bytes] (default: None)
|
|
@@ -72,11 +70,9 @@ class GrpcDriver(Driver):
|
|
|
72
70
|
|
|
73
71
|
def __init__( # pylint: disable=too-many-arguments
|
|
74
72
|
self,
|
|
75
|
-
run_id: int,
|
|
76
73
|
driver_service_address: str = DRIVER_API_DEFAULT_ADDRESS,
|
|
77
74
|
root_certificates: Optional[bytes] = None,
|
|
78
75
|
) -> None:
|
|
79
|
-
self._run_id = run_id
|
|
80
76
|
self._addr = driver_service_address
|
|
81
77
|
self._cert = root_certificates
|
|
82
78
|
self._run: Optional[Run] = None
|
|
@@ -116,15 +112,17 @@ class GrpcDriver(Driver):
|
|
|
116
112
|
channel.close()
|
|
117
113
|
log(DEBUG, "[Driver] Disconnected")
|
|
118
114
|
|
|
119
|
-
def
|
|
115
|
+
def init_run(self, run_id: int) -> None:
|
|
116
|
+
"""Initialize the run."""
|
|
120
117
|
# Check if is initialized
|
|
121
118
|
if self._run is not None:
|
|
122
119
|
return
|
|
120
|
+
|
|
123
121
|
# Get the run info
|
|
124
|
-
req = GetRunRequest(run_id=
|
|
122
|
+
req = GetRunRequest(run_id=run_id)
|
|
125
123
|
res: GetRunResponse = self._stub.GetRun(req)
|
|
126
124
|
if not res.HasField("run"):
|
|
127
|
-
raise RuntimeError(f"Cannot find the run with ID: {
|
|
125
|
+
raise RuntimeError(f"Cannot find the run with ID: {run_id}")
|
|
128
126
|
self._run = Run(
|
|
129
127
|
run_id=res.run.run_id,
|
|
130
128
|
fab_id=res.run.fab_id,
|
|
@@ -136,7 +134,6 @@ class GrpcDriver(Driver):
|
|
|
136
134
|
@property
|
|
137
135
|
def run(self) -> Run:
|
|
138
136
|
"""Run information."""
|
|
139
|
-
self._init_run()
|
|
140
137
|
return Run(**vars(self._run))
|
|
141
138
|
|
|
142
139
|
@property
|
|
@@ -150,7 +147,7 @@ class GrpcDriver(Driver):
|
|
|
150
147
|
# Check if the message is valid
|
|
151
148
|
if not (
|
|
152
149
|
# Assume self._run being initialized
|
|
153
|
-
message.metadata.run_id == self.
|
|
150
|
+
message.metadata.run_id == cast(Run, self._run).run_id
|
|
154
151
|
and message.metadata.src_node_id == self.node.node_id
|
|
155
152
|
and message.metadata.message_id == ""
|
|
156
153
|
and message.metadata.reply_to_message == ""
|
|
@@ -171,7 +168,6 @@ class GrpcDriver(Driver):
|
|
|
171
168
|
This method constructs a new `Message` with given content and metadata.
|
|
172
169
|
The `run_id` and `src_node_id` will be set automatically.
|
|
173
170
|
"""
|
|
174
|
-
self._init_run()
|
|
175
171
|
if ttl:
|
|
176
172
|
warnings.warn(
|
|
177
173
|
"A custom TTL was set, but note that the SuperLink does not enforce "
|
|
@@ -182,7 +178,7 @@ class GrpcDriver(Driver):
|
|
|
182
178
|
|
|
183
179
|
ttl_ = DEFAULT_TTL if ttl is None else ttl
|
|
184
180
|
metadata = Metadata(
|
|
185
|
-
run_id=self.
|
|
181
|
+
run_id=cast(Run, self._run).run_id,
|
|
186
182
|
message_id="", # Will be set by the server
|
|
187
183
|
src_node_id=self.node.node_id,
|
|
188
184
|
dst_node_id=dst_node_id,
|
|
@@ -195,10 +191,9 @@ class GrpcDriver(Driver):
|
|
|
195
191
|
|
|
196
192
|
def get_node_ids(self) -> list[int]:
|
|
197
193
|
"""Get node IDs."""
|
|
198
|
-
self._init_run()
|
|
199
194
|
# Call GrpcDriverStub method
|
|
200
195
|
res: GetNodesResponse = self._stub.GetNodes(
|
|
201
|
-
GetNodesRequest(run_id=self.
|
|
196
|
+
GetNodesRequest(run_id=cast(Run, self._run).run_id)
|
|
202
197
|
)
|
|
203
198
|
return [node.node_id for node in res.nodes]
|
|
204
199
|
|
|
@@ -208,7 +203,6 @@ class GrpcDriver(Driver):
|
|
|
208
203
|
This method takes an iterable of messages and sends each message
|
|
209
204
|
to the node specified in `dst_node_id`.
|
|
210
205
|
"""
|
|
211
|
-
self._init_run()
|
|
212
206
|
# Construct TaskIns
|
|
213
207
|
task_ins_list: list[TaskIns] = []
|
|
214
208
|
for msg in messages:
|
|
@@ -230,7 +224,6 @@ class GrpcDriver(Driver):
|
|
|
230
224
|
This method is used to collect messages from the SuperLink that correspond to a
|
|
231
225
|
set of given message IDs.
|
|
232
226
|
"""
|
|
233
|
-
self._init_run()
|
|
234
227
|
# Pull TaskRes
|
|
235
228
|
res: PullTaskResResponse = self._stub.PullTaskRes(
|
|
236
229
|
PullTaskResRequest(node=self.node, task_ids=message_ids)
|
|
@@ -35,8 +35,6 @@ class InMemoryDriver(Driver):
|
|
|
35
35
|
|
|
36
36
|
Parameters
|
|
37
37
|
----------
|
|
38
|
-
run_id : int
|
|
39
|
-
The identifier of the run.
|
|
40
38
|
state_factory : StateFactory
|
|
41
39
|
A StateFactory embedding a state that this driver can interface with.
|
|
42
40
|
pull_interval : float (default=0.1)
|
|
@@ -45,18 +43,15 @@ class InMemoryDriver(Driver):
|
|
|
45
43
|
|
|
46
44
|
def __init__(
|
|
47
45
|
self,
|
|
48
|
-
run_id: int,
|
|
49
46
|
state_factory: LinkStateFactory,
|
|
50
47
|
pull_interval: float = 0.1,
|
|
51
48
|
) -> None:
|
|
52
|
-
self._run_id = run_id
|
|
53
49
|
self._run: Optional[Run] = None
|
|
54
50
|
self.state = state_factory.state()
|
|
55
51
|
self.pull_interval = pull_interval
|
|
56
52
|
self.node = Node(node_id=0, anonymous=True)
|
|
57
53
|
|
|
58
54
|
def _check_message(self, message: Message) -> None:
|
|
59
|
-
self._init_run()
|
|
60
55
|
# Check if the message is valid
|
|
61
56
|
if not (
|
|
62
57
|
message.metadata.run_id == cast(Run, self._run).run_id
|
|
@@ -67,19 +62,18 @@ class InMemoryDriver(Driver):
|
|
|
67
62
|
):
|
|
68
63
|
raise ValueError(f"Invalid message: {message}")
|
|
69
64
|
|
|
70
|
-
def
|
|
65
|
+
def init_run(self, run_id: int) -> None:
|
|
71
66
|
"""Initialize the run."""
|
|
72
67
|
if self._run is not None:
|
|
73
68
|
return
|
|
74
|
-
run = self.state.get_run(
|
|
69
|
+
run = self.state.get_run(run_id)
|
|
75
70
|
if run is None:
|
|
76
|
-
raise RuntimeError(f"Cannot find the run with ID: {
|
|
71
|
+
raise RuntimeError(f"Cannot find the run with ID: {run_id}")
|
|
77
72
|
self._run = run
|
|
78
73
|
|
|
79
74
|
@property
|
|
80
75
|
def run(self) -> Run:
|
|
81
76
|
"""Run ID."""
|
|
82
|
-
self._init_run()
|
|
83
77
|
return Run(**vars(cast(Run, self._run)))
|
|
84
78
|
|
|
85
79
|
def create_message( # pylint: disable=too-many-arguments,R0917
|
|
@@ -95,7 +89,6 @@ class InMemoryDriver(Driver):
|
|
|
95
89
|
This method constructs a new `Message` with given content and metadata.
|
|
96
90
|
The `run_id` and `src_node_id` will be set automatically.
|
|
97
91
|
"""
|
|
98
|
-
self._init_run()
|
|
99
92
|
if ttl:
|
|
100
93
|
warnings.warn(
|
|
101
94
|
"A custom TTL was set, but note that the SuperLink does not enforce "
|
|
@@ -119,7 +112,6 @@ class InMemoryDriver(Driver):
|
|
|
119
112
|
|
|
120
113
|
def get_node_ids(self) -> list[int]:
|
|
121
114
|
"""Get node IDs."""
|
|
122
|
-
self._init_run()
|
|
123
115
|
return list(self.state.get_nodes(cast(Run, self._run).run_id))
|
|
124
116
|
|
|
125
117
|
def push_messages(self, messages: Iterable[Message]) -> Iterable[str]:
|
|
@@ -171,11 +171,11 @@ def run_server_app() -> None:
|
|
|
171
171
|
if app_path is None:
|
|
172
172
|
# User provided `--run-id`, but not `app_dir`
|
|
173
173
|
driver = GrpcDriver(
|
|
174
|
-
run_id=args.run_id,
|
|
175
174
|
driver_service_address=args.superlink,
|
|
176
175
|
root_certificates=root_certificates,
|
|
177
176
|
)
|
|
178
177
|
flwr_dir = get_flwr_dir(args.flwr_dir)
|
|
178
|
+
driver.init_run(args.run_id)
|
|
179
179
|
run_ = driver.run
|
|
180
180
|
if not run_.fab_hash:
|
|
181
181
|
raise ValueError("FAB hash not provided.")
|
|
@@ -193,7 +193,6 @@ def run_server_app() -> None:
|
|
|
193
193
|
# User provided `app_dir`, but not `--run-id`
|
|
194
194
|
# Create run if run_id is not provided
|
|
195
195
|
driver = GrpcDriver(
|
|
196
|
-
run_id=0, # Will be overwritten
|
|
197
196
|
driver_service_address=args.superlink,
|
|
198
197
|
root_certificates=root_certificates,
|
|
199
198
|
)
|
|
@@ -204,8 +203,8 @@ def run_server_app() -> None:
|
|
|
204
203
|
# Create run
|
|
205
204
|
req = CreateRunRequest(fab_id=fab_id, fab_version=fab_version)
|
|
206
205
|
res: CreateRunResponse = driver._stub.CreateRun(req) # pylint: disable=W0212
|
|
207
|
-
#
|
|
208
|
-
driver.
|
|
206
|
+
# Fetch full `Run` using `run_id`
|
|
207
|
+
driver.init_run(res.run_id) # pylint: disable=W0212
|
|
209
208
|
|
|
210
209
|
# Obtain server app reference and the run config
|
|
211
210
|
server_app_attr = config["tool"]["flwr"]["app"]["components"]["serverapp"]
|