flwr-nightly 1.13.0.dev20241021__tar.gz → 1.13.0.dev20241106__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.dev20241021 → flwr_nightly-1.13.0.dev20241106}/PKG-INFO +1 -1
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/pyproject.toml +4 -3
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/build.py +2 -2
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/config_utils.py +97 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/log.py +63 -97
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/run/run.py +18 -83
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/app.py +13 -14
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/clientapp/app.py +1 -2
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/client/node_state.py → flwr_nightly-1.13.0.dev20241106/src/py/flwr/client/run_info_store.py +4 -3
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/supernode/app.py +6 -8
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/constant.py +39 -4
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/context.py +9 -4
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/date.py +3 -3
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/logger.py +103 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/serde.py +24 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/telemetry.py +0 -6
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/typing.py +9 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/exec_pb2.py +6 -6
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/exec_pb2.pyi +8 -2
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/log_pb2.py +29 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/log_pb2.pyi +39 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/message_pb2.py +8 -8
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/message_pb2.pyi +4 -1
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/serverappio_pb2.py +52 -0
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2.pyi → flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/serverappio_pb2.pyi +54 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/serverappio_pb2_grpc.py +376 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/serverappio_pb2_grpc.pyi +147 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/simulationio_pb2.py +38 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/simulationio_pb2.pyi +65 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/simulationio_pb2_grpc.py +171 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/simulationio_pb2_grpc.pyi +68 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/task_pb2_grpc.py +4 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/task_pb2_grpc.pyi +4 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/app.py +247 -105
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/driver/driver.py +15 -1
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/driver/grpc_driver.py +26 -33
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/driver/inmemory_driver.py +6 -14
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/run_serverapp.py +29 -23
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/serverapp/__init__.py +22 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/serverapp/app.py +270 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedadam.py +11 -1
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/driver/__init__.py +1 -1
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/driver/driver_grpc.py → flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/driver/serverappio_grpc.py +19 -16
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/driver/driver_servicer.py → flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/driver/serverappio_servicer.py +125 -39
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +4 -2
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +2 -2
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +4 -2
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -2
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +7 -7
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +7 -7
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +23 -23
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/linkstate/__init__.py +28 -0
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/in_memory_state.py → flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +180 -21
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/state.py → flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/linkstate/linkstate.py +144 -15
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/state_factory.py → flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +9 -9
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/sqlite_state.py → flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +300 -50
- {flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state → flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/linkstate}/utils.py +84 -2
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/simulation/__init__.py +15 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +65 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +132 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/simulation/__init__.py +2 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/simulation/app.py +1 -1
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +2 -2
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/simulation/run_simulation.py +57 -131
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/simulation/simulationio_connection.py +86 -0
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/superexec/app.py +58 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/superexec/deployment.py +60 -65
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/superexec/exec_grpc.py +15 -8
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/superexec/exec_servicer.py +34 -63
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/superexec/executor.py +22 -4
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/superexec/simulation.py +13 -8
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/client/node_state_tests.py +0 -66
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2.py +0 -42
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2_grpc.py +0 -239
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -94
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/server/superlink/state/__init__.py +0 -28
- flwr_nightly-1.13.0.dev20241021/src/py/flwr/superexec/app.py +0 -186
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/README.md +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/message_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/message_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/node_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/node_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/node_pb2.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/recordset_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/recordset_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/run_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/run_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/run_pb2.pyi +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/task_pb2_grpc.py → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- /flwr_nightly-1.13.0.dev20241021/src/py/flwr/proto/task_pb2_grpc.pyi → /flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/superexec/__init__.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.dev20241106"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -50,13 +50,14 @@ exclude = ["src/py/**/*_test.py"]
|
|
|
50
50
|
# `flwr` CLI
|
|
51
51
|
flwr = "flwr.cli.app:app"
|
|
52
52
|
# SuperExec (can run with either Deployment Engine or Simulation Engine)
|
|
53
|
-
flower-superexec = "flwr.superexec.app:run_superexec"
|
|
53
|
+
flower-superexec = "flwr.superexec.app:run_superexec" # Deprecated
|
|
54
54
|
# Simulation Engine
|
|
55
55
|
flower-simulation = "flwr.simulation.run_simulation:run_simulation_from_cli"
|
|
56
56
|
# Deployment Engine
|
|
57
57
|
flower-superlink = "flwr.server.app:run_superlink"
|
|
58
58
|
flower-supernode = "flwr.client.supernode.app:run_supernode"
|
|
59
|
-
|
|
59
|
+
flwr-serverapp = "flwr.server.serverapp:flwr_serverapp"
|
|
60
|
+
flower-server-app = "flwr.server.run_serverapp:run_server_app" # Deprecated
|
|
60
61
|
flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
|
|
61
62
|
flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
|
|
62
63
|
|
{flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/build.py
RENAMED
|
@@ -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
|
|
85
|
-
"and can only contain letters, digits, and
|
|
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
|
)
|
{flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/config_utils.py
RENAMED
|
@@ -20,6 +20,7 @@ from pathlib import Path
|
|
|
20
20
|
from typing import IO, Any, Optional, Union, get_args
|
|
21
21
|
|
|
22
22
|
import tomli
|
|
23
|
+
import typer
|
|
23
24
|
|
|
24
25
|
from flwr.common import object_ref
|
|
25
26
|
from flwr.common.typing import UserConfigValue
|
|
@@ -227,3 +228,99 @@ def load_from_string(toml_content: str) -> Optional[dict[str, Any]]:
|
|
|
227
228
|
return data
|
|
228
229
|
except tomli.TOMLDecodeError:
|
|
229
230
|
return None
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def validate_project_config(
|
|
234
|
+
config: Union[dict[str, Any], None], errors: list[str], warnings: list[str]
|
|
235
|
+
) -> dict[str, Any]:
|
|
236
|
+
"""Validate and return the Flower project configuration."""
|
|
237
|
+
if config is None:
|
|
238
|
+
typer.secho(
|
|
239
|
+
"Project configuration could not be loaded.\n"
|
|
240
|
+
"pyproject.toml is invalid:\n"
|
|
241
|
+
+ "\n".join([f"- {line}" for line in errors]),
|
|
242
|
+
fg=typer.colors.RED,
|
|
243
|
+
bold=True,
|
|
244
|
+
)
|
|
245
|
+
raise typer.Exit(code=1)
|
|
246
|
+
|
|
247
|
+
if warnings:
|
|
248
|
+
typer.secho(
|
|
249
|
+
"Project configuration is missing the following "
|
|
250
|
+
"recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
|
|
251
|
+
fg=typer.colors.RED,
|
|
252
|
+
bold=True,
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
typer.secho("Success", fg=typer.colors.GREEN)
|
|
256
|
+
|
|
257
|
+
return config
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
def validate_federation_in_project_config(
|
|
261
|
+
federation: Optional[str], config: dict[str, Any]
|
|
262
|
+
) -> tuple[str, dict[str, Any]]:
|
|
263
|
+
"""Validate the federation name in the Flower project configuration."""
|
|
264
|
+
federation = federation or config["tool"]["flwr"]["federations"].get("default")
|
|
265
|
+
|
|
266
|
+
if federation is None:
|
|
267
|
+
typer.secho(
|
|
268
|
+
"❌ No federation name was provided and the project's `pyproject.toml` "
|
|
269
|
+
"doesn't declare a default federation (with an Exec API address or an "
|
|
270
|
+
"`options.num-supernodes` value).",
|
|
271
|
+
fg=typer.colors.RED,
|
|
272
|
+
bold=True,
|
|
273
|
+
)
|
|
274
|
+
raise typer.Exit(code=1)
|
|
275
|
+
|
|
276
|
+
# Validate the federation exists in the configuration
|
|
277
|
+
federation_config = config["tool"]["flwr"]["federations"].get(federation)
|
|
278
|
+
if federation_config is None:
|
|
279
|
+
available_feds = {
|
|
280
|
+
fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
|
|
281
|
+
}
|
|
282
|
+
typer.secho(
|
|
283
|
+
f"❌ There is no `{federation}` federation declared in the "
|
|
284
|
+
"`pyproject.toml`.\n The following federations were found:\n\n"
|
|
285
|
+
+ "\n".join(available_feds),
|
|
286
|
+
fg=typer.colors.RED,
|
|
287
|
+
bold=True,
|
|
288
|
+
)
|
|
289
|
+
raise typer.Exit(code=1)
|
|
290
|
+
|
|
291
|
+
return federation, federation_config
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def validate_certificate_in_federation_config(
|
|
295
|
+
app: Path, federation_config: dict[str, Any]
|
|
296
|
+
) -> tuple[bool, Optional[bytes]]:
|
|
297
|
+
"""Validate the certificates in the Flower project configuration."""
|
|
298
|
+
insecure_str = federation_config.get("insecure")
|
|
299
|
+
if root_certificates := federation_config.get("root-certificates"):
|
|
300
|
+
root_certificates_bytes = (app / root_certificates).read_bytes()
|
|
301
|
+
if insecure := bool(insecure_str):
|
|
302
|
+
typer.secho(
|
|
303
|
+
"❌ `root_certificates` were provided but the `insecure` parameter "
|
|
304
|
+
"is set to `True`.",
|
|
305
|
+
fg=typer.colors.RED,
|
|
306
|
+
bold=True,
|
|
307
|
+
)
|
|
308
|
+
raise typer.Exit(code=1)
|
|
309
|
+
else:
|
|
310
|
+
root_certificates_bytes = None
|
|
311
|
+
if insecure_str is None:
|
|
312
|
+
typer.secho(
|
|
313
|
+
"❌ To disable TLS, set `insecure = true` in `pyproject.toml`.",
|
|
314
|
+
fg=typer.colors.RED,
|
|
315
|
+
bold=True,
|
|
316
|
+
)
|
|
317
|
+
raise typer.Exit(code=1)
|
|
318
|
+
if not (insecure := bool(insecure_str)):
|
|
319
|
+
typer.secho(
|
|
320
|
+
"❌ No certificate were given yet `insecure` is set to `False`.",
|
|
321
|
+
fg=typer.colors.RED,
|
|
322
|
+
bold=True,
|
|
323
|
+
)
|
|
324
|
+
raise typer.Exit(code=1)
|
|
325
|
+
|
|
326
|
+
return insecure, root_certificates_bytes
|
|
@@ -14,33 +14,38 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Flower command line interface `log` command."""
|
|
16
16
|
|
|
17
|
-
import sys
|
|
18
17
|
import time
|
|
19
18
|
from logging import DEBUG, ERROR, INFO
|
|
20
19
|
from pathlib import Path
|
|
21
|
-
from typing import Annotated, Optional
|
|
20
|
+
from typing import Annotated, Any, Optional, cast
|
|
22
21
|
|
|
23
22
|
import grpc
|
|
24
23
|
import typer
|
|
25
24
|
|
|
26
|
-
from flwr.cli.config_utils import
|
|
25
|
+
from flwr.cli.config_utils import (
|
|
26
|
+
load_and_validate,
|
|
27
|
+
validate_certificate_in_federation_config,
|
|
28
|
+
validate_federation_in_project_config,
|
|
29
|
+
validate_project_config,
|
|
30
|
+
)
|
|
31
|
+
from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
|
|
27
32
|
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
28
33
|
from flwr.common.logger import log as logger
|
|
29
34
|
from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
|
|
30
35
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
31
36
|
|
|
32
|
-
CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
|
|
33
|
-
|
|
34
37
|
|
|
35
38
|
def start_stream(
|
|
36
39
|
run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
|
|
37
40
|
) -> None:
|
|
38
41
|
"""Start log streaming for a given run ID."""
|
|
42
|
+
stub = ExecStub(channel)
|
|
43
|
+
after_timestamp = 0.0
|
|
39
44
|
try:
|
|
45
|
+
logger(INFO, "Starting logstream for run_id `%s`", run_id)
|
|
40
46
|
while True:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
time.sleep(2)
|
|
47
|
+
after_timestamp = stream_logs(run_id, stub, refresh_period, after_timestamp)
|
|
48
|
+
time.sleep(CONN_RECONNECT_INTERVAL)
|
|
44
49
|
logger(DEBUG, "Reconnecting to logstream")
|
|
45
50
|
except KeyboardInterrupt:
|
|
46
51
|
logger(INFO, "Exiting logstream")
|
|
@@ -54,16 +59,44 @@ def start_stream(
|
|
|
54
59
|
channel.close()
|
|
55
60
|
|
|
56
61
|
|
|
57
|
-
def stream_logs(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
def stream_logs(
|
|
63
|
+
run_id: int, stub: ExecStub, duration: int, after_timestamp: float
|
|
64
|
+
) -> float:
|
|
65
|
+
"""Stream logs from the beginning of a run with connection refresh.
|
|
66
|
+
|
|
67
|
+
Parameters
|
|
68
|
+
----------
|
|
69
|
+
run_id : int
|
|
70
|
+
The identifier of the run.
|
|
71
|
+
stub : ExecStub
|
|
72
|
+
The gRPC stub to interact with the Exec service.
|
|
73
|
+
duration : int
|
|
74
|
+
The timeout duration for each stream connection in seconds.
|
|
75
|
+
after_timestamp : float
|
|
76
|
+
The timestamp to start streaming logs from.
|
|
77
|
+
|
|
78
|
+
Returns
|
|
79
|
+
-------
|
|
80
|
+
float
|
|
81
|
+
The latest timestamp from the streamed logs or the provided `after_timestamp`
|
|
82
|
+
if no logs are returned.
|
|
83
|
+
"""
|
|
84
|
+
req = StreamLogsRequest(run_id=run_id, after_timestamp=after_timestamp)
|
|
85
|
+
|
|
86
|
+
latest_timestamp = 0.0
|
|
87
|
+
res = None
|
|
88
|
+
try:
|
|
89
|
+
for res in stub.StreamLogs(req, timeout=duration):
|
|
90
|
+
print(res.log_output, end="")
|
|
91
|
+
except grpc.RpcError as e:
|
|
92
|
+
# pylint: disable=E1101
|
|
93
|
+
if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
|
|
94
|
+
raise e
|
|
95
|
+
finally:
|
|
96
|
+
if res is not None:
|
|
97
|
+
latest_timestamp = cast(float, res.latest_timestamp)
|
|
62
98
|
|
|
63
|
-
|
|
64
|
-
print(res.log_output)
|
|
65
|
-
if time.time() - start_time > duration:
|
|
66
|
-
break
|
|
99
|
+
return max(latest_timestamp, after_timestamp)
|
|
67
100
|
|
|
68
101
|
|
|
69
102
|
def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
|
|
@@ -124,100 +157,33 @@ def log(
|
|
|
124
157
|
|
|
125
158
|
pyproject_path = app / "pyproject.toml" if app else None
|
|
126
159
|
config, errors, warnings = load_and_validate(path=pyproject_path)
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
"pyproject.toml is invalid:\n"
|
|
132
|
-
+ "\n".join([f"- {line}" for line in errors]),
|
|
133
|
-
fg=typer.colors.RED,
|
|
134
|
-
bold=True,
|
|
135
|
-
)
|
|
136
|
-
sys.exit()
|
|
137
|
-
|
|
138
|
-
if warnings:
|
|
139
|
-
typer.secho(
|
|
140
|
-
"Project configuration is missing the following "
|
|
141
|
-
"recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
|
|
142
|
-
fg=typer.colors.RED,
|
|
143
|
-
bold=True,
|
|
144
|
-
)
|
|
145
|
-
|
|
146
|
-
typer.secho("Success", fg=typer.colors.GREEN)
|
|
147
|
-
|
|
148
|
-
federation = federation or config["tool"]["flwr"]["federations"].get("default")
|
|
149
|
-
|
|
150
|
-
if federation is None:
|
|
151
|
-
typer.secho(
|
|
152
|
-
"❌ No federation name was provided and the project's `pyproject.toml` "
|
|
153
|
-
"doesn't declare a default federation (with a SuperExec address or an "
|
|
154
|
-
"`options.num-supernodes` value).",
|
|
155
|
-
fg=typer.colors.RED,
|
|
156
|
-
bold=True,
|
|
157
|
-
)
|
|
158
|
-
raise typer.Exit(code=1)
|
|
159
|
-
|
|
160
|
-
# Validate the federation exists in the configuration
|
|
161
|
-
federation_config = config["tool"]["flwr"]["federations"].get(federation)
|
|
162
|
-
if federation_config is None:
|
|
163
|
-
available_feds = {
|
|
164
|
-
fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
|
|
165
|
-
}
|
|
166
|
-
typer.secho(
|
|
167
|
-
f"❌ There is no `{federation}` federation declared in the "
|
|
168
|
-
"`pyproject.toml`.\n The following federations were found:\n\n"
|
|
169
|
-
+ "\n".join(available_feds),
|
|
170
|
-
fg=typer.colors.RED,
|
|
171
|
-
bold=True,
|
|
172
|
-
)
|
|
173
|
-
raise typer.Exit(code=1)
|
|
160
|
+
config = validate_project_config(config, errors, warnings)
|
|
161
|
+
federation, federation_config = validate_federation_in_project_config(
|
|
162
|
+
federation, config
|
|
163
|
+
)
|
|
174
164
|
|
|
175
165
|
if "address" not in federation_config:
|
|
176
166
|
typer.secho(
|
|
177
|
-
"❌ `flwr log` currently works with
|
|
178
|
-
"
|
|
167
|
+
"❌ `flwr log` currently works with Exec API. Ensure that the correct"
|
|
168
|
+
"Exec API address is provided in the `pyproject.toml`.",
|
|
179
169
|
fg=typer.colors.RED,
|
|
180
170
|
bold=True,
|
|
181
171
|
)
|
|
182
172
|
raise typer.Exit(code=1)
|
|
183
173
|
|
|
184
|
-
|
|
174
|
+
_log_with_exec_api(app, federation_config, run_id, stream)
|
|
185
175
|
|
|
186
176
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
federation_config: dict[str,
|
|
177
|
+
def _log_with_exec_api(
|
|
178
|
+
app: Path,
|
|
179
|
+
federation_config: dict[str, Any],
|
|
190
180
|
run_id: int,
|
|
191
181
|
stream: bool,
|
|
192
182
|
) -> None:
|
|
193
|
-
insecure_str = federation_config.get("insecure")
|
|
194
|
-
if root_certificates := federation_config.get("root-certificates"):
|
|
195
|
-
root_certificates_bytes = Path(root_certificates).read_bytes()
|
|
196
|
-
if insecure := bool(insecure_str):
|
|
197
|
-
typer.secho(
|
|
198
|
-
"❌ `root_certificates` were provided but the `insecure` parameter"
|
|
199
|
-
"is set to `True`.",
|
|
200
|
-
fg=typer.colors.RED,
|
|
201
|
-
bold=True,
|
|
202
|
-
)
|
|
203
|
-
raise typer.Exit(code=1)
|
|
204
|
-
else:
|
|
205
|
-
root_certificates_bytes = None
|
|
206
|
-
if insecure_str is None:
|
|
207
|
-
typer.secho(
|
|
208
|
-
"❌ To disable TLS, set `insecure = true` in `pyproject.toml`.",
|
|
209
|
-
fg=typer.colors.RED,
|
|
210
|
-
bold=True,
|
|
211
|
-
)
|
|
212
|
-
raise typer.Exit(code=1)
|
|
213
|
-
if not (insecure := bool(insecure_str)):
|
|
214
|
-
typer.secho(
|
|
215
|
-
"❌ No certificate were given yet `insecure` is set to `False`.",
|
|
216
|
-
fg=typer.colors.RED,
|
|
217
|
-
bold=True,
|
|
218
|
-
)
|
|
219
|
-
raise typer.Exit(code=1)
|
|
220
183
|
|
|
184
|
+
insecure, root_certificates_bytes = validate_certificate_in_federation_config(
|
|
185
|
+
app, federation_config
|
|
186
|
+
)
|
|
221
187
|
channel = create_channel(
|
|
222
188
|
server_address=federation_config["address"],
|
|
223
189
|
insecure=insecure,
|
|
@@ -71,7 +71,7 @@ def load_data(partition_id: int, num_partitions: int, dataset_name: str):
|
|
|
71
71
|
partitioners={"train": partitioner},
|
|
72
72
|
)
|
|
73
73
|
client_trainset = FDS.load_partition(partition_id, "train")
|
|
74
|
-
client_trainset = reformat(client_trainset, llm_task="
|
|
74
|
+
client_trainset = reformat(client_trainset, llm_task="$llm_challenge_str")
|
|
75
75
|
return client_trainset
|
|
76
76
|
|
|
77
77
|
|
{flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/cli/run/run.py
RENAMED
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
|
|
17
17
|
import json
|
|
18
18
|
import subprocess
|
|
19
|
-
import sys
|
|
20
19
|
from logging import DEBUG
|
|
21
20
|
from pathlib import Path
|
|
22
21
|
from typing import Annotated, Any, Optional
|
|
@@ -24,7 +23,12 @@ from typing import Annotated, Any, Optional
|
|
|
24
23
|
import typer
|
|
25
24
|
|
|
26
25
|
from flwr.cli.build import build
|
|
27
|
-
from flwr.cli.config_utils import
|
|
26
|
+
from flwr.cli.config_utils import (
|
|
27
|
+
load_and_validate,
|
|
28
|
+
validate_certificate_in_federation_config,
|
|
29
|
+
validate_federation_in_project_config,
|
|
30
|
+
validate_project_config,
|
|
31
|
+
)
|
|
28
32
|
from flwr.common.config import flatten_dict, parse_config_args
|
|
29
33
|
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
30
34
|
from flwr.common.logger import log
|
|
@@ -79,96 +83,27 @@ def run(
|
|
|
79
83
|
|
|
80
84
|
pyproject_path = app / "pyproject.toml" if app else None
|
|
81
85
|
config, errors, warnings = load_and_validate(path=pyproject_path)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"pyproject.toml is invalid:\n"
|
|
87
|
-
+ "\n".join([f"- {line}" for line in errors]),
|
|
88
|
-
fg=typer.colors.RED,
|
|
89
|
-
bold=True,
|
|
90
|
-
)
|
|
91
|
-
sys.exit()
|
|
92
|
-
|
|
93
|
-
if warnings:
|
|
94
|
-
typer.secho(
|
|
95
|
-
"Project configuration is missing the following "
|
|
96
|
-
"recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
|
|
97
|
-
fg=typer.colors.RED,
|
|
98
|
-
bold=True,
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
typer.secho("Success", fg=typer.colors.GREEN)
|
|
102
|
-
|
|
103
|
-
federation = federation or config["tool"]["flwr"]["federations"].get("default")
|
|
104
|
-
|
|
105
|
-
if federation is None:
|
|
106
|
-
typer.secho(
|
|
107
|
-
"❌ No federation name was provided and the project's `pyproject.toml` "
|
|
108
|
-
"doesn't declare a default federation (with a SuperExec address or an "
|
|
109
|
-
"`options.num-supernodes` value).",
|
|
110
|
-
fg=typer.colors.RED,
|
|
111
|
-
bold=True,
|
|
112
|
-
)
|
|
113
|
-
raise typer.Exit(code=1)
|
|
114
|
-
|
|
115
|
-
# Validate the federation exists in the configuration
|
|
116
|
-
federation_config = config["tool"]["flwr"]["federations"].get(federation)
|
|
117
|
-
if federation_config is None:
|
|
118
|
-
available_feds = {
|
|
119
|
-
fed for fed in config["tool"]["flwr"]["federations"] if fed != "default"
|
|
120
|
-
}
|
|
121
|
-
typer.secho(
|
|
122
|
-
f"❌ There is no `{federation}` federation declared in "
|
|
123
|
-
"`pyproject.toml`.\n The following federations were found:\n\n"
|
|
124
|
-
+ "\n".join(available_feds),
|
|
125
|
-
fg=typer.colors.RED,
|
|
126
|
-
bold=True,
|
|
127
|
-
)
|
|
128
|
-
raise typer.Exit(code=1)
|
|
86
|
+
config = validate_project_config(config, errors, warnings)
|
|
87
|
+
federation, federation_config = validate_federation_in_project_config(
|
|
88
|
+
federation, config
|
|
89
|
+
)
|
|
129
90
|
|
|
130
91
|
if "address" in federation_config:
|
|
131
|
-
|
|
92
|
+
_run_with_exec_api(app, federation_config, config_overrides, stream)
|
|
132
93
|
else:
|
|
133
|
-
|
|
94
|
+
_run_without_exec_api(app, federation_config, config_overrides, federation)
|
|
134
95
|
|
|
135
96
|
|
|
136
|
-
|
|
137
|
-
def _run_with_superexec(
|
|
97
|
+
def _run_with_exec_api(
|
|
138
98
|
app: Path,
|
|
139
99
|
federation_config: dict[str, Any],
|
|
140
100
|
config_overrides: Optional[list[str]],
|
|
141
101
|
stream: bool,
|
|
142
102
|
) -> None:
|
|
143
103
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if insecure := bool(insecure_str):
|
|
148
|
-
typer.secho(
|
|
149
|
-
"❌ `root_certificates` were provided but the `insecure` parameter"
|
|
150
|
-
"is set to `True`.",
|
|
151
|
-
fg=typer.colors.RED,
|
|
152
|
-
bold=True,
|
|
153
|
-
)
|
|
154
|
-
raise typer.Exit(code=1)
|
|
155
|
-
else:
|
|
156
|
-
root_certificates_bytes = None
|
|
157
|
-
if insecure_str is None:
|
|
158
|
-
typer.secho(
|
|
159
|
-
"❌ To disable TLS, set `insecure = true` in `pyproject.toml`.",
|
|
160
|
-
fg=typer.colors.RED,
|
|
161
|
-
bold=True,
|
|
162
|
-
)
|
|
163
|
-
raise typer.Exit(code=1)
|
|
164
|
-
if not (insecure := bool(insecure_str)):
|
|
165
|
-
typer.secho(
|
|
166
|
-
"❌ No certificate were given yet `insecure` is set to `False`.",
|
|
167
|
-
fg=typer.colors.RED,
|
|
168
|
-
bold=True,
|
|
169
|
-
)
|
|
170
|
-
raise typer.Exit(code=1)
|
|
171
|
-
|
|
104
|
+
insecure, root_certificates_bytes = validate_certificate_in_federation_config(
|
|
105
|
+
app, federation_config
|
|
106
|
+
)
|
|
172
107
|
channel = create_channel(
|
|
173
108
|
server_address=federation_config["address"],
|
|
174
109
|
insecure=insecure,
|
|
@@ -192,7 +127,7 @@ def _run_with_superexec(
|
|
|
192
127
|
)
|
|
193
128
|
res = stub.StartRun(req)
|
|
194
129
|
|
|
195
|
-
# Delete FAB file once it has been sent to the
|
|
130
|
+
# Delete FAB file once it has been sent to the Exec API
|
|
196
131
|
Path(fab_path).unlink()
|
|
197
132
|
typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
|
|
198
133
|
|
|
@@ -200,7 +135,7 @@ def _run_with_superexec(
|
|
|
200
135
|
start_stream(res.run_id, channel, CONN_REFRESH_PERIOD)
|
|
201
136
|
|
|
202
137
|
|
|
203
|
-
def
|
|
138
|
+
def _run_without_exec_api(
|
|
204
139
|
app: Optional[Path],
|
|
205
140
|
federation_config: dict[str, Any],
|
|
206
141
|
config_overrides: Optional[list[str]],
|
{flwr_nightly-1.13.0.dev20241021 → flwr_nightly-1.13.0.dev20241106}/src/py/flwr/client/app.py
RENAMED
|
@@ -37,6 +37,8 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, ev
|
|
|
37
37
|
from flwr.common.address import parse_address
|
|
38
38
|
from flwr.common.constant import (
|
|
39
39
|
CLIENTAPPIO_API_DEFAULT_ADDRESS,
|
|
40
|
+
ISOLATION_MODE_PROCESS,
|
|
41
|
+
ISOLATION_MODE_SUBPROCESS,
|
|
40
42
|
MISSING_EXTRA_REST,
|
|
41
43
|
RUN_ID_NUM_BYTES,
|
|
42
44
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
@@ -52,18 +54,15 @@ from flwr.common.retry_invoker import RetryInvoker, RetryState, exponential
|
|
|
52
54
|
from flwr.common.typing import Fab, Run, UserConfig
|
|
53
55
|
from flwr.proto.clientappio_pb2_grpc import add_ClientAppIoServicer_to_server
|
|
54
56
|
from flwr.server.superlink.fleet.grpc_bidi.grpc_server import generic_create_grpc_server
|
|
55
|
-
from flwr.server.superlink.
|
|
57
|
+
from flwr.server.superlink.linkstate.utils import generate_rand_int_from_bytes
|
|
56
58
|
|
|
57
59
|
from .clientapp.clientappio_servicer import ClientAppInputs, ClientAppIoServicer
|
|
58
60
|
from .grpc_adapter_client.connection import grpc_adapter
|
|
59
61
|
from .grpc_client.connection import grpc_connection
|
|
60
62
|
from .grpc_rere_client.connection import grpc_request_response
|
|
61
63
|
from .message_handler.message_handler import handle_control_message
|
|
62
|
-
from .node_state import NodeState
|
|
63
64
|
from .numpy_client import NumPyClient
|
|
64
|
-
|
|
65
|
-
ISOLATION_MODE_SUBPROCESS = "subprocess"
|
|
66
|
-
ISOLATION_MODE_PROCESS = "process"
|
|
65
|
+
from .run_info_store import DeprecatedRunInfoStore
|
|
67
66
|
|
|
68
67
|
|
|
69
68
|
def _check_actionable_client(
|
|
@@ -364,8 +363,8 @@ def start_client_internal(
|
|
|
364
363
|
on_backoff=_on_backoff,
|
|
365
364
|
)
|
|
366
365
|
|
|
367
|
-
#
|
|
368
|
-
|
|
366
|
+
# DeprecatedRunInfoStore gets initialized when the first connection is established
|
|
367
|
+
run_info_store: Optional[DeprecatedRunInfoStore] = None
|
|
369
368
|
|
|
370
369
|
runs: dict[int, Run] = {}
|
|
371
370
|
|
|
@@ -382,7 +381,7 @@ def start_client_internal(
|
|
|
382
381
|
receive, send, create_node, delete_node, get_run, get_fab = conn
|
|
383
382
|
|
|
384
383
|
# Register node when connecting the first time
|
|
385
|
-
if
|
|
384
|
+
if run_info_store is None:
|
|
386
385
|
if create_node is None:
|
|
387
386
|
if transport not in ["grpc-bidi", None]:
|
|
388
387
|
raise NotImplementedError(
|
|
@@ -391,7 +390,7 @@ def start_client_internal(
|
|
|
391
390
|
)
|
|
392
391
|
# gRPC-bidi doesn't have the concept of node_id,
|
|
393
392
|
# so we set it to -1
|
|
394
|
-
|
|
393
|
+
run_info_store = DeprecatedRunInfoStore(
|
|
395
394
|
node_id=-1,
|
|
396
395
|
node_config={},
|
|
397
396
|
)
|
|
@@ -402,7 +401,7 @@ def start_client_internal(
|
|
|
402
401
|
) # pylint: disable=not-callable
|
|
403
402
|
if node_id is None:
|
|
404
403
|
raise ValueError("Node registration failed")
|
|
405
|
-
|
|
404
|
+
run_info_store = DeprecatedRunInfoStore(
|
|
406
405
|
node_id=node_id,
|
|
407
406
|
node_config=node_config,
|
|
408
407
|
)
|
|
@@ -461,7 +460,7 @@ def start_client_internal(
|
|
|
461
460
|
run.fab_id, run.fab_version = fab_id, fab_version
|
|
462
461
|
|
|
463
462
|
# Register context for this run
|
|
464
|
-
|
|
463
|
+
run_info_store.register_context(
|
|
465
464
|
run_id=run_id,
|
|
466
465
|
run=run,
|
|
467
466
|
flwr_path=flwr_path,
|
|
@@ -469,7 +468,7 @@ def start_client_internal(
|
|
|
469
468
|
)
|
|
470
469
|
|
|
471
470
|
# Retrieve context for this run
|
|
472
|
-
context =
|
|
471
|
+
context = run_info_store.retrieve_context(run_id=run_id)
|
|
473
472
|
# Create an error reply message that will never be used to prevent
|
|
474
473
|
# the used-before-assignment linting error
|
|
475
474
|
reply_message = message.create_error_reply(
|
|
@@ -542,7 +541,7 @@ def start_client_internal(
|
|
|
542
541
|
# Raise exception, crash process
|
|
543
542
|
raise ex
|
|
544
543
|
|
|
545
|
-
# Don't update/change
|
|
544
|
+
# Don't update/change DeprecatedRunInfoStore
|
|
546
545
|
|
|
547
546
|
e_code = ErrorCode.CLIENT_APP_RAISED_EXCEPTION
|
|
548
547
|
# Ex fmt: "<class 'ZeroDivisionError'>:<'division by zero'>"
|
|
@@ -567,7 +566,7 @@ def start_client_internal(
|
|
|
567
566
|
)
|
|
568
567
|
else:
|
|
569
568
|
# No exception, update node state
|
|
570
|
-
|
|
569
|
+
run_info_store.update_context(
|
|
571
570
|
run_id=run_id,
|
|
572
571
|
context=context,
|
|
573
572
|
)
|
|
@@ -54,8 +54,6 @@ from .utils import get_load_client_app_fn
|
|
|
54
54
|
|
|
55
55
|
def flwr_clientapp() -> None:
|
|
56
56
|
"""Run process-isolated Flower ClientApp."""
|
|
57
|
-
log(INFO, "Starting Flower ClientApp")
|
|
58
|
-
|
|
59
57
|
parser = argparse.ArgumentParser(
|
|
60
58
|
description="Run a Flower ClientApp",
|
|
61
59
|
)
|
|
@@ -72,6 +70,7 @@ def flwr_clientapp() -> None:
|
|
|
72
70
|
)
|
|
73
71
|
args = parser.parse_args()
|
|
74
72
|
|
|
73
|
+
log(INFO, "Starting Flower ClientApp")
|
|
75
74
|
log(
|
|
76
75
|
DEBUG,
|
|
77
76
|
"Staring isolated `ClientApp` connected to SuperNode ClientAppIo at %s "
|