flwr-nightly 1.23.0.dev20251006__tar.gz → 1.23.0.dev20251008__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.dev20251006 → flwr_nightly-1.23.0.dev20251008}/PKG-INFO +1 -1
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/auth_plugin/__init__.py +7 -3
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/log.py +2 -2
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/login/login.py +4 -13
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/ls.py +2 -2
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/pull.py +2 -2
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/run/run.py +2 -2
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/stop.py +2 -2
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/supernode/ls.py +2 -2
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/utils.py +28 -44
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/grpc_rere_client/connection.py +6 -6
- flwr_nightly-1.23.0.dev20251006/py/flwr/client/grpc_rere_client/client_interceptor.py → flwr_nightly-1.23.0.dev20251008/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +3 -6
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +7 -5
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/rest_client/connection.py +7 -1
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/constant.py +10 -0
- flwr_nightly-1.23.0.dev20251008/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +76 -0
- flwr_nightly-1.23.0.dev20251008/py/flwr/proto/fleet_pb2.py +53 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fleet_pb2.pyi +4 -1
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/node_pb2.py +1 -1
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/app.py +33 -34
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +8 -4
- flwr_nightly-1.23.0.dev20251006/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py → flwr_nightly-1.23.0.dev20251008/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +19 -41
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +1 -1
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/vce/vce_api.py +7 -1
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +39 -27
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/linkstate/linkstate.py +1 -1
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +37 -21
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/utils/validator.py +2 -3
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +4 -2
- flwr_nightly-1.23.0.dev20251008/py/flwr/supercore/primitives/__init__.py +15 -0
- flwr_nightly-1.23.0.dev20251006/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py → flwr_nightly-1.23.0.dev20251008/py/flwr/supercore/primitives/asymmetric.py +2 -57
- flwr_nightly-1.23.0.dev20251008/py/flwr/superlink/auth_plugin/__init__.py +55 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/servicer/control/control_grpc.py +9 -7
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/servicer/control/control_servicer.py +34 -46
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/pyproject.toml +1 -1
- flwr_nightly-1.23.0.dev20251006/py/flwr/proto/fleet_pb2.py +0 -53
- flwr_nightly-1.23.0.dev20251006/py/flwr/superlink/auth_plugin/__init__.py +0 -26
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/README.md +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/app/exception.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/supernode/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/supernode/create.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/supernode/delete.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/clientapp/client_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/clientapp/mod/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/clientapp/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/clientapp/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/exit/exit_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/exit/signal_handler.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/heartbeat.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/arraychunk.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/exception.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/bulyan.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedadam.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedopt.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedprox.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/krum.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/multikrum.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/result.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/strategy.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/app_utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/cli/flower_superexec.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/constant.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/corestate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/corestate/corestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/grpc_health/health_server.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/object_store/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/superexec/run_superexec.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/servicer/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/servicer/control/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/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.dev20251008
|
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
|
@@ -22,9 +22,13 @@ from .noop_auth_plugin import NoOpCliAuthPlugin
|
|
22
22
|
from .oidc_cli_plugin import OidcCliPlugin
|
23
23
|
|
24
24
|
|
25
|
-
def
|
25
|
+
def get_cli_plugin_class(authn_type: str) -> type[CliAuthPlugin]:
|
26
26
|
"""Return all CLI authentication plugins."""
|
27
|
-
|
27
|
+
if authn_type == AuthnType.NOOP:
|
28
|
+
return NoOpCliAuthPlugin
|
29
|
+
if authn_type == AuthnType.OIDC:
|
30
|
+
return OidcCliPlugin
|
31
|
+
raise ValueError(f"Unsupported authentication type: {authn_type}")
|
28
32
|
|
29
33
|
|
30
34
|
__all__ = [
|
@@ -32,5 +36,5 @@ __all__ = [
|
|
32
36
|
"LoginError",
|
33
37
|
"NoOpCliAuthPlugin",
|
34
38
|
"OidcCliPlugin",
|
35
|
-
"
|
39
|
+
"get_cli_plugin_class",
|
36
40
|
]
|
@@ -35,7 +35,7 @@ from flwr.common.logger import log as logger
|
|
35
35
|
from flwr.proto.control_pb2 import StreamLogsRequest # pylint: disable=E0611
|
36
36
|
from flwr.proto.control_pb2_grpc import ControlStub
|
37
37
|
|
38
|
-
from .utils import flwr_cli_grpc_exc_handler, init_channel,
|
38
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
|
39
39
|
|
40
40
|
|
41
41
|
class AllLogsRetrieved(BaseException):
|
@@ -186,7 +186,7 @@ def _log_with_control_api(
|
|
186
186
|
run_id: int,
|
187
187
|
stream: bool,
|
188
188
|
) -> None:
|
189
|
-
auth_plugin =
|
189
|
+
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
190
190
|
channel = init_channel(app, federation_config, auth_plugin)
|
191
191
|
|
192
192
|
if stream:
|
{flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/login/login.py
RENAMED
@@ -20,7 +20,7 @@ from typing import Annotated, Optional
|
|
20
20
|
|
21
21
|
import typer
|
22
22
|
|
23
|
-
from flwr.cli.auth_plugin import LoginError
|
23
|
+
from flwr.cli.auth_plugin import LoginError, NoOpCliAuthPlugin
|
24
24
|
from flwr.cli.config_utils import (
|
25
25
|
exit_if_no_address,
|
26
26
|
get_insecure_flag,
|
@@ -40,7 +40,7 @@ from ..utils import (
|
|
40
40
|
account_auth_enabled,
|
41
41
|
flwr_cli_grpc_exc_handler,
|
42
42
|
init_channel,
|
43
|
-
|
43
|
+
load_cli_auth_plugin,
|
44
44
|
)
|
45
45
|
|
46
46
|
|
@@ -95,7 +95,7 @@ def login( # pylint: disable=R0914
|
|
95
95
|
)
|
96
96
|
raise typer.Exit(code=1)
|
97
97
|
|
98
|
-
channel = init_channel(app, federation_config,
|
98
|
+
channel = init_channel(app, federation_config, NoOpCliAuthPlugin(Path()))
|
99
99
|
stub = ControlStub(channel)
|
100
100
|
|
101
101
|
login_request = GetLoginDetailsRequest()
|
@@ -104,16 +104,7 @@ def login( # pylint: disable=R0914
|
|
104
104
|
|
105
105
|
# Get the auth plugin
|
106
106
|
authn_type = login_response.authn_type
|
107
|
-
auth_plugin =
|
108
|
-
app, federation, federation_config, authn_type
|
109
|
-
)
|
110
|
-
if auth_plugin is None:
|
111
|
-
typer.secho(
|
112
|
-
f'❌ Authentication type "{authn_type}" not found',
|
113
|
-
fg=typer.colors.RED,
|
114
|
-
bold=True,
|
115
|
-
)
|
116
|
-
raise typer.Exit(code=1)
|
107
|
+
auth_plugin = load_cli_auth_plugin(app, federation, federation_config, authn_type)
|
117
108
|
|
118
109
|
# Login
|
119
110
|
details = AccountAuthLoginDetails(
|
@@ -44,7 +44,7 @@ from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
44
44
|
)
|
45
45
|
from flwr.proto.control_pb2_grpc import ControlStub
|
46
46
|
|
47
|
-
from .utils import flwr_cli_grpc_exc_handler, init_channel,
|
47
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
|
48
48
|
|
49
49
|
_RunListType = tuple[int, str, str, str, str, str, str, str, str]
|
50
50
|
|
@@ -127,7 +127,7 @@ def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
|
|
127
127
|
raise ValueError(
|
128
128
|
"The options '--runs' and '--run-id' are mutually exclusive."
|
129
129
|
)
|
130
|
-
auth_plugin =
|
130
|
+
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
131
131
|
channel = init_channel(app, federation_config, auth_plugin)
|
132
132
|
stub = ControlStub(channel)
|
133
133
|
|
@@ -34,7 +34,7 @@ from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
34
34
|
)
|
35
35
|
from flwr.proto.control_pb2_grpc import ControlStub
|
36
36
|
|
37
|
-
from .utils import flwr_cli_grpc_exc_handler, init_channel,
|
37
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
|
38
38
|
|
39
39
|
|
40
40
|
def pull( # pylint: disable=R0914
|
@@ -74,7 +74,7 @@ def pull( # pylint: disable=R0914
|
|
74
74
|
channel = None
|
75
75
|
try:
|
76
76
|
|
77
|
-
auth_plugin =
|
77
|
+
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
78
78
|
channel = init_channel(app, federation_config, auth_plugin)
|
79
79
|
stub = ControlStub(channel)
|
80
80
|
with flwr_cli_grpc_exc_handler():
|
@@ -45,7 +45,7 @@ from flwr.proto.control_pb2 import StartRunRequest # pylint: disable=E0611
|
|
45
45
|
from flwr.proto.control_pb2_grpc import ControlStub
|
46
46
|
|
47
47
|
from ..log import start_stream
|
48
|
-
from ..utils import flwr_cli_grpc_exc_handler, init_channel,
|
48
|
+
from ..utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
|
49
49
|
|
50
50
|
CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
|
51
51
|
|
@@ -148,7 +148,7 @@ def _run_with_control_api(
|
|
148
148
|
) -> None:
|
149
149
|
channel = None
|
150
150
|
try:
|
151
|
-
auth_plugin =
|
151
|
+
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
152
152
|
channel = init_channel(app, federation_config, auth_plugin)
|
153
153
|
stub = ControlStub(channel)
|
154
154
|
|
@@ -38,7 +38,7 @@ from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
38
38
|
)
|
39
39
|
from flwr.proto.control_pb2_grpc import ControlStub
|
40
40
|
|
41
|
-
from .utils import flwr_cli_grpc_exc_handler, init_channel,
|
41
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
|
42
42
|
|
43
43
|
|
44
44
|
def stop( # pylint: disable=R0914
|
@@ -89,7 +89,7 @@ def stop( # pylint: disable=R0914
|
|
89
89
|
exit_if_no_address(federation_config, "stop")
|
90
90
|
channel = None
|
91
91
|
try:
|
92
|
-
auth_plugin =
|
92
|
+
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
93
93
|
channel = init_channel(app, federation_config, auth_plugin)
|
94
94
|
stub = ControlStub(channel) # pylint: disable=unused-variable # noqa: F841
|
95
95
|
|
{flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/cli/supernode/ls.py
RENAMED
@@ -42,7 +42,7 @@ from flwr.proto.control_pb2 import ( # pylint: disable=E0611
|
|
42
42
|
from flwr.proto.control_pb2_grpc import ControlStub
|
43
43
|
from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
|
44
44
|
|
45
|
-
from ..utils import flwr_cli_grpc_exc_handler, init_channel,
|
45
|
+
from ..utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
|
46
46
|
|
47
47
|
_NodeListType = tuple[int, str, str, str, str, str, str, str]
|
48
48
|
|
@@ -94,7 +94,7 @@ def ls( # pylint: disable=R0914
|
|
94
94
|
exit_if_no_address(federation_config, f"supernode {command_name}")
|
95
95
|
channel = None
|
96
96
|
try:
|
97
|
-
auth_plugin =
|
97
|
+
auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
|
98
98
|
channel = init_channel(app, federation_config, auth_plugin)
|
99
99
|
stub = ControlStub(channel)
|
100
100
|
typer.echo("📄 Listing all nodes...")
|
@@ -34,6 +34,7 @@ from flwr.common.constant import (
|
|
34
34
|
NO_ARTIFACT_PROVIDER_MESSAGE,
|
35
35
|
PULL_UNFINISHED_RUN_MESSAGE,
|
36
36
|
RUN_ID_NOT_FOUND_MESSAGE,
|
37
|
+
AuthnType,
|
37
38
|
)
|
38
39
|
from flwr.common.grpc import (
|
39
40
|
GRPC_MAX_MESSAGE_LENGTH,
|
@@ -41,7 +42,7 @@ from flwr.common.grpc import (
|
|
41
42
|
on_channel_state_change,
|
42
43
|
)
|
43
44
|
|
44
|
-
from .auth_plugin import CliAuthPlugin,
|
45
|
+
from .auth_plugin import CliAuthPlugin, get_cli_plugin_class
|
45
46
|
from .cli_account_auth_interceptor import CliAccountAuthInterceptor
|
46
47
|
from .config_utils import validate_certificate_in_federation_config
|
47
48
|
|
@@ -230,71 +231,54 @@ def account_auth_enabled(federation_config: dict[str, Any]) -> bool:
|
|
230
231
|
return enabled
|
231
232
|
|
232
233
|
|
233
|
-
def
|
234
|
+
def retrieve_authn_type(config_path: Path) -> str:
|
235
|
+
"""Retrieve the auth type from the config file or return NOOP if not found."""
|
236
|
+
try:
|
237
|
+
with config_path.open("r", encoding="utf-8") as file:
|
238
|
+
json_file = json.load(file)
|
239
|
+
authn_type: str = json_file[AUTHN_TYPE_JSON_KEY]
|
240
|
+
return authn_type
|
241
|
+
except (FileNotFoundError, KeyError):
|
242
|
+
return AuthnType.NOOP
|
243
|
+
|
244
|
+
|
245
|
+
def load_cli_auth_plugin(
|
234
246
|
root_dir: Path,
|
235
247
|
federation: str,
|
236
248
|
federation_config: dict[str, Any],
|
237
249
|
authn_type: Optional[str] = None,
|
238
|
-
) ->
|
250
|
+
) -> CliAuthPlugin:
|
239
251
|
"""Load the CLI-side account auth plugin for the given authn type."""
|
240
|
-
#
|
241
|
-
if not account_auth_enabled(federation_config):
|
242
|
-
return None
|
243
|
-
|
252
|
+
# Find the path to the account auth config file
|
244
253
|
config_path = get_account_auth_config_path(root_dir, federation)
|
245
254
|
|
246
|
-
#
|
247
|
-
#
|
255
|
+
# Determine the auth type if not provided
|
256
|
+
# Only `flwr login` command can provide `authn_type` explicitly, as it can query the
|
257
|
+
# SuperLink for the auth type.
|
248
258
|
if authn_type is None:
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
authn_type = json_file[AUTHN_TYPE_JSON_KEY]
|
253
|
-
except (FileNotFoundError, KeyError):
|
254
|
-
typer.secho(
|
255
|
-
"❌ Missing or invalid credentials for account authentication. "
|
256
|
-
"Please run `flwr login` to authenticate.",
|
257
|
-
fg=typer.colors.RED,
|
258
|
-
bold=True,
|
259
|
-
)
|
260
|
-
raise typer.Exit(code=1) from None
|
259
|
+
authn_type = AuthnType.NOOP
|
260
|
+
if account_auth_enabled(federation_config):
|
261
|
+
authn_type = retrieve_authn_type(config_path)
|
261
262
|
|
262
263
|
# Retrieve auth plugin class and instantiate it
|
263
264
|
try:
|
264
|
-
|
265
|
-
auth_plugin_class = all_plugins[authn_type]
|
265
|
+
auth_plugin_class = get_cli_plugin_class(authn_type)
|
266
266
|
return auth_plugin_class(config_path)
|
267
|
-
except
|
267
|
+
except ValueError:
|
268
268
|
typer.echo(f"❌ Unknown account authentication type: {authn_type}")
|
269
269
|
raise typer.Exit(code=1) from None
|
270
|
-
except ImportError:
|
271
|
-
typer.echo("❌ No authentication plugins are currently supported.")
|
272
|
-
raise typer.Exit(code=1) from None
|
273
270
|
|
274
271
|
|
275
272
|
def init_channel(
|
276
|
-
app: Path, federation_config: dict[str, Any], auth_plugin:
|
273
|
+
app: Path, federation_config: dict[str, Any], auth_plugin: CliAuthPlugin
|
277
274
|
) -> grpc.Channel:
|
278
275
|
"""Initialize gRPC channel to the Control API."""
|
279
276
|
insecure, root_certificates_bytes = validate_certificate_in_federation_config(
|
280
277
|
app, federation_config
|
281
278
|
)
|
282
279
|
|
283
|
-
#
|
284
|
-
|
285
|
-
if auth_plugin is not None:
|
286
|
-
# Check if TLS is enabled. If not, raise an error
|
287
|
-
if insecure:
|
288
|
-
typer.secho(
|
289
|
-
"❌ Account authentication requires TLS to be enabled. "
|
290
|
-
"Remove `insecure = true` from the federation configuration.",
|
291
|
-
fg=typer.colors.RED,
|
292
|
-
bold=True,
|
293
|
-
)
|
294
|
-
raise typer.Exit(code=1)
|
295
|
-
|
296
|
-
auth_plugin.load_tokens()
|
297
|
-
interceptors.append(CliAccountAuthInterceptor(auth_plugin))
|
280
|
+
# Load tokens
|
281
|
+
auth_plugin.load_tokens()
|
298
282
|
|
299
283
|
# Create the gRPC channel
|
300
284
|
channel = create_channel(
|
@@ -302,7 +286,7 @@ def init_channel(
|
|
302
286
|
insecure=insecure,
|
303
287
|
root_certificates=root_certificates_bytes,
|
304
288
|
max_message_length=GRPC_MAX_MESSAGE_LENGTH,
|
305
|
-
interceptors=
|
289
|
+
interceptors=[CliAccountAuthInterceptor(auth_plugin)],
|
306
290
|
)
|
307
291
|
channel.subscribe(on_channel_state_change)
|
308
292
|
return channel
|
@@ -36,9 +36,6 @@ from flwr.common.inflatable_protobuf_utils import (
|
|
36
36
|
from flwr.common.logger import log
|
37
37
|
from flwr.common.message import Message, remove_content_from_message
|
38
38
|
from flwr.common.retry_invoker import RetryInvoker, _wrap_stub
|
39
|
-
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
40
|
-
generate_key_pairs,
|
41
|
-
)
|
42
39
|
from flwr.common.serde import message_from_proto, message_to_proto, run_from_proto
|
43
40
|
from flwr.common.typing import Fab, Run
|
44
41
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
@@ -58,9 +55,10 @@ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
|
|
58
55
|
from flwr.proto.message_pb2 import ObjectTree # pylint: disable=E0611
|
59
56
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
60
57
|
from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
|
58
|
+
from flwr.supercore.primitives.asymmetric import generate_key_pairs, public_key_to_bytes
|
61
59
|
|
62
|
-
from .client_interceptor import AuthenticateClientInterceptor
|
63
60
|
from .grpc_adapter import GrpcAdapter
|
61
|
+
from .node_auth_client_interceptor import NodeAuthClientInterceptor
|
64
62
|
|
65
63
|
|
66
64
|
@contextmanager
|
@@ -140,8 +138,9 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
140
138
|
|
141
139
|
# Always configure auth interceptor, with either user-provided or generated keys
|
142
140
|
interceptors: Sequence[grpc.UnaryUnaryClientInterceptor] = [
|
143
|
-
|
141
|
+
NodeAuthClientInterceptor(*authentication_keys),
|
144
142
|
]
|
143
|
+
node_pk = public_key_to_bytes(authentication_keys[1])
|
145
144
|
channel = create_channel(
|
146
145
|
server_address=server_address,
|
147
146
|
insecure=insecure,
|
@@ -201,7 +200,8 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
201
200
|
"""Set create_node."""
|
202
201
|
# Call FleetAPI
|
203
202
|
create_node_request = CreateNodeRequest(
|
204
|
-
|
203
|
+
public_key=node_pk,
|
204
|
+
heartbeat_interval=HEARTBEAT_DEFAULT_INTERVAL,
|
205
205
|
)
|
206
206
|
create_node_response = stub.CreateNode(request=create_node_request)
|
207
207
|
|
@@ -23,14 +23,11 @@ from google.protobuf.message import Message as GrpcMessage
|
|
23
23
|
|
24
24
|
from flwr.common import now
|
25
25
|
from flwr.common.constant import PUBLIC_KEY_HEADER, SIGNATURE_HEADER, TIMESTAMP_HEADER
|
26
|
-
from flwr.
|
27
|
-
public_key_to_bytes,
|
28
|
-
sign_message,
|
29
|
-
)
|
26
|
+
from flwr.supercore.primitives.asymmetric import public_key_to_bytes, sign_message
|
30
27
|
|
31
28
|
|
32
|
-
class
|
33
|
-
"""Client interceptor for
|
29
|
+
class NodeAuthClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type: ignore
|
30
|
+
"""Client interceptor for node authentication."""
|
34
31
|
|
35
32
|
def __init__(
|
36
33
|
self,
|
@@ -35,14 +35,9 @@ from flwr.common.constant import MessageType
|
|
35
35
|
from flwr.common.logger import log
|
36
36
|
from flwr.common.secure_aggregation.crypto.shamir import create_shares
|
37
37
|
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
38
|
-
bytes_to_private_key,
|
39
|
-
bytes_to_public_key,
|
40
38
|
decrypt,
|
41
39
|
encrypt,
|
42
|
-
generate_key_pairs,
|
43
40
|
generate_shared_key,
|
44
|
-
private_key_to_bytes,
|
45
|
-
public_key_to_bytes,
|
46
41
|
)
|
47
42
|
from flwr.common.secure_aggregation.ndarrays_arithmetic import (
|
48
43
|
factor_combine,
|
@@ -64,6 +59,13 @@ from flwr.common.secure_aggregation.secaggplus_utils import (
|
|
64
59
|
share_keys_plaintext_separate,
|
65
60
|
)
|
66
61
|
from flwr.common.typing import ConfigRecordValues
|
62
|
+
from flwr.supercore.primitives.asymmetric import (
|
63
|
+
bytes_to_private_key,
|
64
|
+
bytes_to_public_key,
|
65
|
+
generate_key_pairs,
|
66
|
+
private_key_to_bytes,
|
67
|
+
public_key_to_bytes,
|
68
|
+
)
|
67
69
|
|
68
70
|
|
69
71
|
@dataclass
|
@@ -15,6 +15,7 @@
|
|
15
15
|
"""Contextmanager for a REST request-response channel to the Flower server."""
|
16
16
|
|
17
17
|
|
18
|
+
import secrets
|
18
19
|
from collections.abc import Iterator
|
19
20
|
from contextlib import contextmanager
|
20
21
|
from logging import ERROR, WARN
|
@@ -292,7 +293,12 @@ def http_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
292
293
|
|
293
294
|
def create_node() -> Optional[int]:
|
294
295
|
"""Set create_node."""
|
295
|
-
req = CreateNodeRequest(
|
296
|
+
req = CreateNodeRequest(
|
297
|
+
# REST does not support node authentication;
|
298
|
+
# random bytes are used instead
|
299
|
+
public_key=secrets.token_bytes(32),
|
300
|
+
heartbeat_interval=HEARTBEAT_DEFAULT_INTERVAL,
|
301
|
+
)
|
296
302
|
|
297
303
|
# Send the request
|
298
304
|
res = _request(req, CreateNodeResponse, PATH_CREATE_NODE)
|
{flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/common/constant.py
RENAMED
@@ -256,6 +256,16 @@ class AuthnType:
|
|
256
256
|
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
257
257
|
|
258
258
|
|
259
|
+
class AuthzType:
|
260
|
+
"""Account authorization types."""
|
261
|
+
|
262
|
+
NOOP = "noop"
|
263
|
+
|
264
|
+
def __new__(cls) -> AuthzType:
|
265
|
+
"""Prevent instantiation."""
|
266
|
+
raise TypeError(f"{cls.__name__} cannot be instantiated.")
|
267
|
+
|
268
|
+
|
259
269
|
class EventLogWriterType:
|
260
270
|
"""Event log writer types."""
|
261
271
|
|
flwr_nightly-1.23.0.dev20251008/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
# Copyright 2025 Flower Labs GmbH. All Rights Reserved.
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
# ==============================================================================
|
15
|
+
"""Symmetric encryption."""
|
16
|
+
|
17
|
+
|
18
|
+
import base64
|
19
|
+
|
20
|
+
from cryptography.exceptions import InvalidSignature
|
21
|
+
from cryptography.fernet import Fernet
|
22
|
+
from cryptography.hazmat.primitives import hashes, hmac
|
23
|
+
from cryptography.hazmat.primitives.asymmetric import ec
|
24
|
+
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
|
25
|
+
|
26
|
+
|
27
|
+
def generate_shared_key(
|
28
|
+
private_key: ec.EllipticCurvePrivateKey, public_key: ec.EllipticCurvePublicKey
|
29
|
+
) -> bytes:
|
30
|
+
"""Generate a shared key from a private key (i.e., a secret key) and a public key.
|
31
|
+
|
32
|
+
Generate shared key by exchange function and key derivation function Key derivation
|
33
|
+
function is needed to obtain final shared key of exactly 32 bytes
|
34
|
+
"""
|
35
|
+
# Generate a 32 byte urlsafe(for fernet) shared key
|
36
|
+
# from own private key and another public key
|
37
|
+
shared_key = private_key.exchange(ec.ECDH(), public_key)
|
38
|
+
derived_key = HKDF(
|
39
|
+
algorithm=hashes.SHA256(),
|
40
|
+
length=32,
|
41
|
+
salt=None,
|
42
|
+
info=None,
|
43
|
+
).derive(shared_key)
|
44
|
+
return base64.urlsafe_b64encode(derived_key)
|
45
|
+
|
46
|
+
|
47
|
+
def encrypt(key: bytes, plaintext: bytes) -> bytes:
|
48
|
+
"""Encrypt plaintext using 32-byte key with Fernet."""
|
49
|
+
# The input key must be url safe
|
50
|
+
fernet = Fernet(key)
|
51
|
+
return fernet.encrypt(plaintext)
|
52
|
+
|
53
|
+
|
54
|
+
def decrypt(key: bytes, ciphertext: bytes) -> bytes:
|
55
|
+
"""Decrypt ciphertext using 32-byte key with Fernet."""
|
56
|
+
# The input key must be url safe
|
57
|
+
fernet = Fernet(key)
|
58
|
+
return fernet.decrypt(ciphertext)
|
59
|
+
|
60
|
+
|
61
|
+
def compute_hmac(key: bytes, message: bytes) -> bytes:
|
62
|
+
"""Compute hmac of a message using key as hash."""
|
63
|
+
computed_hmac = hmac.HMAC(key, hashes.SHA256())
|
64
|
+
computed_hmac.update(message)
|
65
|
+
return computed_hmac.finalize()
|
66
|
+
|
67
|
+
|
68
|
+
def verify_hmac(key: bytes, message: bytes, hmac_value: bytes) -> bool:
|
69
|
+
"""Verify hmac of a message using key as hash."""
|
70
|
+
computed_hmac = hmac.HMAC(key, hashes.SHA256())
|
71
|
+
computed_hmac.update(message)
|
72
|
+
try:
|
73
|
+
computed_hmac.verify(hmac_value)
|
74
|
+
return True
|
75
|
+
except InvalidSignature:
|
76
|
+
return False
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# source: flwr/proto/fleet.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 heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
|
16
|
+
from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
|
17
|
+
from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
|
18
|
+
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
19
|
+
from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
|
20
|
+
|
21
|
+
|
22
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/fleet.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x18\x66lwr/proto/message.proto\"C\n\x11\x43reateNodeRequest\x12\x12\n\npublic_key\x18\x01 \x01(\x0c\x12\x1a\n\x12heartbeat_interval\x18\x02 \x01(\x01\"4\n\x12\x43reateNodeResponse\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"3\n\x11\x44\x65leteNodeRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\"\x14\n\x12\x44\x65leteNodeResponse\"J\n\x13PullMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\"\xa2\x01\n\x14PullMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\x97\x01\n\x13PushMessagesRequest\x12\x1e\n\x04node\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x34\n\x14message_object_trees\x18\x03 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\xc9\x01\n\x14PushMessagesResponse\x12(\n\treconnect\x18\x01 \x01(\x0b\x32\x15.flwr.proto.Reconnect\x12>\n\x07results\x18\x02 \x03(\x0b\x32-.flwr.proto.PushMessagesResponse.ResultsEntry\x12\x17\n\x0fobjects_to_push\x18\x03 \x03(\t\x1a.\n\x0cResultsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\r:\x02\x38\x01\"\x1e\n\tReconnect\x12\x11\n\treconnect\x18\x01 \x01(\x04\x32\xca\x06\n\x05\x46leet\x12M\n\nCreateNode\x12\x1d.flwr.proto.CreateNodeRequest\x1a\x1e.flwr.proto.CreateNodeResponse\"\x00\x12M\n\nDeleteNode\x12\x1d.flwr.proto.DeleteNodeRequest\x1a\x1e.flwr.proto.DeleteNodeResponse\"\x00\x12\x62\n\x11SendNodeHeartbeat\x12$.flwr.proto.SendNodeHeartbeatRequest\x1a%.flwr.proto.SendNodeHeartbeatResponse\"\x00\x12S\n\x0cPullMessages\x12\x1f.flwr.proto.PullMessagesRequest\x1a .flwr.proto.PullMessagesResponse\"\x00\x12S\n\x0cPushMessages\x12\x1f.flwr.proto.PushMessagesRequest\x1a .flwr.proto.PushMessagesResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12\x41\n\x06GetFab\x12\x19.flwr.proto.GetFabRequest\x1a\x1a.flwr.proto.GetFabResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x12q\n\x16\x43onfirmMessageReceived\x12).flwr.proto.ConfirmMessageReceivedRequest\x1a*.flwr.proto.ConfirmMessageReceivedResponse\"\x00\x62\x06proto3')
|
23
|
+
|
24
|
+
_globals = globals()
|
25
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
26
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.fleet_pb2', _globals)
|
27
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
28
|
+
DESCRIPTOR._options = None
|
29
|
+
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._options = None
|
30
|
+
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_options = b'8\001'
|
31
|
+
_globals['_CREATENODEREQUEST']._serialized_start=159
|
32
|
+
_globals['_CREATENODEREQUEST']._serialized_end=226
|
33
|
+
_globals['_CREATENODERESPONSE']._serialized_start=228
|
34
|
+
_globals['_CREATENODERESPONSE']._serialized_end=280
|
35
|
+
_globals['_DELETENODEREQUEST']._serialized_start=282
|
36
|
+
_globals['_DELETENODEREQUEST']._serialized_end=333
|
37
|
+
_globals['_DELETENODERESPONSE']._serialized_start=335
|
38
|
+
_globals['_DELETENODERESPONSE']._serialized_end=355
|
39
|
+
_globals['_PULLMESSAGESREQUEST']._serialized_start=357
|
40
|
+
_globals['_PULLMESSAGESREQUEST']._serialized_end=431
|
41
|
+
_globals['_PULLMESSAGESRESPONSE']._serialized_start=434
|
42
|
+
_globals['_PULLMESSAGESRESPONSE']._serialized_end=596
|
43
|
+
_globals['_PUSHMESSAGESREQUEST']._serialized_start=599
|
44
|
+
_globals['_PUSHMESSAGESREQUEST']._serialized_end=750
|
45
|
+
_globals['_PUSHMESSAGESRESPONSE']._serialized_start=753
|
46
|
+
_globals['_PUSHMESSAGESRESPONSE']._serialized_end=954
|
47
|
+
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_start=908
|
48
|
+
_globals['_PUSHMESSAGESRESPONSE_RESULTSENTRY']._serialized_end=954
|
49
|
+
_globals['_RECONNECT']._serialized_start=956
|
50
|
+
_globals['_RECONNECT']._serialized_end=986
|
51
|
+
_globals['_FLEET']._serialized_start=989
|
52
|
+
_globals['_FLEET']._serialized_end=1831
|
53
|
+
# @@protoc_insertion_point(module_scope)
|
{flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/fleet_pb2.pyi
RENAMED
@@ -16,13 +16,16 @@ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
|
|
16
16
|
class CreateNodeRequest(google.protobuf.message.Message):
|
17
17
|
"""CreateNode messages"""
|
18
18
|
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
19
|
+
PUBLIC_KEY_FIELD_NUMBER: builtins.int
|
19
20
|
HEARTBEAT_INTERVAL_FIELD_NUMBER: builtins.int
|
21
|
+
public_key: builtins.bytes
|
20
22
|
heartbeat_interval: builtins.float
|
21
23
|
def __init__(self,
|
22
24
|
*,
|
25
|
+
public_key: builtins.bytes = ...,
|
23
26
|
heartbeat_interval: builtins.float = ...,
|
24
27
|
) -> None: ...
|
25
|
-
def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval"]) -> None: ...
|
28
|
+
def ClearField(self, field_name: typing_extensions.Literal["heartbeat_interval",b"heartbeat_interval","public_key",b"public_key"]) -> None: ...
|
26
29
|
global___CreateNodeRequest = CreateNodeRequest
|
27
30
|
|
28
31
|
class CreateNodeResponse(google.protobuf.message.Message):
|
{flwr_nightly-1.23.0.dev20251006 → flwr_nightly-1.23.0.dev20251008}/py/flwr/proto/node_pb2.py
RENAMED
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/node.proto\x12\nflwr.proto\"\x17\n\x04Node\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\xd0\x01\n\x08NodeInfo\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x11\n\towner_aid\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x12\n\ncreated_at\x18\x04 \x01(\t\x12\x19\n\x11last_activated_at\x18\x05 \x01(\t\x12\x1b\n\x13last_deactivated_at\x18\x06 \x01(\t\x12\x12\n\ndeleted_at\x18\x07 \x01(\t\x12\x14\n\x0conline_until\x18\x08 \x01(\
|
17
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/node.proto\x12\nflwr.proto\"\x17\n\x04Node\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\"\xd0\x01\n\x08NodeInfo\x12\x0f\n\x07node_id\x18\x01 \x01(\x04\x12\x11\n\towner_aid\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x12\n\ncreated_at\x18\x04 \x01(\t\x12\x19\n\x11last_activated_at\x18\x05 \x01(\t\x12\x1b\n\x13last_deactivated_at\x18\x06 \x01(\t\x12\x12\n\ndeleted_at\x18\x07 \x01(\t\x12\x14\n\x0conline_until\x18\x08 \x01(\x01\x12\x1a\n\x12heartbeat_interval\x18\t \x01(\x01\x62\x06proto3')
|
18
18
|
|
19
19
|
_globals = globals()
|
20
20
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|