flwr-nightly 1.19.0.dev20250527__tar.gz → 1.19.0.dev20250528__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.dev20250527 → flwr_nightly-1.19.0.dev20250528}/PKG-INFO +1 -1
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/log.py +3 -3
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/login/login.py +3 -7
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/ls.py +3 -3
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/run/run.py +2 -6
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/stop.py +2 -2
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/utils.py +5 -4
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/grpc_rere_client/connection.py +2 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/message_handler/message_handler.py +1 -1
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/inflatable.py +33 -2
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/array.py +38 -1
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/arrayrecord.py +34 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/serde.py +6 -1
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/grid/grpc_grid.py +2 -1
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/grid/inmemory_grid.py +5 -4
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +1 -2
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/vce/vce_api.py +3 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +14 -25
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/linkstate/linkstate.py +9 -10
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +11 -21
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/linkstate/utils.py +23 -23
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +6 -10
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/utils/validator.py +2 -2
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supercore/object_store/in_memory_object_store.py +30 -4
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supercore/object_store/object_store.py +48 -1
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/exec_servicer.py +1 -2
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/pyproject.toml +1 -1
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/README.md +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/app/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/app/error.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/app/metadata.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/constant.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/clientapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/event_log_plugin/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/exit/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/exit/exit.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/exit/exit_code.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/heartbeat.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/inflatable_grpc_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/configrecord.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/metricrecord.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/recorddict.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/recorddict_compat.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/serde_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/client/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/common/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/server/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/server/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/compat/simulation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/heartbeat_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/recorddict_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/recorddict_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/py.typed +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/compat/grid_client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/grid/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/grid/grid.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/serverapp/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supercore/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supercore/object_store/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/exec_event_log_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superexec/simulation.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/superlink/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supernode/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supernode/cli/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supernode/cli/flower_supernode.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supernode/nodestate/__init__.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supernode/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/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.dev20250528
|
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
|
@@ -35,7 +35,7 @@ from flwr.common.logger import log as logger
|
|
35
35
|
from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
|
36
36
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
37
37
|
|
38
|
-
from .utils import init_channel, try_obtain_cli_auth_plugin
|
38
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel, try_obtain_cli_auth_plugin
|
39
39
|
|
40
40
|
|
41
41
|
class AllLogsRetrieved(BaseException):
|
@@ -95,7 +95,7 @@ def stream_logs(
|
|
95
95
|
latest_timestamp = 0.0
|
96
96
|
res = None
|
97
97
|
try:
|
98
|
-
with
|
98
|
+
with flwr_cli_grpc_exc_handler():
|
99
99
|
for res in stub.StreamLogs(req, timeout=duration):
|
100
100
|
print(res.log_output, end="")
|
101
101
|
raise AllLogsRetrieved()
|
@@ -116,7 +116,7 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
|
|
116
116
|
req = StreamLogsRequest(run_id=run_id, after_timestamp=0.0)
|
117
117
|
|
118
118
|
try:
|
119
|
-
with
|
119
|
+
with flwr_cli_grpc_exc_handler():
|
120
120
|
# Enforce timeout for graceful exit
|
121
121
|
for res in stub.StreamLogs(req, timeout=timeout):
|
122
122
|
print(res.log_output)
|
{flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/cli/login/login.py
RENAMED
@@ -35,11 +35,7 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
35
35
|
)
|
36
36
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
37
37
|
|
38
|
-
from ..utils import
|
39
|
-
init_channel,
|
40
|
-
try_obtain_cli_auth_plugin,
|
41
|
-
unauthenticated_exc_handler,
|
42
|
-
)
|
38
|
+
from ..utils import flwr_cli_grpc_exc_handler, init_channel, try_obtain_cli_auth_plugin
|
43
39
|
|
44
40
|
|
45
41
|
def login( # pylint: disable=R0914
|
@@ -96,7 +92,7 @@ def login( # pylint: disable=R0914
|
|
96
92
|
stub = ExecStub(channel)
|
97
93
|
|
98
94
|
login_request = GetLoginDetailsRequest()
|
99
|
-
with
|
95
|
+
with flwr_cli_grpc_exc_handler():
|
100
96
|
login_response: GetLoginDetailsResponse = stub.GetLoginDetails(login_request)
|
101
97
|
|
102
98
|
# Get the auth plugin
|
@@ -120,7 +116,7 @@ def login( # pylint: disable=R0914
|
|
120
116
|
expires_in=login_response.expires_in,
|
121
117
|
interval=login_response.interval,
|
122
118
|
)
|
123
|
-
with
|
119
|
+
with flwr_cli_grpc_exc_handler():
|
124
120
|
credentials = auth_plugin.login(details, stub)
|
125
121
|
|
126
122
|
# Store the tokens
|
@@ -44,7 +44,7 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
44
44
|
)
|
45
45
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
46
46
|
|
47
|
-
from .utils import init_channel, try_obtain_cli_auth_plugin
|
47
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel, try_obtain_cli_auth_plugin
|
48
48
|
|
49
49
|
_RunListType = tuple[int, str, str, str, str, str, str, str, str]
|
50
50
|
|
@@ -305,7 +305,7 @@ def _list_runs(
|
|
305
305
|
output_format: str = CliOutputFormat.DEFAULT,
|
306
306
|
) -> None:
|
307
307
|
"""List all runs."""
|
308
|
-
with
|
308
|
+
with flwr_cli_grpc_exc_handler():
|
309
309
|
res: ListRunsResponse = stub.ListRuns(ListRunsRequest())
|
310
310
|
run_dict = {run_id: run_from_proto(proto) for run_id, proto in res.run_dict.items()}
|
311
311
|
|
@@ -322,7 +322,7 @@ def _display_one_run(
|
|
322
322
|
output_format: str = CliOutputFormat.DEFAULT,
|
323
323
|
) -> None:
|
324
324
|
"""Display information about a specific run."""
|
325
|
-
with
|
325
|
+
with flwr_cli_grpc_exc_handler():
|
326
326
|
res: ListRunsResponse = stub.ListRuns(ListRunsRequest(run_id=run_id))
|
327
327
|
if not res.run_dict:
|
328
328
|
raise ValueError(f"Run ID {run_id} not found")
|
@@ -45,11 +45,7 @@ from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
|
|
45
45
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
46
46
|
|
47
47
|
from ..log import start_stream
|
48
|
-
from ..utils import
|
49
|
-
init_channel,
|
50
|
-
try_obtain_cli_auth_plugin,
|
51
|
-
unauthenticated_exc_handler,
|
52
|
-
)
|
48
|
+
from ..utils import flwr_cli_grpc_exc_handler, init_channel, try_obtain_cli_auth_plugin
|
53
49
|
|
54
50
|
CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
|
55
51
|
|
@@ -172,7 +168,7 @@ def _run_with_exec_api(
|
|
172
168
|
override_config=user_config_to_proto(parse_config_args(config_overrides)),
|
173
169
|
federation_options=config_record_to_proto(c_record),
|
174
170
|
)
|
175
|
-
with
|
171
|
+
with flwr_cli_grpc_exc_handler():
|
176
172
|
res = stub.StartRun(req)
|
177
173
|
|
178
174
|
if res.HasField("run_id"):
|
@@ -35,7 +35,7 @@ from flwr.common.logger import print_json_error, redirect_output, restore_output
|
|
35
35
|
from flwr.proto.exec_pb2 import StopRunRequest, StopRunResponse # pylint: disable=E0611
|
36
36
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
37
37
|
|
38
|
-
from .utils import init_channel, try_obtain_cli_auth_plugin
|
38
|
+
from .utils import flwr_cli_grpc_exc_handler, init_channel, try_obtain_cli_auth_plugin
|
39
39
|
|
40
40
|
|
41
41
|
def stop( # pylint: disable=R0914
|
@@ -122,7 +122,7 @@ def stop( # pylint: disable=R0914
|
|
122
122
|
|
123
123
|
def _stop_run(stub: ExecStub, run_id: int, output_format: str) -> None:
|
124
124
|
"""Stop a run."""
|
125
|
-
with
|
125
|
+
with flwr_cli_grpc_exc_handler():
|
126
126
|
response: StopRunResponse = stub.StopRun(request=StopRunRequest(run_id=run_id))
|
127
127
|
if response.success:
|
128
128
|
typer.secho(f"✅ Run {run_id} successfully stopped.", fg=typer.colors.GREEN)
|
@@ -288,11 +288,12 @@ def init_channel(
|
|
288
288
|
|
289
289
|
|
290
290
|
@contextmanager
|
291
|
-
def
|
292
|
-
"""Context manager to handle gRPC
|
291
|
+
def flwr_cli_grpc_exc_handler() -> Iterator[None]:
|
292
|
+
"""Context manager to handle specific gRPC errors.
|
293
293
|
|
294
|
-
It catches grpc.RpcError exceptions with UNAUTHENTICATED
|
295
|
-
and exits the application. All other exceptions will be allowed to
|
294
|
+
It catches grpc.RpcError exceptions with UNAUTHENTICATED and UNIMPLEMENTED statuses,
|
295
|
+
informs the user, and exits the application. All other exceptions will be allowed to
|
296
|
+
escape.
|
296
297
|
"""
|
297
298
|
try:
|
298
299
|
yield
|
@@ -279,6 +279,8 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
279
279
|
log(ERROR, "No current message")
|
280
280
|
return
|
281
281
|
|
282
|
+
# Set message_id
|
283
|
+
message.metadata.__dict__["_message_id"] = message.object_id
|
282
284
|
# Validate out message
|
283
285
|
if not validate_out_message(message, metadata):
|
284
286
|
log(ERROR, "Invalid out message")
|
@@ -164,7 +164,7 @@ def validate_out_message(out_message: Message, in_message_metadata: Metadata) ->
|
|
164
164
|
in_meta = in_message_metadata
|
165
165
|
if ( # pylint: disable-next=too-many-boolean-expressions
|
166
166
|
out_meta.run_id == in_meta.run_id
|
167
|
-
and out_meta.message_id ==
|
167
|
+
and out_meta.message_id == out_message.object_id # Should match the object id
|
168
168
|
and out_meta.src_node_id == in_meta.dst_node_id
|
169
169
|
and out_meta.dst_node_id == in_meta.src_node_id
|
170
170
|
and out_meta.reply_to_message_id == in_meta.message_id
|
{flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/inflatable.py
RENAMED
@@ -18,7 +18,7 @@
|
|
18
18
|
from __future__ import annotations
|
19
19
|
|
20
20
|
import hashlib
|
21
|
-
from typing import TypeVar
|
21
|
+
from typing import TypeVar, cast
|
22
22
|
|
23
23
|
from .constant import HEAD_BODY_DIVIDER, HEAD_VALUE_DIVIDER
|
24
24
|
|
@@ -55,13 +55,24 @@ class InflatableObject:
|
|
55
55
|
@property
|
56
56
|
def object_id(self) -> str:
|
57
57
|
"""Get object_id."""
|
58
|
-
|
58
|
+
if self.is_dirty or "_object_id" not in self.__dict__:
|
59
|
+
self.__dict__["_object_id"] = get_object_id(self.deflate())
|
60
|
+
return cast(str, self.__dict__["_object_id"])
|
59
61
|
|
60
62
|
@property
|
61
63
|
def children(self) -> dict[str, InflatableObject] | None:
|
62
64
|
"""Get all child objects as a dictionary or None if there are no children."""
|
63
65
|
return None
|
64
66
|
|
67
|
+
@property
|
68
|
+
def is_dirty(self) -> bool:
|
69
|
+
"""Check if the object is dirty after the last deflation.
|
70
|
+
|
71
|
+
An object is considered dirty if its content has changed since the last its
|
72
|
+
object ID was computed.
|
73
|
+
"""
|
74
|
+
return True
|
75
|
+
|
65
76
|
|
66
77
|
T = TypeVar("T", bound=InflatableObject)
|
67
78
|
|
@@ -178,3 +189,23 @@ def get_object_head_values_from_object_content(
|
|
178
189
|
obj_type, children_str, body_len = head.split(HEAD_VALUE_DIVIDER)
|
179
190
|
children_ids = children_str.split(",") if children_str else []
|
180
191
|
return obj_type, children_ids, int(body_len)
|
192
|
+
|
193
|
+
|
194
|
+
def _get_descendants_object_ids_recursively(obj: InflatableObject) -> set[str]:
|
195
|
+
|
196
|
+
descendants: set[str] = set()
|
197
|
+
if children := obj.children:
|
198
|
+
for child in children.values():
|
199
|
+
descendants |= _get_descendants_object_ids_recursively(child)
|
200
|
+
|
201
|
+
descendants.add(obj.object_id)
|
202
|
+
|
203
|
+
return descendants
|
204
|
+
|
205
|
+
|
206
|
+
def get_desdendant_object_ids(obj: InflatableObject) -> set[str]:
|
207
|
+
"""Get a set of object IDs of all descendants."""
|
208
|
+
descendants = _get_descendants_object_ids_recursively(obj)
|
209
|
+
# Exclude Object ID of parent object
|
210
|
+
descendants.discard(obj.object_id)
|
211
|
+
return descendants
|
{flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/common/record/array.py
RENAMED
@@ -107,10 +107,21 @@ class Array(InflatableObject):
|
|
107
107
|
"""
|
108
108
|
|
109
109
|
dtype: str
|
110
|
-
shape: list[int]
|
111
110
|
stype: str
|
112
111
|
data: bytes
|
113
112
|
|
113
|
+
@property
|
114
|
+
def shape(self) -> list[int]:
|
115
|
+
"""Get the shape of the array."""
|
116
|
+
self.is_dirty = True # Mark as dirty when shape is accessed
|
117
|
+
return cast(list[int], self.__dict__["_shape"])
|
118
|
+
|
119
|
+
@shape.setter
|
120
|
+
def shape(self, value: list[int]) -> None:
|
121
|
+
"""Set the shape of the array."""
|
122
|
+
self.is_dirty = True # Mark as dirty when shape is set
|
123
|
+
self.__dict__["_shape"] = value
|
124
|
+
|
114
125
|
@overload
|
115
126
|
def __init__( # noqa: E704
|
116
127
|
self, dtype: str, shape: list[int], stype: str, data: bytes
|
@@ -295,3 +306,29 @@ class Array(InflatableObject):
|
|
295
306
|
stype=proto_array.stype,
|
296
307
|
data=proto_array.data,
|
297
308
|
)
|
309
|
+
|
310
|
+
@property
|
311
|
+
def object_id(self) -> str:
|
312
|
+
"""Get object ID."""
|
313
|
+
ret = super().object_id
|
314
|
+
self.is_dirty = False # Reset dirty flag
|
315
|
+
return ret
|
316
|
+
|
317
|
+
@property
|
318
|
+
def is_dirty(self) -> bool:
|
319
|
+
"""Check if the object is dirty after the last deflation."""
|
320
|
+
if "_is_dirty" not in self.__dict__:
|
321
|
+
self.__dict__["_is_dirty"] = True
|
322
|
+
return cast(bool, self.__dict__["_is_dirty"])
|
323
|
+
|
324
|
+
@is_dirty.setter
|
325
|
+
def is_dirty(self, value: bool) -> None:
|
326
|
+
"""Set the dirty flag."""
|
327
|
+
self.__dict__["_is_dirty"] = value
|
328
|
+
|
329
|
+
def __setattr__(self, name: str, value: Any) -> None:
|
330
|
+
"""Set attribute with special handling for dirty state."""
|
331
|
+
if name in ("dtype", "stype", "data"):
|
332
|
+
# Mark as dirty if any of the main attributes are set
|
333
|
+
self.is_dirty = True
|
334
|
+
super().__setattr__(name, value)
|
@@ -429,6 +429,40 @@ class ArrayRecord(TypedDict[str, Array], InflatableObject):
|
|
429
429
|
)
|
430
430
|
)
|
431
431
|
|
432
|
+
@property
|
433
|
+
def object_id(self) -> str:
|
434
|
+
"""Get object ID."""
|
435
|
+
ret = super().object_id
|
436
|
+
self.is_dirty = False # Reset dirty flag
|
437
|
+
return ret
|
438
|
+
|
439
|
+
@property
|
440
|
+
def is_dirty(self) -> bool:
|
441
|
+
"""Check if the object is dirty after the last deflation."""
|
442
|
+
if "_is_dirty" not in self.__dict__:
|
443
|
+
self.__dict__["_is_dirty"] = True
|
444
|
+
|
445
|
+
if not self.__dict__["_is_dirty"]:
|
446
|
+
if any(v.is_dirty for v in self.values()):
|
447
|
+
# If any Array is dirty, mark the record as dirty
|
448
|
+
self.__dict__["_is_dirty"] = True
|
449
|
+
return cast(bool, self.__dict__["_is_dirty"])
|
450
|
+
|
451
|
+
@is_dirty.setter
|
452
|
+
def is_dirty(self, value: bool) -> None:
|
453
|
+
"""Set the dirty flag."""
|
454
|
+
self.__dict__["_is_dirty"] = value
|
455
|
+
|
456
|
+
def __setitem__(self, key: str, value: Array) -> None:
|
457
|
+
"""Set item and mark the record as dirty."""
|
458
|
+
self.is_dirty = True # Mark as dirty when setting an item
|
459
|
+
super().__setitem__(key, value)
|
460
|
+
|
461
|
+
def __delitem__(self, key: str) -> None:
|
462
|
+
"""Delete item and mark the record as dirty."""
|
463
|
+
self.is_dirty = True # Mark as dirty when deleting an item
|
464
|
+
super().__delitem__(key)
|
465
|
+
|
432
466
|
|
433
467
|
class ParametersRecord(ArrayRecord):
|
434
468
|
"""Deprecated class ``ParametersRecord``, use ``ArrayRecord`` instead.
|
@@ -378,7 +378,12 @@ def scalar_from_proto(scalar_msg: Scalar) -> typing.Scalar:
|
|
378
378
|
|
379
379
|
def array_to_proto(array: Array) -> ProtoArray:
|
380
380
|
"""Serialize Array to ProtoBuf."""
|
381
|
-
return ProtoArray(
|
381
|
+
return ProtoArray(
|
382
|
+
dtype=array.dtype,
|
383
|
+
shape=array.shape,
|
384
|
+
stype=array.stype,
|
385
|
+
data=array.data,
|
386
|
+
)
|
382
387
|
|
383
388
|
|
384
389
|
def array_from_proto(array_proto: ProtoArray) -> Array:
|
{flwr_nightly-1.19.0.dev20250527 → flwr_nightly-1.19.0.dev20250528}/py/flwr/server/grid/grpc_grid.py
RENAMED
@@ -163,7 +163,7 @@ class GrpcGrid(Grid):
|
|
163
163
|
def _check_message(self, message: Message) -> None:
|
164
164
|
# Check if the message is valid
|
165
165
|
if not (
|
166
|
-
message.metadata.message_id
|
166
|
+
message.metadata.message_id != ""
|
167
167
|
and message.metadata.reply_to_message_id == ""
|
168
168
|
and message.metadata.ttl > 0
|
169
169
|
):
|
@@ -211,6 +211,7 @@ class GrpcGrid(Grid):
|
|
211
211
|
# Populate metadata
|
212
212
|
msg.metadata.__dict__["_run_id"] = run_id
|
213
213
|
msg.metadata.__dict__["_src_node_id"] = self.node.node_id
|
214
|
+
msg.metadata.__dict__["_message_id"] = msg.object_id
|
214
215
|
# Check message
|
215
216
|
self._check_message(msg)
|
216
217
|
# Convert to proto
|
@@ -18,7 +18,7 @@
|
|
18
18
|
import time
|
19
19
|
from collections.abc import Iterable
|
20
20
|
from typing import Optional, cast
|
21
|
-
from uuid import
|
21
|
+
from uuid import uuid4
|
22
22
|
|
23
23
|
from flwr.common import Message, RecordDict
|
24
24
|
from flwr.common.constant import SUPERLINK_NODE_ID
|
@@ -56,7 +56,7 @@ class InMemoryGrid(Grid):
|
|
56
56
|
def _check_message(self, message: Message) -> None:
|
57
57
|
# Check if the message is valid
|
58
58
|
if not (
|
59
|
-
message.metadata.message_id
|
59
|
+
message.metadata.message_id != ""
|
60
60
|
and message.metadata.reply_to_message_id == ""
|
61
61
|
and message.metadata.ttl > 0
|
62
62
|
and message.metadata.delivered_at == ""
|
@@ -111,6 +111,7 @@ class InMemoryGrid(Grid):
|
|
111
111
|
# Populate metadata
|
112
112
|
msg.metadata.__dict__["_run_id"] = cast(Run, self._run).run_id
|
113
113
|
msg.metadata.__dict__["_src_node_id"] = self.node.node_id
|
114
|
+
msg.metadata.__dict__["_message_id"] = str(uuid4())
|
114
115
|
# Check message
|
115
116
|
self._check_message(msg)
|
116
117
|
# Store in state
|
@@ -126,12 +127,12 @@ class InMemoryGrid(Grid):
|
|
126
127
|
This method is used to collect messages from the SuperLink that correspond to a
|
127
128
|
set of given message IDs.
|
128
129
|
"""
|
129
|
-
msg_ids =
|
130
|
+
msg_ids = set(message_ids)
|
130
131
|
# Pull Messages
|
131
132
|
message_res_list = self.state.get_message_res(message_ids=msg_ids)
|
132
133
|
# Get IDs of Messages these replies are for
|
133
134
|
message_ins_ids_to_delete = {
|
134
|
-
|
135
|
+
msg_res.metadata.reply_to_message_id for msg_res in message_res_list
|
135
136
|
}
|
136
137
|
# Delete
|
137
138
|
self.state.delete_messages(message_ins_ids=message_ins_ids_to_delete)
|
@@ -16,7 +16,6 @@
|
|
16
16
|
|
17
17
|
|
18
18
|
from typing import Optional
|
19
|
-
from uuid import UUID
|
20
19
|
|
21
20
|
from flwr.common import Message
|
22
21
|
from flwr.common.constant import Status
|
@@ -122,7 +121,7 @@ def push_messages(
|
|
122
121
|
raise InvalidRunStatusException(abort_msg)
|
123
122
|
|
124
123
|
# Store Message in State
|
125
|
-
message_id: Optional[
|
124
|
+
message_id: Optional[str] = state.store_message_res(message=msg)
|
126
125
|
|
127
126
|
# Build response
|
128
127
|
response = PushMessagesResponse(
|
@@ -25,6 +25,7 @@ from pathlib import Path
|
|
25
25
|
from queue import Empty, Queue
|
26
26
|
from time import sleep
|
27
27
|
from typing import Callable, Optional
|
28
|
+
from uuid import uuid4
|
28
29
|
|
29
30
|
from flwr.app.error import Error
|
30
31
|
from flwr.client.client_app import ClientApp, ClientAppException, LoadClientAppError
|
@@ -134,6 +135,8 @@ def worker(
|
|
134
135
|
|
135
136
|
finally:
|
136
137
|
if out_mssg:
|
138
|
+
# Assign a message_id
|
139
|
+
out_mssg.metadata.__dict__["_message_id"] = str(uuid4())
|
137
140
|
# Store reply Messages in state
|
138
141
|
messageres_queue.put(out_mssg)
|
139
142
|
|
@@ -21,7 +21,6 @@ from bisect import bisect_right
|
|
21
21
|
from dataclasses import dataclass, field
|
22
22
|
from logging import ERROR, WARNING
|
23
23
|
from typing import Optional
|
24
|
-
from uuid import UUID, uuid4
|
25
24
|
|
26
25
|
from flwr.common import Context, Message, log, now
|
27
26
|
from flwr.common.constant import (
|
@@ -76,15 +75,15 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
76
75
|
self.run_ids: dict[int, RunRecord] = {}
|
77
76
|
self.contexts: dict[int, Context] = {}
|
78
77
|
self.federation_options: dict[int, ConfigRecord] = {}
|
79
|
-
self.message_ins_store: dict[
|
80
|
-
self.message_res_store: dict[
|
81
|
-
self.message_ins_id_to_message_res_id: dict[
|
78
|
+
self.message_ins_store: dict[str, Message] = {}
|
79
|
+
self.message_res_store: dict[str, Message] = {}
|
80
|
+
self.message_ins_id_to_message_res_id: dict[str, str] = {}
|
82
81
|
|
83
82
|
self.node_public_keys: set[bytes] = set()
|
84
83
|
|
85
84
|
self.lock = threading.RLock()
|
86
85
|
|
87
|
-
def store_message_ins(self, message: Message) -> Optional[
|
86
|
+
def store_message_ins(self, message: Message) -> Optional[str]:
|
88
87
|
"""Store one Message."""
|
89
88
|
# Validate message
|
90
89
|
errors = validate_message(message, is_reply_message=False)
|
@@ -112,12 +111,7 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
112
111
|
)
|
113
112
|
return None
|
114
113
|
|
115
|
-
|
116
|
-
message_id = uuid4()
|
117
|
-
|
118
|
-
# Store Message
|
119
|
-
# pylint: disable-next=W0212
|
120
|
-
message.metadata._message_id = str(message_id) # type: ignore
|
114
|
+
message_id = message.metadata.message_id
|
121
115
|
with self.lock:
|
122
116
|
self.message_ins_store[message_id] = message
|
123
117
|
|
@@ -153,7 +147,7 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
153
147
|
return message_ins_list
|
154
148
|
|
155
149
|
# pylint: disable=R0911
|
156
|
-
def store_message_res(self, message: Message) -> Optional[
|
150
|
+
def store_message_res(self, message: Message) -> Optional[str]:
|
157
151
|
"""Store one Message."""
|
158
152
|
# Validate message
|
159
153
|
errors = validate_message(message, is_reply_message=True)
|
@@ -165,7 +159,7 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
165
159
|
with self.lock:
|
166
160
|
# Check if the Message it is replying to exists and is valid
|
167
161
|
msg_ins_id = res_metadata.reply_to_message_id
|
168
|
-
msg_ins = self.message_ins_store.get(
|
162
|
+
msg_ins = self.message_ins_store.get(msg_ins_id)
|
169
163
|
|
170
164
|
# Ensure that dst_node_id of original Message matches the src_node_id of
|
171
165
|
# reply Message.
|
@@ -220,22 +214,17 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
220
214
|
log(ERROR, "`metadata.run_id` is invalid")
|
221
215
|
return None
|
222
216
|
|
223
|
-
|
224
|
-
message_id = uuid4()
|
225
|
-
|
226
|
-
# Store Message
|
227
|
-
# pylint: disable-next=W0212
|
228
|
-
message.metadata._message_id = str(message_id) # type: ignore
|
217
|
+
message_id = message.metadata.message_id
|
229
218
|
with self.lock:
|
230
219
|
self.message_res_store[message_id] = message
|
231
|
-
self.message_ins_id_to_message_res_id[
|
220
|
+
self.message_ins_id_to_message_res_id[msg_ins_id] = message_id
|
232
221
|
|
233
222
|
# Return the new message_id
|
234
223
|
return message_id
|
235
224
|
|
236
|
-
def get_message_res(self, message_ids: set[
|
225
|
+
def get_message_res(self, message_ids: set[str]) -> list[Message]:
|
237
226
|
"""Get reply Messages for the given Message IDs."""
|
238
|
-
ret: dict[
|
227
|
+
ret: dict[str, Message] = {}
|
239
228
|
|
240
229
|
with self.lock:
|
241
230
|
current = time.time()
|
@@ -287,7 +276,7 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
287
276
|
|
288
277
|
return list(ret.values())
|
289
278
|
|
290
|
-
def delete_messages(self, message_ins_ids: set[
|
279
|
+
def delete_messages(self, message_ins_ids: set[str]) -> None:
|
291
280
|
"""Delete a Message and its reply based on provided Message IDs."""
|
292
281
|
if not message_ins_ids:
|
293
282
|
return
|
@@ -304,9 +293,9 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
304
293
|
)
|
305
294
|
del self.message_res_store[message_res_id]
|
306
295
|
|
307
|
-
def get_message_ids_from_run_id(self, run_id: int) -> set[
|
296
|
+
def get_message_ids_from_run_id(self, run_id: int) -> set[str]:
|
308
297
|
"""Get all instruction Message IDs for the given run_id."""
|
309
|
-
message_id_list: set[
|
298
|
+
message_id_list: set[str] = set()
|
310
299
|
with self.lock:
|
311
300
|
for message_id, message in self.message_ins_store.items():
|
312
301
|
if message.metadata.run_id == run_id:
|
@@ -17,7 +17,6 @@
|
|
17
17
|
|
18
18
|
import abc
|
19
19
|
from typing import Optional
|
20
|
-
from uuid import UUID
|
21
20
|
|
22
21
|
from flwr.common import Context, Message
|
23
22
|
from flwr.common.record import ConfigRecord
|
@@ -28,13 +27,13 @@ class LinkState(abc.ABC): # pylint: disable=R0904
|
|
28
27
|
"""Abstract LinkState."""
|
29
28
|
|
30
29
|
@abc.abstractmethod
|
31
|
-
def store_message_ins(self, message: Message) -> Optional[
|
30
|
+
def store_message_ins(self, message: Message) -> Optional[str]:
|
32
31
|
"""Store one Message.
|
33
32
|
|
34
33
|
Usually, the ServerAppIo API calls this to schedule instructions.
|
35
34
|
|
36
35
|
Stores the value of the `message` in the link state and, if successful,
|
37
|
-
returns the `message_id` (
|
36
|
+
returns the `message_id` (str) of the `message`. If, for any reason,
|
38
37
|
storing the `message` fails, `None` is returned.
|
39
38
|
|
40
39
|
Constraints
|
@@ -61,12 +60,12 @@ class LinkState(abc.ABC): # pylint: disable=R0904
|
|
61
60
|
"""
|
62
61
|
|
63
62
|
@abc.abstractmethod
|
64
|
-
def store_message_res(self, message: Message) -> Optional[
|
63
|
+
def store_message_res(self, message: Message) -> Optional[str]:
|
65
64
|
"""Store one Message.
|
66
65
|
|
67
66
|
Usually, the Fleet API calls this for Nodes returning results.
|
68
67
|
|
69
|
-
Stores the Message and, if successful, returns the `message_id` (
|
68
|
+
Stores the Message and, if successful, returns the `message_id` (str) of
|
70
69
|
the `message`. If storing the `message` fails, `None` is returned.
|
71
70
|
|
72
71
|
Constraints
|
@@ -78,7 +77,7 @@ class LinkState(abc.ABC): # pylint: disable=R0904
|
|
78
77
|
"""
|
79
78
|
|
80
79
|
@abc.abstractmethod
|
81
|
-
def get_message_res(self, message_ids: set[
|
80
|
+
def get_message_res(self, message_ids: set[str]) -> list[Message]:
|
82
81
|
"""Get reply Messages for the given Message IDs.
|
83
82
|
|
84
83
|
This method is typically called by the ServerAppIo API to obtain
|
@@ -94,7 +93,7 @@ class LinkState(abc.ABC): # pylint: disable=R0904
|
|
94
93
|
|
95
94
|
Parameters
|
96
95
|
----------
|
97
|
-
message_ids : set[
|
96
|
+
message_ids : set[str]
|
98
97
|
A set of Message IDs used to retrieve reply Messages responding to them.
|
99
98
|
|
100
99
|
Returns
|
@@ -113,18 +112,18 @@ class LinkState(abc.ABC): # pylint: disable=R0904
|
|
113
112
|
"""Calculate the number of reply Messages in store."""
|
114
113
|
|
115
114
|
@abc.abstractmethod
|
116
|
-
def delete_messages(self, message_ins_ids: set[
|
115
|
+
def delete_messages(self, message_ins_ids: set[str]) -> None:
|
117
116
|
"""Delete a Message and its reply based on provided Message IDs.
|
118
117
|
|
119
118
|
Parameters
|
120
119
|
----------
|
121
|
-
message_ins_ids : set[
|
120
|
+
message_ins_ids : set[str]
|
122
121
|
A set of Message IDs. For each ID in the set, the corresponding
|
123
122
|
Message and its associated reply Message will be deleted.
|
124
123
|
"""
|
125
124
|
|
126
125
|
@abc.abstractmethod
|
127
|
-
def get_message_ids_from_run_id(self, run_id: int) -> set[
|
126
|
+
def get_message_ids_from_run_id(self, run_id: int) -> set[str]:
|
128
127
|
"""Get all instruction Message IDs for the given run_id."""
|
129
128
|
|
130
129
|
@abc.abstractmethod
|