flwr-nightly 1.20.0.dev20250720__tar.gz → 1.20.0.dev20250722__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.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/PKG-INFO +1 -1
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/grpc_adapter_client/connection.py +5 -4
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/grpc_rere_client/connection.py +34 -92
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/rest_client/connection.py +39 -120
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/constant.py +1 -1
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/array.py +16 -3
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/arraychunk.py +0 -3
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/object_store/object_store.py +4 -2
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/runtime/run_clientapp.py +2 -1
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/start_client_internal.py +69 -24
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/pyproject.toml +1 -1
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/README.md +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/login/login.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/ls.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/stop.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/heartbeat.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/inflatable_utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/appio_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/appio_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/appio_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/grid/grpc_grid.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/ffs/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/ffs/ffs.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/grpc_health/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/license_plugin/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/object_store/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supercore/utils.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/exec_event_log_interceptor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/exec_license_interceptor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superexec/simulation.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.20.0.
|
3
|
+
Version: 1.20.0.dev20250722
|
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
|
@@ -29,6 +29,7 @@ from flwr.common.logger import log
|
|
29
29
|
from flwr.common.message import Message
|
30
30
|
from flwr.common.retry_invoker import RetryInvoker
|
31
31
|
from flwr.common.typing import Fab, Run
|
32
|
+
from flwr.proto.message_pb2 import ObjectTree # pylint: disable=E0611
|
32
33
|
|
33
34
|
|
34
35
|
@contextmanager
|
@@ -43,8 +44,8 @@ def grpc_adapter( # pylint: disable=R0913,too-many-positional-arguments
|
|
43
44
|
] = None,
|
44
45
|
) -> Iterator[
|
45
46
|
tuple[
|
46
|
-
Callable[[], Optional[Message]],
|
47
|
-
Callable[[Message],
|
47
|
+
Callable[[], Optional[tuple[Message, ObjectTree]]],
|
48
|
+
Callable[[Message, ObjectTree], set[str]],
|
48
49
|
Callable[[], Optional[int]],
|
49
50
|
Callable[[], None],
|
50
51
|
Callable[[int], Run],
|
@@ -80,8 +81,8 @@ def grpc_adapter( # pylint: disable=R0913,too-many-positional-arguments
|
|
80
81
|
|
81
82
|
Returns
|
82
83
|
-------
|
83
|
-
receive : Callable
|
84
|
-
send : Callable
|
84
|
+
receive : Callable[[], Optional[tuple[Message, ObjectTree]]]
|
85
|
+
send : Callable[[Message, ObjectTree], set[str]]
|
85
86
|
create_node : Optional[Callable]
|
86
87
|
delete_node : Optional[Callable]
|
87
88
|
get_run : Optional[Callable]
|
@@ -17,7 +17,7 @@
|
|
17
17
|
|
18
18
|
from collections.abc import Iterator, Sequence
|
19
19
|
from contextlib import contextmanager
|
20
|
-
from logging import
|
20
|
+
from logging import ERROR
|
21
21
|
from pathlib import Path
|
22
22
|
from typing import Callable, Optional, Union, cast
|
23
23
|
|
@@ -28,29 +28,18 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH
|
|
28
28
|
from flwr.common.constant import HEARTBEAT_CALL_TIMEOUT, HEARTBEAT_DEFAULT_INTERVAL
|
29
29
|
from flwr.common.grpc import create_channel, on_channel_state_change
|
30
30
|
from flwr.common.heartbeat import HeartbeatSender
|
31
|
-
from flwr.common.inflatable import (
|
32
|
-
get_all_nested_objects,
|
33
|
-
get_object_tree,
|
34
|
-
iterate_object_tree,
|
35
|
-
no_object_id_recompute,
|
36
|
-
)
|
37
31
|
from flwr.common.inflatable_protobuf_utils import (
|
38
32
|
make_confirm_message_received_fn_protobuf,
|
39
33
|
make_pull_object_fn_protobuf,
|
40
34
|
make_push_object_fn_protobuf,
|
41
35
|
)
|
42
|
-
from flwr.common.inflatable_utils import (
|
43
|
-
inflate_object_from_contents,
|
44
|
-
pull_objects,
|
45
|
-
push_objects,
|
46
|
-
)
|
47
36
|
from flwr.common.logger import log
|
48
37
|
from flwr.common.message import Message, remove_content_from_message
|
49
38
|
from flwr.common.retry_invoker import RetryInvoker, _wrap_stub
|
50
39
|
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
51
40
|
generate_key_pairs,
|
52
41
|
)
|
53
|
-
from flwr.common.serde import message_to_proto, run_from_proto
|
42
|
+
from flwr.common.serde import message_from_proto, message_to_proto, run_from_proto
|
54
43
|
from flwr.common.typing import Fab, Run, RunNotRunningException
|
55
44
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
56
45
|
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
@@ -66,9 +55,7 @@ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
|
|
66
55
|
SendNodeHeartbeatRequest,
|
67
56
|
SendNodeHeartbeatResponse,
|
68
57
|
)
|
69
|
-
from flwr.proto.message_pb2 import
|
70
|
-
ConfirmMessageReceivedRequest,
|
71
|
-
)
|
58
|
+
from flwr.proto.message_pb2 import ObjectTree # pylint: disable=E0611
|
72
59
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
73
60
|
from flwr.proto.run_pb2 import GetRunRequest, GetRunResponse # pylint: disable=E0611
|
74
61
|
|
@@ -89,8 +76,8 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
89
76
|
adapter_cls: Optional[Union[type[FleetStub], type[GrpcAdapter]]] = None,
|
90
77
|
) -> Iterator[
|
91
78
|
tuple[
|
92
|
-
Callable[[], Optional[Message]],
|
93
|
-
Callable[[Message],
|
79
|
+
Callable[[], Optional[tuple[Message, ObjectTree]]],
|
80
|
+
Callable[[Message, ObjectTree], set[str]],
|
94
81
|
Callable[[], Optional[int]],
|
95
82
|
Callable[[], None],
|
96
83
|
Callable[[int], Run],
|
@@ -253,98 +240,53 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
253
240
|
# Cleanup
|
254
241
|
node = None
|
255
242
|
|
256
|
-
def receive() -> Optional[Message]:
|
257
|
-
"""
|
243
|
+
def receive() -> Optional[tuple[Message, ObjectTree]]:
|
244
|
+
"""Pull a message with its ObjectTree from SuperLink."""
|
258
245
|
# Get Node
|
259
246
|
if node is None:
|
260
247
|
log(ERROR, "Node instance missing")
|
261
248
|
return None
|
262
249
|
|
263
|
-
#
|
250
|
+
# Try to pull a message with its object tree from SuperLink
|
264
251
|
request = PullMessagesRequest(node=node)
|
265
252
|
response: PullMessagesResponse = stub.PullMessages(request=request)
|
266
253
|
|
267
|
-
#
|
268
|
-
|
269
|
-
None
|
270
|
-
)
|
254
|
+
# If no messages are available, return None
|
255
|
+
if len(response.messages_list) == 0:
|
256
|
+
return None
|
271
257
|
|
272
|
-
#
|
273
|
-
|
274
|
-
|
275
|
-
):
|
276
|
-
message_proto = None
|
258
|
+
# Get the current Message and its object tree
|
259
|
+
message_proto = response.messages_list[0]
|
260
|
+
object_tree = response.message_object_trees[0]
|
277
261
|
|
278
262
|
# Construct the Message
|
279
|
-
in_message
|
280
|
-
|
281
|
-
if message_proto:
|
282
|
-
msg_id = message_proto.metadata.message_id
|
283
|
-
run_id = message_proto.metadata.run_id
|
284
|
-
object_tree = response.message_object_trees[0]
|
285
|
-
all_object_contents = pull_objects(
|
286
|
-
[tree.object_id for tree in iterate_object_tree(object_tree)],
|
287
|
-
pull_object_fn=make_pull_object_fn_protobuf(
|
288
|
-
pull_object_protobuf=stub.PullObject,
|
289
|
-
node=node,
|
290
|
-
run_id=run_id,
|
291
|
-
),
|
292
|
-
)
|
293
|
-
|
294
|
-
# Confirm that the message has been received
|
295
|
-
stub.ConfirmMessageReceived(
|
296
|
-
ConfirmMessageReceivedRequest(
|
297
|
-
node=node, run_id=run_id, message_object_id=msg_id
|
298
|
-
)
|
299
|
-
)
|
263
|
+
in_message = message_from_proto(message_proto)
|
300
264
|
|
301
|
-
|
302
|
-
|
303
|
-
)
|
304
|
-
# The deflated message doesn't contain the message_id (its own object_id)
|
305
|
-
# Inject
|
306
|
-
in_message.metadata.__dict__["_message_id"] = msg_id
|
307
|
-
|
308
|
-
# Return the message if available
|
309
|
-
return in_message
|
265
|
+
# Return the Message and its object tree
|
266
|
+
return in_message, object_tree
|
310
267
|
|
311
|
-
def send(message: Message) ->
|
312
|
-
"""Send message
|
268
|
+
def send(message: Message, object_tree: ObjectTree) -> set[str]:
|
269
|
+
"""Send the message with its ObjectTree to SuperLink."""
|
313
270
|
# Get Node
|
314
271
|
if node is None:
|
315
272
|
log(ERROR, "Node instance missing")
|
316
|
-
return
|
273
|
+
return set()
|
317
274
|
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
object_tree = get_object_tree(message)
|
275
|
+
# Remove the content from the message if it has
|
276
|
+
if message.has_content():
|
277
|
+
message = remove_content_from_message(message)
|
322
278
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
)
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
if response.objects_to_push:
|
335
|
-
objs_to_push = set(
|
336
|
-
response.objects_to_push[message.object_id].object_ids
|
337
|
-
)
|
338
|
-
push_objects(
|
339
|
-
all_objects,
|
340
|
-
push_object_fn=make_push_object_fn_protobuf(
|
341
|
-
push_object_protobuf=stub.PushObject,
|
342
|
-
node=node,
|
343
|
-
run_id=message.metadata.run_id,
|
344
|
-
),
|
345
|
-
object_ids_to_push=objs_to_push,
|
346
|
-
)
|
347
|
-
log(DEBUG, "Pushed %s objects to servicer.", len(objs_to_push))
|
279
|
+
# Send the message with its ObjectTree to SuperLink
|
280
|
+
request = PushMessagesRequest(
|
281
|
+
node=node,
|
282
|
+
messages_list=[message_to_proto(message)],
|
283
|
+
message_object_trees=[object_tree],
|
284
|
+
)
|
285
|
+
response: PushMessagesResponse = stub.PushMessages(request=request)
|
286
|
+
|
287
|
+
# Get and return the object IDs to push
|
288
|
+
object_ids_to_push = response.objects_to_push[object_tree.object_id]
|
289
|
+
return set(object_ids_to_push.object_ids)
|
348
290
|
|
349
291
|
def get_run(run_id: int) -> Run:
|
350
292
|
# Call FleetAPI
|
@@ -17,8 +17,8 @@
|
|
17
17
|
|
18
18
|
from collections.abc import Iterator
|
19
19
|
from contextlib import contextmanager
|
20
|
-
from logging import
|
21
|
-
from typing import Callable, Optional, TypeVar, Union
|
20
|
+
from logging import ERROR, WARN
|
21
|
+
from typing import Callable, Optional, TypeVar, Union
|
22
22
|
|
23
23
|
from cryptography.hazmat.primitives.asymmetric import ec
|
24
24
|
from google.protobuf.message import Message as GrpcMessage
|
@@ -28,26 +28,15 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH
|
|
28
28
|
from flwr.common.constant import HEARTBEAT_DEFAULT_INTERVAL
|
29
29
|
from flwr.common.exit import ExitCode, flwr_exit
|
30
30
|
from flwr.common.heartbeat import HeartbeatSender
|
31
|
-
from flwr.common.inflatable import (
|
32
|
-
get_all_nested_objects,
|
33
|
-
get_object_tree,
|
34
|
-
iterate_object_tree,
|
35
|
-
no_object_id_recompute,
|
36
|
-
)
|
37
31
|
from flwr.common.inflatable_protobuf_utils import (
|
38
32
|
make_confirm_message_received_fn_protobuf,
|
39
33
|
make_pull_object_fn_protobuf,
|
40
34
|
make_push_object_fn_protobuf,
|
41
35
|
)
|
42
|
-
from flwr.common.inflatable_utils import (
|
43
|
-
inflate_object_from_contents,
|
44
|
-
pull_objects,
|
45
|
-
push_objects,
|
46
|
-
)
|
47
36
|
from flwr.common.logger import log
|
48
37
|
from flwr.common.message import Message, remove_content_from_message
|
49
38
|
from flwr.common.retry_invoker import RetryInvoker
|
50
|
-
from flwr.common.serde import message_to_proto, run_from_proto
|
39
|
+
from flwr.common.serde import message_from_proto, message_to_proto, run_from_proto
|
51
40
|
from flwr.common.typing import Fab, Run
|
52
41
|
from flwr.proto.fab_pb2 import GetFabRequest, GetFabResponse # pylint: disable=E0611
|
53
42
|
from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
@@ -67,6 +56,7 @@ from flwr.proto.heartbeat_pb2 import ( # pylint: disable=E0611
|
|
67
56
|
from flwr.proto.message_pb2 import ( # pylint: disable=E0611
|
68
57
|
ConfirmMessageReceivedRequest,
|
69
58
|
ConfirmMessageReceivedResponse,
|
59
|
+
ObjectTree,
|
70
60
|
PullObjectRequest,
|
71
61
|
PullObjectResponse,
|
72
62
|
PushObjectRequest,
|
@@ -109,8 +99,8 @@ def http_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
109
99
|
] = None,
|
110
100
|
) -> Iterator[
|
111
101
|
tuple[
|
112
|
-
Callable[[], Optional[Message]],
|
113
|
-
Callable[[Message],
|
102
|
+
Callable[[], Optional[tuple[Message, ObjectTree]]],
|
103
|
+
Callable[[Message, ObjectTree], set[str]],
|
114
104
|
Callable[[], Optional[int]],
|
115
105
|
Callable[[], None],
|
116
106
|
Callable[[int], Run],
|
@@ -316,8 +306,7 @@ def http_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
316
306
|
"""Set delete_node."""
|
317
307
|
nonlocal node
|
318
308
|
if node is None:
|
319
|
-
|
320
|
-
return
|
309
|
+
raise RuntimeError("Node instance missing")
|
321
310
|
|
322
311
|
# Stop the heartbeat sender
|
323
312
|
heartbeat_sender.stop()
|
@@ -333,125 +322,55 @@ def http_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
333
322
|
# Cleanup
|
334
323
|
node = None
|
335
324
|
|
336
|
-
def receive() -> Optional[Message]:
|
337
|
-
"""
|
325
|
+
def receive() -> Optional[tuple[Message, ObjectTree]]:
|
326
|
+
"""Pull a message with its ObjectTree from SuperLink."""
|
338
327
|
# Get Node
|
339
328
|
if node is None:
|
340
|
-
|
341
|
-
return None
|
329
|
+
raise RuntimeError("Node instance missing")
|
342
330
|
|
343
|
-
#
|
331
|
+
# Try to pull a message with its object tree from SuperLink
|
344
332
|
req = PullMessagesRequest(node=node)
|
345
|
-
|
346
|
-
# Send the request
|
347
333
|
res = _request(req, PullMessagesResponse, PATH_PULL_MESSAGES)
|
348
334
|
if res is None:
|
349
|
-
|
335
|
+
raise ValueError("PushMessagesResponse is None.")
|
350
336
|
|
351
|
-
#
|
352
|
-
|
337
|
+
# If no messages are available, return None
|
338
|
+
if len(res.messages_list) == 0:
|
339
|
+
return None
|
353
340
|
|
354
|
-
#
|
355
|
-
|
356
|
-
|
357
|
-
):
|
358
|
-
message_proto = None
|
341
|
+
# Get the current Message and its object tree
|
342
|
+
message_proto = res.messages_list[0]
|
343
|
+
object_tree = res.message_object_trees[0]
|
359
344
|
|
360
345
|
# Construct the Message
|
361
|
-
in_message
|
362
|
-
|
363
|
-
if message_proto:
|
364
|
-
log(INFO, "[Node] POST /%s: success", PATH_PULL_MESSAGES)
|
365
|
-
msg_id = message_proto.metadata.message_id
|
366
|
-
run_id = message_proto.metadata.run_id
|
367
|
-
|
368
|
-
try:
|
369
|
-
object_tree = res.message_object_trees[0]
|
370
|
-
all_object_contents = pull_objects(
|
371
|
-
[tree.object_id for tree in iterate_object_tree(object_tree)],
|
372
|
-
pull_object_fn=make_pull_object_fn_protobuf(
|
373
|
-
pull_object_protobuf=_pull_object_protobuf,
|
374
|
-
node=node,
|
375
|
-
run_id=run_id,
|
376
|
-
),
|
377
|
-
)
|
378
|
-
|
379
|
-
# Confirm that the message has been received
|
380
|
-
_request(
|
381
|
-
req=ConfirmMessageReceivedRequest(
|
382
|
-
node=node, run_id=run_id, message_object_id=msg_id
|
383
|
-
),
|
384
|
-
res_type=ConfirmMessageReceivedResponse,
|
385
|
-
api_path=PATH_CONFIRM_MESSAGE_RECEIVED,
|
386
|
-
)
|
387
|
-
except ValueError as e:
|
388
|
-
log(
|
389
|
-
ERROR,
|
390
|
-
"Pulling objects failed. Potential irrecoverable error: %s",
|
391
|
-
str(e),
|
392
|
-
)
|
393
|
-
in_message = cast(
|
394
|
-
Message, inflate_object_from_contents(msg_id, all_object_contents)
|
395
|
-
)
|
396
|
-
# The deflated message doesn't contain the message_id (its own object_id)
|
397
|
-
# Inject
|
398
|
-
in_message.metadata.__dict__["_message_id"] = msg_id
|
346
|
+
in_message = message_from_proto(message_proto)
|
399
347
|
|
400
|
-
|
348
|
+
# Return the Message and its object tree
|
349
|
+
return in_message, object_tree
|
401
350
|
|
402
|
-
def send(message: Message) ->
|
403
|
-
"""Send
|
351
|
+
def send(message: Message, object_tree: ObjectTree) -> set[str]:
|
352
|
+
"""Send the message with its ObjectTree to SuperLink."""
|
404
353
|
# Get Node
|
405
354
|
if node is None:
|
406
|
-
|
407
|
-
return
|
355
|
+
raise RuntimeError("Node instance missing")
|
408
356
|
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
object_tree = get_object_tree(message)
|
357
|
+
# Remove the content from the message if it has
|
358
|
+
if message.has_content():
|
359
|
+
message = remove_content_from_message(message)
|
413
360
|
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
)
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
)
|
361
|
+
# Send the message with its ObjectTree to SuperLink
|
362
|
+
req = PushMessagesRequest(
|
363
|
+
node=node,
|
364
|
+
messages_list=[message_to_proto(message)],
|
365
|
+
message_object_trees=[object_tree],
|
366
|
+
)
|
367
|
+
res = _request(req, PushMessagesResponse, PATH_PUSH_MESSAGES)
|
368
|
+
if res is None:
|
369
|
+
raise ValueError("PushMessagesResponse is None.")
|
423
370
|
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
log(
|
428
|
-
INFO,
|
429
|
-
"[Node] POST /%s: success, created result %s",
|
430
|
-
PATH_PUSH_MESSAGES,
|
431
|
-
res.results, # pylint: disable=no-member
|
432
|
-
)
|
433
|
-
|
434
|
-
if res and res.objects_to_push:
|
435
|
-
objs_to_push = set(res.objects_to_push[message.object_id].object_ids)
|
436
|
-
|
437
|
-
try:
|
438
|
-
push_objects(
|
439
|
-
all_objects,
|
440
|
-
push_object_fn=make_push_object_fn_protobuf(
|
441
|
-
push_object_protobuf=_push_object_protobuf,
|
442
|
-
node=node,
|
443
|
-
run_id=message_proto.metadata.run_id,
|
444
|
-
),
|
445
|
-
object_ids_to_push=objs_to_push,
|
446
|
-
)
|
447
|
-
log(DEBUG, "Pushed %s objects to servicer.", len(objs_to_push))
|
448
|
-
except ValueError as e:
|
449
|
-
log(
|
450
|
-
ERROR,
|
451
|
-
"Pushing objects failed. Potential irrecoverable error: %s",
|
452
|
-
str(e),
|
453
|
-
)
|
454
|
-
log(ERROR, str(e))
|
371
|
+
# Get and return the object IDs to push
|
372
|
+
object_ids_to_push = res.objects_to_push[object_tree.object_id]
|
373
|
+
return set(object_ids_to_push.object_ids)
|
455
374
|
|
456
375
|
def get_run(run_id: int) -> Run:
|
457
376
|
# Construct the request
|
{flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/constant.py
RENAMED
@@ -123,7 +123,7 @@ AUTHZ_TYPE_YAML_KEY = "authz_type" # For key name in YAML file
|
|
123
123
|
PUBLIC_KEY_HEADER = "flwr-public-key-bin" # Must end with "-bin" for binary data
|
124
124
|
SIGNATURE_HEADER = "flwr-signature-bin" # Must end with "-bin" for binary data
|
125
125
|
TIMESTAMP_HEADER = "flwr-timestamp"
|
126
|
-
TIMESTAMP_TOLERANCE =
|
126
|
+
TIMESTAMP_TOLERANCE = 300 # General tolerance for timestamp verification
|
127
127
|
SYSTEM_TIME_TOLERANCE = 5 # Allowance for system time drift
|
128
128
|
|
129
129
|
# Constants for grpc retry
|
{flwr_nightly-1.20.0.dev20250720 → flwr_nightly-1.20.0.dev20250722}/py/flwr/common/record/array.py
RENAMED
@@ -264,14 +264,22 @@ class Array(InflatableObject):
|
|
264
264
|
|
265
265
|
def slice_array(self) -> list[tuple[str, InflatableObject]]:
|
266
266
|
"""Slice Array data and construct a list of ArrayChunks."""
|
267
|
-
|
267
|
+
# Return cached chunks if they exist
|
268
|
+
if "_chunks" in self.__dict__:
|
269
|
+
return cast(list[tuple[str, InflatableObject]], self.__dict__["_chunks"])
|
270
|
+
|
271
|
+
# Chunks are not children as some of them may be identical
|
272
|
+
chunks: list[tuple[str, InflatableObject]] = []
|
268
273
|
# memoryview allows for zero-copy slicing
|
269
274
|
data_view = memoryview(self.data)
|
270
275
|
for start in range(0, len(data_view), MAX_ARRAY_CHUNK_SIZE):
|
271
276
|
end = min(start + MAX_ARRAY_CHUNK_SIZE, len(data_view))
|
272
277
|
ac = ArrayChunk(data_view[start:end])
|
273
|
-
|
274
|
-
|
278
|
+
chunks.append((ac.object_id, ac))
|
279
|
+
|
280
|
+
# Cache the chunks for future use
|
281
|
+
self.__dict__["_chunks"] = chunks
|
282
|
+
return chunks
|
275
283
|
|
276
284
|
def deflate(self) -> bytes:
|
277
285
|
"""Deflate the Array."""
|
@@ -386,4 +394,9 @@ class Array(InflatableObject):
|
|
386
394
|
if name in ("dtype", "shape", "stype", "data"):
|
387
395
|
# Mark as dirty if any of the main attributes are set
|
388
396
|
self.is_dirty = True
|
397
|
+
# Clear cached object ID
|
398
|
+
self.__dict__.pop("_object_id", None)
|
399
|
+
# Clear cached chunks if data is set
|
400
|
+
if name == "data":
|
401
|
+
self.__dict__.pop("_chunks", None)
|
389
402
|
super().__setattr__(name, value)
|
@@ -28,9 +28,6 @@ class ArrayChunk(InflatableObject):
|
|
28
28
|
|
29
29
|
data: memoryview
|
30
30
|
|
31
|
-
def __init__(self, data: bytes) -> None:
|
32
|
-
self.data = memoryview(data)
|
33
|
-
|
34
31
|
def deflate(self) -> bytes:
|
35
32
|
"""Deflate the ArrayChunk."""
|
36
33
|
return add_header_to_object_body(object_body=self.data, obj=self)
|
@@ -99,8 +99,10 @@ class ObjectStore(abc.ABC):
|
|
99
99
|
|
100
100
|
Returns
|
101
101
|
-------
|
102
|
-
bytes
|
103
|
-
The object stored under the given object_id.
|
102
|
+
Optional[bytes]
|
103
|
+
The object stored under the given object_id if it exists, else None.
|
104
|
+
The returned bytes will be b"" if the object is not yet available,
|
105
|
+
but has been preregistered.
|
104
106
|
"""
|
105
107
|
|
106
108
|
@abc.abstractmethod
|
@@ -44,6 +44,7 @@ from flwr.common.inflatable_protobuf_utils import (
|
|
44
44
|
)
|
45
45
|
from flwr.common.inflatable_utils import pull_and_inflate_object_from_tree, push_objects
|
46
46
|
from flwr.common.logger import log
|
47
|
+
from flwr.common.message import remove_content_from_message
|
47
48
|
from flwr.common.retry_invoker import _make_simple_grpc_retry_invoker, _wrap_stub
|
48
49
|
from flwr.common.serde import (
|
49
50
|
context_from_proto,
|
@@ -256,7 +257,7 @@ def push_clientappoutputs(
|
|
256
257
|
log(INFO, "[flwr-clientapp] Push `ClientAppOutputs` for token %s", masked_token)
|
257
258
|
# Set message ID
|
258
259
|
message.metadata.__dict__["_message_id"] = message.object_id
|
259
|
-
proto_message = message_to_proto(message)
|
260
|
+
proto_message = message_to_proto(remove_content_from_message(message))
|
260
261
|
proto_context = context_to_proto(context)
|
261
262
|
|
262
263
|
try:
|