flwr-nightly 1.11.1.dev20240911__tar.gz → 1.12.0.dev20240830__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.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/PKG-INFO +1 -1
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/pyproject.toml +1 -1
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/new.py +37 -23
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +29 -19
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +3 -0
- flwr_nightly-1.12.0.dev20240830/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +23 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +13 -16
- flwr_nightly-1.12.0.dev20240830/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +38 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/client_app.py +2 -2
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +3 -2
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/recordset.py +1 -1
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/typeddict.py +1 -24
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +1 -2
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +12 -21
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/ray_actor.py +2 -2
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/run_simulation.py +2 -14
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/app.py +1 -3
- flwr_nightly-1.11.1.dev20240911/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -38
- flwr_nightly-1.11.1.dev20240911/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -46
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/LICENSE +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/README.md +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "flwr-nightly"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.12.0.dev20240830"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
{flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/cli/new/new.py
RENAMED
|
@@ -136,23 +136,36 @@ def new(
|
|
|
136
136
|
username = prompt_text("Please provide your Flower username")
|
|
137
137
|
|
|
138
138
|
if framework is not None:
|
|
139
|
-
|
|
139
|
+
framework_str_upper = str(framework.value)
|
|
140
140
|
else:
|
|
141
|
-
|
|
141
|
+
framework_value = prompt_options(
|
|
142
142
|
"Please select ML framework by typing in the number",
|
|
143
143
|
[mlf.value for mlf in MlFramework],
|
|
144
144
|
)
|
|
145
|
+
selected_value = [
|
|
146
|
+
name
|
|
147
|
+
for name, value in vars(MlFramework).items()
|
|
148
|
+
if value == framework_value
|
|
149
|
+
]
|
|
150
|
+
framework_str_upper = selected_value[0]
|
|
151
|
+
|
|
152
|
+
framework_str = framework_str_upper.lower()
|
|
145
153
|
|
|
146
154
|
llm_challenge_str = None
|
|
147
|
-
if framework_str ==
|
|
155
|
+
if framework_str == "flowertune":
|
|
148
156
|
llm_challenge_value = prompt_options(
|
|
149
157
|
"Please select LLM challenge by typing in the number",
|
|
150
158
|
sorted([challenge.value for challenge in LlmChallengeName]),
|
|
151
159
|
)
|
|
152
|
-
|
|
160
|
+
selected_value = [
|
|
161
|
+
name
|
|
162
|
+
for name, value in vars(LlmChallengeName).items()
|
|
163
|
+
if value == llm_challenge_value
|
|
164
|
+
]
|
|
165
|
+
llm_challenge_str = selected_value[0]
|
|
166
|
+
llm_challenge_str = llm_challenge_str.lower()
|
|
153
167
|
|
|
154
|
-
|
|
155
|
-
framework_str = "baseline"
|
|
168
|
+
is_baseline_project = framework_str == "baseline"
|
|
156
169
|
|
|
157
170
|
print(
|
|
158
171
|
typer.style(
|
|
@@ -163,21 +176,19 @@ def new(
|
|
|
163
176
|
)
|
|
164
177
|
|
|
165
178
|
context = {
|
|
166
|
-
"framework_str":
|
|
179
|
+
"framework_str": framework_str_upper,
|
|
167
180
|
"import_name": import_name.replace("-", "_"),
|
|
168
181
|
"package_name": package_name,
|
|
169
182
|
"project_name": app_name,
|
|
170
183
|
"username": username,
|
|
171
184
|
}
|
|
172
185
|
|
|
173
|
-
template_name = framework_str.lower()
|
|
174
|
-
|
|
175
186
|
# List of files to render
|
|
176
187
|
if llm_challenge_str:
|
|
177
188
|
files = {
|
|
178
189
|
".gitignore": {"template": "app/.gitignore.tpl"},
|
|
179
|
-
"pyproject.toml": {"template": f"app/pyproject.{
|
|
180
|
-
"README.md": {"template": f"app/README.{
|
|
190
|
+
"pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
|
|
191
|
+
"README.md": {"template": f"app/README.{framework_str}.md.tpl"},
|
|
181
192
|
f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
|
|
182
193
|
f"{import_name}/server_app.py": {
|
|
183
194
|
"template": "app/code/flwr_tune/server_app.py.tpl"
|
|
@@ -185,6 +196,7 @@ def new(
|
|
|
185
196
|
f"{import_name}/client_app.py": {
|
|
186
197
|
"template": "app/code/flwr_tune/client_app.py.tpl"
|
|
187
198
|
},
|
|
199
|
+
f"{import_name}/app.py": {"template": "app/code/flwr_tune/app.py.tpl"},
|
|
188
200
|
f"{import_name}/models.py": {
|
|
189
201
|
"template": "app/code/flwr_tune/models.py.tpl"
|
|
190
202
|
},
|
|
@@ -224,42 +236,44 @@ def new(
|
|
|
224
236
|
files = {
|
|
225
237
|
".gitignore": {"template": "app/.gitignore.tpl"},
|
|
226
238
|
"README.md": {"template": "app/README.md.tpl"},
|
|
227
|
-
"pyproject.toml": {"template": f"app/pyproject.{
|
|
239
|
+
"pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
|
|
228
240
|
f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
|
|
229
241
|
f"{import_name}/server_app.py": {
|
|
230
|
-
"template": f"app/code/server.{
|
|
242
|
+
"template": f"app/code/server.{framework_str}.py.tpl"
|
|
231
243
|
},
|
|
232
244
|
f"{import_name}/client_app.py": {
|
|
233
|
-
"template": f"app/code/client.{
|
|
245
|
+
"template": f"app/code/client.{framework_str}.py.tpl"
|
|
234
246
|
},
|
|
235
247
|
}
|
|
236
248
|
|
|
237
249
|
# Depending on the framework, generate task.py file
|
|
238
250
|
frameworks_with_tasks = [
|
|
239
|
-
MlFramework.PYTORCH.value,
|
|
240
|
-
MlFramework.JAX.value,
|
|
241
|
-
MlFramework.HUGGINGFACE.value,
|
|
242
|
-
MlFramework.MLX.value,
|
|
243
|
-
MlFramework.TENSORFLOW.value,
|
|
251
|
+
MlFramework.PYTORCH.value.lower(),
|
|
252
|
+
MlFramework.JAX.value.lower(),
|
|
253
|
+
MlFramework.HUGGINGFACE.value.lower(),
|
|
254
|
+
MlFramework.MLX.value.lower(),
|
|
255
|
+
MlFramework.TENSORFLOW.value.lower(),
|
|
244
256
|
]
|
|
245
257
|
if framework_str in frameworks_with_tasks:
|
|
246
258
|
files[f"{import_name}/task.py"] = {
|
|
247
|
-
"template": f"app/code/task.{
|
|
259
|
+
"template": f"app/code/task.{framework_str}.py.tpl"
|
|
248
260
|
}
|
|
249
261
|
|
|
250
|
-
if
|
|
262
|
+
if is_baseline_project:
|
|
251
263
|
# Include additional files for baseline template
|
|
252
264
|
for file_name in ["model", "dataset", "strategy", "utils", "__init__"]:
|
|
253
265
|
files[f"{import_name}/{file_name}.py"] = {
|
|
254
|
-
"template": f"app/code/{file_name}.{
|
|
266
|
+
"template": f"app/code/{file_name}.{framework_str}.py.tpl"
|
|
255
267
|
}
|
|
256
268
|
|
|
257
269
|
# Replace README.md
|
|
258
|
-
files["README.md"]["template"] = f"app/README.{
|
|
270
|
+
files["README.md"]["template"] = f"app/README.{framework_str}.md.tpl"
|
|
259
271
|
|
|
260
272
|
# Add LICENSE
|
|
261
273
|
files["LICENSE"] = {"template": "app/LICENSE.tpl"}
|
|
262
274
|
|
|
275
|
+
context["framework_str"] = "baseline"
|
|
276
|
+
|
|
263
277
|
for file_path, value in files.items():
|
|
264
278
|
render_and_create(
|
|
265
279
|
file_path=project_dir / file_path,
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
|
-
import torch
|
|
4
3
|
from flwr.client import ClientApp, NumPyClient
|
|
5
4
|
from flwr.common import Context
|
|
6
5
|
from transformers import AutoModelForSequenceClassification
|
|
7
6
|
|
|
8
|
-
from $import_name.task import
|
|
7
|
+
from $import_name.task import (
|
|
8
|
+
get_weights,
|
|
9
|
+
load_data,
|
|
10
|
+
set_weights,
|
|
11
|
+
train,
|
|
12
|
+
test,
|
|
13
|
+
CHECKPOINT,
|
|
14
|
+
DEVICE,
|
|
15
|
+
)
|
|
9
16
|
|
|
10
17
|
|
|
11
18
|
# Flower client
|
|
@@ -15,34 +22,37 @@ class FlowerClient(NumPyClient):
|
|
|
15
22
|
self.trainloader = trainloader
|
|
16
23
|
self.testloader = testloader
|
|
17
24
|
self.local_epochs = local_epochs
|
|
18
|
-
self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
|
19
|
-
self.net.to(self.device)
|
|
20
25
|
|
|
21
|
-
def
|
|
26
|
+
def get_parameters(self, config):
|
|
27
|
+
return get_weights(self.net)
|
|
28
|
+
|
|
29
|
+
def set_parameters(self, parameters):
|
|
22
30
|
set_weights(self.net, parameters)
|
|
23
|
-
|
|
24
|
-
|
|
31
|
+
|
|
32
|
+
def fit(self, parameters, config):
|
|
33
|
+
self.set_parameters(parameters)
|
|
34
|
+
train(
|
|
35
|
+
self.net,
|
|
36
|
+
self.trainloader,
|
|
37
|
+
epochs=self.local_epochs,
|
|
38
|
+
)
|
|
39
|
+
return self.get_parameters(config={}), len(self.trainloader), {}
|
|
25
40
|
|
|
26
41
|
def evaluate(self, parameters, config):
|
|
27
|
-
|
|
28
|
-
loss, accuracy = test(self.net, self.testloader
|
|
42
|
+
self.set_parameters(parameters)
|
|
43
|
+
loss, accuracy = test(self.net, self.testloader)
|
|
29
44
|
return float(loss), len(self.testloader), {"accuracy": accuracy}
|
|
30
45
|
|
|
31
46
|
|
|
32
47
|
def client_fn(context: Context):
|
|
48
|
+
# Load model and data
|
|
49
|
+
net = AutoModelForSequenceClassification.from_pretrained(
|
|
50
|
+
CHECKPOINT, num_labels=2
|
|
51
|
+
).to(DEVICE)
|
|
33
52
|
|
|
34
|
-
# Get this client's dataset partition
|
|
35
53
|
partition_id = context.node_config["partition-id"]
|
|
36
54
|
num_partitions = context.node_config["num-partitions"]
|
|
37
|
-
|
|
38
|
-
trainloader, valloader = load_data(partition_id, num_partitions, model_name)
|
|
39
|
-
|
|
40
|
-
# Load model
|
|
41
|
-
num_labels = context.run_config["num-labels"]
|
|
42
|
-
net = AutoModelForSequenceClassification.from_pretrained(
|
|
43
|
-
model_name, num_labels=num_labels
|
|
44
|
-
)
|
|
45
|
-
|
|
55
|
+
trainloader, valloader = load_data(partition_id, num_partitions)
|
|
46
56
|
local_epochs = context.run_config["local-epochs"]
|
|
47
57
|
|
|
48
58
|
# Return Client instance
|
|
@@ -17,6 +17,9 @@ class FlowerClient(NumPyClient):
|
|
|
17
17
|
self.batch_size = batch_size
|
|
18
18
|
self.verbose = verbose
|
|
19
19
|
|
|
20
|
+
def get_parameters(self, config):
|
|
21
|
+
return self.model.get_weights()
|
|
22
|
+
|
|
20
23
|
def fit(self, parameters, config):
|
|
21
24
|
self.model.set_weights(parameters)
|
|
22
25
|
self.model.fit(
|
flwr_nightly-1.12.0.dev20240830/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""$project_name: A Flower / $framework_str app."""
|
|
2
|
+
|
|
3
|
+
from flwr.common import Context
|
|
4
|
+
from flwr.server.strategy import FedAvg
|
|
5
|
+
from flwr.server import ServerApp, ServerAppComponents, ServerConfig
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def server_fn(context: Context):
|
|
9
|
+
# Read from config
|
|
10
|
+
num_rounds = context.run_config["num-server-rounds"]
|
|
11
|
+
|
|
12
|
+
# Define strategy
|
|
13
|
+
strategy = FedAvg(
|
|
14
|
+
fraction_fit=1.0,
|
|
15
|
+
fraction_evaluate=1.0,
|
|
16
|
+
)
|
|
17
|
+
config = ServerConfig(num_rounds=num_rounds)
|
|
18
|
+
|
|
19
|
+
return ServerAppComponents(strategy=strategy, config=config)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Create ServerApp
|
|
23
|
+
app = ServerApp(server_fn=server_fn)
|
|
@@ -4,25 +4,24 @@ import warnings
|
|
|
4
4
|
from collections import OrderedDict
|
|
5
5
|
|
|
6
6
|
import torch
|
|
7
|
-
import transformers
|
|
8
|
-
from datasets.utils.logging import disable_progress_bar
|
|
9
7
|
from evaluate import load as load_metric
|
|
10
|
-
from flwr_datasets import FederatedDataset
|
|
11
|
-
from flwr_datasets.partitioner import IidPartitioner
|
|
12
8
|
from torch.optim import AdamW
|
|
13
9
|
from torch.utils.data import DataLoader
|
|
14
10
|
from transformers import AutoTokenizer, DataCollatorWithPadding
|
|
15
11
|
|
|
12
|
+
from flwr_datasets import FederatedDataset
|
|
13
|
+
from flwr_datasets.partitioner import IidPartitioner
|
|
14
|
+
|
|
15
|
+
|
|
16
16
|
warnings.filterwarnings("ignore", category=UserWarning)
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
transformers.logging.set_verbosity_error()
|
|
17
|
+
DEVICE = torch.device("cpu")
|
|
18
|
+
CHECKPOINT = "distilbert-base-uncased" # transformer model checkpoint
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
fds = None # Cache FederatedDataset
|
|
23
22
|
|
|
24
23
|
|
|
25
|
-
def load_data(partition_id: int, num_partitions: int
|
|
24
|
+
def load_data(partition_id: int, num_partitions: int):
|
|
26
25
|
"""Load IMDB data (training and eval)"""
|
|
27
26
|
# Only initialize `FederatedDataset` once
|
|
28
27
|
global fds
|
|
@@ -36,12 +35,10 @@ def load_data(partition_id: int, num_partitions: int, model_name: str):
|
|
|
36
35
|
# Divide data: 80% train, 20% test
|
|
37
36
|
partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
|
|
38
37
|
|
|
39
|
-
tokenizer = AutoTokenizer.from_pretrained(
|
|
38
|
+
tokenizer = AutoTokenizer.from_pretrained(CHECKPOINT)
|
|
40
39
|
|
|
41
40
|
def tokenize_function(examples):
|
|
42
|
-
return tokenizer(
|
|
43
|
-
examples["text"], truncation=True, add_special_tokens=True, max_length=512
|
|
44
|
-
)
|
|
41
|
+
return tokenizer(examples["text"], truncation=True)
|
|
45
42
|
|
|
46
43
|
partition_train_test = partition_train_test.map(tokenize_function, batched=True)
|
|
47
44
|
partition_train_test = partition_train_test.remove_columns("text")
|
|
@@ -62,12 +59,12 @@ def load_data(partition_id: int, num_partitions: int, model_name: str):
|
|
|
62
59
|
return trainloader, testloader
|
|
63
60
|
|
|
64
61
|
|
|
65
|
-
def train(net, trainloader, epochs
|
|
62
|
+
def train(net, trainloader, epochs):
|
|
66
63
|
optimizer = AdamW(net.parameters(), lr=5e-5)
|
|
67
64
|
net.train()
|
|
68
65
|
for _ in range(epochs):
|
|
69
66
|
for batch in trainloader:
|
|
70
|
-
batch = {k: v.to(
|
|
67
|
+
batch = {k: v.to(DEVICE) for k, v in batch.items()}
|
|
71
68
|
outputs = net(**batch)
|
|
72
69
|
loss = outputs.loss
|
|
73
70
|
loss.backward()
|
|
@@ -75,12 +72,12 @@ def train(net, trainloader, epochs, device):
|
|
|
75
72
|
optimizer.zero_grad()
|
|
76
73
|
|
|
77
74
|
|
|
78
|
-
def test(net, testloader
|
|
75
|
+
def test(net, testloader):
|
|
79
76
|
metric = load_metric("accuracy")
|
|
80
77
|
loss = 0
|
|
81
78
|
net.eval()
|
|
82
79
|
for batch in testloader:
|
|
83
|
-
batch = {k: v.to(
|
|
80
|
+
batch = {k: v.to(DEVICE) for k, v in batch.items()}
|
|
84
81
|
with torch.no_grad():
|
|
85
82
|
outputs = net(**batch)
|
|
86
83
|
logits = outputs.logits
|
flwr_nightly-1.12.0.dev20240830/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "$package_name"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = ""
|
|
9
|
+
license = "Apache-2.0"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"flwr[simulation]>=1.10.0",
|
|
12
|
+
"flwr-datasets>=0.3.0",
|
|
13
|
+
"torch==2.2.1",
|
|
14
|
+
"transformers>=4.30.0,<5.0",
|
|
15
|
+
"evaluate>=0.4.0,<1.0",
|
|
16
|
+
"datasets>=2.0.0, <3.0",
|
|
17
|
+
"scikit-learn>=1.3.1, <2.0",
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[tool.hatch.build.targets.wheel]
|
|
21
|
+
packages = ["."]
|
|
22
|
+
|
|
23
|
+
[tool.flwr.app]
|
|
24
|
+
publisher = "$username"
|
|
25
|
+
|
|
26
|
+
[tool.flwr.app.components]
|
|
27
|
+
serverapp = "$import_name.server_app:app"
|
|
28
|
+
clientapp = "$import_name.client_app:app"
|
|
29
|
+
|
|
30
|
+
[tool.flwr.app.config]
|
|
31
|
+
num-server-rounds = 3
|
|
32
|
+
local-epochs = 1
|
|
33
|
+
|
|
34
|
+
[tool.flwr.federations]
|
|
35
|
+
default = "localhost"
|
|
36
|
+
|
|
37
|
+
[tool.flwr.federations.localhost]
|
|
38
|
+
options.num-supernodes = 10
|
{flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/client/client_app.py
RENAMED
|
@@ -41,11 +41,11 @@ def _alert_erroneous_client_fn() -> None:
|
|
|
41
41
|
|
|
42
42
|
def _inspect_maybe_adapt_client_fn_signature(client_fn: ClientFnExt) -> ClientFnExt:
|
|
43
43
|
client_fn_args = inspect.signature(client_fn).parameters
|
|
44
|
+
first_arg = list(client_fn_args.keys())[0]
|
|
44
45
|
|
|
45
46
|
if len(client_fn_args) != 1:
|
|
46
47
|
_alert_erroneous_client_fn()
|
|
47
48
|
|
|
48
|
-
first_arg = list(client_fn_args.keys())[0]
|
|
49
49
|
first_arg_type = client_fn_args[first_arg].annotation
|
|
50
50
|
|
|
51
51
|
if first_arg_type is str or first_arg == "cid":
|
|
@@ -263,7 +263,7 @@ def _registration_error(fn_name: str) -> ValueError:
|
|
|
263
263
|
>>> class FlowerClient(NumPyClient):
|
|
264
264
|
>>> # ...
|
|
265
265
|
>>>
|
|
266
|
-
>>> def client_fn(
|
|
266
|
+
>>> def client_fn(cid) -> Client:
|
|
267
267
|
>>> return FlowerClient().to_client()
|
|
268
268
|
>>>
|
|
269
269
|
>>> app = ClientApp(
|
|
@@ -130,12 +130,13 @@ class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type:
|
|
|
130
130
|
if self.shared_secret is None:
|
|
131
131
|
raise RuntimeError("Failure to compute hmac")
|
|
132
132
|
|
|
133
|
-
message_bytes = request.SerializeToString(deterministic=True)
|
|
134
133
|
metadata.append(
|
|
135
134
|
(
|
|
136
135
|
_AUTH_TOKEN_HEADER,
|
|
137
136
|
base64.urlsafe_b64encode(
|
|
138
|
-
compute_hmac(
|
|
137
|
+
compute_hmac(
|
|
138
|
+
self.shared_secret, request.SerializeToString(True)
|
|
139
|
+
)
|
|
139
140
|
),
|
|
140
141
|
)
|
|
141
142
|
)
|
|
@@ -119,7 +119,7 @@ class RecordSet:
|
|
|
119
119
|
Let's see an example.
|
|
120
120
|
|
|
121
121
|
>>> from flwr.common import RecordSet
|
|
122
|
-
>>> from flwr.common import
|
|
122
|
+
>>> from flwr.common import ConfigsRecords, MetricsRecords, ParametersRecord
|
|
123
123
|
>>>
|
|
124
124
|
>>> # Let's begin with an empty record
|
|
125
125
|
>>> my_recordset = RecordSet()
|
|
@@ -15,18 +15,7 @@
|
|
|
15
15
|
"""Typed dict base class for *Records."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
from typing import
|
|
19
|
-
Callable,
|
|
20
|
-
Dict,
|
|
21
|
-
Generic,
|
|
22
|
-
ItemsView,
|
|
23
|
-
Iterator,
|
|
24
|
-
KeysView,
|
|
25
|
-
MutableMapping,
|
|
26
|
-
TypeVar,
|
|
27
|
-
ValuesView,
|
|
28
|
-
cast,
|
|
29
|
-
)
|
|
18
|
+
from typing import Callable, Dict, Generic, Iterator, MutableMapping, TypeVar, cast
|
|
30
19
|
|
|
31
20
|
K = TypeVar("K") # Key type
|
|
32
21
|
V = TypeVar("V") # Value type
|
|
@@ -84,15 +73,3 @@ class TypedDict(MutableMapping[K, V], Generic[K, V]):
|
|
|
84
73
|
if isinstance(other, dict):
|
|
85
74
|
return data == other
|
|
86
75
|
return NotImplemented
|
|
87
|
-
|
|
88
|
-
def keys(self) -> KeysView[K]:
|
|
89
|
-
"""D.keys() -> a set-like object providing a view on D's keys."""
|
|
90
|
-
return cast(Dict[K, V], self.__dict__["_data"]).keys()
|
|
91
|
-
|
|
92
|
-
def values(self) -> ValuesView[V]:
|
|
93
|
-
"""D.values() -> an object providing a view on D's values."""
|
|
94
|
-
return cast(Dict[K, V], self.__dict__["_data"]).values()
|
|
95
|
-
|
|
96
|
-
def items(self) -> ItemsView[K, V]:
|
|
97
|
-
"""D.items() -> a set-like object providing a view on D's items."""
|
|
98
|
-
return cast(Dict[K, V], self.__dict__["_data"]).items()
|
|
@@ -188,8 +188,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
|
188
188
|
self, public_key: ec.EllipticCurvePublicKey, request: Request, hmac_value: bytes
|
|
189
189
|
) -> bool:
|
|
190
190
|
shared_secret = generate_shared_key(self.server_private_key, public_key)
|
|
191
|
-
|
|
192
|
-
return verify_hmac(shared_secret, message_bytes, hmac_value)
|
|
191
|
+
return verify_hmac(shared_secret, request.SerializeToString(True), hmac_value)
|
|
193
192
|
|
|
194
193
|
def _create_authenticated_node(
|
|
195
194
|
self,
|
|
@@ -52,11 +52,16 @@ class RayBackend(Backend):
|
|
|
52
52
|
|
|
53
53
|
# Validate client resources
|
|
54
54
|
self.client_resources_key = "client_resources"
|
|
55
|
-
|
|
55
|
+
client_resources = self._validate_client_resources(config=backend_config)
|
|
56
56
|
|
|
57
|
-
#
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
# Create actor pool
|
|
58
|
+
actor_kwargs = self._validate_actor_arguments(config=backend_config)
|
|
59
|
+
|
|
60
|
+
self.pool = BasicActorPool(
|
|
61
|
+
actor_type=ClientAppActor,
|
|
62
|
+
client_resources=client_resources,
|
|
63
|
+
actor_kwargs=actor_kwargs,
|
|
64
|
+
)
|
|
60
65
|
|
|
61
66
|
self.app_fn: Optional[Callable[[], ClientApp]] = None
|
|
62
67
|
|
|
@@ -117,24 +122,14 @@ class RayBackend(Backend):
|
|
|
117
122
|
@property
|
|
118
123
|
def num_workers(self) -> int:
|
|
119
124
|
"""Return number of actors in pool."""
|
|
120
|
-
return self.pool.num_actors
|
|
125
|
+
return self.pool.num_actors
|
|
121
126
|
|
|
122
127
|
def is_worker_idle(self) -> bool:
|
|
123
128
|
"""Report whether the pool has idle actors."""
|
|
124
|
-
return self.pool.is_actor_available()
|
|
129
|
+
return self.pool.is_actor_available()
|
|
125
130
|
|
|
126
131
|
def build(self, app_fn: Callable[[], ClientApp]) -> None:
|
|
127
132
|
"""Build pool of Ray actors that this backend will submit jobs to."""
|
|
128
|
-
# Create Actor Pool
|
|
129
|
-
try:
|
|
130
|
-
self.pool = BasicActorPool(
|
|
131
|
-
actor_type=ClientAppActor,
|
|
132
|
-
client_resources=self.client_resources,
|
|
133
|
-
actor_kwargs=self.actor_kwargs,
|
|
134
|
-
)
|
|
135
|
-
except Exception as ex:
|
|
136
|
-
raise ex
|
|
137
|
-
|
|
138
133
|
self.pool.add_actors_to_pool(self.pool.actors_capacity)
|
|
139
134
|
# Set ClientApp callable that ray actors will use
|
|
140
135
|
self.app_fn = app_fn
|
|
@@ -151,9 +146,6 @@ class RayBackend(Backend):
|
|
|
151
146
|
"""
|
|
152
147
|
partition_id = context.node_config[PARTITION_ID_KEY]
|
|
153
148
|
|
|
154
|
-
if self.pool is None:
|
|
155
|
-
raise ValueError("The actor pool is empty, unfit to process messages.")
|
|
156
|
-
|
|
157
149
|
if self.app_fn is None:
|
|
158
150
|
raise ValueError(
|
|
159
151
|
"Unspecified function to load a `ClientApp`. "
|
|
@@ -187,7 +179,6 @@ class RayBackend(Backend):
|
|
|
187
179
|
|
|
188
180
|
def terminate(self) -> None:
|
|
189
181
|
"""Terminate all actors in actor pool."""
|
|
190
|
-
|
|
191
|
-
self.pool.terminate_all_actors()
|
|
182
|
+
self.pool.terminate_all_actors()
|
|
192
183
|
ray.shutdown()
|
|
193
184
|
log(DEBUG, "Terminated %s", self.__class__.__name__)
|
|
@@ -124,14 +124,14 @@ def pool_size_from_resources(client_resources: Dict[str, Union[int, float]]) ->
|
|
|
124
124
|
WARNING,
|
|
125
125
|
"The ActorPool is empty. The system (CPUs=%s, GPUs=%s) "
|
|
126
126
|
"does not meet the criteria to host at least one client with resources:"
|
|
127
|
-
" %s. Lowering
|
|
127
|
+
" %s. Lowering the `client_resources` could help.",
|
|
128
128
|
num_cpus,
|
|
129
129
|
num_gpus,
|
|
130
130
|
client_resources,
|
|
131
131
|
)
|
|
132
132
|
raise ValueError(
|
|
133
133
|
"ActorPool is empty. Stopping Simulation. "
|
|
134
|
-
"Check
|
|
134
|
+
"Check 'client_resources' passed to `start_simulation`"
|
|
135
135
|
)
|
|
136
136
|
|
|
137
137
|
return total_num_actors
|
|
@@ -216,7 +216,6 @@ def run_simulation_from_cli() -> None:
|
|
|
216
216
|
app_dir=app_dir,
|
|
217
217
|
run=run,
|
|
218
218
|
enable_tf_gpu_growth=args.enable_tf_gpu_growth,
|
|
219
|
-
delay_start=args.delay_start,
|
|
220
219
|
verbose_logging=args.verbose,
|
|
221
220
|
server_app_run_config=fused_config,
|
|
222
221
|
is_app=is_app,
|
|
@@ -310,6 +309,7 @@ def run_serverapp_th(
|
|
|
310
309
|
f_stop: threading.Event,
|
|
311
310
|
has_exception: threading.Event,
|
|
312
311
|
enable_tf_gpu_growth: bool,
|
|
312
|
+
delay_launch: int = 3,
|
|
313
313
|
) -> threading.Thread:
|
|
314
314
|
"""Run SeverApp in a thread."""
|
|
315
315
|
|
|
@@ -365,6 +365,7 @@ def run_serverapp_th(
|
|
|
365
365
|
server_app,
|
|
366
366
|
),
|
|
367
367
|
)
|
|
368
|
+
sleep(delay_launch)
|
|
368
369
|
serverapp_th.start()
|
|
369
370
|
return serverapp_th
|
|
370
371
|
|
|
@@ -379,7 +380,6 @@ def _main_loop(
|
|
|
379
380
|
enable_tf_gpu_growth: bool,
|
|
380
381
|
run: Run,
|
|
381
382
|
exit_event: EventType,
|
|
382
|
-
delay_start: int,
|
|
383
383
|
flwr_dir: Optional[str] = None,
|
|
384
384
|
client_app: Optional[ClientApp] = None,
|
|
385
385
|
client_app_attr: Optional[str] = None,
|
|
@@ -419,9 +419,6 @@ def _main_loop(
|
|
|
419
419
|
enable_tf_gpu_growth=enable_tf_gpu_growth,
|
|
420
420
|
)
|
|
421
421
|
|
|
422
|
-
# Buffer time so the `ServerApp` in separate thread is ready
|
|
423
|
-
log(DEBUG, "Buffer time delay: %ds", delay_start)
|
|
424
|
-
sleep(delay_start)
|
|
425
422
|
# Start Simulation Engine
|
|
426
423
|
vce.start_vce(
|
|
427
424
|
num_supernodes=num_supernodes,
|
|
@@ -470,7 +467,6 @@ def _run_simulation(
|
|
|
470
467
|
flwr_dir: Optional[str] = None,
|
|
471
468
|
run: Optional[Run] = None,
|
|
472
469
|
enable_tf_gpu_growth: bool = False,
|
|
473
|
-
delay_start: int = 5,
|
|
474
470
|
verbose_logging: bool = False,
|
|
475
471
|
is_app: bool = False,
|
|
476
472
|
) -> None:
|
|
@@ -527,7 +523,6 @@ def _run_simulation(
|
|
|
527
523
|
enable_tf_gpu_growth,
|
|
528
524
|
run,
|
|
529
525
|
exit_event,
|
|
530
|
-
delay_start,
|
|
531
526
|
flwr_dir,
|
|
532
527
|
client_app,
|
|
533
528
|
client_app_attr,
|
|
@@ -615,13 +610,6 @@ def _parse_args_run_simulation() -> argparse.ArgumentParser:
|
|
|
615
610
|
"Read more about how `tf.config.experimental.set_memory_growth()` works in "
|
|
616
611
|
"the TensorFlow documentation: https://www.tensorflow.org/api/stable.",
|
|
617
612
|
)
|
|
618
|
-
parser.add_argument(
|
|
619
|
-
"--delay-start",
|
|
620
|
-
type=int,
|
|
621
|
-
default=3,
|
|
622
|
-
help="Buffer time (in seconds) to delay the start the simulation engine after "
|
|
623
|
-
"the `ServerApp`, which runs in a separate thread, has been launched.",
|
|
624
|
-
)
|
|
625
613
|
parser.add_argument(
|
|
626
614
|
"--verbose",
|
|
627
615
|
action="store_true",
|
{flwr_nightly-1.11.1.dev20240911 → flwr_nightly-1.12.0.dev20240830}/src/py/flwr/superexec/app.py
RENAMED
|
@@ -56,9 +56,7 @@ def run_superexec() -> None:
|
|
|
56
56
|
address=address,
|
|
57
57
|
executor=_load_executor(args),
|
|
58
58
|
certificates=certificates,
|
|
59
|
-
config=parse_config_args(
|
|
60
|
-
[args.executor_config] if args.executor_config else args.executor_config
|
|
61
|
-
),
|
|
59
|
+
config=parse_config_args([args.executor_config]),
|
|
62
60
|
)
|
|
63
61
|
|
|
64
62
|
grpc_servers = [superexec_server]
|