flwr-nightly 1.23.0.dev20251002__tar.gz → 1.23.0.dev20251004__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.
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/PKG-INFO +1 -1
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/app.py +2 -1
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/auth_plugin/__init__.py +2 -2
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +3 -3
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/login/login.py +5 -5
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/ls.py +7 -3
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/utils.py +9 -9
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/constant.py +4 -4
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/typing.py +1 -1
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/control_pb2.py +28 -28
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/control_pb2.pyi +4 -4
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/app.py +18 -7
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +2 -2
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +4 -4
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/servicer/control/control_grpc.py +5 -5
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/servicer/control/control_servicer.py +13 -13
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/pyproject.toml +1 -1
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/README.md +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/app/exception.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/pull.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/stop.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/supernode/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/supernode/create.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/supernode/delete.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/supernode/ls.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/clientapp/client_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/clientapp/mod/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/clientapp/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/clientapp/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/exit/exit_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/exit/signal_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/heartbeat.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/arraychunk.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/exception.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/bulyan.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedadam.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedopt.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedprox.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/krum.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/multikrum.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/result.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/strategy.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/app_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/cli/flower_superexec.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/corestate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/corestate/corestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/grpc_health/health_server.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/object_store/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/superexec/run_superexec.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/servicer/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/servicer/control/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/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.dev20251004
|
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
|
@@ -15,7 +15,7 @@
|
|
15
15
|
"""Flower account auth plugins."""
|
16
16
|
|
17
17
|
|
18
|
-
from flwr.common.constant import
|
18
|
+
from flwr.common.constant import AuthnType
|
19
19
|
|
20
20
|
from .auth_plugin import CliAuthPlugin, LoginError
|
21
21
|
from .noop_auth_plugin import NoOpCliAuthPlugin
|
@@ -24,7 +24,7 @@ from .oidc_cli_plugin import OidcCliPlugin
|
|
24
24
|
|
25
25
|
def get_cli_auth_plugins() -> dict[str, type[CliAuthPlugin]]:
|
26
26
|
"""Return all CLI authentication plugins."""
|
27
|
-
return {
|
27
|
+
return {AuthnType.NOOP: NoOpCliAuthPlugin, AuthnType.OIDC: OidcCliPlugin}
|
28
28
|
|
29
29
|
|
30
30
|
__all__ = [
|
@@ -25,9 +25,9 @@ import typer
|
|
25
25
|
|
26
26
|
from flwr.common.constant import (
|
27
27
|
ACCESS_TOKEN_KEY,
|
28
|
-
|
28
|
+
AUTHN_TYPE_JSON_KEY,
|
29
29
|
REFRESH_TOKEN_KEY,
|
30
|
-
|
30
|
+
AuthnType,
|
31
31
|
)
|
32
32
|
from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
|
33
33
|
from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
@@ -88,7 +88,7 @@ class OidcCliPlugin(CliAuthPlugin):
|
|
88
88
|
self.access_token = credentials.access_token
|
89
89
|
self.refresh_token = credentials.refresh_token
|
90
90
|
json_dict = {
|
91
|
-
|
91
|
+
AUTHN_TYPE_JSON_KEY: AuthnType.OIDC,
|
92
92
|
ACCESS_TOKEN_KEY: credentials.access_token,
|
93
93
|
REFRESH_TOKEN_KEY: credentials.refresh_token,
|
94
94
|
}
|
{flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/cli/login/login.py
RENAMED
@@ -73,7 +73,7 @@ def login( # pylint: disable=R0914
|
|
73
73
|
)
|
74
74
|
exit_if_no_address(federation_config, "login")
|
75
75
|
|
76
|
-
# Check if `enable-
|
76
|
+
# Check if `enable-account-auth` is set to `true`
|
77
77
|
|
78
78
|
if not account_auth_enabled(federation_config):
|
79
79
|
typer.secho(
|
@@ -103,13 +103,13 @@ def login( # pylint: disable=R0914
|
|
103
103
|
login_response: GetLoginDetailsResponse = stub.GetLoginDetails(login_request)
|
104
104
|
|
105
105
|
# Get the auth plugin
|
106
|
-
|
106
|
+
authn_type = login_response.authn_type
|
107
107
|
auth_plugin = try_obtain_cli_auth_plugin(
|
108
|
-
app, federation, federation_config,
|
108
|
+
app, federation, federation_config, authn_type
|
109
109
|
)
|
110
110
|
if auth_plugin is None:
|
111
111
|
typer.secho(
|
112
|
-
f'❌ Authentication type "{
|
112
|
+
f'❌ Authentication type "{authn_type}" not found',
|
113
113
|
fg=typer.colors.RED,
|
114
114
|
bold=True,
|
115
115
|
)
|
@@ -117,7 +117,7 @@ def login( # pylint: disable=R0914
|
|
117
117
|
|
118
118
|
# Login
|
119
119
|
details = AccountAuthLoginDetails(
|
120
|
-
|
120
|
+
authn_type=login_response.authn_type,
|
121
121
|
device_code=login_response.device_code,
|
122
122
|
verification_uri_complete=login_response.verification_uri_complete,
|
123
123
|
expires_in=login_response.expires_in,
|
@@ -19,7 +19,7 @@ import io
|
|
19
19
|
import json
|
20
20
|
from datetime import datetime, timedelta
|
21
21
|
from pathlib import Path
|
22
|
-
from typing import Annotated, Optional
|
22
|
+
from typing import Annotated, Optional, cast
|
23
23
|
|
24
24
|
import typer
|
25
25
|
from rich.console import Console
|
@@ -50,6 +50,7 @@ _RunListType = tuple[int, str, str, str, str, str, str, str, str]
|
|
50
50
|
|
51
51
|
|
52
52
|
def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
|
53
|
+
ctx: typer.Context,
|
53
54
|
app: Annotated[
|
54
55
|
Path,
|
55
56
|
typer.Argument(help="Path of the Flower project"),
|
@@ -102,6 +103,9 @@ def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
|
|
102
103
|
|
103
104
|
All timestamps follow ISO 8601, UTC and are formatted as ``YYYY-MM-DD HH:MM:SSZ``.
|
104
105
|
"""
|
106
|
+
# Resolve command used (list or ls)
|
107
|
+
command_name = cast(str, ctx.command.name) if ctx.command else "list"
|
108
|
+
|
105
109
|
suppress_output = output_format == CliOutputFormat.JSON
|
106
110
|
captured_output = io.StringIO()
|
107
111
|
try:
|
@@ -116,7 +120,7 @@ def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
|
|
116
120
|
federation, federation_config = validate_federation_in_project_config(
|
117
121
|
federation, config, federation_config_overrides
|
118
122
|
)
|
119
|
-
exit_if_no_address(federation_config,
|
123
|
+
exit_if_no_address(federation_config, command_name)
|
120
124
|
channel = None
|
121
125
|
try:
|
122
126
|
if runs and run_id is not None:
|
@@ -216,7 +220,7 @@ def _to_table(run_list: list[_RunListType]) -> Table:
|
|
216
220
|
|
217
221
|
# Add columns
|
218
222
|
table.add_column(
|
219
|
-
Text("Run ID", justify="center"), style="bright_white",
|
223
|
+
Text("Run ID", justify="center"), style="bright_white", no_wrap=True
|
220
224
|
)
|
221
225
|
table.add_column(Text("FAB", justify="center"), style="dim white")
|
222
226
|
table.add_column(Text("Status", justify="center"))
|
@@ -27,7 +27,7 @@ import grpc
|
|
27
27
|
import typer
|
28
28
|
|
29
29
|
from flwr.common.constant import (
|
30
|
-
|
30
|
+
AUTHN_TYPE_JSON_KEY,
|
31
31
|
CREDENTIALS_DIR,
|
32
32
|
FLWR_DIR,
|
33
33
|
NO_ACCOUNT_AUTH_MESSAGE,
|
@@ -234,22 +234,22 @@ def try_obtain_cli_auth_plugin(
|
|
234
234
|
root_dir: Path,
|
235
235
|
federation: str,
|
236
236
|
federation_config: dict[str, Any],
|
237
|
-
|
237
|
+
authn_type: Optional[str] = None,
|
238
238
|
) -> Optional[CliAuthPlugin]:
|
239
|
-
"""Load the CLI-side account auth plugin for the given
|
239
|
+
"""Load the CLI-side account auth plugin for the given authn type."""
|
240
240
|
# Check if account auth is enabled
|
241
241
|
if not account_auth_enabled(federation_config):
|
242
242
|
return None
|
243
243
|
|
244
244
|
config_path = get_account_auth_config_path(root_dir, federation)
|
245
245
|
|
246
|
-
# Get the
|
247
|
-
#
|
248
|
-
if
|
246
|
+
# Get the authn type from the config if not provided
|
247
|
+
# authn_type will be None for all CLI commands except login
|
248
|
+
if authn_type is None:
|
249
249
|
try:
|
250
250
|
with config_path.open("r", encoding="utf-8") as file:
|
251
251
|
json_file = json.load(file)
|
252
|
-
|
252
|
+
authn_type = json_file[AUTHN_TYPE_JSON_KEY]
|
253
253
|
except (FileNotFoundError, KeyError):
|
254
254
|
typer.secho(
|
255
255
|
"❌ Missing or invalid credentials for account authentication. "
|
@@ -262,10 +262,10 @@ def try_obtain_cli_auth_plugin(
|
|
262
262
|
# Retrieve auth plugin class and instantiate it
|
263
263
|
try:
|
264
264
|
all_plugins: dict[str, type[CliAuthPlugin]] = get_cli_auth_plugins()
|
265
|
-
auth_plugin_class = all_plugins[
|
265
|
+
auth_plugin_class = all_plugins[authn_type]
|
266
266
|
return auth_plugin_class(config_path)
|
267
267
|
except KeyError:
|
268
|
-
typer.echo(f"❌ Unknown account authentication type: {
|
268
|
+
typer.echo(f"❌ Unknown account authentication type: {authn_type}")
|
269
269
|
raise typer.Exit(code=1) from None
|
270
270
|
except ImportError:
|
271
271
|
typer.echo("❌ No authentication plugins are currently supported.")
|
{flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/common/constant.py
RENAMED
@@ -111,8 +111,8 @@ MAX_RETRY_DELAY = 20 # Maximum delay duration between two consecutive retries.
|
|
111
111
|
|
112
112
|
# Constants for account authentication
|
113
113
|
CREDENTIALS_DIR = ".credentials"
|
114
|
-
|
115
|
-
|
114
|
+
AUTHN_TYPE_JSON_KEY = "authn-type" # For key name in JSON file
|
115
|
+
AUTHN_TYPE_YAML_KEY = "authn_type" # For key name in YAML file
|
116
116
|
ACCESS_TOKEN_KEY = "flwr-oidc-access-token"
|
117
117
|
REFRESH_TOKEN_KEY = "flwr-oidc-refresh-token"
|
118
118
|
|
@@ -245,13 +245,13 @@ class CliOutputFormat:
|
|
245
245
|
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
246
246
|
|
247
247
|
|
248
|
-
class
|
248
|
+
class AuthnType:
|
249
249
|
"""Account authentication types."""
|
250
250
|
|
251
251
|
NOOP = "noop"
|
252
252
|
OIDC = "oidc"
|
253
253
|
|
254
|
-
def __new__(cls) ->
|
254
|
+
def __new__(cls) -> AuthnType:
|
255
255
|
"""Prevent instantiation."""
|
256
256
|
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
257
257
|
|
{flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/control_pb2.py
RENAMED
@@ -19,7 +19,7 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
|
19
19
|
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
20
20
|
|
21
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\"\xfa\x01\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\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\"\
|
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\"\xfa\x01\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\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\x14\x43reateNodeCliRequest\x12\x12\n\npublic_key\x18\x01 \x01(\t\"9\n\x15\x43reateNodeCliResponse\x12\x14\n\x07node_id\x18\x01 \x01(\x04H\x00\x88\x01\x01\x42\n\n\x08_node_id\"\'\n\x14\x44\x65leteNodeCliRequest\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\x17\n\x15\x44\x65leteNodeCliResponse\"\x15\n\x13ListNodesCliRequest\"M\n\x14ListNodesCliResponse\x12(\n\nnodes_info\x18\x01 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x0b\n\x03now\x18\x02 \x01(\t2\xc5\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\x12V\n\rCreateNodeCli\x12 .flwr.proto.CreateNodeCliRequest\x1a!.flwr.proto.CreateNodeCliResponse\"\x00\x12V\n\rDeleteNodeCli\x12 .flwr.proto.DeleteNodeCliRequest\x1a!.flwr.proto.DeleteNodeCliResponse\"\x00\x12S\n\x0cListNodesCli\x12\x1f.flwr.proto.ListNodesCliRequest\x1a .flwr.proto.ListNodesCliResponse\"\x00\x62\x06proto3')
|
23
23
|
|
24
24
|
_globals = globals()
|
25
25
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
@@ -49,31 +49,31 @@ if _descriptor._USE_C_DESCRIPTORS == False:
|
|
49
49
|
_globals['_GETLOGINDETAILSREQUEST']._serialized_start=810
|
50
50
|
_globals['_GETLOGINDETAILSREQUEST']._serialized_end=834
|
51
51
|
_globals['_GETLOGINDETAILSRESPONSE']._serialized_start=837
|
52
|
-
_globals['_GETLOGINDETAILSRESPONSE']._serialized_end=
|
53
|
-
_globals['_GETAUTHTOKENSREQUEST']._serialized_start=
|
54
|
-
_globals['_GETAUTHTOKENSREQUEST']._serialized_end=
|
55
|
-
_globals['_GETAUTHTOKENSRESPONSE']._serialized_start=
|
56
|
-
_globals['_GETAUTHTOKENSRESPONSE']._serialized_end=
|
57
|
-
_globals['_STOPRUNREQUEST']._serialized_start=
|
58
|
-
_globals['_STOPRUNREQUEST']._serialized_end=
|
59
|
-
_globals['_STOPRUNRESPONSE']._serialized_start=
|
60
|
-
_globals['_STOPRUNRESPONSE']._serialized_end=
|
61
|
-
_globals['_PULLARTIFACTSREQUEST']._serialized_start=
|
62
|
-
_globals['_PULLARTIFACTSREQUEST']._serialized_end=
|
63
|
-
_globals['_PULLARTIFACTSRESPONSE']._serialized_start=
|
64
|
-
_globals['_PULLARTIFACTSRESPONSE']._serialized_end=
|
65
|
-
_globals['_CREATENODECLIREQUEST']._serialized_start=
|
66
|
-
_globals['_CREATENODECLIREQUEST']._serialized_end=
|
67
|
-
_globals['_CREATENODECLIRESPONSE']._serialized_start=
|
68
|
-
_globals['_CREATENODECLIRESPONSE']._serialized_end=
|
69
|
-
_globals['_DELETENODECLIREQUEST']._serialized_start=
|
70
|
-
_globals['_DELETENODECLIREQUEST']._serialized_end=
|
71
|
-
_globals['_DELETENODECLIRESPONSE']._serialized_start=
|
72
|
-
_globals['_DELETENODECLIRESPONSE']._serialized_end=
|
73
|
-
_globals['_LISTNODESCLIREQUEST']._serialized_start=
|
74
|
-
_globals['_LISTNODESCLIREQUEST']._serialized_end=
|
75
|
-
_globals['_LISTNODESCLIRESPONSE']._serialized_start=
|
76
|
-
_globals['_LISTNODESCLIRESPONSE']._serialized_end=
|
77
|
-
_globals['_CONTROL']._serialized_start=
|
78
|
-
_globals['_CONTROL']._serialized_end=
|
52
|
+
_globals['_GETLOGINDETAILSRESPONSE']._serialized_end=976
|
53
|
+
_globals['_GETAUTHTOKENSREQUEST']._serialized_start=978
|
54
|
+
_globals['_GETAUTHTOKENSREQUEST']._serialized_end=1021
|
55
|
+
_globals['_GETAUTHTOKENSRESPONSE']._serialized_start=1023
|
56
|
+
_globals['_GETAUTHTOKENSRESPONSE']._serialized_end=1091
|
57
|
+
_globals['_STOPRUNREQUEST']._serialized_start=1093
|
58
|
+
_globals['_STOPRUNREQUEST']._serialized_end=1125
|
59
|
+
_globals['_STOPRUNRESPONSE']._serialized_start=1127
|
60
|
+
_globals['_STOPRUNRESPONSE']._serialized_end=1161
|
61
|
+
_globals['_PULLARTIFACTSREQUEST']._serialized_start=1163
|
62
|
+
_globals['_PULLARTIFACTSREQUEST']._serialized_end=1201
|
63
|
+
_globals['_PULLARTIFACTSRESPONSE']._serialized_start=1203
|
64
|
+
_globals['_PULLARTIFACTSRESPONSE']._serialized_end=1252
|
65
|
+
_globals['_CREATENODECLIREQUEST']._serialized_start=1254
|
66
|
+
_globals['_CREATENODECLIREQUEST']._serialized_end=1296
|
67
|
+
_globals['_CREATENODECLIRESPONSE']._serialized_start=1298
|
68
|
+
_globals['_CREATENODECLIRESPONSE']._serialized_end=1355
|
69
|
+
_globals['_DELETENODECLIREQUEST']._serialized_start=1357
|
70
|
+
_globals['_DELETENODECLIREQUEST']._serialized_end=1396
|
71
|
+
_globals['_DELETENODECLIRESPONSE']._serialized_start=1398
|
72
|
+
_globals['_DELETENODECLIRESPONSE']._serialized_end=1421
|
73
|
+
_globals['_LISTNODESCLIREQUEST']._serialized_start=1423
|
74
|
+
_globals['_LISTNODESCLIREQUEST']._serialized_end=1444
|
75
|
+
_globals['_LISTNODESCLIRESPONSE']._serialized_start=1446
|
76
|
+
_globals['_LISTNODESCLIRESPONSE']._serialized_end=1523
|
77
|
+
_globals['_CONTROL']._serialized_start=1526
|
78
|
+
_globals['_CONTROL']._serialized_end=2363
|
79
79
|
# @@protoc_insertion_point(module_scope)
|
{flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/proto/control_pb2.pyi
RENAMED
@@ -144,25 +144,25 @@ global___GetLoginDetailsRequest = GetLoginDetailsRequest
|
|
144
144
|
|
145
145
|
class GetLoginDetailsResponse(google.protobuf.message.Message):
|
146
146
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
147
|
-
|
147
|
+
AUTHN_TYPE_FIELD_NUMBER: builtins.int
|
148
148
|
DEVICE_CODE_FIELD_NUMBER: builtins.int
|
149
149
|
VERIFICATION_URI_COMPLETE_FIELD_NUMBER: builtins.int
|
150
150
|
EXPIRES_IN_FIELD_NUMBER: builtins.int
|
151
151
|
INTERVAL_FIELD_NUMBER: builtins.int
|
152
|
-
|
152
|
+
authn_type: typing.Text
|
153
153
|
device_code: typing.Text
|
154
154
|
verification_uri_complete: typing.Text
|
155
155
|
expires_in: builtins.int
|
156
156
|
interval: builtins.int
|
157
157
|
def __init__(self,
|
158
158
|
*,
|
159
|
-
|
159
|
+
authn_type: typing.Text = ...,
|
160
160
|
device_code: typing.Text = ...,
|
161
161
|
verification_uri_complete: typing.Text = ...,
|
162
162
|
expires_in: builtins.int = ...,
|
163
163
|
interval: builtins.int = ...,
|
164
164
|
) -> None: ...
|
165
|
-
def ClearField(self, field_name: typing_extensions.Literal["
|
165
|
+
def ClearField(self, field_name: typing_extensions.Literal["authn_type",b"authn_type","device_code",b"device_code","expires_in",b"expires_in","interval",b"interval","verification_uri_complete",b"verification_uri_complete"]) -> None: ...
|
166
166
|
global___GetLoginDetailsResponse = GetLoginDetailsResponse
|
167
167
|
|
168
168
|
class GetAuthTokensRequest(google.protobuf.message.Message):
|
@@ -38,7 +38,7 @@ from flwr.common.address import parse_address
|
|
38
38
|
from flwr.common.args import try_obtain_server_certificates
|
39
39
|
from flwr.common.config import get_flwr_dir
|
40
40
|
from flwr.common.constant import (
|
41
|
-
|
41
|
+
AUTHN_TYPE_YAML_KEY,
|
42
42
|
AUTHZ_TYPE_YAML_KEY,
|
43
43
|
CLIENT_OCTET,
|
44
44
|
CONTROL_API_DEFAULT_SERVER_ADDRESS,
|
@@ -193,7 +193,7 @@ def run_superlink() -> None:
|
|
193
193
|
# provided
|
194
194
|
verify_tls_cert = not getattr(args, "disable_oidc_tls_cert_verification", None)
|
195
195
|
|
196
|
-
|
196
|
+
authn_plugin: Optional[ControlAuthnPlugin] = None
|
197
197
|
authz_plugin: Optional[ControlAuthzPlugin] = None
|
198
198
|
event_log_plugin: Optional[EventLogWriterPlugin] = None
|
199
199
|
# Load the auth plugin if the args.account_auth_config is provided
|
@@ -205,7 +205,7 @@ def run_superlink() -> None:
|
|
205
205
|
)
|
206
206
|
args.account_auth_config = cfg_path
|
207
207
|
if cfg_path := getattr(args, "account_auth_config", None):
|
208
|
-
|
208
|
+
authn_plugin, authz_plugin = _try_obtain_control_auth_plugins(
|
209
209
|
Path(cfg_path), verify_tls_cert
|
210
210
|
)
|
211
211
|
# Enable event logging if the args.enable_event_log is True
|
@@ -236,7 +236,7 @@ def run_superlink() -> None:
|
|
236
236
|
objectstore_factory=objectstore_factory,
|
237
237
|
certificates=certificates,
|
238
238
|
is_simulation=is_simulation,
|
239
|
-
|
239
|
+
authn_plugin=authn_plugin,
|
240
240
|
authz_plugin=authz_plugin,
|
241
241
|
event_log_plugin=event_log_plugin,
|
242
242
|
artifact_provider=artifact_provider,
|
@@ -478,10 +478,21 @@ def _try_obtain_control_auth_plugins(
|
|
478
478
|
except NotImplementedError:
|
479
479
|
sys.exit(f"No {section} plugins are currently supported.")
|
480
480
|
|
481
|
+
# Warn deprecated authn_type key
|
482
|
+
if "authn_type" in config["authentication"]:
|
483
|
+
log(
|
484
|
+
WARN,
|
485
|
+
"The `authn_type` key in the authentication configuration is deprecated. "
|
486
|
+
"Use `%s` instead.",
|
487
|
+
AUTHN_TYPE_YAML_KEY,
|
488
|
+
)
|
489
|
+
authn_type = config["authentication"].pop("authn_type")
|
490
|
+
config["authentication"][AUTHN_TYPE_YAML_KEY] = authn_type
|
491
|
+
|
481
492
|
# Load authentication plugin
|
482
|
-
|
493
|
+
authn_plugin = _load_plugin(
|
483
494
|
section="authentication",
|
484
|
-
yaml_key=
|
495
|
+
yaml_key=AUTHN_TYPE_YAML_KEY,
|
485
496
|
loader=get_control_authn_plugins,
|
486
497
|
)
|
487
498
|
|
@@ -492,7 +503,7 @@ def _try_obtain_control_auth_plugins(
|
|
492
503
|
loader=get_control_authz_plugins,
|
493
504
|
)
|
494
505
|
|
495
|
-
return
|
506
|
+
return authn_plugin, authz_plugin
|
496
507
|
|
497
508
|
|
498
509
|
def _try_obtain_control_event_log_writer_plugin() -> Optional[EventLogWriterPlugin]:
|
@@ -20,7 +20,7 @@ from collections.abc import Sequence
|
|
20
20
|
from pathlib import Path
|
21
21
|
from typing import Optional, Union
|
22
22
|
|
23
|
-
from flwr.common.constant import NOOP_ACCOUNT_NAME, NOOP_FLWR_AID,
|
23
|
+
from flwr.common.constant import NOOP_ACCOUNT_NAME, NOOP_FLWR_AID, AuthnType
|
24
24
|
from flwr.common.typing import (
|
25
25
|
AccountAuthCredentials,
|
26
26
|
AccountAuthLoginDetails,
|
@@ -50,7 +50,7 @@ class NoOpControlAuthnPlugin(ControlAuthnPlugin):
|
|
50
50
|
# This allows the `flwr login` command to load the NoOp plugin accordingly,
|
51
51
|
# which then raises a LoginError when attempting to login.
|
52
52
|
return AccountAuthLoginDetails(
|
53
|
-
|
53
|
+
authn_type=AuthnType.NOOP, # No operation authn type
|
54
54
|
device_code="",
|
55
55
|
verification_uri_complete="",
|
56
56
|
expires_in=0,
|
@@ -55,10 +55,10 @@ class ControlAccountAuthInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
55
55
|
|
56
56
|
def __init__(
|
57
57
|
self,
|
58
|
-
|
58
|
+
authn_plugin: ControlAuthnPlugin,
|
59
59
|
authz_plugin: ControlAuthzPlugin,
|
60
60
|
):
|
61
|
-
self.
|
61
|
+
self.authn_plugin = authn_plugin
|
62
62
|
self.authz_plugin = authz_plugin
|
63
63
|
|
64
64
|
def intercept_service(
|
@@ -97,7 +97,7 @@ class ControlAccountAuthInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
97
97
|
return call(request, context) # type: ignore
|
98
98
|
|
99
99
|
# For other requests, check if the account is authenticated
|
100
|
-
valid_tokens, account_info = self.
|
100
|
+
valid_tokens, account_info = self.authn_plugin.validate_tokens_in_metadata(
|
101
101
|
metadata
|
102
102
|
)
|
103
103
|
if valid_tokens:
|
@@ -120,7 +120,7 @@ class ControlAccountAuthInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
120
120
|
return call(request, context) # type: ignore
|
121
121
|
|
122
122
|
# If the account is not authenticated, refresh tokens
|
123
|
-
tokens, account_info = self.
|
123
|
+
tokens, account_info = self.authn_plugin.refresh_tokens(metadata)
|
124
124
|
if tokens is not None:
|
125
125
|
if account_info is None:
|
126
126
|
context.abort(
|
@@ -54,7 +54,7 @@ def run_control_api_grpc(
|
|
54
54
|
objectstore_factory: ObjectStoreFactory,
|
55
55
|
certificates: Optional[tuple[bytes, bytes, bytes]],
|
56
56
|
is_simulation: bool,
|
57
|
-
|
57
|
+
authn_plugin: Optional[ControlAuthnPlugin] = None,
|
58
58
|
authz_plugin: Optional[ControlAuthzPlugin] = None,
|
59
59
|
event_log_plugin: Optional[EventLogWriterPlugin] = None,
|
60
60
|
artifact_provider: Optional[ArtifactProvider] = None,
|
@@ -69,14 +69,14 @@ def run_control_api_grpc(
|
|
69
69
|
ffs_factory=ffs_factory,
|
70
70
|
objectstore_factory=objectstore_factory,
|
71
71
|
is_simulation=is_simulation,
|
72
|
-
|
72
|
+
authn_plugin=authn_plugin,
|
73
73
|
artifact_provider=artifact_provider,
|
74
74
|
)
|
75
75
|
interceptors: list[grpc.ServerInterceptor] = []
|
76
76
|
if license_plugin is not None:
|
77
77
|
interceptors.append(ControlLicenseInterceptor(license_plugin))
|
78
|
-
if
|
79
|
-
interceptors.append(ControlAccountAuthInterceptor(
|
78
|
+
if authn_plugin is not None and authz_plugin is not None:
|
79
|
+
interceptors.append(ControlAccountAuthInterceptor(authn_plugin, authz_plugin))
|
80
80
|
# Event log interceptor must be added after account auth interceptor
|
81
81
|
if event_log_plugin is not None:
|
82
82
|
interceptors.append(ControlEventLogInterceptor(event_log_plugin))
|
@@ -90,7 +90,7 @@ def run_control_api_grpc(
|
|
90
90
|
interceptors=interceptors or None,
|
91
91
|
)
|
92
92
|
|
93
|
-
if
|
93
|
+
if authn_plugin is None:
|
94
94
|
log(INFO, "Flower Deployment Runtime: Starting Control API on %s", address)
|
95
95
|
else:
|
96
96
|
log(
|
@@ -83,14 +83,14 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
83
83
|
ffs_factory: FfsFactory,
|
84
84
|
objectstore_factory: ObjectStoreFactory,
|
85
85
|
is_simulation: bool,
|
86
|
-
|
86
|
+
authn_plugin: Optional[ControlAuthnPlugin] = None,
|
87
87
|
artifact_provider: Optional[ArtifactProvider] = None,
|
88
88
|
) -> None:
|
89
89
|
self.linkstate_factory = linkstate_factory
|
90
90
|
self.ffs_factory = ffs_factory
|
91
91
|
self.objectstore_factory = objectstore_factory
|
92
92
|
self.is_simulation = is_simulation
|
93
|
-
self.
|
93
|
+
self.authn_plugin = authn_plugin
|
94
94
|
self.artifact_provider = artifact_provider
|
95
95
|
|
96
96
|
def StartRun( # pylint: disable=too-many-locals
|
@@ -109,7 +109,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
109
109
|
)
|
110
110
|
return StartRunResponse()
|
111
111
|
|
112
|
-
flwr_aid = shared_account_info.get().flwr_aid if self.
|
112
|
+
flwr_aid = shared_account_info.get().flwr_aid if self.authn_plugin else None
|
113
113
|
override_config = user_config_from_proto(request.override_config)
|
114
114
|
federation_options = config_record_from_proto(request.federation_options)
|
115
115
|
fab_file = request.fab.content
|
@@ -184,7 +184,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
184
184
|
context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
|
185
185
|
|
186
186
|
# If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
|
187
|
-
if self.
|
187
|
+
if self.authn_plugin:
|
188
188
|
flwr_aid = shared_account_info.get().flwr_aid
|
189
189
|
_check_flwr_aid_in_run(
|
190
190
|
flwr_aid=flwr_aid, run=cast(Run, run), context=context
|
@@ -224,7 +224,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
224
224
|
|
225
225
|
# Build a set of run IDs for `flwr ls --runs`
|
226
226
|
if not request.HasField("run_id"):
|
227
|
-
if self.
|
227
|
+
if self.authn_plugin:
|
228
228
|
# If no `run_id` is specified and account auth is enabled,
|
229
229
|
# return run IDs for the authenticated account
|
230
230
|
flwr_aid = shared_account_info.get().flwr_aid
|
@@ -250,7 +250,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
250
250
|
|
251
251
|
# If account auth is enabled,
|
252
252
|
# check if `flwr_aid` matches the run's `flwr_aid`
|
253
|
-
if self.
|
253
|
+
if self.authn_plugin:
|
254
254
|
flwr_aid = shared_account_info.get().flwr_aid
|
255
255
|
_check_flwr_aid_in_run(
|
256
256
|
flwr_aid=flwr_aid, run=cast(Run, run), context=context
|
@@ -278,7 +278,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
278
278
|
context.abort(grpc.StatusCode.NOT_FOUND, RUN_ID_NOT_FOUND_MESSAGE)
|
279
279
|
|
280
280
|
# If account auth is enabled, check if `flwr_aid` matches the run's `flwr_aid`
|
281
|
-
if self.
|
281
|
+
if self.authn_plugin:
|
282
282
|
flwr_aid = shared_account_info.get().flwr_aid
|
283
283
|
_check_flwr_aid_in_run(
|
284
284
|
flwr_aid=flwr_aid, run=cast(Run, run), context=context
|
@@ -312,7 +312,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
312
312
|
) -> GetLoginDetailsResponse:
|
313
313
|
"""Start login."""
|
314
314
|
log(INFO, "ControlServicer.GetLoginDetails")
|
315
|
-
if self.
|
315
|
+
if self.authn_plugin is None:
|
316
316
|
context.abort(
|
317
317
|
grpc.StatusCode.UNIMPLEMENTED,
|
318
318
|
NO_ACCOUNT_AUTH_MESSAGE,
|
@@ -320,14 +320,14 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
320
320
|
raise grpc.RpcError() # This line is unreachable
|
321
321
|
|
322
322
|
# Get login details
|
323
|
-
details = self.
|
323
|
+
details = self.authn_plugin.get_login_details()
|
324
324
|
|
325
325
|
# Return empty response if details is None
|
326
326
|
if details is None:
|
327
327
|
return GetLoginDetailsResponse()
|
328
328
|
|
329
329
|
return GetLoginDetailsResponse(
|
330
|
-
|
330
|
+
authn_type=details.authn_type,
|
331
331
|
device_code=details.device_code,
|
332
332
|
verification_uri_complete=details.verification_uri_complete,
|
333
333
|
expires_in=details.expires_in,
|
@@ -339,7 +339,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
339
339
|
) -> GetAuthTokensResponse:
|
340
340
|
"""Get auth token."""
|
341
341
|
log(INFO, "ControlServicer.GetAuthTokens")
|
342
|
-
if self.
|
342
|
+
if self.authn_plugin is None:
|
343
343
|
context.abort(
|
344
344
|
grpc.StatusCode.UNIMPLEMENTED,
|
345
345
|
NO_ACCOUNT_AUTH_MESSAGE,
|
@@ -347,7 +347,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
347
347
|
raise grpc.RpcError() # This line is unreachable
|
348
348
|
|
349
349
|
# Get auth tokens
|
350
|
-
credentials = self.
|
350
|
+
credentials = self.authn_plugin.get_auth_tokens(request.device_code)
|
351
351
|
|
352
352
|
# Return empty response if credentials is None
|
353
353
|
if credentials is None:
|
@@ -391,7 +391,7 @@ class ControlServicer(control_pb2_grpc.ControlServicer):
|
|
391
391
|
)
|
392
392
|
|
393
393
|
# Check if `flwr_aid` matches the run's `flwr_aid` when account auth is enabled
|
394
|
-
if self.
|
394
|
+
if self.authn_plugin:
|
395
395
|
flwr_aid = shared_account_info.get().flwr_aid
|
396
396
|
_check_flwr_aid_in_run(flwr_aid=flwr_aid, run=run, context=context)
|
397
397
|
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
4
4
|
|
5
5
|
[tool.poetry]
|
6
6
|
name = "flwr-nightly"
|
7
|
-
version = "1.23.0.
|
7
|
+
version = "1.23.0.dev20251004"
|
8
8
|
description = "Flower: A Friendly Federated AI Framework"
|
9
9
|
license = "Apache-2.0"
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{flwr_nightly-1.23.0.dev20251002 → flwr_nightly-1.23.0.dev20251004}/py/flwr/app/exception.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|