flwr-nightly 1.13.0.dev20241117__tar.gz → 1.14.0.dev20241127__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.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/PKG-INFO +1 -2
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/pyproject.toml +2 -2
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/build.py +0 -37
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/install.py +1 -19
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/ls.py +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/new.py +23 -13
- flwr_nightly-1.14.0.dev20241127/src/py/flwr/cli/new/templates/app/README.md.tpl +31 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/run/run.py +4 -2
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/app.py +4 -13
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/clientapp/app.py +10 -4
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_rere_client/connection.py +5 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/supernode/app.py +1 -27
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/args.py +17 -13
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/constant.py +3 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/grpc.py +4 -1
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/app.py +10 -13
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/driver/grpc_driver.py +63 -3
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/serverapp/app.py +17 -8
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/app.py +50 -54
- flwr_nightly-1.13.0.dev20241117/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -20
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/README.md +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.14.0.dev20241127
|
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -34,7 +34,6 @@ Provides-Extra: rest
|
|
|
34
34
|
Provides-Extra: simulation
|
|
35
35
|
Requires-Dist: cryptography (>=42.0.4,<43.0.0)
|
|
36
36
|
Requires-Dist: grpcio (>=1.60.0,<2.0.0,!=1.64.2,<=1.64.3)
|
|
37
|
-
Requires-Dist: hatchling (>=1.25.0,<2.0.0)
|
|
38
37
|
Requires-Dist: iterators (>=0.0.2,<0.0.3)
|
|
39
38
|
Requires-Dist: numpy (>=1.26.0,<3.0.0)
|
|
40
39
|
Requires-Dist: pathspec (>=0.12.1,<0.13.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.14.0.dev20241127"
|
|
8
8
|
description = "Flower: A Friendly Federated AI Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -77,7 +77,6 @@ typer = "^0.12.5"
|
|
|
77
77
|
tomli = "^2.0.1"
|
|
78
78
|
tomli-w = "^1.0.0"
|
|
79
79
|
pathspec = "^0.12.1"
|
|
80
|
-
hatchling = "^1.25.0"
|
|
81
80
|
rich = "^13.5.0"
|
|
82
81
|
# Optional dependencies (Simulation Engine)
|
|
83
82
|
ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
|
|
@@ -127,6 +126,7 @@ nbstripout = "==0.6.1"
|
|
|
127
126
|
ruff = "==0.1.9"
|
|
128
127
|
sphinx-argparse = "==0.4.0"
|
|
129
128
|
pipreqs = "==0.4.13"
|
|
129
|
+
mdformat = "==0.7.18"
|
|
130
130
|
mdformat-gfm = "==0.3.6"
|
|
131
131
|
mdformat-frontmatter = "==2.0.1"
|
|
132
132
|
mdformat-beautysh = "==0.1.1"
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/build.py
RENAMED
|
@@ -19,18 +19,14 @@ import os
|
|
|
19
19
|
import shutil
|
|
20
20
|
import tempfile
|
|
21
21
|
import zipfile
|
|
22
|
-
from logging import DEBUG, ERROR
|
|
23
22
|
from pathlib import Path
|
|
24
23
|
from typing import Annotated, Any, Optional, Union
|
|
25
24
|
|
|
26
25
|
import pathspec
|
|
27
26
|
import tomli_w
|
|
28
27
|
import typer
|
|
29
|
-
from hatchling.builders.wheel import WheelBuilder
|
|
30
|
-
from hatchling.metadata.core import ProjectMetadata
|
|
31
28
|
|
|
32
29
|
from flwr.common.constant import FAB_ALLOWED_EXTENSIONS, FAB_DATE, FAB_HASH_TRUNCATION
|
|
33
|
-
from flwr.common.logger import log
|
|
34
30
|
|
|
35
31
|
from .config_utils import load_and_validate
|
|
36
32
|
from .utils import is_valid_project_name
|
|
@@ -55,27 +51,6 @@ def get_fab_filename(conf: dict[str, Any], fab_hash: str) -> str:
|
|
|
55
51
|
return f"{publisher}.{name}.{version}.{fab_hash_truncated}.fab"
|
|
56
52
|
|
|
57
53
|
|
|
58
|
-
def _build_app_wheel(app: Path) -> Path:
|
|
59
|
-
"""Build app as a wheel and return its path."""
|
|
60
|
-
# Path to your project directory
|
|
61
|
-
app_dir = str(app.resolve())
|
|
62
|
-
try:
|
|
63
|
-
|
|
64
|
-
# Initialize the WheelBuilder
|
|
65
|
-
builder = WheelBuilder(
|
|
66
|
-
app_dir, metadata=ProjectMetadata(root=app_dir, plugin_manager=None)
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
# Build
|
|
70
|
-
whl_path = Path(next(builder.build(directory=app_dir)))
|
|
71
|
-
log(DEBUG, "Wheel succesfully built: %s", str(whl_path))
|
|
72
|
-
except Exception as ex:
|
|
73
|
-
log(ERROR, "Exception encountered when building wheel.", exc_info=ex)
|
|
74
|
-
raise typer.Exit(code=1) from ex
|
|
75
|
-
|
|
76
|
-
return whl_path
|
|
77
|
-
|
|
78
|
-
|
|
79
54
|
# pylint: disable=too-many-locals, too-many-statements
|
|
80
55
|
def build(
|
|
81
56
|
app: Annotated[
|
|
@@ -131,12 +106,6 @@ def build(
|
|
|
131
106
|
bold=True,
|
|
132
107
|
)
|
|
133
108
|
|
|
134
|
-
# Build wheel
|
|
135
|
-
whl_path = _build_app_wheel(app)
|
|
136
|
-
|
|
137
|
-
# Add path to .whl to `[tool.flwr.app]`
|
|
138
|
-
conf["tool"]["flwr"]["app"]["whl"] = str(whl_path.name)
|
|
139
|
-
|
|
140
109
|
# Load .gitignore rules if present
|
|
141
110
|
ignore_spec = _load_gitignore(app)
|
|
142
111
|
|
|
@@ -168,9 +137,6 @@ def build(
|
|
|
168
137
|
and f.name != "pyproject.toml" # Exclude the original pyproject.toml
|
|
169
138
|
]
|
|
170
139
|
|
|
171
|
-
# Include FAB .whl
|
|
172
|
-
all_files.append(whl_path)
|
|
173
|
-
|
|
174
140
|
for file_path in all_files:
|
|
175
141
|
# Read the file content manually
|
|
176
142
|
with open(file_path, "rb") as f:
|
|
@@ -187,9 +153,6 @@ def build(
|
|
|
187
153
|
# Add CONTENT and CONTENT.jwt to the zip file
|
|
188
154
|
write_to_zip(fab_file, ".info/CONTENT", list_file_content)
|
|
189
155
|
|
|
190
|
-
# Erase FAB .whl in app directory
|
|
191
|
-
whl_path.unlink()
|
|
192
|
-
|
|
193
156
|
# Get hash of FAB file
|
|
194
157
|
content = Path(temp_filename).read_bytes()
|
|
195
158
|
fab_hash = hashlib.sha256(content).hexdigest()
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/install.py
RENAMED
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
|
|
17
17
|
import hashlib
|
|
18
18
|
import shutil
|
|
19
|
-
import subprocess
|
|
20
19
|
import tempfile
|
|
21
20
|
import zipfile
|
|
22
21
|
from io import BytesIO
|
|
@@ -188,25 +187,8 @@ def validate_and_install(
|
|
|
188
187
|
else:
|
|
189
188
|
shutil.copy2(item, install_dir / item.name)
|
|
190
189
|
|
|
191
|
-
whl_file = config["tool"]["flwr"]["app"]["whl"]
|
|
192
|
-
install_whl = install_dir / whl_file
|
|
193
|
-
try:
|
|
194
|
-
subprocess.run(
|
|
195
|
-
["pip", "install", "--no-deps", install_whl],
|
|
196
|
-
capture_output=True,
|
|
197
|
-
text=True,
|
|
198
|
-
check=True,
|
|
199
|
-
)
|
|
200
|
-
except subprocess.CalledProcessError as e:
|
|
201
|
-
typer.secho(
|
|
202
|
-
f"❌ Failed to install {project_name}:\n{e.stderr}",
|
|
203
|
-
fg=typer.colors.RED,
|
|
204
|
-
bold=True,
|
|
205
|
-
)
|
|
206
|
-
raise typer.Exit(code=1) from e
|
|
207
|
-
|
|
208
190
|
typer.secho(
|
|
209
|
-
f"🎊 Successfully installed {project_name}.",
|
|
191
|
+
f"🎊 Successfully installed {project_name} to {install_dir}.",
|
|
210
192
|
fg=typer.colors.GREEN,
|
|
211
193
|
bold=True,
|
|
212
194
|
)
|
|
@@ -82,7 +82,7 @@ def ls(
|
|
|
82
82
|
|
|
83
83
|
if "address" not in federation_config:
|
|
84
84
|
typer.secho(
|
|
85
|
-
"❌ `flwr
|
|
85
|
+
"❌ `flwr ls` currently works with Exec API. Ensure that the correct"
|
|
86
86
|
"Exec API address is provided in the `pyproject.toml`.",
|
|
87
87
|
fg=typer.colors.RED,
|
|
88
88
|
bold=True,
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/new/new.py
RENAMED
|
@@ -268,20 +268,30 @@ def new(
|
|
|
268
268
|
context=context,
|
|
269
269
|
)
|
|
270
270
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
bold=True,
|
|
277
|
-
)
|
|
271
|
+
prompt = typer.style(
|
|
272
|
+
"🎊 Flower App creation successful.\n\n"
|
|
273
|
+
"To run your Flower App, use the following command:\n\n",
|
|
274
|
+
fg=typer.colors.GREEN,
|
|
275
|
+
bold=True,
|
|
278
276
|
)
|
|
279
277
|
|
|
280
278
|
_add = " huggingface-cli login\n" if llm_challenge_str else ""
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
279
|
+
prompt += typer.style(
|
|
280
|
+
_add + f" flwr run {package_name}\n\n",
|
|
281
|
+
fg=typer.colors.BRIGHT_CYAN,
|
|
282
|
+
bold=True,
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
prompt += typer.style(
|
|
286
|
+
"If you haven't installed all dependencies yet, follow these steps:\n\n",
|
|
287
|
+
fg=typer.colors.GREEN,
|
|
288
|
+
bold=True,
|
|
287
289
|
)
|
|
290
|
+
|
|
291
|
+
prompt += typer.style(
|
|
292
|
+
f" cd {package_name}\n" + " pip install -e .\n" + _add + " flwr run .\n",
|
|
293
|
+
fg=typer.colors.BRIGHT_CYAN,
|
|
294
|
+
bold=True,
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
print(prompt)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# $project_name: A Flower / $framework_str app
|
|
2
|
+
|
|
3
|
+
## Install dependencies and project
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pip install -e .
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Run with the Simulation Engine
|
|
10
|
+
|
|
11
|
+
In the `$project_name` directory, use `flwr run` to run a local simulation:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
flwr run .
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Refer to the [How to Run Simulations](https://flower.ai/docs/framework/how-to-run-simulations.html) guide in the documentation for advice on how to optimize your simulations.
|
|
18
|
+
|
|
19
|
+
## Run with the Deployment Engine
|
|
20
|
+
|
|
21
|
+
> \[!NOTE\]
|
|
22
|
+
> An update to this example will show how to run this Flower application with the Deployment Engine and TLS certificates, or with Docker.
|
|
23
|
+
|
|
24
|
+
## Resources
|
|
25
|
+
|
|
26
|
+
- Flower website: [flower.ai](https://flower.ai/)
|
|
27
|
+
- Check the documentation: [flower.ai/docs](https://flower.ai/docs/)
|
|
28
|
+
- Give Flower a ⭐️ on GitHub: [GitHub](https://github.com/adap/flower)
|
|
29
|
+
- Join the Flower community!
|
|
30
|
+
- [Flower Slack](https://flower.ai/join-slack/)
|
|
31
|
+
- [Flower Discuss](https://discuss.flower.ai/)
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/cli/run/run.py
RENAMED
|
@@ -125,6 +125,10 @@ def _run_with_exec_api(
|
|
|
125
125
|
|
|
126
126
|
fab_path, fab_hash = build(app)
|
|
127
127
|
content = Path(fab_path).read_bytes()
|
|
128
|
+
|
|
129
|
+
# Delete FAB file once the bytes is computed
|
|
130
|
+
Path(fab_path).unlink()
|
|
131
|
+
|
|
128
132
|
fab = Fab(fab_hash, content)
|
|
129
133
|
|
|
130
134
|
# Construct a `ConfigsRecord` out of a flattened `UserConfig`
|
|
@@ -138,8 +142,6 @@ def _run_with_exec_api(
|
|
|
138
142
|
)
|
|
139
143
|
res = stub.StartRun(req)
|
|
140
144
|
|
|
141
|
-
# Delete FAB file once it has been sent to the Exec API
|
|
142
|
-
Path(fab_path).unlink()
|
|
143
145
|
typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
|
|
144
146
|
|
|
145
147
|
if stream:
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/client/app.py
RENAMED
|
@@ -41,6 +41,7 @@ from flwr.common.constant import (
|
|
|
41
41
|
CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
42
42
|
ISOLATION_MODE_PROCESS,
|
|
43
43
|
ISOLATION_MODE_SUBPROCESS,
|
|
44
|
+
MAX_RETRY_DELAY,
|
|
44
45
|
MISSING_EXTRA_REST,
|
|
45
46
|
RUN_ID_NUM_BYTES,
|
|
46
47
|
SERVER_OCTET,
|
|
@@ -235,8 +236,6 @@ def start_client_internal(
|
|
|
235
236
|
flwr_path: Optional[Path] = None,
|
|
236
237
|
isolation: Optional[str] = None,
|
|
237
238
|
clientappio_api_address: Optional[str] = CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
238
|
-
certificates: Optional[tuple[bytes, bytes, bytes]] = None,
|
|
239
|
-
ssl_ca_certfile: Optional[str] = None,
|
|
240
239
|
) -> None:
|
|
241
240
|
"""Start a Flower client node which connects to a Flower server.
|
|
242
241
|
|
|
@@ -300,10 +299,6 @@ def start_client_internal(
|
|
|
300
299
|
clientappio_api_address : Optional[str]
|
|
301
300
|
(default: `CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS`)
|
|
302
301
|
The SuperNode gRPC server address.
|
|
303
|
-
certificates : Optional[Tuple[bytes, bytes, bytes]] (default: None)
|
|
304
|
-
Tuple containing the CA certificate, server certificate, and server private key.
|
|
305
|
-
ssl_ca_certfile : Optional[str] (default: None)
|
|
306
|
-
The path to the CA certificate file used by `flwr-clientapp` in subprocess mode.
|
|
307
302
|
"""
|
|
308
303
|
if insecure is None:
|
|
309
304
|
insecure = root_certificates is None
|
|
@@ -337,7 +332,7 @@ def start_client_internal(
|
|
|
337
332
|
)
|
|
338
333
|
_clientappio_grpc_server, clientappio_servicer = run_clientappio_api_grpc(
|
|
339
334
|
address=clientappio_api_address,
|
|
340
|
-
certificates=
|
|
335
|
+
certificates=None,
|
|
341
336
|
)
|
|
342
337
|
clientappio_api_address = cast(str, clientappio_api_address)
|
|
343
338
|
|
|
@@ -373,7 +368,7 @@ def start_client_internal(
|
|
|
373
368
|
)
|
|
374
369
|
|
|
375
370
|
retry_invoker = RetryInvoker(
|
|
376
|
-
wait_gen_factory=exponential,
|
|
371
|
+
wait_gen_factory=lambda: exponential(max_delay=MAX_RETRY_DELAY),
|
|
377
372
|
recoverable_exceptions=connection_error_type,
|
|
378
373
|
max_tries=max_retries + 1 if max_retries is not None else None,
|
|
379
374
|
max_time=max_wait_time,
|
|
@@ -551,11 +546,7 @@ def start_client_internal(
|
|
|
551
546
|
"--token",
|
|
552
547
|
str(token),
|
|
553
548
|
]
|
|
554
|
-
|
|
555
|
-
command.append("--root-certificates")
|
|
556
|
-
command.append(ssl_ca_certfile)
|
|
557
|
-
else:
|
|
558
|
-
command.append("--insecure")
|
|
549
|
+
command.append("--insecure")
|
|
559
550
|
|
|
560
551
|
subprocess.run(
|
|
561
552
|
command,
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"""Flower ClientApp process."""
|
|
16
16
|
|
|
17
17
|
import argparse
|
|
18
|
+
import sys
|
|
18
19
|
import time
|
|
19
20
|
from logging import DEBUG, ERROR, INFO
|
|
20
21
|
from typing import Optional
|
|
@@ -24,7 +25,7 @@ import grpc
|
|
|
24
25
|
from flwr.cli.install import install_from_fab
|
|
25
26
|
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
26
27
|
from flwr.common import Context, Message
|
|
27
|
-
from flwr.common.args import add_args_flwr_app_common
|
|
28
|
+
from flwr.common.args import add_args_flwr_app_common
|
|
28
29
|
from flwr.common.config import get_flwr_dir
|
|
29
30
|
from flwr.common.constant import CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS, ErrorCode
|
|
30
31
|
from flwr.common.grpc import create_channel
|
|
@@ -57,10 +58,15 @@ from .utils import get_load_client_app_fn
|
|
|
57
58
|
def flwr_clientapp() -> None:
|
|
58
59
|
"""Run process-isolated Flower ClientApp."""
|
|
59
60
|
args = _parse_args_run_flwr_clientapp().parse_args()
|
|
61
|
+
if not args.insecure:
|
|
62
|
+
log(
|
|
63
|
+
ERROR,
|
|
64
|
+
"flwr-clientapp does not support TLS yet. "
|
|
65
|
+
"Please use the '--insecure' flag.",
|
|
66
|
+
)
|
|
67
|
+
sys.exit(1)
|
|
60
68
|
|
|
61
69
|
log(INFO, "Starting Flower ClientApp")
|
|
62
|
-
certificates = try_obtain_root_certificates(args, args.clientappio_api_address)
|
|
63
|
-
|
|
64
70
|
log(
|
|
65
71
|
DEBUG,
|
|
66
72
|
"Starting isolated `ClientApp` connected to SuperNode's ClientAppIo API at %s "
|
|
@@ -73,7 +79,7 @@ def flwr_clientapp() -> None:
|
|
|
73
79
|
run_once=(args.token is not None),
|
|
74
80
|
token=args.token,
|
|
75
81
|
flwr_dir=args.flwr_dir,
|
|
76
|
-
certificates=
|
|
82
|
+
certificates=None,
|
|
77
83
|
)
|
|
78
84
|
|
|
79
85
|
|
|
@@ -155,6 +155,11 @@ def grpc_request_response( # pylint: disable=R0913,R0914,R0915,R0917
|
|
|
155
155
|
ping_thread: Optional[threading.Thread] = None
|
|
156
156
|
ping_stop_event = threading.Event()
|
|
157
157
|
|
|
158
|
+
# Restrict retries to cases where the status code is UNAVAILABLE
|
|
159
|
+
retry_invoker.should_giveup = (
|
|
160
|
+
lambda e: e.code() != grpc.StatusCode.UNAVAILABLE # type: ignore
|
|
161
|
+
)
|
|
162
|
+
|
|
158
163
|
###########################################################################
|
|
159
164
|
# ping/create_node/delete_node/receive/send/get_run functions
|
|
160
165
|
###########################################################################
|
|
@@ -28,10 +28,7 @@ from cryptography.hazmat.primitives.serialization import (
|
|
|
28
28
|
)
|
|
29
29
|
|
|
30
30
|
from flwr.common import EventType, event
|
|
31
|
-
from flwr.common.args import
|
|
32
|
-
try_obtain_root_certificates,
|
|
33
|
-
try_obtain_server_certificates,
|
|
34
|
-
)
|
|
31
|
+
from flwr.common.args import try_obtain_root_certificates
|
|
35
32
|
from flwr.common.config import parse_config_args
|
|
36
33
|
from flwr.common.constant import (
|
|
37
34
|
CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
@@ -78,8 +75,6 @@ def run_supernode() -> None:
|
|
|
78
75
|
sys.exit(1)
|
|
79
76
|
|
|
80
77
|
root_certificates = try_obtain_root_certificates(args, args.superlink)
|
|
81
|
-
# Obtain certificates for ClientAppIo API server
|
|
82
|
-
server_certificates = try_obtain_server_certificates(args, TRANSPORT_TYPE_GRPC_RERE)
|
|
83
78
|
load_fn = get_load_client_app_fn(
|
|
84
79
|
default_app_ref="",
|
|
85
80
|
app_path=None,
|
|
@@ -105,8 +100,6 @@ def run_supernode() -> None:
|
|
|
105
100
|
flwr_path=args.flwr_dir,
|
|
106
101
|
isolation=args.isolation,
|
|
107
102
|
clientappio_api_address=args.clientappio_api_address,
|
|
108
|
-
certificates=server_certificates,
|
|
109
|
-
ssl_ca_certfile=args.ssl_ca_certfile,
|
|
110
103
|
)
|
|
111
104
|
|
|
112
105
|
# Graceful shutdown
|
|
@@ -235,25 +228,6 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
235
228
|
help="Specifies the path to the PEM-encoded root certificate file for "
|
|
236
229
|
"establishing secure HTTPS connections.",
|
|
237
230
|
)
|
|
238
|
-
parser.add_argument(
|
|
239
|
-
"--ssl-certfile",
|
|
240
|
-
help="ClientAppIo API server SSL certificate file (as a path str) "
|
|
241
|
-
"to create a secure connection.",
|
|
242
|
-
type=str,
|
|
243
|
-
default=None,
|
|
244
|
-
)
|
|
245
|
-
parser.add_argument(
|
|
246
|
-
"--ssl-keyfile",
|
|
247
|
-
help="ClientAppIo API server SSL private key file (as a path str) "
|
|
248
|
-
"to create a secure connection.",
|
|
249
|
-
type=str,
|
|
250
|
-
)
|
|
251
|
-
parser.add_argument(
|
|
252
|
-
"--ssl-ca-certfile",
|
|
253
|
-
help="ClientAppIo API server SSL CA certificate file (as a path str) "
|
|
254
|
-
"to create a secure connection.",
|
|
255
|
-
type=str,
|
|
256
|
-
)
|
|
257
231
|
parser.add_argument(
|
|
258
232
|
"--server",
|
|
259
233
|
default=FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/args.py
RENAMED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import argparse
|
|
18
18
|
import sys
|
|
19
|
-
from logging import DEBUG, WARN
|
|
19
|
+
from logging import DEBUG, ERROR, WARN
|
|
20
20
|
from os.path import isfile
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
from typing import Optional
|
|
@@ -49,13 +49,6 @@ def add_args_flwr_app_common(parser: argparse.ArgumentParser) -> None:
|
|
|
49
49
|
"paths are provided. By default, the server runs with HTTPS enabled. "
|
|
50
50
|
"Use this flag only if you understand the risks.",
|
|
51
51
|
)
|
|
52
|
-
parser.add_argument(
|
|
53
|
-
"--root-certificates",
|
|
54
|
-
metavar="ROOT_CERT",
|
|
55
|
-
type=str,
|
|
56
|
-
help="Specifies the path to the PEM-encoded root certificate file for "
|
|
57
|
-
"establishing secure HTTPS connections.",
|
|
58
|
-
)
|
|
59
52
|
|
|
60
53
|
|
|
61
54
|
def try_obtain_root_certificates(
|
|
@@ -80,9 +73,18 @@ def try_obtain_root_certificates(
|
|
|
80
73
|
root_certificates = None
|
|
81
74
|
else:
|
|
82
75
|
# Load the certificates if provided, or load the system certificates
|
|
83
|
-
if
|
|
84
|
-
|
|
85
|
-
|
|
76
|
+
if root_cert_path is None:
|
|
77
|
+
log(
|
|
78
|
+
WARN,
|
|
79
|
+
"Both `--insecure` and `--root-certificates` were not set. "
|
|
80
|
+
"Using system certificates.",
|
|
81
|
+
)
|
|
82
|
+
root_certificates = None
|
|
83
|
+
elif not isfile(root_cert_path):
|
|
84
|
+
log(ERROR, "Path argument `--root-certificates` does not point to a file.")
|
|
85
|
+
sys.exit(1)
|
|
86
|
+
else:
|
|
87
|
+
root_certificates = Path(root_cert_path).read_bytes()
|
|
86
88
|
log(
|
|
87
89
|
DEBUG,
|
|
88
90
|
"Starting secure HTTPS channel to %s "
|
|
@@ -140,9 +142,11 @@ def try_obtain_server_certificates(
|
|
|
140
142
|
"and `--ssl-keyfile` to create a secure connection "
|
|
141
143
|
"in Fleet API server (REST, experimental)."
|
|
142
144
|
)
|
|
143
|
-
|
|
145
|
+
log(
|
|
146
|
+
ERROR,
|
|
144
147
|
"Certificates are required unless running in insecure mode. "
|
|
145
148
|
"Please provide certificate paths to `--ssl-certfile`, "
|
|
146
149
|
"`--ssl-keyfile`, and `—-ssl-ca-certfile` or run the server "
|
|
147
|
-
"in insecure mode using '--insecure' if you understand the risks."
|
|
150
|
+
"in insecure mode using '--insecure' if you understand the risks.",
|
|
148
151
|
)
|
|
152
|
+
sys.exit(1)
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/constant.py
RENAMED
|
@@ -107,6 +107,9 @@ CONN_RECONNECT_INTERVAL = 0.5 # Reconnect interval between two stream connectio
|
|
|
107
107
|
LOG_STREAM_INTERVAL = 0.5 # Log stream interval for `ExecServicer.StreamLogs`
|
|
108
108
|
LOG_UPLOAD_INTERVAL = 0.2 # Minimum interval between two log uploads
|
|
109
109
|
|
|
110
|
+
# Retry configurations
|
|
111
|
+
MAX_RETRY_DELAY = 20 # Maximum delay duration between two consecutive retries.
|
|
112
|
+
|
|
110
113
|
|
|
111
114
|
class MessageType:
|
|
112
115
|
"""Message type."""
|
{flwr_nightly-1.13.0.dev20241117 → flwr_nightly-1.14.0.dev20241127}/src/py/flwr/common/grpc.py
RENAMED
|
@@ -53,7 +53,10 @@ def create_channel(
|
|
|
53
53
|
channel = grpc.insecure_channel(server_address, options=channel_options)
|
|
54
54
|
log(DEBUG, "Opened insecure gRPC connection (no certificates were passed)")
|
|
55
55
|
else:
|
|
56
|
-
|
|
56
|
+
try:
|
|
57
|
+
ssl_channel_credentials = grpc.ssl_channel_credentials(root_certificates)
|
|
58
|
+
except Exception as e:
|
|
59
|
+
raise ValueError(f"Failed to create SSL channel credentials: {e}") from e
|
|
57
60
|
channel = grpc.secure_channel(
|
|
58
61
|
server_address, ssl_channel_credentials, options=channel_options
|
|
59
62
|
)
|