flwr-nightly 1.19.0.dev20250605__tar.gz → 1.19.0.dev20250606__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.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/PKG-INFO +1 -1
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/connection.py +12 -6
- flwr_nightly-1.19.0.dev20250606/py/flwr/common/inflatable_grpc_utils.py +227 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/grpc_grid.py +12 -6
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/pyproject.toml +1 -1
- flwr_nightly-1.19.0.dev20250605/py/flwr/common/inflatable_grpc_utils.py +0 -122
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/README.md +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/login/login.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/ls.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/stop.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/heartbeat.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/inflatable.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/array.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/arrayrecord.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/inmemory_grid.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/object_store.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_event_log_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superexec/simulation.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/runtime/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/servicer/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/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.19.0.
|
3
|
+
Version: 1.19.0.dev20250606
|
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
|
@@ -31,6 +31,8 @@ from flwr.common.constant import HEARTBEAT_CALL_TIMEOUT, HEARTBEAT_DEFAULT_INTER
|
|
31
31
|
from flwr.common.grpc import create_channel, on_channel_state_change
|
32
32
|
from flwr.common.heartbeat import HeartbeatSender
|
33
33
|
from flwr.common.inflatable_grpc_utils import (
|
34
|
+
make_pull_object_fn_grpc,
|
35
|
+
make_push_object_fn_grpc,
|
34
36
|
pull_object_from_servicer,
|
35
37
|
push_object_to_servicer,
|
36
38
|
)
|
@@ -269,9 +271,11 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
269
271
|
Message,
|
270
272
|
pull_object_from_servicer(
|
271
273
|
object_id=message_proto.metadata.message_id,
|
272
|
-
|
273
|
-
|
274
|
-
|
274
|
+
pull_object_fn=make_pull_object_fn_grpc(
|
275
|
+
pull_object_grpc=stub.PullObject,
|
276
|
+
node=node,
|
277
|
+
run_id=message_proto.metadata.run_id,
|
278
|
+
),
|
275
279
|
),
|
276
280
|
)
|
277
281
|
|
@@ -322,9 +326,11 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
322
326
|
objs_to_push = set(response.objects_to_push[message.object_id].object_ids)
|
323
327
|
push_object_to_servicer(
|
324
328
|
message,
|
325
|
-
|
326
|
-
|
327
|
-
|
329
|
+
push_object_fn=make_push_object_fn_grpc(
|
330
|
+
push_object_grpc=stub.PushObject,
|
331
|
+
node=node,
|
332
|
+
run_id=message.metadata.run_id,
|
333
|
+
),
|
328
334
|
object_ids_to_push=objs_to_push,
|
329
335
|
)
|
330
336
|
log(DEBUG, "Pushed %s objects to servicer.", len(objs_to_push))
|
@@ -0,0 +1,227 @@
|
|
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
|
+
"""InflatableObject utils."""
|
16
|
+
|
17
|
+
|
18
|
+
from time import sleep
|
19
|
+
from typing import Callable, Optional
|
20
|
+
|
21
|
+
from flwr.proto.message_pb2 import ( # pylint: disable=E0611
|
22
|
+
PullObjectRequest,
|
23
|
+
PullObjectResponse,
|
24
|
+
PushObjectRequest,
|
25
|
+
PushObjectResponse,
|
26
|
+
)
|
27
|
+
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
28
|
+
|
29
|
+
from .inflatable import (
|
30
|
+
InflatableObject,
|
31
|
+
get_object_head_values_from_object_content,
|
32
|
+
get_object_id,
|
33
|
+
)
|
34
|
+
from .message import Message
|
35
|
+
from .record import Array, ArrayRecord, ConfigRecord, MetricRecord, RecordDict
|
36
|
+
|
37
|
+
# Helper registry that maps names of classes to their type
|
38
|
+
inflatable_class_registry: dict[str, type[InflatableObject]] = {
|
39
|
+
Array.__qualname__: Array,
|
40
|
+
ArrayRecord.__qualname__: ArrayRecord,
|
41
|
+
ConfigRecord.__qualname__: ConfigRecord,
|
42
|
+
Message.__qualname__: Message,
|
43
|
+
MetricRecord.__qualname__: MetricRecord,
|
44
|
+
RecordDict.__qualname__: RecordDict,
|
45
|
+
}
|
46
|
+
|
47
|
+
|
48
|
+
class ObjectUnavailableError(Exception):
|
49
|
+
"""Exception raised when an object has been pre-registered but is not yet
|
50
|
+
available."""
|
51
|
+
|
52
|
+
def __init__(self, object_id: str):
|
53
|
+
super().__init__(f"Object with ID '{object_id}' is not yet available.")
|
54
|
+
|
55
|
+
|
56
|
+
class ObjectIdNotPreregisteredError(Exception):
|
57
|
+
"""Exception raised when an object ID is not pre-registered."""
|
58
|
+
|
59
|
+
def __init__(self, object_id: str):
|
60
|
+
super().__init__(f"Object with ID '{object_id}' could not be found.")
|
61
|
+
|
62
|
+
|
63
|
+
def push_object_to_servicer(
|
64
|
+
obj: InflatableObject,
|
65
|
+
push_object_fn: Callable[[str, bytes], None],
|
66
|
+
object_ids_to_push: Optional[set[str]] = None,
|
67
|
+
) -> set[str]:
|
68
|
+
"""Recursively deflate an object and push it to the servicer.
|
69
|
+
|
70
|
+
Objects with the same ID are not pushed twice. If `object_ids_to_push` is set,
|
71
|
+
only objects with those IDs are pushed. It returns the set of pushed object
|
72
|
+
IDs.
|
73
|
+
|
74
|
+
Parameters
|
75
|
+
----------
|
76
|
+
obj : InflatableObject
|
77
|
+
The object to push.
|
78
|
+
push_object_fn : Callable[[str, bytes], None]
|
79
|
+
A function that takes an object ID and its content as bytes, and pushes
|
80
|
+
it to the servicer. This function should raise `ObjectIdNotPreregisteredError`
|
81
|
+
if the object ID is not pre-registered.
|
82
|
+
object_ids_to_push : Optional[set[str]] (default: None)
|
83
|
+
A set of object IDs to push. If object ID of the given object is not in this
|
84
|
+
set, the object will not be pushed.
|
85
|
+
|
86
|
+
Returns
|
87
|
+
-------
|
88
|
+
set[str]
|
89
|
+
A set of object IDs that were pushed to the servicer.
|
90
|
+
"""
|
91
|
+
pushed_object_ids: set[str] = set()
|
92
|
+
# Push children if it has any
|
93
|
+
if children := obj.children:
|
94
|
+
for child in children.values():
|
95
|
+
pushed_object_ids |= push_object_to_servicer(
|
96
|
+
child, push_object_fn, object_ids_to_push
|
97
|
+
)
|
98
|
+
|
99
|
+
# Deflate object and push
|
100
|
+
object_content = obj.deflate()
|
101
|
+
object_id = get_object_id(object_content)
|
102
|
+
# Push always if no object set is specified, or if the object is in the set
|
103
|
+
if object_ids_to_push is None or object_id in object_ids_to_push:
|
104
|
+
# The function may raise an error if the object ID is not pre-registered
|
105
|
+
push_object_fn(object_id, object_content)
|
106
|
+
pushed_object_ids.add(object_id)
|
107
|
+
|
108
|
+
return pushed_object_ids
|
109
|
+
|
110
|
+
|
111
|
+
def pull_object_from_servicer(
|
112
|
+
object_id: str,
|
113
|
+
pull_object_fn: Callable[[str], bytes],
|
114
|
+
) -> InflatableObject:
|
115
|
+
"""Recursively inflate an object by pulling it from the servicer.
|
116
|
+
|
117
|
+
Parameters
|
118
|
+
----------
|
119
|
+
object_id : str
|
120
|
+
The ID of the object to pull.
|
121
|
+
pull_object_fn : Callable[[str], bytes]
|
122
|
+
A function that takes an object ID and returns the object content as bytes.
|
123
|
+
The function should raise `ObjectUnavailableError` if the object is not yet
|
124
|
+
available, or `ObjectIdNotPreregisteredError` if the object ID is not
|
125
|
+
pre-registered.
|
126
|
+
|
127
|
+
Returns
|
128
|
+
-------
|
129
|
+
InflatableObject
|
130
|
+
The pulled object.
|
131
|
+
"""
|
132
|
+
# Pull object
|
133
|
+
while True:
|
134
|
+
try:
|
135
|
+
# The function may raise an error if the object ID is not pre-registered
|
136
|
+
object_content: bytes = pull_object_fn(object_id)
|
137
|
+
break # Exit loop if object is successfully pulled
|
138
|
+
except ObjectUnavailableError:
|
139
|
+
sleep(0.1) # Retry after a short delay
|
140
|
+
|
141
|
+
# Extract object class and object_ids of children
|
142
|
+
obj_type, children_obj_ids, _ = get_object_head_values_from_object_content(
|
143
|
+
object_content=object_content
|
144
|
+
)
|
145
|
+
# Resolve object class
|
146
|
+
cls_type = inflatable_class_registry[obj_type]
|
147
|
+
|
148
|
+
# Pull all children objects
|
149
|
+
children: dict[str, InflatableObject] = {}
|
150
|
+
for child_object_id in children_obj_ids:
|
151
|
+
children[child_object_id] = pull_object_from_servicer(
|
152
|
+
child_object_id, pull_object_fn
|
153
|
+
)
|
154
|
+
|
155
|
+
# Inflate object passing its children
|
156
|
+
return cls_type.inflate(object_content, children=children)
|
157
|
+
|
158
|
+
|
159
|
+
def make_pull_object_fn_grpc(
|
160
|
+
pull_object_grpc: Callable[[PullObjectRequest], PullObjectResponse],
|
161
|
+
node: Node,
|
162
|
+
run_id: int,
|
163
|
+
) -> Callable[[str], bytes]:
|
164
|
+
"""Create a pull object function that uses gRPC to pull objects.
|
165
|
+
|
166
|
+
Parameters
|
167
|
+
----------
|
168
|
+
pull_object_grpc : Callable[[PullObjectRequest], PullObjectResponse]
|
169
|
+
The gRPC function to pull objects, e.g., `FleetStub.PullObject`.
|
170
|
+
node : Node
|
171
|
+
The node making the request.
|
172
|
+
run_id : int
|
173
|
+
The run ID for the current operation.
|
174
|
+
|
175
|
+
Returns
|
176
|
+
-------
|
177
|
+
Callable[[str], bytes]
|
178
|
+
A function that takes an object ID and returns the object content as bytes.
|
179
|
+
The function raises `ObjectIdNotPreregisteredError` if the object ID is not
|
180
|
+
pre-registered, or `ObjectUnavailableError` if the object is not yet available.
|
181
|
+
"""
|
182
|
+
|
183
|
+
def pull_object_fn(object_id: str) -> bytes:
|
184
|
+
request = PullObjectRequest(node=node, run_id=run_id, object_id=object_id)
|
185
|
+
response: PullObjectResponse = pull_object_grpc(request)
|
186
|
+
if not response.object_found:
|
187
|
+
raise ObjectIdNotPreregisteredError(object_id)
|
188
|
+
if not response.object_available:
|
189
|
+
raise ObjectUnavailableError(object_id)
|
190
|
+
return response.object_content
|
191
|
+
|
192
|
+
return pull_object_fn
|
193
|
+
|
194
|
+
|
195
|
+
def make_push_object_fn_grpc(
|
196
|
+
push_object_grpc: Callable[[PushObjectRequest], PushObjectResponse],
|
197
|
+
node: Node,
|
198
|
+
run_id: int,
|
199
|
+
) -> Callable[[str, bytes], None]:
|
200
|
+
"""Create a push object function that uses gRPC to push objects.
|
201
|
+
|
202
|
+
Parameters
|
203
|
+
----------
|
204
|
+
push_object_grpc : Callable[[PushObjectRequest], PushObjectResponse]
|
205
|
+
The gRPC function to push objects, e.g., `FleetStub.PushObject`.
|
206
|
+
node : Node
|
207
|
+
The node making the request.
|
208
|
+
run_id : int
|
209
|
+
The run ID for the current operation.
|
210
|
+
|
211
|
+
Returns
|
212
|
+
-------
|
213
|
+
Callable[[str, bytes], None]
|
214
|
+
A function that takes an object ID and its content as bytes, and pushes it
|
215
|
+
to the servicer. The function raises `ObjectIdNotPreregisteredError` if
|
216
|
+
the object ID is not pre-registered.
|
217
|
+
"""
|
218
|
+
|
219
|
+
def push_object_fn(object_id: str, object_content: bytes) -> None:
|
220
|
+
request = PushObjectRequest(
|
221
|
+
node=node, run_id=run_id, object_id=object_id, object_content=object_content
|
222
|
+
)
|
223
|
+
response: PushObjectResponse = push_object_grpc(request)
|
224
|
+
if not response.stored:
|
225
|
+
raise ObjectIdNotPreregisteredError(object_id)
|
226
|
+
|
227
|
+
return push_object_fn
|
{flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/server/grid/grpc_grid.py
RENAMED
@@ -29,6 +29,8 @@ from flwr.common.constant import (
|
|
29
29
|
)
|
30
30
|
from flwr.common.grpc import create_channel, on_channel_state_change
|
31
31
|
from flwr.common.inflatable_grpc_utils import (
|
32
|
+
make_pull_object_fn_grpc,
|
33
|
+
make_push_object_fn_grpc,
|
32
34
|
pull_object_from_servicer,
|
33
35
|
push_object_to_servicer,
|
34
36
|
)
|
@@ -227,9 +229,11 @@ class GrpcGrid(Grid):
|
|
227
229
|
# Push only object that are not in the store
|
228
230
|
push_object_to_servicer(
|
229
231
|
message,
|
230
|
-
|
231
|
-
|
232
|
-
|
232
|
+
push_object_fn=make_push_object_fn_grpc(
|
233
|
+
push_object_grpc=self._stub.PushObject,
|
234
|
+
node=self.node,
|
235
|
+
run_id=run_id,
|
236
|
+
),
|
233
237
|
object_ids_to_push=obj_ids_to_push,
|
234
238
|
)
|
235
239
|
return msg_id
|
@@ -292,9 +296,11 @@ class GrpcGrid(Grid):
|
|
292
296
|
|
293
297
|
message = pull_object_from_servicer(
|
294
298
|
msg_proto.metadata.message_id,
|
295
|
-
|
296
|
-
|
297
|
-
|
299
|
+
pull_object_fn=make_pull_object_fn_grpc(
|
300
|
+
pull_object_grpc=self._stub.PullObject,
|
301
|
+
node=self.node,
|
302
|
+
run_id=run_id,
|
303
|
+
),
|
298
304
|
)
|
299
305
|
inflated_msgs.append(cast(Message, message))
|
300
306
|
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
4
4
|
|
5
5
|
[tool.poetry]
|
6
6
|
name = "flwr-nightly"
|
7
|
-
version = "1.19.0.
|
7
|
+
version = "1.19.0.dev20250606"
|
8
8
|
description = "Flower: A Friendly Federated AI Framework"
|
9
9
|
license = "Apache-2.0"
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
@@ -1,122 +0,0 @@
|
|
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
|
-
"""InflatableObject utils."""
|
16
|
-
|
17
|
-
|
18
|
-
from time import sleep
|
19
|
-
from typing import Optional, Union
|
20
|
-
|
21
|
-
from flwr.client.grpc_rere_client.grpc_adapter import GrpcAdapter
|
22
|
-
from flwr.proto.fleet_pb2_grpc import FleetStub # pylint: disable=E0611
|
23
|
-
from flwr.proto.message_pb2 import ( # pylint: disable=E0611
|
24
|
-
PullObjectRequest,
|
25
|
-
PullObjectResponse,
|
26
|
-
PushObjectRequest,
|
27
|
-
PushObjectResponse,
|
28
|
-
)
|
29
|
-
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
30
|
-
from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub # pylint: disable=E0611
|
31
|
-
|
32
|
-
from .inflatable import (
|
33
|
-
InflatableObject,
|
34
|
-
get_object_head_values_from_object_content,
|
35
|
-
get_object_id,
|
36
|
-
)
|
37
|
-
from .message import Message
|
38
|
-
from .record import Array, ArrayRecord, ConfigRecord, MetricRecord, RecordDict
|
39
|
-
|
40
|
-
# Helper registry that maps names of classes to their type
|
41
|
-
inflatable_class_registry: dict[str, type[InflatableObject]] = {
|
42
|
-
Array.__qualname__: Array,
|
43
|
-
ArrayRecord.__qualname__: ArrayRecord,
|
44
|
-
ConfigRecord.__qualname__: ConfigRecord,
|
45
|
-
Message.__qualname__: Message,
|
46
|
-
MetricRecord.__qualname__: MetricRecord,
|
47
|
-
RecordDict.__qualname__: RecordDict,
|
48
|
-
}
|
49
|
-
|
50
|
-
|
51
|
-
def push_object_to_servicer(
|
52
|
-
obj: InflatableObject,
|
53
|
-
stub: Union[FleetStub, ServerAppIoStub, GrpcAdapter],
|
54
|
-
node: Node,
|
55
|
-
run_id: int,
|
56
|
-
object_ids_to_push: Optional[set[str]] = None,
|
57
|
-
) -> set[str]:
|
58
|
-
"""Recursively deflate an object and push it to the servicer.
|
59
|
-
|
60
|
-
Objects with the same ID are not pushed twice. If `object_ids_to_push` is set,
|
61
|
-
only objects with those IDs are pushed. It returns the set of pushed object
|
62
|
-
IDs.
|
63
|
-
"""
|
64
|
-
pushed_object_ids: set[str] = set()
|
65
|
-
# Push children if it has any
|
66
|
-
if children := obj.children:
|
67
|
-
for child in children.values():
|
68
|
-
pushed_object_ids |= push_object_to_servicer(
|
69
|
-
child, stub, node, run_id, object_ids_to_push
|
70
|
-
)
|
71
|
-
|
72
|
-
# Deflate object and push
|
73
|
-
object_content = obj.deflate()
|
74
|
-
object_id = get_object_id(object_content)
|
75
|
-
# Push always if no object set is specified, or if the object is in the set
|
76
|
-
if object_ids_to_push is None or object_id in object_ids_to_push:
|
77
|
-
_: PushObjectResponse = stub.PushObject(
|
78
|
-
PushObjectRequest(
|
79
|
-
node=node,
|
80
|
-
run_id=run_id,
|
81
|
-
object_id=object_id,
|
82
|
-
object_content=object_content,
|
83
|
-
)
|
84
|
-
)
|
85
|
-
pushed_object_ids.add(object_id)
|
86
|
-
|
87
|
-
return pushed_object_ids
|
88
|
-
|
89
|
-
|
90
|
-
def pull_object_from_servicer(
|
91
|
-
object_id: str,
|
92
|
-
stub: Union[FleetStub, ServerAppIoStub, GrpcAdapter],
|
93
|
-
node: Node,
|
94
|
-
run_id: int,
|
95
|
-
) -> InflatableObject:
|
96
|
-
"""Recursively inflate an object by pulling it from the servicer."""
|
97
|
-
# Pull object
|
98
|
-
object_available = False
|
99
|
-
while not object_available:
|
100
|
-
object_proto: PullObjectResponse = stub.PullObject(
|
101
|
-
PullObjectRequest(node=node, run_id=run_id, object_id=object_id)
|
102
|
-
)
|
103
|
-
object_available = object_proto.object_available
|
104
|
-
object_content = object_proto.object_content
|
105
|
-
sleep(0.1)
|
106
|
-
|
107
|
-
# Extract object class and object_ids of children
|
108
|
-
obj_type, children_obj_ids, _ = get_object_head_values_from_object_content(
|
109
|
-
object_content=object_content
|
110
|
-
)
|
111
|
-
# Resolve object class
|
112
|
-
cls_type = inflatable_class_registry[obj_type]
|
113
|
-
|
114
|
-
# Pull all children objects
|
115
|
-
children: dict[str, InflatableObject] = {}
|
116
|
-
for child_object_id in children_obj_ids:
|
117
|
-
children[child_object_id] = pull_object_from_servicer(
|
118
|
-
child_object_id, stub, node, run_id
|
119
|
-
)
|
120
|
-
|
121
|
-
# Inflate object passing its children
|
122
|
-
return cls_type.inflate(object_content, children=children)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/config_utils.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/login/__init__.py
RENAMED
File without changes
|
{flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/login/login.py
RENAMED
File without changes
|
File without changes
|
{flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/new/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{flwr_nightly-1.19.0.dev20250605 → flwr_nightly-1.19.0.dev20250606}/py/flwr/cli/run/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|