flwr-nightly 1.13.0.dev20241114__tar.gz → 1.13.0.dev20241115__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.dev20241114 → flwr_nightly-1.13.0.dev20241115}/PKG-INFO +2 -1
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/pyproject.toml +2 -1
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/app.py +39 -11
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/app.py +29 -22
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/supernode/app.py +29 -17
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/constant.py +21 -6
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/app.py +37 -12
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/grpc_driver.py +2 -2
- flwr_nightly-1.13.0.dev20241115/src/py/flwr/server/run_serverapp.py +77 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/serverapp/app.py +33 -22
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +55 -28
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/linkstate.py +19 -5
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +70 -111
- flwr_nightly-1.13.0.dev20241115/src/py/flwr/server/superlink/linkstate/utils.py +389 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/app.py +3 -3
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/legacy_app.py +21 -1
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/simulationio_connection.py +2 -2
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/deployment.py +9 -5
- flwr_nightly-1.13.0.dev20241114/src/py/flwr/server/run_serverapp.py +0 -307
- flwr_nightly-1.13.0.dev20241114/src/py/flwr/server/superlink/linkstate/utils.py +0 -210
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/README.md +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/ls.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/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.13.0.
|
|
3
|
+
Version: 1.13.0.dev20241115
|
|
4
4
|
Summary: Flower: A Friendly Federated Learning Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -42,6 +42,7 @@ Requires-Dist: protobuf (>=4.25.2,<5.0.0)
|
|
|
42
42
|
Requires-Dist: pycryptodome (>=3.18.0,<4.0.0)
|
|
43
43
|
Requires-Dist: ray (==2.10.0) ; (python_version >= "3.9" and python_version < "3.12") and (extra == "simulation")
|
|
44
44
|
Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
|
|
45
|
+
Requires-Dist: rich (>=13.5.0,<14.0.0)
|
|
45
46
|
Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
|
|
46
47
|
Requires-Dist: tomli (>=2.0.1,<3.0.0)
|
|
47
48
|
Requires-Dist: tomli-w (>=1.0.0,<2.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.13.0.
|
|
7
|
+
version = "1.13.0.dev20241115"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -78,6 +78,7 @@ tomli = "^2.0.1"
|
|
|
78
78
|
tomli-w = "^1.0.0"
|
|
79
79
|
pathspec = "^0.12.1"
|
|
80
80
|
hatchling = "^1.25.0"
|
|
81
|
+
rich = "^13.5.0"
|
|
81
82
|
# Optional dependencies (Simulation Engine)
|
|
82
83
|
ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
|
|
83
84
|
# Optional dependencies (REST transport layer)
|
{flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/client/app.py
RENAMED
|
@@ -37,11 +37,13 @@ from flwr.client.typing import ClientFnExt
|
|
|
37
37
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
|
|
38
38
|
from flwr.common.address import parse_address
|
|
39
39
|
from flwr.common.constant import (
|
|
40
|
-
|
|
40
|
+
CLIENT_OCTET,
|
|
41
|
+
CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
41
42
|
ISOLATION_MODE_PROCESS,
|
|
42
43
|
ISOLATION_MODE_SUBPROCESS,
|
|
43
44
|
MISSING_EXTRA_REST,
|
|
44
45
|
RUN_ID_NUM_BYTES,
|
|
46
|
+
SERVER_OCTET,
|
|
45
47
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
46
48
|
TRANSPORT_TYPE_GRPC_BIDI,
|
|
47
49
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
@@ -102,6 +104,11 @@ def start_client(
|
|
|
102
104
|
) -> None:
|
|
103
105
|
"""Start a Flower client node which connects to a Flower server.
|
|
104
106
|
|
|
107
|
+
Warning
|
|
108
|
+
-------
|
|
109
|
+
This function is deprecated since 1.13.0. Use :code:`flower-supernode` command
|
|
110
|
+
instead to start a SuperNode.
|
|
111
|
+
|
|
105
112
|
Parameters
|
|
106
113
|
----------
|
|
107
114
|
server_address : str
|
|
@@ -176,6 +183,17 @@ def start_client(
|
|
|
176
183
|
>>> root_certificates=Path("/crts/root.pem").read_bytes(),
|
|
177
184
|
>>> )
|
|
178
185
|
"""
|
|
186
|
+
msg = (
|
|
187
|
+
"flwr.client.start_client() is deprecated."
|
|
188
|
+
"\n\tInstead, use the `flower-supernode` CLI command to start a SuperNode "
|
|
189
|
+
"as shown below:"
|
|
190
|
+
"\n\n\t\t$ flower-supernode --insecure --superlink='<IP>:<PORT>'"
|
|
191
|
+
"\n\n\tTo view all available options, run:"
|
|
192
|
+
"\n\n\t\t$ flower-supernode --help"
|
|
193
|
+
"\n\n\tUsing `start_client()` is deprecated."
|
|
194
|
+
)
|
|
195
|
+
warn_deprecated_feature(name=msg)
|
|
196
|
+
|
|
179
197
|
event(EventType.START_CLIENT_ENTER)
|
|
180
198
|
start_client_internal(
|
|
181
199
|
server_address=server_address,
|
|
@@ -216,7 +234,7 @@ def start_client_internal(
|
|
|
216
234
|
max_wait_time: Optional[float] = None,
|
|
217
235
|
flwr_path: Optional[Path] = None,
|
|
218
236
|
isolation: Optional[str] = None,
|
|
219
|
-
|
|
237
|
+
clientappio_api_address: Optional[str] = CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
220
238
|
certificates: Optional[tuple[bytes, bytes, bytes]] = None,
|
|
221
239
|
ssl_ca_certfile: Optional[str] = None,
|
|
222
240
|
) -> None:
|
|
@@ -276,9 +294,11 @@ def start_client_internal(
|
|
|
276
294
|
`process`. Defaults to `None`, which runs the `ClientApp` in the same process
|
|
277
295
|
as the SuperNode. If `subprocess`, the `ClientApp` runs in a subprocess started
|
|
278
296
|
by the SueprNode and communicates using gRPC at the address
|
|
279
|
-
`
|
|
280
|
-
process and communicates using gRPC at the address
|
|
281
|
-
|
|
297
|
+
`clientappio_api_address`. If `process`, the `ClientApp` runs in a separate
|
|
298
|
+
isolated process and communicates using gRPC at the address
|
|
299
|
+
`clientappio_api_address`.
|
|
300
|
+
clientappio_api_address : Optional[str]
|
|
301
|
+
(default: `CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS`)
|
|
282
302
|
The SuperNode gRPC server address.
|
|
283
303
|
certificates : Optional[Tuple[bytes, bytes, bytes]] (default: None)
|
|
284
304
|
Tuple containing the CA certificate, server certificate, and server private key.
|
|
@@ -310,16 +330,16 @@ def start_client_internal(
|
|
|
310
330
|
load_client_app_fn = _load_client_app
|
|
311
331
|
|
|
312
332
|
if isolation:
|
|
313
|
-
if
|
|
333
|
+
if clientappio_api_address is None:
|
|
314
334
|
raise ValueError(
|
|
315
|
-
f"`
|
|
335
|
+
f"`clientappio_api_address` required when `isolation` is "
|
|
316
336
|
f"{ISOLATION_MODE_SUBPROCESS} or {ISOLATION_MODE_PROCESS}",
|
|
317
337
|
)
|
|
318
338
|
_clientappio_grpc_server, clientappio_servicer = run_clientappio_api_grpc(
|
|
319
|
-
address=
|
|
339
|
+
address=clientappio_api_address,
|
|
320
340
|
certificates=certificates,
|
|
321
341
|
)
|
|
322
|
-
|
|
342
|
+
clientappio_api_address = cast(str, clientappio_api_address)
|
|
323
343
|
|
|
324
344
|
# At this point, only `load_client_app_fn` should be used
|
|
325
345
|
# Both `client` and `client_fn` must not be used directly
|
|
@@ -515,11 +535,19 @@ def start_client_internal(
|
|
|
515
535
|
)
|
|
516
536
|
|
|
517
537
|
if start_subprocess:
|
|
538
|
+
_octet, _colon, _port = (
|
|
539
|
+
clientappio_api_address.rpartition(":")
|
|
540
|
+
)
|
|
541
|
+
io_address = (
|
|
542
|
+
f"{CLIENT_OCTET}:{_port}"
|
|
543
|
+
if _octet == SERVER_OCTET
|
|
544
|
+
else clientappio_api_address
|
|
545
|
+
)
|
|
518
546
|
# Start ClientApp subprocess
|
|
519
547
|
command = [
|
|
520
548
|
"flwr-clientapp",
|
|
521
|
-
"--
|
|
522
|
-
|
|
549
|
+
"--clientappio-api-address",
|
|
550
|
+
io_address,
|
|
523
551
|
"--token",
|
|
524
552
|
str(token),
|
|
525
553
|
]
|
|
@@ -26,7 +26,7 @@ from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
|
26
26
|
from flwr.common import Context, Message
|
|
27
27
|
from flwr.common.args import add_args_flwr_app_common, try_obtain_root_certificates
|
|
28
28
|
from flwr.common.config import get_flwr_dir
|
|
29
|
-
from flwr.common.constant import ErrorCode
|
|
29
|
+
from flwr.common.constant import CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS, ErrorCode
|
|
30
30
|
from flwr.common.grpc import create_channel
|
|
31
31
|
from flwr.common.logger import log
|
|
32
32
|
from flwr.common.message import Error
|
|
@@ -56,35 +56,20 @@ from .utils import get_load_client_app_fn
|
|
|
56
56
|
|
|
57
57
|
def flwr_clientapp() -> None:
|
|
58
58
|
"""Run process-isolated Flower ClientApp."""
|
|
59
|
-
|
|
60
|
-
description="Run a Flower ClientApp",
|
|
61
|
-
)
|
|
62
|
-
parser.add_argument(
|
|
63
|
-
"--supernode",
|
|
64
|
-
type=str,
|
|
65
|
-
help="Address of SuperNode's ClientAppIo API",
|
|
66
|
-
)
|
|
67
|
-
parser.add_argument(
|
|
68
|
-
"--token",
|
|
69
|
-
type=int,
|
|
70
|
-
required=False,
|
|
71
|
-
help="Unique token generated by SuperNode for each ClientApp execution",
|
|
72
|
-
)
|
|
73
|
-
add_args_flwr_app_common(parser=parser)
|
|
74
|
-
args = parser.parse_args()
|
|
59
|
+
args = _parse_args_run_flwr_clientapp().parse_args()
|
|
75
60
|
|
|
76
61
|
log(INFO, "Starting Flower ClientApp")
|
|
77
|
-
certificates = try_obtain_root_certificates(args, args.
|
|
62
|
+
certificates = try_obtain_root_certificates(args, args.clientappio_api_address)
|
|
78
63
|
|
|
79
64
|
log(
|
|
80
65
|
DEBUG,
|
|
81
66
|
"Starting isolated `ClientApp` connected to SuperNode's ClientAppIo API at %s "
|
|
82
67
|
"with token %s",
|
|
83
|
-
args.
|
|
68
|
+
args.clientappio_api_address,
|
|
84
69
|
args.token,
|
|
85
70
|
)
|
|
86
71
|
run_clientapp(
|
|
87
|
-
|
|
72
|
+
clientappio_api_address=args.clientappio_api_address,
|
|
88
73
|
run_once=(args.token is not None),
|
|
89
74
|
token=args.token,
|
|
90
75
|
flwr_dir=args.flwr_dir,
|
|
@@ -98,7 +83,7 @@ def on_channel_state_change(channel_connectivity: str) -> None:
|
|
|
98
83
|
|
|
99
84
|
|
|
100
85
|
def run_clientapp( # pylint: disable=R0914
|
|
101
|
-
|
|
86
|
+
clientappio_api_address: str,
|
|
102
87
|
run_once: bool,
|
|
103
88
|
token: Optional[int] = None,
|
|
104
89
|
flwr_dir: Optional[str] = None,
|
|
@@ -106,7 +91,7 @@ def run_clientapp( # pylint: disable=R0914
|
|
|
106
91
|
) -> None:
|
|
107
92
|
"""Run Flower ClientApp process."""
|
|
108
93
|
channel = create_channel(
|
|
109
|
-
server_address=
|
|
94
|
+
server_address=clientappio_api_address,
|
|
110
95
|
insecure=(certificates is None),
|
|
111
96
|
root_certificates=certificates,
|
|
112
97
|
)
|
|
@@ -241,3 +226,25 @@ def push_message(
|
|
|
241
226
|
except grpc.RpcError as e:
|
|
242
227
|
log(ERROR, "[PushClientAppOutputs] gRPC error occurred: %s", str(e))
|
|
243
228
|
raise e
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def _parse_args_run_flwr_clientapp() -> argparse.ArgumentParser:
|
|
232
|
+
"""Parse flwr-clientapp command line arguments."""
|
|
233
|
+
parser = argparse.ArgumentParser(
|
|
234
|
+
description="Run a Flower ClientApp",
|
|
235
|
+
)
|
|
236
|
+
parser.add_argument(
|
|
237
|
+
"--clientappio-api-address",
|
|
238
|
+
default=CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS,
|
|
239
|
+
type=str,
|
|
240
|
+
help="Address of SuperNode's ClientAppIo API (IPv4, IPv6, or a domain name)."
|
|
241
|
+
f"By default, it is set to {CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS}.",
|
|
242
|
+
)
|
|
243
|
+
parser.add_argument(
|
|
244
|
+
"--token",
|
|
245
|
+
type=int,
|
|
246
|
+
required=False,
|
|
247
|
+
help="Unique token generated by SuperNode for each ClientApp execution",
|
|
248
|
+
)
|
|
249
|
+
add_args_flwr_app_common(parser=parser)
|
|
250
|
+
return parser
|
|
@@ -34,6 +34,7 @@ from flwr.common.args import (
|
|
|
34
34
|
)
|
|
35
35
|
from flwr.common.config import parse_config_args
|
|
36
36
|
from flwr.common.constant import (
|
|
37
|
+
CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
37
38
|
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
|
38
39
|
ISOLATION_MODE_PROCESS,
|
|
39
40
|
ISOLATION_MODE_SUBPROCESS,
|
|
@@ -65,12 +66,23 @@ def run_supernode() -> None:
|
|
|
65
66
|
"Ignoring `--flwr-dir`.",
|
|
66
67
|
)
|
|
67
68
|
|
|
69
|
+
# Exit if unsupported argument is passed by the user
|
|
70
|
+
if args.app is not None:
|
|
71
|
+
log(
|
|
72
|
+
ERROR,
|
|
73
|
+
"The `app` argument is deprecated. The SuperNode now automatically "
|
|
74
|
+
"uses the ClientApp delivered from the SuperLink. Providing the app "
|
|
75
|
+
"directory manually is no longer supported. Please remove the `app` "
|
|
76
|
+
"argument from your command.",
|
|
77
|
+
)
|
|
78
|
+
sys.exit(1)
|
|
79
|
+
|
|
68
80
|
root_certificates = try_obtain_root_certificates(args, args.superlink)
|
|
69
81
|
# Obtain certificates for ClientAppIo API server
|
|
70
82
|
server_certificates = try_obtain_server_certificates(args, TRANSPORT_TYPE_GRPC_RERE)
|
|
71
83
|
load_fn = get_load_client_app_fn(
|
|
72
84
|
default_app_ref="",
|
|
73
|
-
app_path=
|
|
85
|
+
app_path=None,
|
|
74
86
|
flwr_dir=args.flwr_dir,
|
|
75
87
|
multi_app=True,
|
|
76
88
|
)
|
|
@@ -92,7 +104,7 @@ def run_supernode() -> None:
|
|
|
92
104
|
),
|
|
93
105
|
flwr_path=args.flwr_dir,
|
|
94
106
|
isolation=args.isolation,
|
|
95
|
-
|
|
107
|
+
clientappio_api_address=args.clientappio_api_address,
|
|
96
108
|
certificates=server_certificates,
|
|
97
109
|
ssl_ca_certfile=args.ssl_ca_certfile,
|
|
98
110
|
)
|
|
@@ -144,12 +156,12 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
|
|
|
144
156
|
"app",
|
|
145
157
|
nargs="?",
|
|
146
158
|
default=None,
|
|
147
|
-
help=
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
159
|
+
help=(
|
|
160
|
+
"(REMOVED) This argument is removed. The SuperNode now automatically "
|
|
161
|
+
"uses the ClientApp delivered from the SuperLink, so there is no need to "
|
|
162
|
+
"provide the app directory manually. This argument will be removed in a "
|
|
163
|
+
"future version."
|
|
164
|
+
),
|
|
153
165
|
)
|
|
154
166
|
_parse_args_common(parser)
|
|
155
167
|
parser.add_argument(
|
|
@@ -165,22 +177,22 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
|
|
|
165
177
|
)
|
|
166
178
|
parser.add_argument(
|
|
167
179
|
"--isolation",
|
|
168
|
-
default=
|
|
180
|
+
default=ISOLATION_MODE_SUBPROCESS,
|
|
169
181
|
required=False,
|
|
170
182
|
choices=[
|
|
171
183
|
ISOLATION_MODE_SUBPROCESS,
|
|
172
184
|
ISOLATION_MODE_PROCESS,
|
|
173
185
|
],
|
|
174
|
-
help="Isolation mode when running a `ClientApp` (
|
|
175
|
-
"`subprocess`, `process`).
|
|
176
|
-
"
|
|
177
|
-
"
|
|
178
|
-
"independent process gets created outside of SuperNode.",
|
|
186
|
+
help="Isolation mode when running a `ClientApp` (`subprocess` by default, "
|
|
187
|
+
"possible values: `subprocess`, `process`). Use `subprocess` to configure "
|
|
188
|
+
"SuperNode to run a `ClientApp` in a subprocess. Use `process` to indicate "
|
|
189
|
+
"that a separate independent process gets created outside of SuperNode.",
|
|
179
190
|
)
|
|
180
191
|
parser.add_argument(
|
|
181
|
-
"--
|
|
182
|
-
default=
|
|
183
|
-
help="
|
|
192
|
+
"--clientappio-api-address",
|
|
193
|
+
default=CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
194
|
+
help="ClientAppIo API (gRPC) server address (IPv4, IPv6, or a domain name). "
|
|
195
|
+
f"By default, it is set to {CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS}.",
|
|
184
196
|
)
|
|
185
197
|
|
|
186
198
|
return parser
|
{flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/common/constant.py
RENAMED
|
@@ -38,17 +38,30 @@ TRANSPORT_TYPES = [
|
|
|
38
38
|
]
|
|
39
39
|
|
|
40
40
|
# Addresses
|
|
41
|
+
# Ports
|
|
42
|
+
CLIENTAPPIO_PORT = "9094"
|
|
43
|
+
SERVERAPPIO_PORT = "9091"
|
|
44
|
+
FLEETAPI_GRPC_RERE_PORT = "9092"
|
|
45
|
+
FLEETAPI_PORT = "9095"
|
|
46
|
+
EXEC_API_PORT = "9093"
|
|
47
|
+
SIMULATIONIO_PORT = "9096"
|
|
48
|
+
# Octets
|
|
49
|
+
SERVER_OCTET = "0.0.0.0"
|
|
50
|
+
CLIENT_OCTET = "127.0.0.1"
|
|
41
51
|
# SuperNode
|
|
42
|
-
|
|
52
|
+
CLIENTAPPIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{CLIENTAPPIO_PORT}"
|
|
53
|
+
CLIENTAPPIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{CLIENTAPPIO_PORT}"
|
|
43
54
|
# SuperLink
|
|
44
|
-
|
|
45
|
-
|
|
55
|
+
SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{SERVERAPPIO_PORT}"
|
|
56
|
+
SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{SERVERAPPIO_PORT}"
|
|
57
|
+
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS = f"{SERVER_OCTET}:{FLEETAPI_GRPC_RERE_PORT}"
|
|
46
58
|
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS = (
|
|
47
59
|
"[::]:8080" # IPv6 to keep start_server compatible
|
|
48
60
|
)
|
|
49
|
-
FLEET_API_REST_DEFAULT_ADDRESS = "
|
|
50
|
-
|
|
51
|
-
|
|
61
|
+
FLEET_API_REST_DEFAULT_ADDRESS = f"{SERVER_OCTET}:{FLEETAPI_PORT}"
|
|
62
|
+
EXEC_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{EXEC_API_PORT}"
|
|
63
|
+
SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS = f"{SERVER_OCTET}:{SIMULATIONIO_PORT}"
|
|
64
|
+
SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS = f"{CLIENT_OCTET}:{SIMULATIONIO_PORT}"
|
|
52
65
|
|
|
53
66
|
# Constants for ping
|
|
54
67
|
PING_DEFAULT_INTERVAL = 30
|
|
@@ -134,6 +147,8 @@ class ErrorCode:
|
|
|
134
147
|
UNKNOWN = 0
|
|
135
148
|
LOAD_CLIENT_APP_EXCEPTION = 1
|
|
136
149
|
CLIENT_APP_RAISED_EXCEPTION = 2
|
|
150
|
+
MESSAGE_UNAVAILABLE = 3
|
|
151
|
+
REPLY_MESSAGE_UNAVAILABLE = 4
|
|
137
152
|
|
|
138
153
|
def __new__(cls) -> ErrorCode:
|
|
139
154
|
"""Prevent instantiation."""
|
{flwr_nightly-1.13.0.dev20241114 → flwr_nightly-1.13.0.dev20241115}/src/py/flwr/server/app.py
RENAMED
|
@@ -39,21 +39,23 @@ from flwr.common.address import parse_address
|
|
|
39
39
|
from flwr.common.args import try_obtain_server_certificates
|
|
40
40
|
from flwr.common.config import get_flwr_dir, parse_config_args
|
|
41
41
|
from flwr.common.constant import (
|
|
42
|
-
|
|
42
|
+
CLIENT_OCTET,
|
|
43
|
+
EXEC_API_DEFAULT_SERVER_ADDRESS,
|
|
43
44
|
FLEET_API_GRPC_BIDI_DEFAULT_ADDRESS,
|
|
44
45
|
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
|
45
46
|
FLEET_API_REST_DEFAULT_ADDRESS,
|
|
46
47
|
ISOLATION_MODE_PROCESS,
|
|
47
48
|
ISOLATION_MODE_SUBPROCESS,
|
|
48
49
|
MISSING_EXTRA_REST,
|
|
49
|
-
|
|
50
|
-
|
|
50
|
+
SERVER_OCTET,
|
|
51
|
+
SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
52
|
+
SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS,
|
|
51
53
|
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
52
54
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
53
55
|
TRANSPORT_TYPE_REST,
|
|
54
56
|
)
|
|
55
57
|
from flwr.common.exit_handlers import register_exit_handlers
|
|
56
|
-
from flwr.common.logger import log
|
|
58
|
+
from flwr.common.logger import log, warn_deprecated_feature
|
|
57
59
|
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
|
58
60
|
private_key_to_bytes,
|
|
59
61
|
public_key_to_bytes,
|
|
@@ -99,6 +101,11 @@ def start_server( # pylint: disable=too-many-arguments,too-many-locals
|
|
|
99
101
|
) -> History:
|
|
100
102
|
"""Start a Flower server using the gRPC transport layer.
|
|
101
103
|
|
|
104
|
+
Warning
|
|
105
|
+
-------
|
|
106
|
+
This function is deprecated since 1.13.0. Use the :code:`flower-superlink` command
|
|
107
|
+
instead to start a SuperLink.
|
|
108
|
+
|
|
102
109
|
Parameters
|
|
103
110
|
----------
|
|
104
111
|
server_address : Optional[str]
|
|
@@ -156,6 +163,17 @@ def start_server( # pylint: disable=too-many-arguments,too-many-locals
|
|
|
156
163
|
>>> )
|
|
157
164
|
>>> )
|
|
158
165
|
"""
|
|
166
|
+
msg = (
|
|
167
|
+
"flwr.server.start_server() is deprecated."
|
|
168
|
+
"\n\tInstead, use the `flower-superlink` CLI command to start a SuperLink "
|
|
169
|
+
"as shown below:"
|
|
170
|
+
"\n\n\t\t$ flower-superlink --insecure"
|
|
171
|
+
"\n\n\tTo view usage and all available options, run:"
|
|
172
|
+
"\n\n\t\t$ flower-superlink --help"
|
|
173
|
+
"\n\n\tUsing `start_server()` is deprecated."
|
|
174
|
+
)
|
|
175
|
+
warn_deprecated_feature(name=msg)
|
|
176
|
+
|
|
159
177
|
event(EventType.START_SERVER_ENTER)
|
|
160
178
|
|
|
161
179
|
# Parse IP address
|
|
@@ -367,7 +385,11 @@ def run_superlink() -> None:
|
|
|
367
385
|
|
|
368
386
|
if args.isolation == ISOLATION_MODE_SUBPROCESS:
|
|
369
387
|
|
|
370
|
-
|
|
388
|
+
_octet, _colon, _port = serverappio_address.rpartition(":")
|
|
389
|
+
io_address = (
|
|
390
|
+
f"{CLIENT_OCTET}:{_port}" if _octet == SERVER_OCTET else serverappio_address
|
|
391
|
+
)
|
|
392
|
+
address = simulationio_address if sim_exec else io_address
|
|
371
393
|
cmd = "flwr-simulation" if sim_exec else "flwr-serverapp"
|
|
372
394
|
|
|
373
395
|
# Scheduler thread
|
|
@@ -426,7 +448,7 @@ def _flwr_scheduler(
|
|
|
426
448
|
command = [
|
|
427
449
|
cmd,
|
|
428
450
|
"--run-once",
|
|
429
|
-
"--
|
|
451
|
+
"--serverappio-api-address",
|
|
430
452
|
io_api_address,
|
|
431
453
|
]
|
|
432
454
|
if ssl_ca_certfile:
|
|
@@ -732,8 +754,9 @@ def _add_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
732
754
|
def _add_args_serverappio_api(parser: argparse.ArgumentParser) -> None:
|
|
733
755
|
parser.add_argument(
|
|
734
756
|
"--serverappio-api-address",
|
|
735
|
-
|
|
736
|
-
|
|
757
|
+
default=SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS,
|
|
758
|
+
help="ServerAppIo API (gRPC) server address (IPv4, IPv6, or a domain name). "
|
|
759
|
+
f"By default, it is set to {SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS}.",
|
|
737
760
|
)
|
|
738
761
|
|
|
739
762
|
|
|
@@ -766,8 +789,9 @@ def _add_args_exec_api(parser: argparse.ArgumentParser) -> None:
|
|
|
766
789
|
"""Add command line arguments for Exec API."""
|
|
767
790
|
parser.add_argument(
|
|
768
791
|
"--exec-api-address",
|
|
769
|
-
help="Exec API server address (IPv4, IPv6, or a domain name)"
|
|
770
|
-
default
|
|
792
|
+
help="Exec API server address (IPv4, IPv6, or a domain name) "
|
|
793
|
+
f"By default, it is set to {EXEC_API_DEFAULT_SERVER_ADDRESS}.",
|
|
794
|
+
default=EXEC_API_DEFAULT_SERVER_ADDRESS,
|
|
771
795
|
)
|
|
772
796
|
parser.add_argument(
|
|
773
797
|
"--executor",
|
|
@@ -791,6 +815,7 @@ def _add_args_exec_api(parser: argparse.ArgumentParser) -> None:
|
|
|
791
815
|
def _add_args_simulationio_api(parser: argparse.ArgumentParser) -> None:
|
|
792
816
|
parser.add_argument(
|
|
793
817
|
"--simulationio-api-address",
|
|
794
|
-
|
|
795
|
-
|
|
818
|
+
default=SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS,
|
|
819
|
+
help="SimulationIo API (gRPC) server address (IPv4, IPv6, or a domain name)."
|
|
820
|
+
f"By default, it is set to {SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS}.",
|
|
796
821
|
)
|
|
@@ -23,7 +23,7 @@ from typing import Optional, cast
|
|
|
23
23
|
import grpc
|
|
24
24
|
|
|
25
25
|
from flwr.common import DEFAULT_TTL, Message, Metadata, RecordSet
|
|
26
|
-
from flwr.common.constant import
|
|
26
|
+
from flwr.common.constant import SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS
|
|
27
27
|
from flwr.common.grpc import create_channel
|
|
28
28
|
from flwr.common.logger import log
|
|
29
29
|
from flwr.common.serde import message_from_taskres, message_to_taskins, run_from_proto
|
|
@@ -66,7 +66,7 @@ class GrpcDriver(Driver):
|
|
|
66
66
|
|
|
67
67
|
def __init__( # pylint: disable=too-many-arguments
|
|
68
68
|
self,
|
|
69
|
-
serverappio_service_address: str =
|
|
69
|
+
serverappio_service_address: str = SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS,
|
|
70
70
|
root_certificates: Optional[bytes] = None,
|
|
71
71
|
) -> None:
|
|
72
72
|
self._addr = serverappio_service_address
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Copyright 2024 Flower Labs GmbH. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Run ServerApp."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
import sys
|
|
19
|
+
from logging import DEBUG, ERROR
|
|
20
|
+
from typing import Optional
|
|
21
|
+
|
|
22
|
+
from flwr.common import Context
|
|
23
|
+
from flwr.common.logger import log, warn_unsupported_feature
|
|
24
|
+
from flwr.common.object_ref import load_app
|
|
25
|
+
|
|
26
|
+
from .driver import Driver
|
|
27
|
+
from .server_app import LoadServerAppError, ServerApp
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def run(
|
|
31
|
+
driver: Driver,
|
|
32
|
+
context: Context,
|
|
33
|
+
server_app_dir: str,
|
|
34
|
+
server_app_attr: Optional[str] = None,
|
|
35
|
+
loaded_server_app: Optional[ServerApp] = None,
|
|
36
|
+
) -> Context:
|
|
37
|
+
"""Run ServerApp with a given Driver."""
|
|
38
|
+
if not (server_app_attr is None) ^ (loaded_server_app is None):
|
|
39
|
+
raise ValueError(
|
|
40
|
+
"Either `server_app_attr` or `loaded_server_app` should be set "
|
|
41
|
+
"but not both."
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
# Load ServerApp if needed
|
|
45
|
+
def _load() -> ServerApp:
|
|
46
|
+
if server_app_attr:
|
|
47
|
+
server_app: ServerApp = load_app(
|
|
48
|
+
server_app_attr, LoadServerAppError, server_app_dir
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
if not isinstance(server_app, ServerApp):
|
|
52
|
+
raise LoadServerAppError(
|
|
53
|
+
f"Attribute {server_app_attr} is not of type {ServerApp}",
|
|
54
|
+
) from None
|
|
55
|
+
|
|
56
|
+
if loaded_server_app:
|
|
57
|
+
server_app = loaded_server_app
|
|
58
|
+
return server_app
|
|
59
|
+
|
|
60
|
+
server_app = _load()
|
|
61
|
+
|
|
62
|
+
# Call ServerApp
|
|
63
|
+
server_app(driver=driver, context=context)
|
|
64
|
+
|
|
65
|
+
log(DEBUG, "ServerApp finished running.")
|
|
66
|
+
return context
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# pylint: disable-next=too-many-branches,too-many-statements,too-many-locals
|
|
70
|
+
def run_server_app() -> None:
|
|
71
|
+
"""Run Flower server app."""
|
|
72
|
+
warn_unsupported_feature(
|
|
73
|
+
"The command `flower-server-app` is deprecated and no longer in use. "
|
|
74
|
+
"Use the `flwr-serverapp` exclusively instead."
|
|
75
|
+
)
|
|
76
|
+
log(ERROR, "`flower-server-app` used.")
|
|
77
|
+
sys.exit()
|