flwr-nightly 1.11.1.dev20240912__tar.gz → 1.12.0.dev20240906__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.dev20240912 → flwr_nightly-1.12.0.dev20240906}/PKG-INFO +1 -1
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/pyproject.toml +1 -2
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/new.py +36 -23
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +29 -19
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +3 -0
- flwr_nightly-1.12.0.dev20240906/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +23 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +13 -16
- flwr_nightly-1.12.0.dev20240906/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +38 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/app.py +4 -3
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/client_app.py +2 -2
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +3 -2
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/supernode/app.py +6 -5
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/constant.py +1 -12
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/record/recordset.py +1 -1
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/record/typeddict.py +1 -24
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/app.py +9 -8
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/driver/grpc_driver.py +3 -2
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/run_serverapp.py +6 -5
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +1 -2
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +12 -21
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/simulation/ray_transport/ray_actor.py +2 -2
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/simulation/run_simulation.py +2 -14
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/superexec/app.py +2 -2
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/superexec/deployment.py +2 -2
- flwr_nightly-1.11.1.dev20240912/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -38
- flwr_nightly-1.11.1.dev20240912/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -46
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/LICENSE +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/README.md +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/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.dev20240906"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -101,7 +101,6 @@ docformatter = "==1.7.5"
|
|
|
101
101
|
mypy = "==1.8.0"
|
|
102
102
|
pylint = "==3.0.3"
|
|
103
103
|
flake8 = "==5.0.4"
|
|
104
|
-
parameterized = "==0.9.0"
|
|
105
104
|
pytest = "==7.4.4"
|
|
106
105
|
pytest-cov = "==4.1.0"
|
|
107
106
|
pytest-watcher = "==0.4.1"
|
{flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/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"
|
|
@@ -224,42 +235,44 @@ def new(
|
|
|
224
235
|
files = {
|
|
225
236
|
".gitignore": {"template": "app/.gitignore.tpl"},
|
|
226
237
|
"README.md": {"template": "app/README.md.tpl"},
|
|
227
|
-
"pyproject.toml": {"template": f"app/pyproject.{
|
|
238
|
+
"pyproject.toml": {"template": f"app/pyproject.{framework_str}.toml.tpl"},
|
|
228
239
|
f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
|
|
229
240
|
f"{import_name}/server_app.py": {
|
|
230
|
-
"template": f"app/code/server.{
|
|
241
|
+
"template": f"app/code/server.{framework_str}.py.tpl"
|
|
231
242
|
},
|
|
232
243
|
f"{import_name}/client_app.py": {
|
|
233
|
-
"template": f"app/code/client.{
|
|
244
|
+
"template": f"app/code/client.{framework_str}.py.tpl"
|
|
234
245
|
},
|
|
235
246
|
}
|
|
236
247
|
|
|
237
248
|
# Depending on the framework, generate task.py file
|
|
238
249
|
frameworks_with_tasks = [
|
|
239
|
-
MlFramework.PYTORCH.value,
|
|
240
|
-
MlFramework.JAX.value,
|
|
241
|
-
MlFramework.HUGGINGFACE.value,
|
|
242
|
-
MlFramework.MLX.value,
|
|
243
|
-
MlFramework.TENSORFLOW.value,
|
|
250
|
+
MlFramework.PYTORCH.value.lower(),
|
|
251
|
+
MlFramework.JAX.value.lower(),
|
|
252
|
+
MlFramework.HUGGINGFACE.value.lower(),
|
|
253
|
+
MlFramework.MLX.value.lower(),
|
|
254
|
+
MlFramework.TENSORFLOW.value.lower(),
|
|
244
255
|
]
|
|
245
256
|
if framework_str in frameworks_with_tasks:
|
|
246
257
|
files[f"{import_name}/task.py"] = {
|
|
247
|
-
"template": f"app/code/task.{
|
|
258
|
+
"template": f"app/code/task.{framework_str}.py.tpl"
|
|
248
259
|
}
|
|
249
260
|
|
|
250
|
-
if
|
|
261
|
+
if is_baseline_project:
|
|
251
262
|
# Include additional files for baseline template
|
|
252
263
|
for file_name in ["model", "dataset", "strategy", "utils", "__init__"]:
|
|
253
264
|
files[f"{import_name}/{file_name}.py"] = {
|
|
254
|
-
"template": f"app/code/{file_name}.{
|
|
265
|
+
"template": f"app/code/{file_name}.{framework_str}.py.tpl"
|
|
255
266
|
}
|
|
256
267
|
|
|
257
268
|
# Replace README.md
|
|
258
|
-
files["README.md"]["template"] = f"app/README.{
|
|
269
|
+
files["README.md"]["template"] = f"app/README.{framework_str}.md.tpl"
|
|
259
270
|
|
|
260
271
|
# Add LICENSE
|
|
261
272
|
files["LICENSE"] = {"template": "app/LICENSE.tpl"}
|
|
262
273
|
|
|
274
|
+
context["framework_str"] = "baseline"
|
|
275
|
+
|
|
263
276
|
for file_path, value in files.items():
|
|
264
277
|
render_and_create(
|
|
265
278
|
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.dev20240906/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.dev20240906/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.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/client/app.py
RENAMED
|
@@ -35,7 +35,6 @@ from flwr.client.typing import ClientFnExt
|
|
|
35
35
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
|
|
36
36
|
from flwr.common.address import parse_address
|
|
37
37
|
from flwr.common.constant import (
|
|
38
|
-
CLIENTAPPIO_API_DEFAULT_ADDRESS,
|
|
39
38
|
MISSING_EXTRA_REST,
|
|
40
39
|
RUN_ID_NUM_BYTES,
|
|
41
40
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
@@ -61,6 +60,8 @@ from .message_handler.message_handler import handle_control_message
|
|
|
61
60
|
from .node_state import NodeState
|
|
62
61
|
from .numpy_client import NumPyClient
|
|
63
62
|
|
|
63
|
+
ADDRESS_CLIENTAPPIO_API_GRPC_RERE = "0.0.0.0:9094"
|
|
64
|
+
|
|
64
65
|
ISOLATION_MODE_SUBPROCESS = "subprocess"
|
|
65
66
|
ISOLATION_MODE_PROCESS = "process"
|
|
66
67
|
|
|
@@ -210,7 +211,7 @@ def start_client_internal(
|
|
|
210
211
|
max_wait_time: Optional[float] = None,
|
|
211
212
|
flwr_path: Optional[Path] = None,
|
|
212
213
|
isolation: Optional[str] = None,
|
|
213
|
-
supernode_address: Optional[str] =
|
|
214
|
+
supernode_address: Optional[str] = ADDRESS_CLIENTAPPIO_API_GRPC_RERE,
|
|
214
215
|
) -> None:
|
|
215
216
|
"""Start a Flower client node which connects to a Flower server.
|
|
216
217
|
|
|
@@ -265,7 +266,7 @@ def start_client_internal(
|
|
|
265
266
|
by the SueprNode and communicates using gRPC at the address
|
|
266
267
|
`supernode_address`. If `process`, the `ClientApp` runs in a separate isolated
|
|
267
268
|
process and communicates using gRPC at the address `supernode_address`.
|
|
268
|
-
supernode_address : Optional[str] (default: `
|
|
269
|
+
supernode_address : Optional[str] (default: `ADDRESS_CLIENTAPPIO_API_GRPC_RERE`)
|
|
269
270
|
The SuperNode gRPC server address.
|
|
270
271
|
"""
|
|
271
272
|
if insecure is None:
|
{flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/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
|
)
|
|
@@ -30,7 +30,6 @@ from cryptography.hazmat.primitives.serialization import (
|
|
|
30
30
|
from flwr.common import EventType, event
|
|
31
31
|
from flwr.common.config import parse_config_args
|
|
32
32
|
from flwr.common.constant import (
|
|
33
|
-
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
|
34
33
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
35
34
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
36
35
|
TRANSPORT_TYPE_REST,
|
|
@@ -45,6 +44,8 @@ from ..app import (
|
|
|
45
44
|
)
|
|
46
45
|
from ..clientapp.utils import get_load_client_app_fn
|
|
47
46
|
|
|
47
|
+
ADDRESS_FLEET_API_GRPC_RERE = "0.0.0.0:9092"
|
|
48
|
+
|
|
48
49
|
|
|
49
50
|
def run_supernode() -> None:
|
|
50
51
|
"""Run Flower SuperNode."""
|
|
@@ -102,11 +103,11 @@ def run_client_app() -> None:
|
|
|
102
103
|
|
|
103
104
|
def _warn_deprecated_server_arg(args: argparse.Namespace) -> None:
|
|
104
105
|
"""Warn about the deprecated argument `--server`."""
|
|
105
|
-
if args.server !=
|
|
106
|
+
if args.server != ADDRESS_FLEET_API_GRPC_RERE:
|
|
106
107
|
warn = "Passing flag --server is deprecated. Use --superlink instead."
|
|
107
108
|
warn_deprecated_feature(warn)
|
|
108
109
|
|
|
109
|
-
if args.superlink !=
|
|
110
|
+
if args.superlink != ADDRESS_FLEET_API_GRPC_RERE:
|
|
110
111
|
# if `--superlink` also passed, then
|
|
111
112
|
# warn user that this argument overrides what was passed with `--server`
|
|
112
113
|
log(
|
|
@@ -246,12 +247,12 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
246
247
|
)
|
|
247
248
|
parser.add_argument(
|
|
248
249
|
"--server",
|
|
249
|
-
default=
|
|
250
|
+
default=ADDRESS_FLEET_API_GRPC_RERE,
|
|
250
251
|
help="Server address",
|
|
251
252
|
)
|
|
252
253
|
parser.add_argument(
|
|
253
254
|
"--superlink",
|
|
254
|
-
default=
|
|
255
|
+
default=ADDRESS_FLEET_API_GRPC_RERE,
|
|
255
256
|
help="SuperLink Fleet API (gRPC-rere) address (IPv4, IPv6, or a domain name)",
|
|
256
257
|
)
|
|
257
258
|
parser.add_argument(
|
{flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/common/constant.py
RENAMED
|
@@ -37,18 +37,7 @@ TRANSPORT_TYPES = [
|
|
|
37
37
|
TRANSPORT_TYPE_VCE,
|
|
38
38
|
]
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
# SuperNode
|
|
42
|
-
CLIENTAPPIO_API_DEFAULT_ADDRESS = "0.0.0.0:9094"
|
|
43
|
-
# SuperExec
|
|
44
|
-
EXEC_API_DEFAULT_ADDRESS = "0.0.0.0:9093"
|
|
45
|
-
# SuperLink
|
|
46
|
-
DRIVER_API_DEFAULT_ADDRESS = "0.0.0.0:9091"
|
|
47
|
-
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS = "0.0.0.0:9092"
|
|
48
|
-
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS = (
|
|
49
|
-
"[::]:8080" # IPv6 to keep start_server compatible
|
|
50
|
-
)
|
|
51
|
-
FLEET_API_REST_DEFAULT_ADDRESS = "0.0.0.0:9093"
|
|
40
|
+
SUPEREXEC_DEFAULT_ADDRESS = "0.0.0.0:9093"
|
|
52
41
|
|
|
53
42
|
# Constants for ping
|
|
54
43
|
PING_DEFAULT_INTERVAL = 30
|
|
@@ -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()
|
{flwr_nightly-1.11.1.dev20240912 → flwr_nightly-1.12.0.dev20240906}/src/py/flwr/server/app.py
RENAMED
|
@@ -36,10 +36,6 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, event
|
|
|
36
36
|
from flwr.common.address import parse_address
|
|
37
37
|
from flwr.common.config import get_flwr_dir
|
|
38
38
|
from flwr.common.constant import (
|
|
39
|
-
DRIVER_API_DEFAULT_ADDRESS,
|
|
40
|
-
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
|
|
41
|
-
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
|
42
|
-
FLEET_API_REST_DEFAULT_ADDRESS,
|
|
43
39
|
MISSING_EXTRA_REST,
|
|
44
40
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
45
41
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
@@ -72,13 +68,18 @@ from .superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
|
|
|
72
68
|
from .superlink.fleet.grpc_rere.server_interceptor import AuthenticateServerInterceptor
|
|
73
69
|
from .superlink.state import StateFactory
|
|
74
70
|
|
|
71
|
+
ADDRESS_DRIVER_API = "0.0.0.0:9091"
|
|
72
|
+
ADDRESS_FLEET_API_GRPC_RERE = "0.0.0.0:9092"
|
|
73
|
+
ADDRESS_FLEET_API_GRPC_BIDI = "[::]:8080" # IPv6 to keep start_server compatible
|
|
74
|
+
ADDRESS_FLEET_API_REST = "0.0.0.0:9093"
|
|
75
|
+
|
|
75
76
|
DATABASE = ":flwr-in-memory-state:"
|
|
76
77
|
BASE_DIR = get_flwr_dir() / "superlink" / "ffs"
|
|
77
78
|
|
|
78
79
|
|
|
79
80
|
def start_server( # pylint: disable=too-many-arguments,too-many-locals
|
|
80
81
|
*,
|
|
81
|
-
server_address: str =
|
|
82
|
+
server_address: str = ADDRESS_FLEET_API_GRPC_BIDI,
|
|
82
83
|
server: Optional[Server] = None,
|
|
83
84
|
config: Optional[ServerConfig] = None,
|
|
84
85
|
strategy: Optional[Strategy] = None,
|
|
@@ -231,9 +232,9 @@ def run_superlink() -> None:
|
|
|
231
232
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
232
233
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
233
234
|
]:
|
|
234
|
-
args.fleet_api_address =
|
|
235
|
+
args.fleet_api_address = ADDRESS_FLEET_API_GRPC_RERE
|
|
235
236
|
elif args.fleet_api_type == TRANSPORT_TYPE_REST:
|
|
236
|
-
args.fleet_api_address =
|
|
237
|
+
args.fleet_api_address = ADDRESS_FLEET_API_REST
|
|
237
238
|
|
|
238
239
|
fleet_address, host, port = _format_address(args.fleet_api_address)
|
|
239
240
|
|
|
@@ -652,7 +653,7 @@ def _add_args_driver_api(parser: argparse.ArgumentParser) -> None:
|
|
|
652
653
|
parser.add_argument(
|
|
653
654
|
"--driver-api-address",
|
|
654
655
|
help="Driver API (gRPC) server address (IPv4, IPv6, or a domain name).",
|
|
655
|
-
default=
|
|
656
|
+
default=ADDRESS_DRIVER_API,
|
|
656
657
|
)
|
|
657
658
|
|
|
658
659
|
|
|
@@ -22,7 +22,6 @@ from typing import Iterable, List, Optional, cast
|
|
|
22
22
|
import grpc
|
|
23
23
|
|
|
24
24
|
from flwr.common import DEFAULT_TTL, Message, Metadata, RecordSet
|
|
25
|
-
from flwr.common.constant import DRIVER_API_DEFAULT_ADDRESS
|
|
26
25
|
from flwr.common.grpc import create_channel
|
|
27
26
|
from flwr.common.logger import log
|
|
28
27
|
from flwr.common.serde import (
|
|
@@ -46,6 +45,8 @@ from flwr.proto.task_pb2 import TaskIns # pylint: disable=E0611
|
|
|
46
45
|
|
|
47
46
|
from .driver import Driver
|
|
48
47
|
|
|
48
|
+
DEFAULT_SERVER_ADDRESS_DRIVER = "[::]:9091"
|
|
49
|
+
|
|
49
50
|
ERROR_MESSAGE_DRIVER_NOT_CONNECTED = """
|
|
50
51
|
[Driver] Error: Not connected.
|
|
51
52
|
|
|
@@ -72,7 +73,7 @@ class GrpcDriver(Driver):
|
|
|
72
73
|
def __init__( # pylint: disable=too-many-arguments
|
|
73
74
|
self,
|
|
74
75
|
run_id: int,
|
|
75
|
-
driver_service_address: str =
|
|
76
|
+
driver_service_address: str = DEFAULT_SERVER_ADDRESS_DRIVER,
|
|
76
77
|
root_certificates: Optional[bytes] = None,
|
|
77
78
|
) -> None:
|
|
78
79
|
self._run_id = run_id
|