flwr-nightly 1.13.0.dev20241111__tar.gz → 1.13.0.dev20241113__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.dev20241111 → flwr_nightly-1.13.0.dev20241113}/PKG-INFO +2 -1
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/pyproject.toml +2 -1
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/build.py +37 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/install.py +5 -3
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/supernode/app.py +2 -36
- flwr_nightly-1.13.0.dev20241113/src/py/flwr/common/args.py +148 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/date.py +18 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/app.py +2 -56
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/serverapp/app.py +2 -2
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +2 -2
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/linkstate/utils.py +11 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/app.py +3 -38
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/superexec/deployment.py +3 -1
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/superexec/simulation.py +11 -46
- flwr_nightly-1.13.0.dev20241111/src/py/flwr/common/args.py +0 -83
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/README.md +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/superexec/executor.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.dev20241113
|
|
4
4
|
Summary: Flower: A Friendly Federated Learning Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -34,6 +34,7 @@ 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)
|
|
37
38
|
Requires-Dist: iterators (>=0.0.2,<0.0.3)
|
|
38
39
|
Requires-Dist: numpy (>=1.26.0,<3.0.0)
|
|
39
40
|
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.13.0.
|
|
7
|
+
version = "1.13.0.dev20241113"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -77,6 +77,7 @@ 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"
|
|
80
81
|
# Optional dependencies (Simulation Engine)
|
|
81
82
|
ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
|
|
82
83
|
# Optional dependencies (REST transport layer)
|
{flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/build.py
RENAMED
|
@@ -19,14 +19,18 @@ import os
|
|
|
19
19
|
import shutil
|
|
20
20
|
import tempfile
|
|
21
21
|
import zipfile
|
|
22
|
+
from logging import DEBUG, ERROR
|
|
22
23
|
from pathlib import Path
|
|
23
24
|
from typing import Annotated, Any, Optional, Union
|
|
24
25
|
|
|
25
26
|
import pathspec
|
|
26
27
|
import tomli_w
|
|
27
28
|
import typer
|
|
29
|
+
from hatchling.builders.wheel import WheelBuilder
|
|
30
|
+
from hatchling.metadata.core import ProjectMetadata
|
|
28
31
|
|
|
29
32
|
from flwr.common.constant import FAB_ALLOWED_EXTENSIONS, FAB_DATE, FAB_HASH_TRUNCATION
|
|
33
|
+
from flwr.common.logger import log
|
|
30
34
|
|
|
31
35
|
from .config_utils import load_and_validate
|
|
32
36
|
from .utils import is_valid_project_name
|
|
@@ -51,6 +55,27 @@ def get_fab_filename(conf: dict[str, Any], fab_hash: str) -> str:
|
|
|
51
55
|
return f"{publisher}.{name}.{version}.{fab_hash_truncated}.fab"
|
|
52
56
|
|
|
53
57
|
|
|
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
|
+
|
|
54
79
|
# pylint: disable=too-many-locals, too-many-statements
|
|
55
80
|
def build(
|
|
56
81
|
app: Annotated[
|
|
@@ -106,6 +131,12 @@ def build(
|
|
|
106
131
|
bold=True,
|
|
107
132
|
)
|
|
108
133
|
|
|
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
|
+
|
|
109
140
|
# Load .gitignore rules if present
|
|
110
141
|
ignore_spec = _load_gitignore(app)
|
|
111
142
|
|
|
@@ -137,6 +168,9 @@ def build(
|
|
|
137
168
|
and f.name != "pyproject.toml" # Exclude the original pyproject.toml
|
|
138
169
|
]
|
|
139
170
|
|
|
171
|
+
# Include FAB .whl
|
|
172
|
+
all_files.append(whl_path)
|
|
173
|
+
|
|
140
174
|
for file_path in all_files:
|
|
141
175
|
# Read the file content manually
|
|
142
176
|
with open(file_path, "rb") as f:
|
|
@@ -153,6 +187,9 @@ def build(
|
|
|
153
187
|
# Add CONTENT and CONTENT.jwt to the zip file
|
|
154
188
|
write_to_zip(fab_file, ".info/CONTENT", list_file_content)
|
|
155
189
|
|
|
190
|
+
# Erase FAB .whl in app directory
|
|
191
|
+
whl_path.unlink()
|
|
192
|
+
|
|
156
193
|
# Get hash of FAB file
|
|
157
194
|
content = Path(temp_filename).read_bytes()
|
|
158
195
|
fab_hash = hashlib.sha256(content).hexdigest()
|
{flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/cli/install.py
RENAMED
|
@@ -188,23 +188,25 @@ def validate_and_install(
|
|
|
188
188
|
else:
|
|
189
189
|
shutil.copy2(item, install_dir / item.name)
|
|
190
190
|
|
|
191
|
+
whl_file = config["tool"]["flwr"]["app"]["whl"]
|
|
192
|
+
install_whl = install_dir / whl_file
|
|
191
193
|
try:
|
|
192
194
|
subprocess.run(
|
|
193
|
-
["pip", "install", "
|
|
195
|
+
["pip", "install", "--no-deps", install_whl],
|
|
194
196
|
capture_output=True,
|
|
195
197
|
text=True,
|
|
196
198
|
check=True,
|
|
197
199
|
)
|
|
198
200
|
except subprocess.CalledProcessError as e:
|
|
199
201
|
typer.secho(
|
|
200
|
-
f"❌ Failed to
|
|
202
|
+
f"❌ Failed to install {project_name}:\n{e.stderr}",
|
|
201
203
|
fg=typer.colors.RED,
|
|
202
204
|
bold=True,
|
|
203
205
|
)
|
|
204
206
|
raise typer.Exit(code=1) from e
|
|
205
207
|
|
|
206
208
|
typer.secho(
|
|
207
|
-
f"🎊 Successfully installed {project_name}
|
|
209
|
+
f"🎊 Successfully installed {project_name}.",
|
|
208
210
|
fg=typer.colors.GREEN,
|
|
209
211
|
bold=True,
|
|
210
212
|
)
|
|
@@ -28,6 +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 try_obtain_root_certificates
|
|
31
32
|
from flwr.common.config import parse_config_args
|
|
32
33
|
from flwr.common.constant import (
|
|
33
34
|
FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
|
|
@@ -61,7 +62,7 @@ def run_supernode() -> None:
|
|
|
61
62
|
"Ignoring `--flwr-dir`.",
|
|
62
63
|
)
|
|
63
64
|
|
|
64
|
-
root_certificates =
|
|
65
|
+
root_certificates = try_obtain_root_certificates(args, args.superlink)
|
|
65
66
|
load_fn = get_load_client_app_fn(
|
|
66
67
|
default_app_ref="",
|
|
67
68
|
app_path=args.app,
|
|
@@ -126,41 +127,6 @@ def _warn_deprecated_server_arg(args: argparse.Namespace) -> None:
|
|
|
126
127
|
args.superlink = args.server
|
|
127
128
|
|
|
128
129
|
|
|
129
|
-
def _get_certificates(args: argparse.Namespace) -> Optional[bytes]:
|
|
130
|
-
"""Load certificates if specified in args."""
|
|
131
|
-
# Obtain certificates
|
|
132
|
-
if args.insecure:
|
|
133
|
-
if args.root_certificates is not None:
|
|
134
|
-
sys.exit(
|
|
135
|
-
"Conflicting options: The '--insecure' flag disables HTTPS, "
|
|
136
|
-
"but '--root-certificates' was also specified. Please remove "
|
|
137
|
-
"the '--root-certificates' option when running in insecure mode, "
|
|
138
|
-
"or omit '--insecure' to use HTTPS."
|
|
139
|
-
)
|
|
140
|
-
log(
|
|
141
|
-
WARN,
|
|
142
|
-
"Option `--insecure` was set. "
|
|
143
|
-
"Starting insecure HTTP client connected to %s.",
|
|
144
|
-
args.superlink,
|
|
145
|
-
)
|
|
146
|
-
root_certificates = None
|
|
147
|
-
else:
|
|
148
|
-
# Load the certificates if provided, or load the system certificates
|
|
149
|
-
cert_path = args.root_certificates
|
|
150
|
-
if cert_path is None:
|
|
151
|
-
root_certificates = None
|
|
152
|
-
else:
|
|
153
|
-
root_certificates = Path(cert_path).read_bytes()
|
|
154
|
-
log(
|
|
155
|
-
DEBUG,
|
|
156
|
-
"Starting secure HTTPS client connected to %s "
|
|
157
|
-
"with the following certificates: %s.",
|
|
158
|
-
args.superlink,
|
|
159
|
-
cert_path,
|
|
160
|
-
)
|
|
161
|
-
return root_certificates
|
|
162
|
-
|
|
163
|
-
|
|
164
130
|
def _parse_args_run_supernode() -> argparse.ArgumentParser:
|
|
165
131
|
"""Parse flower-supernode command line arguments."""
|
|
166
132
|
parser = argparse.ArgumentParser(
|
|
@@ -0,0 +1,148 @@
|
|
|
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
|
+
"""Common Flower arguments."""
|
|
16
|
+
|
|
17
|
+
import argparse
|
|
18
|
+
import sys
|
|
19
|
+
from logging import DEBUG, WARN
|
|
20
|
+
from os.path import isfile
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
from typing import Optional
|
|
23
|
+
|
|
24
|
+
from flwr.common.constant import (
|
|
25
|
+
TRANSPORT_TYPE_GRPC_ADAPTER,
|
|
26
|
+
TRANSPORT_TYPE_GRPC_RERE,
|
|
27
|
+
TRANSPORT_TYPE_REST,
|
|
28
|
+
)
|
|
29
|
+
from flwr.common.logger import log
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def add_args_flwr_app_common(parser: argparse.ArgumentParser) -> None:
|
|
33
|
+
"""Add common Flower arguments for flwr-*app to the provided parser."""
|
|
34
|
+
parser.add_argument(
|
|
35
|
+
"--flwr-dir",
|
|
36
|
+
default=None,
|
|
37
|
+
help="""The path containing installed Flower Apps.
|
|
38
|
+
By default, this value is equal to:
|
|
39
|
+
|
|
40
|
+
- `$FLWR_HOME/` if `$FLWR_HOME` is defined
|
|
41
|
+
- `$XDG_DATA_HOME/.flwr/` if `$XDG_DATA_HOME` is defined
|
|
42
|
+
- `$HOME/.flwr/` in all other cases
|
|
43
|
+
""",
|
|
44
|
+
)
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"--insecure",
|
|
47
|
+
action="store_true",
|
|
48
|
+
help="Run the server without HTTPS, regardless of whether certificate "
|
|
49
|
+
"paths are provided. By default, the server runs with HTTPS enabled. "
|
|
50
|
+
"Use this flag only if you understand the risks.",
|
|
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
|
+
|
|
60
|
+
|
|
61
|
+
def try_obtain_root_certificates(
|
|
62
|
+
args: argparse.Namespace,
|
|
63
|
+
grpc_server_address: str,
|
|
64
|
+
) -> Optional[bytes]:
|
|
65
|
+
"""Validate and return the root certificates."""
|
|
66
|
+
root_cert_path = args.root_certificates
|
|
67
|
+
if args.insecure:
|
|
68
|
+
if root_cert_path is not None:
|
|
69
|
+
sys.exit(
|
|
70
|
+
"Conflicting options: The '--insecure' flag disables HTTPS, "
|
|
71
|
+
"but '--root-certificates' was also specified. Please remove "
|
|
72
|
+
"the '--root-certificates' option when running in insecure mode, "
|
|
73
|
+
"or omit '--insecure' to use HTTPS."
|
|
74
|
+
)
|
|
75
|
+
log(
|
|
76
|
+
WARN,
|
|
77
|
+
"Option `--insecure` was set. Starting insecure HTTP channel to %s.",
|
|
78
|
+
grpc_server_address,
|
|
79
|
+
)
|
|
80
|
+
root_certificates = None
|
|
81
|
+
else:
|
|
82
|
+
# Load the certificates if provided, or load the system certificates
|
|
83
|
+
if not isfile(root_cert_path):
|
|
84
|
+
sys.exit("Path argument `--root-certificates` does not point to a file.")
|
|
85
|
+
root_certificates = Path(root_cert_path).read_bytes()
|
|
86
|
+
log(
|
|
87
|
+
DEBUG,
|
|
88
|
+
"Starting secure HTTPS channel to %s "
|
|
89
|
+
"with the following certificates: %s.",
|
|
90
|
+
grpc_server_address,
|
|
91
|
+
root_cert_path,
|
|
92
|
+
)
|
|
93
|
+
return root_certificates
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def try_obtain_server_certificates(
|
|
97
|
+
args: argparse.Namespace,
|
|
98
|
+
transport_type: str,
|
|
99
|
+
) -> Optional[tuple[bytes, bytes, bytes]]:
|
|
100
|
+
"""Validate and return the CA cert, server cert, and server private key."""
|
|
101
|
+
if args.insecure:
|
|
102
|
+
log(WARN, "Option `--insecure` was set. Starting insecure HTTP server.")
|
|
103
|
+
return None
|
|
104
|
+
# Check if certificates are provided
|
|
105
|
+
if transport_type in [TRANSPORT_TYPE_GRPC_RERE, TRANSPORT_TYPE_GRPC_ADAPTER]:
|
|
106
|
+
if args.ssl_certfile and args.ssl_keyfile and args.ssl_ca_certfile:
|
|
107
|
+
if not isfile(args.ssl_ca_certfile):
|
|
108
|
+
sys.exit("Path argument `--ssl-ca-certfile` does not point to a file.")
|
|
109
|
+
if not isfile(args.ssl_certfile):
|
|
110
|
+
sys.exit("Path argument `--ssl-certfile` does not point to a file.")
|
|
111
|
+
if not isfile(args.ssl_keyfile):
|
|
112
|
+
sys.exit("Path argument `--ssl-keyfile` does not point to a file.")
|
|
113
|
+
certificates = (
|
|
114
|
+
Path(args.ssl_ca_certfile).read_bytes(), # CA certificate
|
|
115
|
+
Path(args.ssl_certfile).read_bytes(), # server certificate
|
|
116
|
+
Path(args.ssl_keyfile).read_bytes(), # server private key
|
|
117
|
+
)
|
|
118
|
+
return certificates
|
|
119
|
+
if args.ssl_certfile or args.ssl_keyfile or args.ssl_ca_certfile:
|
|
120
|
+
sys.exit(
|
|
121
|
+
"You need to provide valid file paths to `--ssl-certfile`, "
|
|
122
|
+
"`--ssl-keyfile`, and `—-ssl-ca-certfile` to create a secure "
|
|
123
|
+
"connection in Fleet API server (gRPC-rere)."
|
|
124
|
+
)
|
|
125
|
+
if transport_type == TRANSPORT_TYPE_REST:
|
|
126
|
+
if args.ssl_certfile and args.ssl_keyfile:
|
|
127
|
+
if not isfile(args.ssl_certfile):
|
|
128
|
+
sys.exit("Path argument `--ssl-certfile` does not point to a file.")
|
|
129
|
+
if not isfile(args.ssl_keyfile):
|
|
130
|
+
sys.exit("Path argument `--ssl-keyfile` does not point to a file.")
|
|
131
|
+
certificates = (
|
|
132
|
+
b"",
|
|
133
|
+
Path(args.ssl_certfile).read_bytes(), # server certificate
|
|
134
|
+
Path(args.ssl_keyfile).read_bytes(), # server private key
|
|
135
|
+
)
|
|
136
|
+
return certificates
|
|
137
|
+
if args.ssl_certfile or args.ssl_keyfile:
|
|
138
|
+
sys.exit(
|
|
139
|
+
"You need to provide valid file paths to `--ssl-certfile` "
|
|
140
|
+
"and `--ssl-keyfile` to create a secure connection "
|
|
141
|
+
"in Fleet API server (REST, experimental)."
|
|
142
|
+
)
|
|
143
|
+
sys.exit(
|
|
144
|
+
"Certificates are required unless running in insecure mode. "
|
|
145
|
+
"Please provide certificate paths to `--ssl-certfile`, "
|
|
146
|
+
"`--ssl-keyfile`, and `—-ssl-ca-certfile` or run the server "
|
|
147
|
+
"in insecure mode using '--insecure' if you understand the risks."
|
|
148
|
+
)
|
{flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/common/date.py
RENAMED
|
@@ -21,3 +21,21 @@ import datetime
|
|
|
21
21
|
def now() -> datetime.datetime:
|
|
22
22
|
"""Construct a datetime from time.time() with time zone set to UTC."""
|
|
23
23
|
return datetime.datetime.now(tz=datetime.timezone.utc)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def format_timedelta(td: datetime.timedelta) -> str:
|
|
27
|
+
"""Format a timedelta as a string."""
|
|
28
|
+
days = td.days
|
|
29
|
+
hours, remainder = divmod(td.seconds, 3600)
|
|
30
|
+
minutes, seconds = divmod(remainder, 60)
|
|
31
|
+
|
|
32
|
+
if days > 0:
|
|
33
|
+
return f"{days}d {hours:02}:{minutes:02}:{seconds:02}"
|
|
34
|
+
return f"{hours:02}:{minutes:02}:{seconds:02}"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def isoformat8601_utc(dt: datetime.datetime) -> str:
|
|
38
|
+
"""Return the datetime formatted as an ISO 8601 string with a trailing 'Z'."""
|
|
39
|
+
if dt.tzinfo != datetime.timezone.utc:
|
|
40
|
+
raise ValueError("Expected datetime with timezone set to UTC")
|
|
41
|
+
return dt.isoformat(timespec="seconds").replace("+00:00", "Z")
|
{flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/server/app.py
RENAMED
|
@@ -22,7 +22,6 @@ import sys
|
|
|
22
22
|
import threading
|
|
23
23
|
from collections.abc import Sequence
|
|
24
24
|
from logging import DEBUG, INFO, WARN
|
|
25
|
-
from os.path import isfile
|
|
26
25
|
from pathlib import Path
|
|
27
26
|
from time import sleep
|
|
28
27
|
from typing import Optional
|
|
@@ -37,6 +36,7 @@ from cryptography.hazmat.primitives.serialization import (
|
|
|
37
36
|
|
|
38
37
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, event
|
|
39
38
|
from flwr.common.address import parse_address
|
|
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
|
EXEC_API_DEFAULT_ADDRESS,
|
|
@@ -227,7 +227,7 @@ def run_superlink() -> None:
|
|
|
227
227
|
simulationio_address, _, _ = _format_address(args.simulationio_api_address)
|
|
228
228
|
|
|
229
229
|
# Obtain certificates
|
|
230
|
-
certificates =
|
|
230
|
+
certificates = try_obtain_server_certificates(args, args.fleet_api_type)
|
|
231
231
|
|
|
232
232
|
# Initialize StateFactory
|
|
233
233
|
state_factory = LinkStateFactory(args.database)
|
|
@@ -540,60 +540,6 @@ def _try_setup_node_authentication(
|
|
|
540
540
|
)
|
|
541
541
|
|
|
542
542
|
|
|
543
|
-
def _try_obtain_certificates(
|
|
544
|
-
args: argparse.Namespace,
|
|
545
|
-
) -> Optional[tuple[bytes, bytes, bytes]]:
|
|
546
|
-
# Obtain certificates
|
|
547
|
-
if args.insecure:
|
|
548
|
-
log(WARN, "Option `--insecure` was set. Starting insecure HTTP server.")
|
|
549
|
-
return None
|
|
550
|
-
# Check if certificates are provided
|
|
551
|
-
if args.fleet_api_type in [TRANSPORT_TYPE_GRPC_RERE, TRANSPORT_TYPE_GRPC_ADAPTER]:
|
|
552
|
-
if args.ssl_certfile and args.ssl_keyfile and args.ssl_ca_certfile:
|
|
553
|
-
if not isfile(args.ssl_ca_certfile):
|
|
554
|
-
sys.exit("Path argument `--ssl-ca-certfile` does not point to a file.")
|
|
555
|
-
if not isfile(args.ssl_certfile):
|
|
556
|
-
sys.exit("Path argument `--ssl-certfile` does not point to a file.")
|
|
557
|
-
if not isfile(args.ssl_keyfile):
|
|
558
|
-
sys.exit("Path argument `--ssl-keyfile` does not point to a file.")
|
|
559
|
-
certificates = (
|
|
560
|
-
Path(args.ssl_ca_certfile).read_bytes(), # CA certificate
|
|
561
|
-
Path(args.ssl_certfile).read_bytes(), # server certificate
|
|
562
|
-
Path(args.ssl_keyfile).read_bytes(), # server private key
|
|
563
|
-
)
|
|
564
|
-
return certificates
|
|
565
|
-
if args.ssl_certfile or args.ssl_keyfile or args.ssl_ca_certfile:
|
|
566
|
-
sys.exit(
|
|
567
|
-
"You need to provide valid file paths to `--ssl-certfile`, "
|
|
568
|
-
"`--ssl-keyfile`, and `—-ssl-ca-certfile` to create a secure "
|
|
569
|
-
"connection in Fleet API server (gRPC-rere)."
|
|
570
|
-
)
|
|
571
|
-
if args.fleet_api_type == TRANSPORT_TYPE_REST:
|
|
572
|
-
if args.ssl_certfile and args.ssl_keyfile:
|
|
573
|
-
if not isfile(args.ssl_certfile):
|
|
574
|
-
sys.exit("Path argument `--ssl-certfile` does not point to a file.")
|
|
575
|
-
if not isfile(args.ssl_keyfile):
|
|
576
|
-
sys.exit("Path argument `--ssl-keyfile` does not point to a file.")
|
|
577
|
-
certificates = (
|
|
578
|
-
b"",
|
|
579
|
-
Path(args.ssl_certfile).read_bytes(), # server certificate
|
|
580
|
-
Path(args.ssl_keyfile).read_bytes(), # server private key
|
|
581
|
-
)
|
|
582
|
-
return certificates
|
|
583
|
-
if args.ssl_certfile or args.ssl_keyfile:
|
|
584
|
-
sys.exit(
|
|
585
|
-
"You need to provide valid file paths to `--ssl-certfile` "
|
|
586
|
-
"and `--ssl-keyfile` to create a secure connection "
|
|
587
|
-
"in Fleet API server (REST, experimental)."
|
|
588
|
-
)
|
|
589
|
-
sys.exit(
|
|
590
|
-
"Certificates are required unless running in insecure mode. "
|
|
591
|
-
"Please provide certificate paths to `--ssl-certfile`, "
|
|
592
|
-
"`--ssl-keyfile`, and `—-ssl-ca-certfile` or run the server "
|
|
593
|
-
"in insecure mode using '--insecure' if you understand the risks."
|
|
594
|
-
)
|
|
595
|
-
|
|
596
|
-
|
|
597
543
|
def _run_fleet_api_grpc_rere(
|
|
598
544
|
address: str,
|
|
599
545
|
state_factory: LinkStateFactory,
|
|
@@ -23,7 +23,7 @@ from typing import Optional
|
|
|
23
23
|
|
|
24
24
|
from flwr.cli.config_utils import get_fab_metadata
|
|
25
25
|
from flwr.cli.install import install_from_fab
|
|
26
|
-
from flwr.common.args import add_args_flwr_app_common,
|
|
26
|
+
from flwr.common.args import add_args_flwr_app_common, try_obtain_root_certificates
|
|
27
27
|
from flwr.common.config import (
|
|
28
28
|
get_flwr_dir,
|
|
29
29
|
get_fused_config_from_dir,
|
|
@@ -80,7 +80,7 @@ def flwr_serverapp() -> None:
|
|
|
80
80
|
args = parser.parse_args()
|
|
81
81
|
|
|
82
82
|
log(INFO, "Starting Flower ServerApp")
|
|
83
|
-
certificates =
|
|
83
|
+
certificates = try_obtain_root_certificates(args, args.superlink)
|
|
84
84
|
|
|
85
85
|
log(
|
|
86
86
|
DEBUG,
|
|
@@ -1255,10 +1255,10 @@ def dict_to_task_res(task_dict: dict[str, Any]) -> TaskRes:
|
|
|
1255
1255
|
def determine_run_status(row: dict[str, Any]) -> str:
|
|
1256
1256
|
"""Determine the status of the run based on timestamp fields."""
|
|
1257
1257
|
if row["pending_at"]:
|
|
1258
|
+
if row["finished_at"]:
|
|
1259
|
+
return Status.FINISHED
|
|
1258
1260
|
if row["starting_at"]:
|
|
1259
1261
|
if row["running_at"]:
|
|
1260
|
-
if row["finished_at"]:
|
|
1261
|
-
return Status.FINISHED
|
|
1262
1262
|
return Status.RUNNING
|
|
1263
1263
|
return Status.STARTING
|
|
1264
1264
|
return Status.PENDING
|
|
@@ -34,6 +34,9 @@ VALID_RUN_STATUS_TRANSITIONS = {
|
|
|
34
34
|
(Status.PENDING, Status.STARTING),
|
|
35
35
|
(Status.STARTING, Status.RUNNING),
|
|
36
36
|
(Status.RUNNING, Status.FINISHED),
|
|
37
|
+
# Any non-FINISHED status can transition to FINISHED
|
|
38
|
+
(Status.PENDING, Status.FINISHED),
|
|
39
|
+
(Status.STARTING, Status.FINISHED),
|
|
37
40
|
}
|
|
38
41
|
VALID_RUN_SUB_STATUSES = {
|
|
39
42
|
SubStatus.COMPLETED,
|
|
@@ -170,6 +173,14 @@ def is_valid_transition(current_status: RunStatus, new_status: RunStatus) -> boo
|
|
|
170
173
|
bool
|
|
171
174
|
True if the transition is valid, False otherwise.
|
|
172
175
|
"""
|
|
176
|
+
# Transition to FINISHED from a non-RUNNING status is only allowed
|
|
177
|
+
# if the sub-status is not COMPLETED
|
|
178
|
+
if (
|
|
179
|
+
current_status.status in [Status.PENDING, Status.STARTING]
|
|
180
|
+
and new_status.status == Status.FINISHED
|
|
181
|
+
):
|
|
182
|
+
return new_status.sub_status != SubStatus.COMPLETED
|
|
183
|
+
|
|
173
184
|
return (
|
|
174
185
|
current_status.status,
|
|
175
186
|
new_status.status,
|
{flwr_nightly-1.13.0.dev20241111 → flwr_nightly-1.13.0.dev20241113}/src/py/flwr/simulation/app.py
RENAMED
|
@@ -16,10 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
import argparse
|
|
19
|
-
import
|
|
20
|
-
from logging import DEBUG, ERROR, INFO, WARN
|
|
21
|
-
from os.path import isfile
|
|
22
|
-
from pathlib import Path
|
|
19
|
+
from logging import DEBUG, ERROR, INFO
|
|
23
20
|
from queue import Queue
|
|
24
21
|
from time import sleep
|
|
25
22
|
from typing import Optional
|
|
@@ -27,6 +24,7 @@ from typing import Optional
|
|
|
27
24
|
from flwr.cli.config_utils import get_fab_metadata
|
|
28
25
|
from flwr.cli.install import install_from_fab
|
|
29
26
|
from flwr.common import EventType
|
|
27
|
+
from flwr.common.args import try_obtain_root_certificates
|
|
30
28
|
from flwr.common.config import (
|
|
31
29
|
get_flwr_dir,
|
|
32
30
|
get_fused_config_from_dir,
|
|
@@ -113,7 +111,7 @@ def flwr_simulation() -> None:
|
|
|
113
111
|
args = parser.parse_args()
|
|
114
112
|
|
|
115
113
|
log(INFO, "Starting Flower Simulation")
|
|
116
|
-
certificates =
|
|
114
|
+
certificates = try_obtain_root_certificates(args, args.superlink)
|
|
117
115
|
|
|
118
116
|
log(
|
|
119
117
|
DEBUG,
|
|
@@ -132,39 +130,6 @@ def flwr_simulation() -> None:
|
|
|
132
130
|
restore_output()
|
|
133
131
|
|
|
134
132
|
|
|
135
|
-
def _try_obtain_certificates(
|
|
136
|
-
args: argparse.Namespace,
|
|
137
|
-
) -> Optional[bytes]:
|
|
138
|
-
|
|
139
|
-
if args.insecure:
|
|
140
|
-
if args.root_certificates is not None:
|
|
141
|
-
sys.exit(
|
|
142
|
-
"Conflicting options: The '--insecure' flag disables HTTPS, "
|
|
143
|
-
"but '--root-certificates' was also specified. Please remove "
|
|
144
|
-
"the '--root-certificates' option when running in insecure mode, "
|
|
145
|
-
"or omit '--insecure' to use HTTPS."
|
|
146
|
-
)
|
|
147
|
-
log(
|
|
148
|
-
WARN,
|
|
149
|
-
"Option `--insecure` was set. Starting insecure HTTP channel to %s.",
|
|
150
|
-
args.superlink,
|
|
151
|
-
)
|
|
152
|
-
root_certificates = None
|
|
153
|
-
else:
|
|
154
|
-
# Load the certificates if provided, or load the system certificates
|
|
155
|
-
if not isfile(args.root_certificates):
|
|
156
|
-
sys.exit("Path argument `--root-certificates` does not point to a file.")
|
|
157
|
-
root_certificates = Path(args.root_certificates).read_bytes()
|
|
158
|
-
log(
|
|
159
|
-
DEBUG,
|
|
160
|
-
"Starting secure HTTPS channel to %s "
|
|
161
|
-
"with the following certificates: %s.",
|
|
162
|
-
args.superlink,
|
|
163
|
-
args.root_certificates,
|
|
164
|
-
)
|
|
165
|
-
return root_certificates
|
|
166
|
-
|
|
167
|
-
|
|
168
133
|
def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R0915
|
|
169
134
|
superlink: str,
|
|
170
135
|
log_queue: Queue[Optional[str]],
|
|
@@ -21,6 +21,7 @@ from typing import Optional
|
|
|
21
21
|
|
|
22
22
|
from typing_extensions import override
|
|
23
23
|
|
|
24
|
+
from flwr.cli.config_utils import get_fab_metadata
|
|
24
25
|
from flwr.common import ConfigsRecord, Context, RecordSet
|
|
25
26
|
from flwr.common.constant import SERVERAPPIO_API_DEFAULT_ADDRESS, Status, SubStatus
|
|
26
27
|
from flwr.common.logger import log
|
|
@@ -132,9 +133,10 @@ class DeploymentEngine(Executor):
|
|
|
132
133
|
raise RuntimeError(
|
|
133
134
|
f"FAB ({fab.hash_str}) hash from request doesn't match contents"
|
|
134
135
|
)
|
|
136
|
+
fab_id, fab_version = get_fab_metadata(fab.content)
|
|
135
137
|
|
|
136
138
|
run_id = self.linkstate.create_run(
|
|
137
|
-
|
|
139
|
+
fab_id, fab_version, fab_hash, override_config, ConfigsRecord()
|
|
138
140
|
)
|
|
139
141
|
return run_id
|
|
140
142
|
|