flwr-nightly 1.23.0.dev20251024__tar.gz → 1.23.0.dev20251028__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.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/PKG-INFO +1 -1
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/build.py +118 -47
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/run/run.py +8 -4
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/constant.py +11 -1
- flwr_nightly-1.23.0.dev20251028/py/flwr/proto/control_pb2.py +79 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/control_pb2.pyi +4 -1
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +3 -1
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +9 -5
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +29 -19
- flwr_nightly-1.23.0.dev20251028/py/flwr/supercore/primitives/asymmetric_ed25519.py +165 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_servicer.py +1 -1
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/pyproject.toml +1 -1
- flwr_nightly-1.23.0.dev20251024/py/flwr/proto/control_pb2.py +0 -79
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/README.md +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/exception.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/login/login.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/ls.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/pull.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/stop.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/ls.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/register.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/supernode/unregister.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/client_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/mod/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/clientapp/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/exit_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/exit/signal_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/heartbeat.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/arraychunk.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/exception.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/bulyan.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedadam.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedopt.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedprox.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/krum.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/multikrum.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/result.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/strategy.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/app_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/cli/flower_superexec.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/corestate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/corestate/corestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/grpc_health/health_server.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/object_store/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/primitives/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/primitives/asymmetric.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/sqlite_mixin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/superexec/run_superexec.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/supernode/start_client_internal.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.23.0.
|
|
3
|
+
Version: 1.23.0.dev20251028
|
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
|
|
@@ -17,22 +17,25 @@
|
|
|
17
17
|
|
|
18
18
|
import hashlib
|
|
19
19
|
import zipfile
|
|
20
|
+
from collections.abc import Iterable
|
|
20
21
|
from io import BytesIO
|
|
21
22
|
from pathlib import Path
|
|
22
23
|
from typing import Annotated, Any, Optional, Union
|
|
23
24
|
|
|
24
25
|
import pathspec
|
|
26
|
+
import tomli
|
|
25
27
|
import tomli_w
|
|
26
28
|
import typer
|
|
27
29
|
|
|
28
30
|
from flwr.common.constant import (
|
|
29
|
-
|
|
31
|
+
FAB_CONFIG_FILE,
|
|
30
32
|
FAB_DATE,
|
|
33
|
+
FAB_EXCLUDE_PATTERNS,
|
|
31
34
|
FAB_HASH_TRUNCATION,
|
|
35
|
+
FAB_INCLUDE_PATTERNS,
|
|
32
36
|
FAB_MAX_SIZE,
|
|
33
37
|
)
|
|
34
38
|
|
|
35
|
-
from .config_utils import load as load_toml
|
|
36
39
|
from .config_utils import load_and_validate
|
|
37
40
|
from .utils import is_valid_project_name
|
|
38
41
|
|
|
@@ -112,7 +115,10 @@ def build(
|
|
|
112
115
|
)
|
|
113
116
|
|
|
114
117
|
# Build FAB
|
|
115
|
-
fab_bytes
|
|
118
|
+
fab_bytes = build_fab_from_disk(app)
|
|
119
|
+
|
|
120
|
+
# Calculate hash for filename
|
|
121
|
+
fab_hash = hashlib.sha256(fab_bytes).hexdigest()
|
|
116
122
|
|
|
117
123
|
# Get the name of the zip file
|
|
118
124
|
fab_filename = get_fab_filename(config, fab_hash)
|
|
@@ -125,11 +131,10 @@ def build(
|
|
|
125
131
|
)
|
|
126
132
|
|
|
127
133
|
|
|
128
|
-
def
|
|
129
|
-
"""Build a FAB
|
|
134
|
+
def build_fab_from_disk(app: Path) -> bytes:
|
|
135
|
+
"""Build a FAB from files on disk and return the FAB as bytes.
|
|
130
136
|
|
|
131
|
-
This function
|
|
132
|
-
bundles it into a FAB without performing additional validation.
|
|
137
|
+
This function reads files from disk and bundles them into a FAB.
|
|
133
138
|
|
|
134
139
|
Parameters
|
|
135
140
|
----------
|
|
@@ -138,18 +143,67 @@ def build_fab(app: Path) -> tuple[bytes, str, dict[str, Any]]:
|
|
|
138
143
|
|
|
139
144
|
Returns
|
|
140
145
|
-------
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
- the FAB as bytes
|
|
144
|
-
- the SHA256 hash of the FAB
|
|
145
|
-
- the project configuration (with the 'federations' field removed)
|
|
146
|
+
bytes
|
|
147
|
+
The FAB as bytes.
|
|
146
148
|
"""
|
|
147
149
|
app = app.resolve()
|
|
148
150
|
|
|
149
|
-
#
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
# Collect all files recursively (including pyproject.toml and .gitignore)
|
|
152
|
+
all_files = [f for f in app.rglob("*") if f.is_file()]
|
|
153
|
+
|
|
154
|
+
# Create dict mapping relative paths to Path objects
|
|
155
|
+
files_dict: dict[str, Union[bytes, Path]] = {
|
|
156
|
+
# Ensure consistent path separators across platforms
|
|
157
|
+
str(file_path.relative_to(app)).replace("\\", "/"): file_path
|
|
158
|
+
for file_path in all_files
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
# Build FAB from the files dict
|
|
162
|
+
return build_fab_from_files(files_dict)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def build_fab_from_files(files: dict[str, Union[bytes, Path]]) -> bytes:
|
|
166
|
+
r"""Build a FAB from in-memory files and return the FAB as bytes.
|
|
167
|
+
|
|
168
|
+
This is the core FAB building function that works with in-memory data.
|
|
169
|
+
It accepts either bytes or Path objects as file contents, applies filtering
|
|
170
|
+
rules (include/exclude patterns), and builds the FAB.
|
|
171
|
+
|
|
172
|
+
Parameters
|
|
173
|
+
----------
|
|
174
|
+
files : dict[str, Union[bytes, Path]]
|
|
175
|
+
Dictionary mapping relative file paths to their contents.
|
|
176
|
+
- Keys: Relative paths (strings)
|
|
177
|
+
- Values: Either bytes (file contents) or Path (will be read)
|
|
178
|
+
Must include "pyproject.toml" and optionally ".gitignore".
|
|
179
|
+
|
|
180
|
+
Returns
|
|
181
|
+
-------
|
|
182
|
+
bytes
|
|
183
|
+
The FAB as bytes.
|
|
184
|
+
|
|
185
|
+
Examples
|
|
186
|
+
--------
|
|
187
|
+
Build a FAB from in-memory files::
|
|
188
|
+
|
|
189
|
+
files = {
|
|
190
|
+
"pyproject.toml": b"[project]\nname = 'myapp'\n...",
|
|
191
|
+
".gitignore": b"*.pyc\n__pycache__/\n",
|
|
192
|
+
"src/client.py": Path("/path/to/client.py"),
|
|
193
|
+
"src/server.py": b"print('hello')",
|
|
194
|
+
"README.md": b"# My App\n",
|
|
195
|
+
}
|
|
196
|
+
fab_bytes = build_fab_from_files(files)
|
|
197
|
+
"""
|
|
198
|
+
|
|
199
|
+
def to_bytes(content: Union[bytes, Path]) -> bytes:
|
|
200
|
+
return content.read_bytes() if isinstance(content, Path) else content
|
|
201
|
+
|
|
202
|
+
# Extract, load, and parse pyproject.toml
|
|
203
|
+
if FAB_CONFIG_FILE not in files:
|
|
204
|
+
raise ValueError(f"{FAB_CONFIG_FILE} not found in files")
|
|
205
|
+
pyproject_content = to_bytes(files[FAB_CONFIG_FILE])
|
|
206
|
+
config = tomli.loads(pyproject_content.decode("utf-8"))
|
|
153
207
|
|
|
154
208
|
# Remove the 'federations' field if it exists
|
|
155
209
|
if (
|
|
@@ -159,18 +213,22 @@ def build_fab(app: Path) -> tuple[bytes, str, dict[str, Any]]:
|
|
|
159
213
|
):
|
|
160
214
|
del config["tool"]["flwr"]["federations"]
|
|
161
215
|
|
|
162
|
-
#
|
|
163
|
-
|
|
216
|
+
# Extract and load .gitignore if present
|
|
217
|
+
gitignore_content = None
|
|
218
|
+
if ".gitignore" in files:
|
|
219
|
+
gitignore_content = to_bytes(files[".gitignore"])
|
|
220
|
+
|
|
221
|
+
# Get exclude and include specs
|
|
222
|
+
exclude_spec = get_fab_exclude_pathspec(gitignore_content)
|
|
223
|
+
include_spec = get_fab_include_pathspec()
|
|
164
224
|
|
|
165
|
-
#
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
for
|
|
169
|
-
if not
|
|
170
|
-
and f.suffix in FAB_ALLOWED_EXTENSIONS
|
|
171
|
-
and f.name != "pyproject.toml" # Exclude the original pyproject.toml
|
|
225
|
+
# Filter files based on include/exclude specs
|
|
226
|
+
filtered_paths = [
|
|
227
|
+
path.replace("\\", "/") # Ensure consistent path separators across platforms
|
|
228
|
+
for path in files.keys()
|
|
229
|
+
if include_spec.match_file(path) and not exclude_spec.match_file(path)
|
|
172
230
|
]
|
|
173
|
-
|
|
231
|
+
filtered_paths.sort() # Sort for deterministic output
|
|
174
232
|
|
|
175
233
|
# Create a zip file in memory
|
|
176
234
|
list_file_content = ""
|
|
@@ -178,41 +236,54 @@ def build_fab(app: Path) -> tuple[bytes, str, dict[str, Any]]:
|
|
|
178
236
|
fab_buffer = BytesIO()
|
|
179
237
|
with zipfile.ZipFile(fab_buffer, "w", zipfile.ZIP_DEFLATED) as fab_file:
|
|
180
238
|
# Add pyproject.toml
|
|
181
|
-
write_to_zip(fab_file,
|
|
239
|
+
write_to_zip(fab_file, FAB_CONFIG_FILE, tomli_w.dumps(config))
|
|
182
240
|
|
|
183
|
-
for file_path in
|
|
184
|
-
# Read the file content manually
|
|
185
|
-
file_contents = file_path.read_bytes()
|
|
241
|
+
for file_path in filtered_paths:
|
|
186
242
|
|
|
187
|
-
|
|
188
|
-
|
|
243
|
+
# Get file contents as bytes
|
|
244
|
+
file_content = to_bytes(files[file_path])
|
|
189
245
|
|
|
190
|
-
#
|
|
191
|
-
|
|
192
|
-
file_size_bits = len(file_contents) * 8 # size in bits
|
|
193
|
-
list_file_content += f"{archive_path},{sha256_hash},{file_size_bits}\n"
|
|
246
|
+
# Write file to FAB
|
|
247
|
+
write_to_zip(fab_file, file_path, file_content)
|
|
194
248
|
|
|
195
|
-
|
|
249
|
+
# Calculate file info for CONTENT manifest
|
|
250
|
+
sha256_hash = hashlib.sha256(file_content).hexdigest()
|
|
251
|
+
file_size_bits = len(file_content) * 8 # size in bits
|
|
252
|
+
list_file_content += f"{file_path},{sha256_hash},{file_size_bits}\n"
|
|
253
|
+
|
|
254
|
+
# Add CONTENT manifest to the zip file
|
|
196
255
|
write_to_zip(fab_file, ".info/CONTENT", list_file_content)
|
|
197
256
|
|
|
198
257
|
fab_bytes = fab_buffer.getvalue()
|
|
258
|
+
|
|
259
|
+
# Validate FAB size
|
|
199
260
|
if len(fab_bytes) > FAB_MAX_SIZE:
|
|
200
261
|
raise ValueError(
|
|
201
|
-
f"FAB size exceeds maximum allowed size of {FAB_MAX_SIZE:,} bytes."
|
|
262
|
+
f"FAB size exceeds maximum allowed size of {FAB_MAX_SIZE:,} bytes. "
|
|
202
263
|
"To reduce the package size, consider ignoring unnecessary files "
|
|
203
264
|
"via your `.gitignore` file or excluding them from the build."
|
|
204
265
|
)
|
|
205
266
|
|
|
206
|
-
|
|
267
|
+
return fab_bytes
|
|
207
268
|
|
|
208
|
-
return fab_bytes, fab_hash, config
|
|
209
269
|
|
|
270
|
+
def build_pathspec(patterns: Iterable[str]) -> pathspec.PathSpec:
|
|
271
|
+
"""Build a PathSpec from a list of patterns."""
|
|
272
|
+
return pathspec.PathSpec.from_lines("gitwildmatch", patterns)
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
def get_fab_include_pathspec() -> pathspec.PathSpec:
|
|
276
|
+
"""Get the PathSpec for files to include in a FAB."""
|
|
277
|
+
return build_pathspec(FAB_INCLUDE_PATTERNS)
|
|
210
278
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
279
|
+
|
|
280
|
+
def get_fab_exclude_pathspec(gitignore_content: Optional[bytes]) -> pathspec.PathSpec:
|
|
281
|
+
"""Get the PathSpec for files to exclude from a FAB.
|
|
282
|
+
|
|
283
|
+
If gitignore_content is provided, its patterns will be combined with the default
|
|
284
|
+
exclude patterns.
|
|
285
|
+
"""
|
|
286
|
+
patterns = list(FAB_EXCLUDE_PATTERNS)
|
|
287
|
+
if gitignore_content:
|
|
288
|
+
patterns += gitignore_content.decode("UTF-8").splitlines()
|
|
218
289
|
return pathspec.PathSpec.from_lines("gitwildmatch", patterns)
|
|
@@ -15,16 +15,18 @@
|
|
|
15
15
|
"""Flower command line interface `run` command."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
import hashlib
|
|
18
19
|
import io
|
|
19
20
|
import json
|
|
20
21
|
import subprocess
|
|
21
22
|
from pathlib import Path
|
|
22
|
-
from typing import Annotated, Any, Optional
|
|
23
|
+
from typing import Annotated, Any, Optional, cast
|
|
23
24
|
|
|
24
25
|
import typer
|
|
25
26
|
from rich.console import Console
|
|
26
27
|
|
|
27
|
-
from flwr.cli.build import
|
|
28
|
+
from flwr.cli.build import build_fab_from_disk, get_fab_filename
|
|
29
|
+
from flwr.cli.config_utils import load as load_toml
|
|
28
30
|
from flwr.cli.config_utils import (
|
|
29
31
|
load_and_validate,
|
|
30
32
|
process_loaded_project_config,
|
|
@@ -37,7 +39,7 @@ from flwr.common.config import (
|
|
|
37
39
|
parse_config_args,
|
|
38
40
|
user_config_to_configrecord,
|
|
39
41
|
)
|
|
40
|
-
from flwr.common.constant import CliOutputFormat
|
|
42
|
+
from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat
|
|
41
43
|
from flwr.common.logger import print_json_error, redirect_output, restore_output
|
|
42
44
|
from flwr.common.serde import config_record_to_proto, fab_to_proto, user_config_to_proto
|
|
43
45
|
from flwr.common.typing import Fab
|
|
@@ -152,7 +154,9 @@ def _run_with_control_api(
|
|
|
152
154
|
channel = init_channel(app, federation_config, auth_plugin)
|
|
153
155
|
stub = ControlStub(channel)
|
|
154
156
|
|
|
155
|
-
fab_bytes
|
|
157
|
+
fab_bytes = build_fab_from_disk(app)
|
|
158
|
+
fab_hash = hashlib.sha256(fab_bytes).hexdigest()
|
|
159
|
+
config = cast(dict[str, Any], load_toml(app / FAB_CONFIG_FILE))
|
|
156
160
|
fab_id, fab_version = get_metadata_from_config(config)
|
|
157
161
|
|
|
158
162
|
fab = Fab(fab_hash, fab_bytes, {})
|
{flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/common/constant.py
RENAMED
|
@@ -72,13 +72,23 @@ NODE_ID_NUM_BYTES = 8
|
|
|
72
72
|
|
|
73
73
|
# Constants for FAB
|
|
74
74
|
APP_DIR = "apps"
|
|
75
|
-
FAB_ALLOWED_EXTENSIONS = {".py", ".toml", ".md"}
|
|
76
75
|
FAB_CONFIG_FILE = "pyproject.toml"
|
|
77
76
|
FAB_DATE = (2024, 10, 1, 0, 0, 0)
|
|
78
77
|
FAB_HASH_TRUNCATION = 8
|
|
79
78
|
FAB_MAX_SIZE = 10 * 1024 * 1024 # 10 MB
|
|
80
79
|
FLWR_DIR = ".flwr" # The default Flower directory: ~/.flwr/
|
|
81
80
|
FLWR_HOME = "FLWR_HOME" # If set, override the default Flower directory
|
|
81
|
+
# FAB file include patterns (gitignore-style patterns)
|
|
82
|
+
FAB_INCLUDE_PATTERNS = (
|
|
83
|
+
"**/*.py",
|
|
84
|
+
"**/*.toml",
|
|
85
|
+
"**/*.md",
|
|
86
|
+
)
|
|
87
|
+
# FAB file exclude patterns (gitignore-style patterns)
|
|
88
|
+
FAB_EXCLUDE_PATTERNS = (
|
|
89
|
+
"**/__pycache__/**",
|
|
90
|
+
FAB_CONFIG_FILE, # Exclude the original pyproject.toml
|
|
91
|
+
)
|
|
82
92
|
|
|
83
93
|
# Constant for SuperLink
|
|
84
94
|
SUPERLINK_NODE_ID = 1
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/control.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.1
|
|
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 fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
16
|
+
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
17
|
+
from flwr.proto import recorddict_pb2 as flwr_dot_proto_dot_recorddict__pb2
|
|
18
|
+
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
19
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/control.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1b\x66lwr/proto/recorddict.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"\x8a\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12\x34\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x18.flwr.proto.ConfigRecord\x12\x0e\n\x06\x61pp_id\x18\x04 \x01(\t\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"2\n\x10StartRunResponse\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\"1\n\x0fListRunsRequest\x12\x13\n\x06run_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_run_id\"\x9d\x01\n\x10ListRunsResponse\x12;\n\x08run_dict\x18\x01 \x03(\x0b\x32).flwr.proto.ListRunsResponse.RunDictEntry\x12\x0b\n\x03now\x18\x02 \x01(\t\x1a?\n\x0cRunDictEntry\x12\x0b\n\x03key\x18\x01 \x01(\x04\x12\x1e\n\x05value\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run:\x02\x38\x01\"\x18\n\x16GetLoginDetailsRequest\"\x8b\x01\n\x17GetLoginDetailsResponse\x12\x12\n\nauthn_type\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65vice_code\x18\x02 \x01(\t\x12!\n\x19verification_uri_complete\x18\x03 \x01(\t\x12\x12\n\nexpires_in\x18\x04 \x01(\x03\x12\x10\n\x08interval\x18\x05 \x01(\x03\"+\n\x14GetAuthTokensRequest\x12\x13\n\x0b\x64\x65vice_code\x18\x01 \x01(\t\"D\n\x15GetAuthTokensResponse\x12\x14\n\x0c\x61\x63\x63\x65ss_token\x18\x01 \x01(\t\x12\x15\n\rrefresh_token\x18\x02 \x01(\t\" \n\x0eStopRunRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"\"\n\x0fStopRunResponse\x12\x0f\n\x07success\x18\x01 \x01(\x08\"&\n\x14PullArtifactsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"1\n\x15PullArtifactsResponse\x12\x10\n\x03url\x18\x01 \x01(\tH\x00\x88\x01\x01\x42\x06\n\x04_url\")\n\x13RegisterNodeRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\"8\n\x14RegisterNodeResponse\x12\x14\n\x07node_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_node_id\"(\n\x15UnregisterNodeRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x18\n\x16UnregisterNodeResponse\"\x12\n\x10ListNodesRequest\"J\n\x11ListNodesResponse\x12(\n\nnodes_info\x18\x01 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x0b\n\x03now\x18\x02 \x01(\t2\xbc\x06\n\x07\x43ontrol\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12\x44\n\x07StopRun\x12\x1a.flwr.proto.StopRunRequest\x1a\x1b.flwr.proto.StopRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x12G\n\x08ListRuns\x12\x1b.flwr.proto.ListRunsRequest\x1a\x1c.flwr.proto.ListRunsResponse\"\x00\x12\\\n\x0fGetLoginDetails\x12\".flwr.proto.GetLoginDetailsRequest\x1a#.flwr.proto.GetLoginDetailsResponse\"\x00\x12V\n\rGetAuthTokens\x12 .flwr.proto.GetAuthTokensRequest\x1a!.flwr.proto.GetAuthTokensResponse\"\x00\x12V\n\rPullArtifacts\x12 .flwr.proto.PullArtifactsRequest\x1a!.flwr.proto.PullArtifactsResponse\"\x00\x12S\n\x0cRegisterNode\x12\x1f.flwr.proto.RegisterNodeRequest\x1a .flwr.proto.RegisterNodeResponse\"\x00\x12Y\n\x0eUnregisterNode\x12!.flwr.proto.UnregisterNodeRequest\x1a\".flwr.proto.UnregisterNodeResponse\"\x00\x12J\n\tListNodes\x12\x1c.flwr.proto.ListNodesRequest\x1a\x1d.flwr.proto.ListNodesResponse\"\x00\x62\x06proto3')
|
|
23
|
+
|
|
24
|
+
_globals = globals()
|
|
25
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
26
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.control_pb2', _globals)
|
|
27
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
28
|
+
DESCRIPTOR._options = None
|
|
29
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._options = None
|
|
30
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
31
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._options = None
|
|
32
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_options = b'8\001'
|
|
33
|
+
_globals['_STARTRUNREQUEST']._serialized_start=165
|
|
34
|
+
_globals['_STARTRUNREQUEST']._serialized_end=431
|
|
35
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=358
|
|
36
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=431
|
|
37
|
+
_globals['_STARTRUNRESPONSE']._serialized_start=433
|
|
38
|
+
_globals['_STARTRUNRESPONSE']._serialized_end=483
|
|
39
|
+
_globals['_STREAMLOGSREQUEST']._serialized_start=485
|
|
40
|
+
_globals['_STREAMLOGSREQUEST']._serialized_end=545
|
|
41
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_start=547
|
|
42
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_end=613
|
|
43
|
+
_globals['_LISTRUNSREQUEST']._serialized_start=615
|
|
44
|
+
_globals['_LISTRUNSREQUEST']._serialized_end=664
|
|
45
|
+
_globals['_LISTRUNSRESPONSE']._serialized_start=667
|
|
46
|
+
_globals['_LISTRUNSRESPONSE']._serialized_end=824
|
|
47
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_start=761
|
|
48
|
+
_globals['_LISTRUNSRESPONSE_RUNDICTENTRY']._serialized_end=824
|
|
49
|
+
_globals['_GETLOGINDETAILSREQUEST']._serialized_start=826
|
|
50
|
+
_globals['_GETLOGINDETAILSREQUEST']._serialized_end=850
|
|
51
|
+
_globals['_GETLOGINDETAILSRESPONSE']._serialized_start=853
|
|
52
|
+
_globals['_GETLOGINDETAILSRESPONSE']._serialized_end=992
|
|
53
|
+
_globals['_GETAUTHTOKENSREQUEST']._serialized_start=994
|
|
54
|
+
_globals['_GETAUTHTOKENSREQUEST']._serialized_end=1037
|
|
55
|
+
_globals['_GETAUTHTOKENSRESPONSE']._serialized_start=1039
|
|
56
|
+
_globals['_GETAUTHTOKENSRESPONSE']._serialized_end=1107
|
|
57
|
+
_globals['_STOPRUNREQUEST']._serialized_start=1109
|
|
58
|
+
_globals['_STOPRUNREQUEST']._serialized_end=1141
|
|
59
|
+
_globals['_STOPRUNRESPONSE']._serialized_start=1143
|
|
60
|
+
_globals['_STOPRUNRESPONSE']._serialized_end=1177
|
|
61
|
+
_globals['_PULLARTIFACTSREQUEST']._serialized_start=1179
|
|
62
|
+
_globals['_PULLARTIFACTSREQUEST']._serialized_end=1217
|
|
63
|
+
_globals['_PULLARTIFACTSRESPONSE']._serialized_start=1219
|
|
64
|
+
_globals['_PULLARTIFACTSRESPONSE']._serialized_end=1268
|
|
65
|
+
_globals['_REGISTERNODEREQUEST']._serialized_start=1270
|
|
66
|
+
_globals['_REGISTERNODEREQUEST']._serialized_end=1311
|
|
67
|
+
_globals['_REGISTERNODERESPONSE']._serialized_start=1313
|
|
68
|
+
_globals['_REGISTERNODERESPONSE']._serialized_end=1369
|
|
69
|
+
_globals['_UNREGISTERNODEREQUEST']._serialized_start=1371
|
|
70
|
+
_globals['_UNREGISTERNODEREQUEST']._serialized_end=1411
|
|
71
|
+
_globals['_UNREGISTERNODERESPONSE']._serialized_start=1413
|
|
72
|
+
_globals['_UNREGISTERNODERESPONSE']._serialized_end=1437
|
|
73
|
+
_globals['_LISTNODESREQUEST']._serialized_start=1439
|
|
74
|
+
_globals['_LISTNODESREQUEST']._serialized_end=1457
|
|
75
|
+
_globals['_LISTNODESRESPONSE']._serialized_start=1459
|
|
76
|
+
_globals['_LISTNODESRESPONSE']._serialized_end=1533
|
|
77
|
+
_globals['_CONTROL']._serialized_start=1536
|
|
78
|
+
_globals['_CONTROL']._serialized_end=2364
|
|
79
|
+
# @@protoc_insertion_point(module_scope)
|
{flwr_nightly-1.23.0.dev20251024 → flwr_nightly-1.23.0.dev20251028}/py/flwr/proto/control_pb2.pyi
RENAMED
|
@@ -36,20 +36,23 @@ class StartRunRequest(google.protobuf.message.Message):
|
|
|
36
36
|
FAB_FIELD_NUMBER: builtins.int
|
|
37
37
|
OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
|
|
38
38
|
FEDERATION_OPTIONS_FIELD_NUMBER: builtins.int
|
|
39
|
+
APP_ID_FIELD_NUMBER: builtins.int
|
|
39
40
|
@property
|
|
40
41
|
def fab(self) -> flwr.proto.fab_pb2.Fab: ...
|
|
41
42
|
@property
|
|
42
43
|
def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
43
44
|
@property
|
|
44
45
|
def federation_options(self) -> flwr.proto.recorddict_pb2.ConfigRecord: ...
|
|
46
|
+
app_id: typing.Text
|
|
45
47
|
def __init__(self,
|
|
46
48
|
*,
|
|
47
49
|
fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
|
|
48
50
|
override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
49
51
|
federation_options: typing.Optional[flwr.proto.recorddict_pb2.ConfigRecord] = ...,
|
|
52
|
+
app_id: typing.Text = ...,
|
|
50
53
|
) -> None: ...
|
|
51
54
|
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options"]) -> builtins.bool: ...
|
|
52
|
-
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
|
|
55
|
+
def ClearField(self, field_name: typing_extensions.Literal["app_id",b"app_id","fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
|
|
53
56
|
global___StartRunRequest = StartRunRequest
|
|
54
57
|
|
|
55
58
|
class StartRunResponse(google.protobuf.message.Message):
|
|
@@ -130,11 +130,13 @@ class FleetServicer(fleet_pb2_grpc.FleetServicer):
|
|
|
130
130
|
request=request,
|
|
131
131
|
state=state,
|
|
132
132
|
)
|
|
133
|
+
log(
|
|
134
|
+
INFO, "[Fleet.CreateNode] Created node_id=%s", response.node.node_id
|
|
135
|
+
)
|
|
133
136
|
|
|
134
137
|
except ValueError as e:
|
|
135
138
|
# Public key already in use
|
|
136
139
|
context.abort(grpc.StatusCode.FAILED_PRECONDITION, str(e))
|
|
137
|
-
log(INFO, "[Fleet.CreateNode] Created node_id=%s", response.node.node_id)
|
|
138
140
|
log(DEBUG, "[Fleet.CreateNode] Response: %s", MessageToDict(response))
|
|
139
141
|
return response
|
|
140
142
|
|
|
@@ -411,10 +411,10 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
|
411
411
|
) -> Sequence[NodeInfo]:
|
|
412
412
|
"""Retrieve information about nodes based on the specified filters."""
|
|
413
413
|
with self.lock:
|
|
414
|
-
self.
|
|
414
|
+
self._check_and_tag_offline_nodes()
|
|
415
415
|
result = []
|
|
416
|
-
for
|
|
417
|
-
if
|
|
416
|
+
for node_id in self.nodes.keys() if node_ids is None else node_ids:
|
|
417
|
+
if (node := self.nodes.get(node_id)) is None:
|
|
418
418
|
continue
|
|
419
419
|
if owner_aids is not None and node.owner_aid not in owner_aids:
|
|
420
420
|
continue
|
|
@@ -423,11 +423,15 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
|
423
423
|
result.append(node)
|
|
424
424
|
return result
|
|
425
425
|
|
|
426
|
-
def
|
|
426
|
+
def _check_and_tag_offline_nodes(
|
|
427
|
+
self, node_ids: Optional[list[int]] = None
|
|
428
|
+
) -> None:
|
|
427
429
|
with self.lock:
|
|
428
430
|
# Set all nodes of "online" status to "offline" if they've offline
|
|
429
431
|
current_ts = now().timestamp()
|
|
430
|
-
for
|
|
432
|
+
for node_id in node_ids or self.nodes.keys():
|
|
433
|
+
if (node := self.nodes.get(node_id)) is None:
|
|
434
|
+
continue
|
|
431
435
|
if node.status == NodeStatus.ONLINE:
|
|
432
436
|
if node.online_until <= current_ts:
|
|
433
437
|
node.status = NodeStatus.OFFLINE
|
|
@@ -99,6 +99,10 @@ SQL_CREATE_INDEX_OWNER_AID = """
|
|
|
99
99
|
CREATE INDEX IF NOT EXISTS idx_node_owner_aid ON node(owner_aid);
|
|
100
100
|
"""
|
|
101
101
|
|
|
102
|
+
SQL_CREATE_INDEX_NODE_STATUS = """
|
|
103
|
+
CREATE INDEX IF NOT EXISTS idx_node_status ON node(status);
|
|
104
|
+
"""
|
|
105
|
+
|
|
102
106
|
SQL_CREATE_TABLE_RUN = """
|
|
103
107
|
CREATE TABLE IF NOT EXISTS run(
|
|
104
108
|
run_id INTEGER UNIQUE,
|
|
@@ -199,6 +203,7 @@ class SqliteLinkState(LinkState, SqliteMixin): # pylint: disable=R0904
|
|
|
199
203
|
SQL_CREATE_TABLE_TOKEN_STORE,
|
|
200
204
|
SQL_CREATE_INDEX_ONLINE_UNTIL,
|
|
201
205
|
SQL_CREATE_INDEX_OWNER_AID,
|
|
206
|
+
SQL_CREATE_INDEX_NODE_STATUS,
|
|
202
207
|
log_queries=log_queries,
|
|
203
208
|
)
|
|
204
209
|
|
|
@@ -638,6 +643,28 @@ class SqliteLinkState(LinkState, SqliteMixin): # pylint: disable=R0904
|
|
|
638
643
|
node.node_id for node in self.get_node_info(statuses=[NodeStatus.ONLINE])
|
|
639
644
|
}
|
|
640
645
|
|
|
646
|
+
def _check_and_tag_offline_nodes(
|
|
647
|
+
self, node_ids: Optional[list[int]] = None
|
|
648
|
+
) -> None:
|
|
649
|
+
"""Check and tag offline nodes."""
|
|
650
|
+
# strftime will convert POSIX timestamp to ISO format
|
|
651
|
+
query = """
|
|
652
|
+
UPDATE node SET status = ?,
|
|
653
|
+
last_deactivated_at =
|
|
654
|
+
strftime("%Y-%m-%dT%H:%M:%f+00:00", online_until, "unixepoch")
|
|
655
|
+
WHERE online_until <= ? AND status == ?
|
|
656
|
+
"""
|
|
657
|
+
params = [
|
|
658
|
+
NodeStatus.OFFLINE,
|
|
659
|
+
now().timestamp(),
|
|
660
|
+
NodeStatus.ONLINE,
|
|
661
|
+
]
|
|
662
|
+
if node_ids is not None:
|
|
663
|
+
placeholders = ",".join(["?"] * len(node_ids))
|
|
664
|
+
query += f" AND node_id IN ({placeholders})"
|
|
665
|
+
params.extend(uint64_to_int64(node_id) for node_id in node_ids)
|
|
666
|
+
self.conn.execute(query, params)
|
|
667
|
+
|
|
641
668
|
def get_node_info(
|
|
642
669
|
self,
|
|
643
670
|
*,
|
|
@@ -646,29 +673,12 @@ class SqliteLinkState(LinkState, SqliteMixin): # pylint: disable=R0904
|
|
|
646
673
|
statuses: Optional[Sequence[str]] = None,
|
|
647
674
|
) -> Sequence[NodeInfo]:
|
|
648
675
|
"""Retrieve information about nodes based on the specified filters."""
|
|
649
|
-
if self.conn is None:
|
|
650
|
-
raise AttributeError("LinkState is not initialized.")
|
|
651
|
-
|
|
652
676
|
with self.conn:
|
|
653
|
-
|
|
654
|
-
current_dt = now()
|
|
655
|
-
# strftime will convert POSIX timestamp to ISO format
|
|
656
|
-
query = """
|
|
657
|
-
UPDATE node SET status = ?,
|
|
658
|
-
last_deactivated_at =
|
|
659
|
-
strftime("%Y-%m-%dT%H:%M:%f+00:00", online_until, "unixepoch")
|
|
660
|
-
WHERE online_until <= ? AND status == ?
|
|
661
|
-
"""
|
|
662
|
-
params: list[Any] = [
|
|
663
|
-
NodeStatus.OFFLINE,
|
|
664
|
-
current_dt.timestamp(),
|
|
665
|
-
NodeStatus.ONLINE,
|
|
666
|
-
]
|
|
667
|
-
self.conn.execute(query, params)
|
|
677
|
+
self._check_and_tag_offline_nodes()
|
|
668
678
|
|
|
669
679
|
# Build the WHERE clause based on provided filters
|
|
670
680
|
conditions = []
|
|
671
|
-
params = []
|
|
681
|
+
params: list[Any] = []
|
|
672
682
|
if node_ids is not None:
|
|
673
683
|
sint64_node_ids = [uint64_to_int64(node_id) for node_id in node_ids]
|
|
674
684
|
placeholders = ",".join(["?"] * len(sint64_node_ids))
|