flwr-nightly 1.14.0.dev20241216__tar.gz → 1.14.0.dev20241217__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.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/PKG-INFO +1 -1
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/pyproject.toml +1 -1
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/log.py +8 -6
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/ls.py +7 -4
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/run/run.py +7 -2
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/stop.py +3 -2
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/utils.py +23 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/client.py +0 -32
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/message_handler/message_handler.py +0 -2
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/numpy_client.py +0 -44
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +9 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -2
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +13 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/app.py +3 -2
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/run_simulation.py +27 -6
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/LICENSE +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/README.md +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/login/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/login/login.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/args.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/serverapp/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "flwr-nightly"
|
|
7
|
-
version = "1.14.0.
|
|
7
|
+
version = "1.14.0.dev20241217"
|
|
8
8
|
description = "Flower: A Friendly Federated AI Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -34,7 +34,7 @@ from flwr.common.logger import log as logger
|
|
|
34
34
|
from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
|
|
35
35
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
36
36
|
|
|
37
|
-
from .utils import init_channel, try_obtain_cli_auth_plugin
|
|
37
|
+
from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def start_stream(
|
|
@@ -88,8 +88,9 @@ def stream_logs(
|
|
|
88
88
|
latest_timestamp = 0.0
|
|
89
89
|
res = None
|
|
90
90
|
try:
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
with unauthenticated_exc_handler():
|
|
92
|
+
for res in stub.StreamLogs(req, timeout=duration):
|
|
93
|
+
print(res.log_output, end="")
|
|
93
94
|
except grpc.RpcError as e:
|
|
94
95
|
# pylint: disable=E1101
|
|
95
96
|
if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
|
|
@@ -109,9 +110,10 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
|
|
|
109
110
|
try:
|
|
110
111
|
while True:
|
|
111
112
|
try:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
113
|
+
with unauthenticated_exc_handler():
|
|
114
|
+
# Enforce timeout for graceful exit
|
|
115
|
+
for res in stub.StreamLogs(req, timeout=timeout):
|
|
116
|
+
print(res.log_output)
|
|
115
117
|
except grpc.RpcError as e:
|
|
116
118
|
# pylint: disable=E1101
|
|
117
119
|
if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
|
|
@@ -43,7 +43,7 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
|
43
43
|
)
|
|
44
44
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
45
45
|
|
|
46
|
-
from .utils import init_channel, try_obtain_cli_auth_plugin
|
|
46
|
+
from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
|
|
47
47
|
|
|
48
48
|
_RunListType = tuple[int, str, str, str, str, str, str, str, str]
|
|
49
49
|
|
|
@@ -99,7 +99,6 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
|
|
|
99
99
|
try:
|
|
100
100
|
if suppress_output:
|
|
101
101
|
redirect_output(captured_output)
|
|
102
|
-
|
|
103
102
|
# Load and validate federation config
|
|
104
103
|
typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
|
|
105
104
|
|
|
@@ -132,6 +131,8 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
|
|
|
132
131
|
_list_runs(stub, output_format)
|
|
133
132
|
|
|
134
133
|
except ValueError as err:
|
|
134
|
+
if suppress_output:
|
|
135
|
+
redirect_output(captured_output)
|
|
135
136
|
typer.secho(
|
|
136
137
|
f"❌ {err}",
|
|
137
138
|
fg=typer.colors.RED,
|
|
@@ -295,7 +296,8 @@ def _list_runs(
|
|
|
295
296
|
output_format: str = CliOutputFormat.DEFAULT,
|
|
296
297
|
) -> None:
|
|
297
298
|
"""List all runs."""
|
|
298
|
-
|
|
299
|
+
with unauthenticated_exc_handler():
|
|
300
|
+
res: ListRunsResponse = stub.ListRuns(ListRunsRequest())
|
|
299
301
|
run_dict = {run_id: run_from_proto(proto) for run_id, proto in res.run_dict.items()}
|
|
300
302
|
|
|
301
303
|
formatted_runs = _format_runs(run_dict, res.now)
|
|
@@ -311,7 +313,8 @@ def _display_one_run(
|
|
|
311
313
|
output_format: str = CliOutputFormat.DEFAULT,
|
|
312
314
|
) -> None:
|
|
313
315
|
"""Display information about a specific run."""
|
|
314
|
-
|
|
316
|
+
with unauthenticated_exc_handler():
|
|
317
|
+
res: ListRunsResponse = stub.ListRuns(ListRunsRequest(run_id=run_id))
|
|
315
318
|
if not res.run_dict:
|
|
316
319
|
raise ValueError(f"Run ID {run_id} not found")
|
|
317
320
|
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/run/run.py
RENAMED
|
@@ -48,7 +48,11 @@ from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
|
|
|
48
48
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
49
49
|
|
|
50
50
|
from ..log import start_stream
|
|
51
|
-
from ..utils import
|
|
51
|
+
from ..utils import (
|
|
52
|
+
init_channel,
|
|
53
|
+
try_obtain_cli_auth_plugin,
|
|
54
|
+
unauthenticated_exc_handler,
|
|
55
|
+
)
|
|
52
56
|
|
|
53
57
|
CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
|
|
54
58
|
|
|
@@ -166,7 +170,8 @@ def _run_with_exec_api(
|
|
|
166
170
|
override_config=user_config_to_proto(parse_config_args(config_overrides)),
|
|
167
171
|
federation_options=configs_record_to_proto(c_record),
|
|
168
172
|
)
|
|
169
|
-
|
|
173
|
+
with unauthenticated_exc_handler():
|
|
174
|
+
res = stub.StartRun(req)
|
|
170
175
|
|
|
171
176
|
if res.HasField("run_id"):
|
|
172
177
|
typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
|
|
@@ -34,7 +34,7 @@ from flwr.common.logger import print_json_error, redirect_output, restore_output
|
|
|
34
34
|
from flwr.proto.exec_pb2 import StopRunRequest, StopRunResponse # pylint: disable=E0611
|
|
35
35
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
36
36
|
|
|
37
|
-
from .utils import init_channel, try_obtain_cli_auth_plugin
|
|
37
|
+
from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
def stop( # pylint: disable=R0914
|
|
@@ -113,7 +113,8 @@ def stop( # pylint: disable=R0914
|
|
|
113
113
|
|
|
114
114
|
def _stop_run(stub: ExecStub, run_id: int, output_format: str) -> None:
|
|
115
115
|
"""Stop a run."""
|
|
116
|
-
|
|
116
|
+
with unauthenticated_exc_handler():
|
|
117
|
+
response: StopRunResponse = stub.StopRun(request=StopRunRequest(run_id=run_id))
|
|
117
118
|
if response.success:
|
|
118
119
|
typer.secho(f"✅ Run {run_id} successfully stopped.", fg=typer.colors.GREEN)
|
|
119
120
|
if output_format == CliOutputFormat.JSON:
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/utils.py
RENAMED
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
import hashlib
|
|
19
19
|
import json
|
|
20
20
|
import re
|
|
21
|
+
from collections.abc import Iterator
|
|
22
|
+
from contextlib import contextmanager
|
|
21
23
|
from logging import DEBUG
|
|
22
24
|
from pathlib import Path
|
|
23
25
|
from typing import Any, Callable, Optional, cast
|
|
@@ -231,3 +233,24 @@ def init_channel(
|
|
|
231
233
|
)
|
|
232
234
|
channel.subscribe(on_channel_state_change)
|
|
233
235
|
return channel
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
@contextmanager
|
|
239
|
+
def unauthenticated_exc_handler() -> Iterator[None]:
|
|
240
|
+
"""Context manager to handle gRPC UNAUTHENTICATED errors.
|
|
241
|
+
|
|
242
|
+
It catches grpc.RpcError exceptions with UNAUTHENTICATED status, informs the user,
|
|
243
|
+
and exits the application. All other exceptions will be allowed to escape.
|
|
244
|
+
"""
|
|
245
|
+
try:
|
|
246
|
+
yield
|
|
247
|
+
except grpc.RpcError as e:
|
|
248
|
+
if e.code() != grpc.StatusCode.UNAUTHENTICATED:
|
|
249
|
+
raise
|
|
250
|
+
typer.secho(
|
|
251
|
+
"❌ Authentication failed. Please run `flwr login`"
|
|
252
|
+
" to authenticate and try again.",
|
|
253
|
+
fg=typer.colors.RED,
|
|
254
|
+
bold=True,
|
|
255
|
+
)
|
|
256
|
+
raise typer.Exit(code=1) from None
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/client.py
RENAMED
|
@@ -22,7 +22,6 @@ from abc import ABC
|
|
|
22
22
|
|
|
23
23
|
from flwr.common import (
|
|
24
24
|
Code,
|
|
25
|
-
Context,
|
|
26
25
|
EvaluateIns,
|
|
27
26
|
EvaluateRes,
|
|
28
27
|
FitIns,
|
|
@@ -34,14 +33,11 @@ from flwr.common import (
|
|
|
34
33
|
Parameters,
|
|
35
34
|
Status,
|
|
36
35
|
)
|
|
37
|
-
from flwr.common.logger import warn_deprecated_feature_with_example
|
|
38
36
|
|
|
39
37
|
|
|
40
38
|
class Client(ABC):
|
|
41
39
|
"""Abstract base class for Flower clients."""
|
|
42
40
|
|
|
43
|
-
_context: Context
|
|
44
|
-
|
|
45
41
|
def get_properties(self, ins: GetPropertiesIns) -> GetPropertiesRes:
|
|
46
42
|
"""Return set of client's properties.
|
|
47
43
|
|
|
@@ -143,34 +139,6 @@ class Client(ABC):
|
|
|
143
139
|
metrics={},
|
|
144
140
|
)
|
|
145
141
|
|
|
146
|
-
@property
|
|
147
|
-
def context(self) -> Context:
|
|
148
|
-
"""Getter for `Context` client attribute."""
|
|
149
|
-
warn_deprecated_feature_with_example(
|
|
150
|
-
"Accessing the context via the client's attribute is deprecated.",
|
|
151
|
-
example_message="Instead, pass it to the client's "
|
|
152
|
-
"constructor in your `client_fn()` which already "
|
|
153
|
-
"receives a context object.",
|
|
154
|
-
code_example="def client_fn(context: Context) -> Client:\n\n"
|
|
155
|
-
"\t\t# Your existing client_fn\n\n"
|
|
156
|
-
"\t\t# Pass `context` to the constructor\n"
|
|
157
|
-
"\t\treturn FlowerClient(context).to_client()",
|
|
158
|
-
)
|
|
159
|
-
return self._context
|
|
160
|
-
|
|
161
|
-
@context.setter
|
|
162
|
-
def context(self, context: Context) -> None:
|
|
163
|
-
"""Setter for `Context` client attribute."""
|
|
164
|
-
self._context = context
|
|
165
|
-
|
|
166
|
-
def get_context(self) -> Context:
|
|
167
|
-
"""Get the run context from this client."""
|
|
168
|
-
return self.context
|
|
169
|
-
|
|
170
|
-
def set_context(self, context: Context) -> None:
|
|
171
|
-
"""Apply a run context to this client."""
|
|
172
|
-
self.context = context
|
|
173
|
-
|
|
174
142
|
def to_client(self) -> Client:
|
|
175
143
|
"""Return client (itself)."""
|
|
176
144
|
return self
|
|
@@ -21,13 +21,11 @@ from typing import Callable
|
|
|
21
21
|
from flwr.client.client import Client
|
|
22
22
|
from flwr.common import (
|
|
23
23
|
Config,
|
|
24
|
-
Context,
|
|
25
24
|
NDArrays,
|
|
26
25
|
Scalar,
|
|
27
26
|
ndarrays_to_parameters,
|
|
28
27
|
parameters_to_ndarrays,
|
|
29
28
|
)
|
|
30
|
-
from flwr.common.logger import warn_deprecated_feature_with_example
|
|
31
29
|
from flwr.common.typing import (
|
|
32
30
|
Code,
|
|
33
31
|
EvaluateIns,
|
|
@@ -71,8 +69,6 @@ Example
|
|
|
71
69
|
class NumPyClient(ABC):
|
|
72
70
|
"""Abstract base class for Flower clients using NumPy."""
|
|
73
71
|
|
|
74
|
-
_context: Context
|
|
75
|
-
|
|
76
72
|
def get_properties(self, config: Config) -> dict[str, Scalar]:
|
|
77
73
|
"""Return a client's set of properties.
|
|
78
74
|
|
|
@@ -175,34 +171,6 @@ class NumPyClient(ABC):
|
|
|
175
171
|
_ = (self, parameters, config)
|
|
176
172
|
return 0.0, 0, {}
|
|
177
173
|
|
|
178
|
-
@property
|
|
179
|
-
def context(self) -> Context:
|
|
180
|
-
"""Getter for `Context` client attribute."""
|
|
181
|
-
warn_deprecated_feature_with_example(
|
|
182
|
-
"Accessing the context via the client's attribute is deprecated.",
|
|
183
|
-
example_message="Instead, pass it to the client's "
|
|
184
|
-
"constructor in your `client_fn()` which already "
|
|
185
|
-
"receives a context object.",
|
|
186
|
-
code_example="def client_fn(context: Context) -> Client:\n\n"
|
|
187
|
-
"\t\t# Your existing client_fn\n\n"
|
|
188
|
-
"\t\t# Pass `context` to the constructor\n"
|
|
189
|
-
"\t\treturn FlowerClient(context).to_client()",
|
|
190
|
-
)
|
|
191
|
-
return self._context
|
|
192
|
-
|
|
193
|
-
@context.setter
|
|
194
|
-
def context(self, context: Context) -> None:
|
|
195
|
-
"""Setter for `Context` client attribute."""
|
|
196
|
-
self._context = context
|
|
197
|
-
|
|
198
|
-
def get_context(self) -> Context:
|
|
199
|
-
"""Get the run context from this client."""
|
|
200
|
-
return self.context
|
|
201
|
-
|
|
202
|
-
def set_context(self, context: Context) -> None:
|
|
203
|
-
"""Apply a run context to this client."""
|
|
204
|
-
self.context = context
|
|
205
|
-
|
|
206
174
|
def to_client(self) -> Client:
|
|
207
175
|
"""Convert to object to Client type and return it."""
|
|
208
176
|
return _wrap_numpy_client(client=self)
|
|
@@ -299,21 +267,9 @@ def _evaluate(self: Client, ins: EvaluateIns) -> EvaluateRes:
|
|
|
299
267
|
)
|
|
300
268
|
|
|
301
269
|
|
|
302
|
-
def _get_context(self: Client) -> Context:
|
|
303
|
-
"""Return context of underlying NumPyClient."""
|
|
304
|
-
return self.numpy_client.get_context() # type: ignore
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
def _set_context(self: Client, context: Context) -> None:
|
|
308
|
-
"""Apply context to underlying NumPyClient."""
|
|
309
|
-
self.numpy_client.set_context(context) # type: ignore
|
|
310
|
-
|
|
311
|
-
|
|
312
270
|
def _wrap_numpy_client(client: NumPyClient) -> Client:
|
|
313
271
|
member_dict: dict[str, Callable] = { # type: ignore
|
|
314
272
|
"__init__": _constructor,
|
|
315
|
-
"get_context": _get_context,
|
|
316
|
-
"set_context": _set_context,
|
|
317
273
|
}
|
|
318
274
|
|
|
319
275
|
# Add wrapper type methods (if overridden)
|
|
@@ -159,6 +159,9 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
|
159
159
|
for task_ins in request.task_ins_list:
|
|
160
160
|
validation_errors = validate_task_ins_or_res(task_ins)
|
|
161
161
|
_raise_if(bool(validation_errors), ", ".join(validation_errors))
|
|
162
|
+
_raise_if(
|
|
163
|
+
request.run_id != task_ins.run_id, "`task_ins` has mismatched `run_id`"
|
|
164
|
+
)
|
|
162
165
|
|
|
163
166
|
# Store each TaskIns
|
|
164
167
|
task_ids: list[Optional[UUID]] = []
|
|
@@ -193,6 +196,12 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
|
193
196
|
# Read from state
|
|
194
197
|
task_res_list: list[TaskRes] = state.get_task_res(task_ids=task_ids)
|
|
195
198
|
|
|
199
|
+
# Validate request
|
|
200
|
+
for task_res in task_res_list:
|
|
201
|
+
_raise_if(
|
|
202
|
+
request.run_id != task_res.run_id, "`task_res` has mismatched `run_id`"
|
|
203
|
+
)
|
|
204
|
+
|
|
196
205
|
# Delete the TaskIns/TaskRes pairs if TaskRes is found
|
|
197
206
|
task_ins_ids_to_delete = {
|
|
198
207
|
UUID(task_res.task.ancestry[0]) for task_res in task_res_list
|
|
@@ -761,8 +761,6 @@ class SqliteLinkState(LinkState): # pylint: disable=R0904
|
|
|
761
761
|
"federation_options, pending_at, starting_at, running_at, finished_at, "
|
|
762
762
|
"sub_status, details) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
|
|
763
763
|
)
|
|
764
|
-
if fab_hash:
|
|
765
|
-
fab_id, fab_version = "", ""
|
|
766
764
|
override_config_json = json.dumps(override_config)
|
|
767
765
|
data = [
|
|
768
766
|
sint64_run_id,
|
|
@@ -54,6 +54,7 @@ from flwr.proto.simulationio_pb2 import ( # pylint: disable=E0611
|
|
|
54
54
|
)
|
|
55
55
|
from flwr.server.superlink.ffs.ffs_factory import FfsFactory
|
|
56
56
|
from flwr.server.superlink.linkstate import LinkStateFactory
|
|
57
|
+
from flwr.server.superlink.utils import abort_if
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
|
|
@@ -110,6 +111,15 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
|
|
|
110
111
|
"""Push Simulation process outputs."""
|
|
111
112
|
log(DEBUG, "SimultionIoServicer.PushSimulationOutputs")
|
|
112
113
|
state = self.state_factory.state()
|
|
114
|
+
|
|
115
|
+
# Abort if the run is not running
|
|
116
|
+
abort_if(
|
|
117
|
+
request.run_id,
|
|
118
|
+
[Status.PENDING, Status.STARTING, Status.FINISHED],
|
|
119
|
+
state,
|
|
120
|
+
context,
|
|
121
|
+
)
|
|
122
|
+
|
|
113
123
|
state.set_serverapp_context(request.run_id, context_from_proto(request.context))
|
|
114
124
|
return PushSimulationOutputsResponse()
|
|
115
125
|
|
|
@@ -120,6 +130,9 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
|
|
|
120
130
|
log(DEBUG, "SimultionIoServicer.UpdateRunStatus")
|
|
121
131
|
state = self.state_factory.state()
|
|
122
132
|
|
|
133
|
+
# Abort if the run is finished
|
|
134
|
+
abort_if(request.run_id, [Status.FINISHED], state, context)
|
|
135
|
+
|
|
123
136
|
# Update the run status
|
|
124
137
|
state.update_run_status(
|
|
125
138
|
run_id=request.run_id, new_status=run_status_from_proto(request.run_status)
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/app.py
RENAMED
|
@@ -48,6 +48,7 @@ from flwr.common.logger import (
|
|
|
48
48
|
from flwr.common.serde import (
|
|
49
49
|
configs_record_from_proto,
|
|
50
50
|
context_from_proto,
|
|
51
|
+
context_to_proto,
|
|
51
52
|
fab_from_proto,
|
|
52
53
|
run_from_proto,
|
|
53
54
|
run_status_to_proto,
|
|
@@ -202,7 +203,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
|
|
|
202
203
|
enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", False)
|
|
203
204
|
|
|
204
205
|
# Launch the simulation
|
|
205
|
-
_run_simulation(
|
|
206
|
+
updated_context = _run_simulation(
|
|
206
207
|
server_app_attr=server_app_attr,
|
|
207
208
|
client_app_attr=client_app_attr,
|
|
208
209
|
num_supernodes=num_supernodes,
|
|
@@ -217,7 +218,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
|
|
|
217
218
|
)
|
|
218
219
|
|
|
219
220
|
# Send resulting context
|
|
220
|
-
context_proto =
|
|
221
|
+
context_proto = context_to_proto(updated_context)
|
|
221
222
|
out_req = PushSimulationOutputsRequest(
|
|
222
223
|
run_id=run.run_id, context=context_proto
|
|
223
224
|
)
|
|
@@ -24,6 +24,7 @@ import threading
|
|
|
24
24
|
import traceback
|
|
25
25
|
from logging import DEBUG, ERROR, INFO, WARNING
|
|
26
26
|
from pathlib import Path
|
|
27
|
+
from queue import Empty, Queue
|
|
27
28
|
from typing import Any, Optional
|
|
28
29
|
|
|
29
30
|
from flwr.cli.config_utils import load_and_validate
|
|
@@ -126,7 +127,7 @@ def run_simulation_from_cli() -> None:
|
|
|
126
127
|
run = Run.create_empty(run_id)
|
|
127
128
|
run.override_config = override_config
|
|
128
129
|
|
|
129
|
-
_run_simulation(
|
|
130
|
+
_ = _run_simulation(
|
|
130
131
|
server_app_attr=server_app_attr,
|
|
131
132
|
client_app_attr=client_app_attr,
|
|
132
133
|
num_supernodes=args.num_supernodes,
|
|
@@ -206,7 +207,7 @@ def run_simulation(
|
|
|
206
207
|
"\n\tflwr.simulation.run_simulationt(...)",
|
|
207
208
|
)
|
|
208
209
|
|
|
209
|
-
_run_simulation(
|
|
210
|
+
_ = _run_simulation(
|
|
210
211
|
num_supernodes=num_supernodes,
|
|
211
212
|
client_app=client_app,
|
|
212
213
|
server_app=server_app,
|
|
@@ -229,6 +230,7 @@ def run_serverapp_th(
|
|
|
229
230
|
has_exception: threading.Event,
|
|
230
231
|
enable_tf_gpu_growth: bool,
|
|
231
232
|
run_id: int,
|
|
233
|
+
ctx_queue: "Queue[Context]",
|
|
232
234
|
) -> threading.Thread:
|
|
233
235
|
"""Run SeverApp in a thread."""
|
|
234
236
|
|
|
@@ -241,6 +243,7 @@ def run_serverapp_th(
|
|
|
241
243
|
_server_app_run_config: UserConfig,
|
|
242
244
|
_server_app_attr: Optional[str],
|
|
243
245
|
_server_app: Optional[ServerApp],
|
|
246
|
+
_ctx_queue: "Queue[Context]",
|
|
244
247
|
) -> None:
|
|
245
248
|
"""Run SeverApp, after check if GPU memory growth has to be set.
|
|
246
249
|
|
|
@@ -261,13 +264,14 @@ def run_serverapp_th(
|
|
|
261
264
|
)
|
|
262
265
|
|
|
263
266
|
# Run ServerApp
|
|
264
|
-
_run(
|
|
267
|
+
updated_context = _run(
|
|
265
268
|
driver=_driver,
|
|
266
269
|
context=context,
|
|
267
270
|
server_app_dir=_server_app_dir,
|
|
268
271
|
server_app_attr=_server_app_attr,
|
|
269
272
|
loaded_server_app=_server_app,
|
|
270
273
|
)
|
|
274
|
+
_ctx_queue.put(updated_context)
|
|
271
275
|
except Exception as ex: # pylint: disable=broad-exception-caught
|
|
272
276
|
log(ERROR, "ServerApp thread raised an exception: %s", ex)
|
|
273
277
|
log(ERROR, traceback.format_exc())
|
|
@@ -291,6 +295,7 @@ def run_serverapp_th(
|
|
|
291
295
|
server_app_run_config,
|
|
292
296
|
server_app_attr,
|
|
293
297
|
server_app,
|
|
298
|
+
ctx_queue,
|
|
294
299
|
),
|
|
295
300
|
)
|
|
296
301
|
serverapp_th.start()
|
|
@@ -313,7 +318,7 @@ def _main_loop(
|
|
|
313
318
|
server_app: Optional[ServerApp] = None,
|
|
314
319
|
server_app_attr: Optional[str] = None,
|
|
315
320
|
server_app_run_config: Optional[UserConfig] = None,
|
|
316
|
-
) ->
|
|
321
|
+
) -> Context:
|
|
317
322
|
"""Start ServerApp on a separate thread, then launch Simulation Engine."""
|
|
318
323
|
# Initialize StateFactory
|
|
319
324
|
state_factory = LinkStateFactory(":flwr-in-memory-state:")
|
|
@@ -323,6 +328,13 @@ def _main_loop(
|
|
|
323
328
|
server_app_thread_has_exception = threading.Event()
|
|
324
329
|
serverapp_th = None
|
|
325
330
|
success = True
|
|
331
|
+
updated_context = Context(
|
|
332
|
+
run_id=run.run_id,
|
|
333
|
+
node_id=0,
|
|
334
|
+
node_config=UserConfig(),
|
|
335
|
+
state=RecordSet(),
|
|
336
|
+
run_config=UserConfig(),
|
|
337
|
+
)
|
|
326
338
|
try:
|
|
327
339
|
# Register run
|
|
328
340
|
log(DEBUG, "Pre-registering run with id %s", run.run_id)
|
|
@@ -337,6 +349,7 @@ def _main_loop(
|
|
|
337
349
|
# Initialize Driver
|
|
338
350
|
driver = InMemoryDriver(state_factory=state_factory)
|
|
339
351
|
driver.set_run(run_id=run.run_id)
|
|
352
|
+
output_context_queue: "Queue[Context]" = Queue()
|
|
340
353
|
|
|
341
354
|
# Get and run ServerApp thread
|
|
342
355
|
serverapp_th = run_serverapp_th(
|
|
@@ -349,6 +362,7 @@ def _main_loop(
|
|
|
349
362
|
has_exception=server_app_thread_has_exception,
|
|
350
363
|
enable_tf_gpu_growth=enable_tf_gpu_growth,
|
|
351
364
|
run_id=run.run_id,
|
|
365
|
+
ctx_queue=output_context_queue,
|
|
352
366
|
)
|
|
353
367
|
|
|
354
368
|
# Start Simulation Engine
|
|
@@ -366,6 +380,11 @@ def _main_loop(
|
|
|
366
380
|
flwr_dir=flwr_dir,
|
|
367
381
|
)
|
|
368
382
|
|
|
383
|
+
updated_context = output_context_queue.get(timeout=3)
|
|
384
|
+
|
|
385
|
+
except Empty:
|
|
386
|
+
log(DEBUG, "Queue timeout. No context received.")
|
|
387
|
+
|
|
369
388
|
except Exception as ex:
|
|
370
389
|
log(ERROR, "An exception occurred !! %s", ex)
|
|
371
390
|
log(ERROR, traceback.format_exc())
|
|
@@ -382,6 +401,7 @@ def _main_loop(
|
|
|
382
401
|
raise RuntimeError("Exception in ServerApp thread")
|
|
383
402
|
|
|
384
403
|
log(DEBUG, "Stopping Simulation Engine now.")
|
|
404
|
+
return updated_context
|
|
385
405
|
|
|
386
406
|
|
|
387
407
|
# pylint: disable=too-many-arguments,too-many-locals,too-many-positional-arguments
|
|
@@ -401,7 +421,7 @@ def _run_simulation(
|
|
|
401
421
|
enable_tf_gpu_growth: bool = False,
|
|
402
422
|
verbose_logging: bool = False,
|
|
403
423
|
is_app: bool = False,
|
|
404
|
-
) ->
|
|
424
|
+
) -> Context:
|
|
405
425
|
"""Launch the Simulation Engine."""
|
|
406
426
|
if backend_config is None:
|
|
407
427
|
backend_config = {}
|
|
@@ -480,7 +500,8 @@ def _run_simulation(
|
|
|
480
500
|
# Set logger propagation to False to prevent duplicated log output in Colab.
|
|
481
501
|
logger = set_logger_propagation(logger, False)
|
|
482
502
|
|
|
483
|
-
_main_loop(*args)
|
|
503
|
+
updated_context = _main_loop(*args)
|
|
504
|
+
return updated_context
|
|
484
505
|
|
|
485
506
|
|
|
486
507
|
def _parse_args_run_simulation() -> argparse.ArgumentParser:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/build.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/config_utils.py
RENAMED
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/example.py
RENAMED
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/install.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/login/login.py
RENAMED
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/new.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|