flwr-nightly 1.10.0.dev20240624__tar.gz → 1.10.0.dev20240629__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.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/PKG-INFO +1 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/pyproject.toml +2 -2
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/build.py +2 -2
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/run/run.py +13 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/app.py +5 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/message_handler/message_handler.py +1 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/node_state.py +6 -3
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/node_state_tests.py +1 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/supernode/app.py +8 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/constant.py +3 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/context.py +11 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/message.py +0 -17
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +3 -8
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/state/in_memory_state.py +4 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/state/sqlite_state.py +4 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/state/utils.py +6 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +1 -2
- flwr_nightly-1.10.0.dev20240629/src/py/flwr/superexec/deployment.py +109 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/LICENSE +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/README.md +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/client.hf.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/task.hf.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/superexec/executor.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.10.0.
|
|
7
|
+
version = "1.10.0.dev20240629"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -122,7 +122,7 @@ mdformat-gfm = "==0.3.5"
|
|
|
122
122
|
mdformat-frontmatter = "==2.0.1"
|
|
123
123
|
mdformat-beautysh = "==0.1.1"
|
|
124
124
|
mdformat-myst = "==0.1.5"
|
|
125
|
-
twine = "==
|
|
125
|
+
twine = "==5.1.1"
|
|
126
126
|
pyroma = "==4.2"
|
|
127
127
|
check-wheel-contents = "==0.4.0"
|
|
128
128
|
GitPython = "==3.1.32"
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/build.py
RENAMED
|
@@ -31,7 +31,7 @@ from .utils import get_sha256_hash, is_valid_project_name
|
|
|
31
31
|
def build(
|
|
32
32
|
directory: Annotated[
|
|
33
33
|
Optional[Path],
|
|
34
|
-
typer.Option(help="
|
|
34
|
+
typer.Option(help="Path of the Flower project to bundle into a FAB"),
|
|
35
35
|
] = None,
|
|
36
36
|
) -> str:
|
|
37
37
|
"""Build a Flower project into a Flower App Bundle (FAB).
|
|
@@ -118,7 +118,7 @@ def build(
|
|
|
118
118
|
fab_file.writestr(".info/CONTENT", list_file_content)
|
|
119
119
|
|
|
120
120
|
typer.secho(
|
|
121
|
-
f"🎊 Successfully built {fab_filename}
|
|
121
|
+
f"🎊 Successfully built {fab_filename}", fg=typer.colors.GREEN, bold=True
|
|
122
122
|
)
|
|
123
123
|
|
|
124
124
|
return fab_filename
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/run/run.py
RENAMED
|
@@ -17,12 +17,14 @@
|
|
|
17
17
|
import sys
|
|
18
18
|
from enum import Enum
|
|
19
19
|
from logging import DEBUG
|
|
20
|
+
from pathlib import Path
|
|
20
21
|
from typing import Optional
|
|
21
22
|
|
|
22
23
|
import typer
|
|
23
24
|
from typing_extensions import Annotated
|
|
24
25
|
|
|
25
26
|
from flwr.cli import config_utils
|
|
27
|
+
from flwr.cli.build import build
|
|
26
28
|
from flwr.common.constant import SUPEREXEC_DEFAULT_ADDRESS
|
|
27
29
|
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
28
30
|
from flwr.common.logger import log
|
|
@@ -52,10 +54,14 @@ def run(
|
|
|
52
54
|
case_sensitive=False, help="Use this flag to use the new SuperExec API"
|
|
53
55
|
),
|
|
54
56
|
] = False,
|
|
57
|
+
directory: Annotated[
|
|
58
|
+
Optional[Path],
|
|
59
|
+
typer.Option(help="Path of the Flower project to run"),
|
|
60
|
+
] = None,
|
|
55
61
|
) -> None:
|
|
56
62
|
"""Run Flower project."""
|
|
57
63
|
if use_superexec:
|
|
58
|
-
_start_superexec_run()
|
|
64
|
+
_start_superexec_run(directory)
|
|
59
65
|
return
|
|
60
66
|
|
|
61
67
|
typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
|
|
@@ -109,7 +115,7 @@ def run(
|
|
|
109
115
|
)
|
|
110
116
|
|
|
111
117
|
|
|
112
|
-
def _start_superexec_run() -> None:
|
|
118
|
+
def _start_superexec_run(directory: Optional[Path]) -> None:
|
|
113
119
|
def on_channel_state_change(channel_connectivity: str) -> None:
|
|
114
120
|
"""Log channel connectivity."""
|
|
115
121
|
log(DEBUG, channel_connectivity)
|
|
@@ -124,5 +130,8 @@ def _start_superexec_run() -> None:
|
|
|
124
130
|
channel.subscribe(on_channel_state_change)
|
|
125
131
|
stub = ExecStub(channel)
|
|
126
132
|
|
|
127
|
-
|
|
128
|
-
|
|
133
|
+
fab_path = build(directory)
|
|
134
|
+
|
|
135
|
+
req = StartRunRequest(fab_file=Path(fab_path).read_bytes())
|
|
136
|
+
res = stub.StartRun(req)
|
|
137
|
+
typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/app.py
RENAMED
|
@@ -191,6 +191,7 @@ def _start_client_internal(
|
|
|
191
191
|
] = None,
|
|
192
192
|
max_retries: Optional[int] = None,
|
|
193
193
|
max_wait_time: Optional[float] = None,
|
|
194
|
+
partition_id: Optional[int] = None,
|
|
194
195
|
) -> None:
|
|
195
196
|
"""Start a Flower client node which connects to a Flower server.
|
|
196
197
|
|
|
@@ -234,6 +235,9 @@ def _start_client_internal(
|
|
|
234
235
|
The maximum duration before the client stops trying to
|
|
235
236
|
connect to the server in case of connection error.
|
|
236
237
|
If set to None, there is no limit to the total time.
|
|
238
|
+
partitioni_id: Optional[int] (default: None)
|
|
239
|
+
The data partition index associated with this node. Better suited for
|
|
240
|
+
prototyping purposes.
|
|
237
241
|
"""
|
|
238
242
|
if insecure is None:
|
|
239
243
|
insecure = root_certificates is None
|
|
@@ -309,7 +313,7 @@ def _start_client_internal(
|
|
|
309
313
|
on_backoff=_on_backoff,
|
|
310
314
|
)
|
|
311
315
|
|
|
312
|
-
node_state = NodeState()
|
|
316
|
+
node_state = NodeState(partition_id=partition_id)
|
|
313
317
|
# run_id -> (fab_id, fab_version)
|
|
314
318
|
run_info: Dict[int, Tuple[str, str]] = {}
|
|
315
319
|
|
|
@@ -93,7 +93,7 @@ def handle_legacy_message_from_msgtype(
|
|
|
93
93
|
client_fn: ClientFn, message: Message, context: Context
|
|
94
94
|
) -> Message:
|
|
95
95
|
"""Handle legacy message in the inner most mod."""
|
|
96
|
-
client = client_fn(str(
|
|
96
|
+
client = client_fn(str(context.partition_id))
|
|
97
97
|
|
|
98
98
|
# Check if NumPyClient is returend
|
|
99
99
|
if isinstance(client, NumPyClient):
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/client/node_state.py
RENAMED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"""Node state."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
from typing import Any, Dict
|
|
18
|
+
from typing import Any, Dict, Optional
|
|
19
19
|
|
|
20
20
|
from flwr.common import Context, RecordSet
|
|
21
21
|
|
|
@@ -23,14 +23,17 @@ from flwr.common import Context, RecordSet
|
|
|
23
23
|
class NodeState:
|
|
24
24
|
"""State of a node where client nodes execute runs."""
|
|
25
25
|
|
|
26
|
-
def __init__(self) -> None:
|
|
26
|
+
def __init__(self, partition_id: Optional[int]) -> None:
|
|
27
27
|
self._meta: Dict[str, Any] = {} # holds metadata about the node
|
|
28
28
|
self.run_contexts: Dict[int, Context] = {}
|
|
29
|
+
self._partition_id = partition_id
|
|
29
30
|
|
|
30
31
|
def register_context(self, run_id: int) -> None:
|
|
31
32
|
"""Register new run context for this node."""
|
|
32
33
|
if run_id not in self.run_contexts:
|
|
33
|
-
self.run_contexts[run_id] = Context(
|
|
34
|
+
self.run_contexts[run_id] = Context(
|
|
35
|
+
state=RecordSet(), partition_id=self._partition_id
|
|
36
|
+
)
|
|
34
37
|
|
|
35
38
|
def retrieve_context(self, run_id: int) -> Context:
|
|
36
39
|
"""Get run context given a run_id."""
|
|
@@ -67,6 +67,7 @@ def run_supernode() -> None:
|
|
|
67
67
|
authentication_keys=authentication_keys,
|
|
68
68
|
max_retries=args.max_retries,
|
|
69
69
|
max_wait_time=args.max_wait_time,
|
|
70
|
+
partition_id=args.partition_id,
|
|
70
71
|
)
|
|
71
72
|
|
|
72
73
|
# Graceful shutdown
|
|
@@ -373,6 +374,13 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
373
374
|
type=str,
|
|
374
375
|
help="The SuperNode's public key (as a path str) to enable authentication.",
|
|
375
376
|
)
|
|
377
|
+
parser.add_argument(
|
|
378
|
+
"--partition-id",
|
|
379
|
+
type=int,
|
|
380
|
+
help="The data partition index associated with this SuperNode. Better suited "
|
|
381
|
+
"for prototyping purposes where a SuperNode might only load a fraction of an "
|
|
382
|
+
"artificially partitioned dataset (e.g. using `flwr-datasets`)",
|
|
383
|
+
)
|
|
376
384
|
|
|
377
385
|
|
|
378
386
|
def _try_setup_client_authentication(
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/constant.py
RENAMED
|
@@ -46,6 +46,9 @@ PING_BASE_MULTIPLIER = 0.8
|
|
|
46
46
|
PING_RANDOM_RANGE = (-0.1, 0.1)
|
|
47
47
|
PING_MAX_INTERVAL = 1e300
|
|
48
48
|
|
|
49
|
+
# IDs
|
|
50
|
+
RUN_ID_NUM_BYTES = 8
|
|
51
|
+
NODE_ID_NUM_BYTES = 8
|
|
49
52
|
GRPC_ADAPTER_METADATA_FLOWER_VERSION_KEY = "flower-version"
|
|
50
53
|
GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY = "should-exit"
|
|
51
54
|
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/context.py
RENAMED
|
@@ -16,13 +16,14 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
from dataclasses import dataclass
|
|
19
|
+
from typing import Optional
|
|
19
20
|
|
|
20
21
|
from .record import RecordSet
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
@dataclass
|
|
24
25
|
class Context:
|
|
25
|
-
"""
|
|
26
|
+
"""Context of your run.
|
|
26
27
|
|
|
27
28
|
Parameters
|
|
28
29
|
----------
|
|
@@ -33,6 +34,15 @@ class Context:
|
|
|
33
34
|
executing mods. It can also be used as a memory to access
|
|
34
35
|
at different points during the lifecycle of this entity (e.g. across
|
|
35
36
|
multiple rounds)
|
|
37
|
+
partition_id : Optional[int] (default: None)
|
|
38
|
+
An index that specifies the data partition that the ClientApp using this Context
|
|
39
|
+
object should make use of. Setting this attribute is better suited for
|
|
40
|
+
simulation or proto typing setups.
|
|
36
41
|
"""
|
|
37
42
|
|
|
38
43
|
state: RecordSet
|
|
44
|
+
partition_id: Optional[int]
|
|
45
|
+
|
|
46
|
+
def __init__(self, state: RecordSet, partition_id: Optional[int] = None) -> None:
|
|
47
|
+
self.state = state
|
|
48
|
+
self.partition_id = partition_id
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/common/message.py
RENAMED
|
@@ -48,10 +48,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
48
48
|
message_type : str
|
|
49
49
|
A string that encodes the action to be executed on
|
|
50
50
|
the receiving end.
|
|
51
|
-
partition_id : Optional[int]
|
|
52
|
-
An identifier that can be used when loading a particular
|
|
53
|
-
data partition for a ClientApp. Making use of this identifier
|
|
54
|
-
is more relevant when conducting simulations.
|
|
55
51
|
"""
|
|
56
52
|
|
|
57
53
|
def __init__( # pylint: disable=too-many-arguments
|
|
@@ -64,7 +60,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
64
60
|
group_id: str,
|
|
65
61
|
ttl: float,
|
|
66
62
|
message_type: str,
|
|
67
|
-
partition_id: int | None = None,
|
|
68
63
|
) -> None:
|
|
69
64
|
var_dict = {
|
|
70
65
|
"_run_id": run_id,
|
|
@@ -75,7 +70,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
75
70
|
"_group_id": group_id,
|
|
76
71
|
"_ttl": ttl,
|
|
77
72
|
"_message_type": message_type,
|
|
78
|
-
"_partition_id": partition_id,
|
|
79
73
|
}
|
|
80
74
|
self.__dict__.update(var_dict)
|
|
81
75
|
|
|
@@ -149,16 +143,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
149
143
|
"""Set message_type."""
|
|
150
144
|
self.__dict__["_message_type"] = value
|
|
151
145
|
|
|
152
|
-
@property
|
|
153
|
-
def partition_id(self) -> int | None:
|
|
154
|
-
"""An identifier telling which data partition a ClientApp should use."""
|
|
155
|
-
return cast(int, self.__dict__["_partition_id"])
|
|
156
|
-
|
|
157
|
-
@partition_id.setter
|
|
158
|
-
def partition_id(self, value: int) -> None:
|
|
159
|
-
"""Set partition_id."""
|
|
160
|
-
self.__dict__["_partition_id"] = value
|
|
161
|
-
|
|
162
146
|
def __repr__(self) -> str:
|
|
163
147
|
"""Return a string representation of this instance."""
|
|
164
148
|
view = ", ".join([f"{k.lstrip('_')}={v!r}" for k, v in self.__dict__.items()])
|
|
@@ -398,5 +382,4 @@ def _create_reply_metadata(msg: Message, ttl: float) -> Metadata:
|
|
|
398
382
|
group_id=msg.metadata.group_id,
|
|
399
383
|
ttl=ttl,
|
|
400
384
|
message_type=msg.metadata.message_type,
|
|
401
|
-
partition_id=msg.metadata.partition_id,
|
|
402
385
|
)
|
|
@@ -57,7 +57,6 @@ async def worker(
|
|
|
57
57
|
queue: "asyncio.Queue[TaskIns]",
|
|
58
58
|
node_states: Dict[int, NodeState],
|
|
59
59
|
state_factory: StateFactory,
|
|
60
|
-
nodes_mapping: NodeToPartitionMapping,
|
|
61
60
|
backend: Backend,
|
|
62
61
|
) -> None:
|
|
63
62
|
"""Get TaskIns from queue and pass it to an actor in the pool to execute it."""
|
|
@@ -74,8 +73,6 @@ async def worker(
|
|
|
74
73
|
|
|
75
74
|
# Convert TaskIns to Message
|
|
76
75
|
message = message_from_taskins(task_ins)
|
|
77
|
-
# Set partition_id
|
|
78
|
-
message.metadata.partition_id = nodes_mapping[node_id]
|
|
79
76
|
|
|
80
77
|
# Let backend process message
|
|
81
78
|
out_mssg, updated_context = await backend.process_message(
|
|
@@ -187,9 +184,7 @@ async def run(
|
|
|
187
184
|
# Add workers (they submit Messages to Backend)
|
|
188
185
|
worker_tasks = [
|
|
189
186
|
asyncio.create_task(
|
|
190
|
-
worker(
|
|
191
|
-
app_fn, queue, node_states, state_factory, nodes_mapping, backend
|
|
192
|
-
)
|
|
187
|
+
worker(app_fn, queue, node_states, state_factory, backend)
|
|
193
188
|
)
|
|
194
189
|
for _ in range(backend.num_workers)
|
|
195
190
|
]
|
|
@@ -291,8 +286,8 @@ def start_vce(
|
|
|
291
286
|
|
|
292
287
|
# Construct mapping of NodeStates
|
|
293
288
|
node_states: Dict[int, NodeState] = {}
|
|
294
|
-
for node_id in nodes_mapping:
|
|
295
|
-
node_states[node_id] = NodeState()
|
|
289
|
+
for node_id, partition_id in nodes_mapping.items():
|
|
290
|
+
node_states[node_id] = NodeState(partition_id=partition_id)
|
|
296
291
|
|
|
297
292
|
# Load backend config
|
|
298
293
|
log(DEBUG, "Supported backends: %s", list(supported_backends.keys()))
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"""In-memory State implementation."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
import os
|
|
19
18
|
import threading
|
|
20
19
|
import time
|
|
21
20
|
from logging import ERROR
|
|
@@ -23,12 +22,13 @@ from typing import Dict, List, Optional, Set, Tuple
|
|
|
23
22
|
from uuid import UUID, uuid4
|
|
24
23
|
|
|
25
24
|
from flwr.common import log, now
|
|
25
|
+
from flwr.common.constant import NODE_ID_NUM_BYTES, RUN_ID_NUM_BYTES
|
|
26
26
|
from flwr.common.typing import Run
|
|
27
27
|
from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
|
|
28
28
|
from flwr.server.superlink.state.state import State
|
|
29
29
|
from flwr.server.utils import validate_task_ins_or_res
|
|
30
30
|
|
|
31
|
-
from .utils import make_node_unavailable_taskres
|
|
31
|
+
from .utils import generate_rand_int_from_bytes, make_node_unavailable_taskres
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
@@ -216,7 +216,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
216
216
|
) -> int:
|
|
217
217
|
"""Create, store in state, and return `node_id`."""
|
|
218
218
|
# Sample a random int64 as node_id
|
|
219
|
-
node_id
|
|
219
|
+
node_id = generate_rand_int_from_bytes(NODE_ID_NUM_BYTES)
|
|
220
220
|
|
|
221
221
|
with self.lock:
|
|
222
222
|
if node_id in self.node_ids:
|
|
@@ -279,7 +279,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
279
279
|
"""Create a new run for the specified `fab_id` and `fab_version`."""
|
|
280
280
|
# Sample a random int64 as run_id
|
|
281
281
|
with self.lock:
|
|
282
|
-
run_id
|
|
282
|
+
run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
|
|
283
283
|
|
|
284
284
|
if run_id not in self.run_ids:
|
|
285
285
|
self.run_ids[run_id] = Run(
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"""SQLite based implemenation of server state."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
import os
|
|
19
18
|
import re
|
|
20
19
|
import sqlite3
|
|
21
20
|
import time
|
|
@@ -24,6 +23,7 @@ from typing import Any, Dict, List, Optional, Sequence, Set, Tuple, Union, cast
|
|
|
24
23
|
from uuid import UUID, uuid4
|
|
25
24
|
|
|
26
25
|
from flwr.common import log, now
|
|
26
|
+
from flwr.common.constant import NODE_ID_NUM_BYTES, RUN_ID_NUM_BYTES
|
|
27
27
|
from flwr.common.typing import Run
|
|
28
28
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
|
29
29
|
from flwr.proto.recordset_pb2 import RecordSet # pylint: disable=E0611
|
|
@@ -31,7 +31,7 @@ from flwr.proto.task_pb2 import Task, TaskIns, TaskRes # pylint: disable=E0611
|
|
|
31
31
|
from flwr.server.utils.validator import validate_task_ins_or_res
|
|
32
32
|
|
|
33
33
|
from .state import State
|
|
34
|
-
from .utils import make_node_unavailable_taskres
|
|
34
|
+
from .utils import generate_rand_int_from_bytes, make_node_unavailable_taskres
|
|
35
35
|
|
|
36
36
|
SQL_CREATE_TABLE_NODE = """
|
|
37
37
|
CREATE TABLE IF NOT EXISTS node(
|
|
@@ -541,7 +541,7 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
541
541
|
) -> int:
|
|
542
542
|
"""Create, store in state, and return `node_id`."""
|
|
543
543
|
# Sample a random int64 as node_id
|
|
544
|
-
node_id
|
|
544
|
+
node_id = generate_rand_int_from_bytes(NODE_ID_NUM_BYTES)
|
|
545
545
|
|
|
546
546
|
query = "SELECT node_id FROM node WHERE public_key = :public_key;"
|
|
547
547
|
row = self.query(query, {"public_key": public_key})
|
|
@@ -616,7 +616,7 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
616
616
|
def create_run(self, fab_id: str, fab_version: str) -> int:
|
|
617
617
|
"""Create a new run for the specified `fab_id` and `fab_version`."""
|
|
618
618
|
# Sample a random int64 as run_id
|
|
619
|
-
run_id
|
|
619
|
+
run_id = generate_rand_int_from_bytes(RUN_ID_NUM_BYTES)
|
|
620
620
|
|
|
621
621
|
# Check conflicts
|
|
622
622
|
query = "SELECT COUNT(*) FROM run WHERE run_id = ?;"
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
import time
|
|
19
19
|
from logging import ERROR
|
|
20
|
+
from os import urandom
|
|
20
21
|
from uuid import uuid4
|
|
21
22
|
|
|
22
23
|
from flwr.common import log
|
|
@@ -31,6 +32,11 @@ NODE_UNAVAILABLE_ERROR_REASON = (
|
|
|
31
32
|
)
|
|
32
33
|
|
|
33
34
|
|
|
35
|
+
def generate_rand_int_from_bytes(num_bytes: int) -> int:
|
|
36
|
+
"""Generate a random `num_bytes` integer."""
|
|
37
|
+
return int.from_bytes(urandom(num_bytes), "little", signed=True)
|
|
38
|
+
|
|
39
|
+
|
|
34
40
|
def make_node_unavailable_taskres(ref_taskins: TaskIns) -> TaskRes:
|
|
35
41
|
"""Generate a TaskRes with a node unavailable error from a TaskIns."""
|
|
36
42
|
current_time = time.time()
|
|
@@ -53,7 +53,7 @@ class RayActorClientProxy(ClientProxy):
|
|
|
53
53
|
|
|
54
54
|
self.app_fn = _load_app
|
|
55
55
|
self.actor_pool = actor_pool
|
|
56
|
-
self.proxy_state = NodeState()
|
|
56
|
+
self.proxy_state = NodeState(partition_id=int(self.cid))
|
|
57
57
|
|
|
58
58
|
def _submit_job(self, message: Message, timeout: Optional[float]) -> Message:
|
|
59
59
|
"""Sumbit a message to the ActorPool."""
|
|
@@ -107,7 +107,6 @@ class RayActorClientProxy(ClientProxy):
|
|
|
107
107
|
reply_to_message="",
|
|
108
108
|
ttl=timeout if timeout else DEFAULT_TTL,
|
|
109
109
|
message_type=message_type,
|
|
110
|
-
partition_id=int(self.cid),
|
|
111
110
|
),
|
|
112
111
|
)
|
|
113
112
|
|
|
@@ -0,0 +1,109 @@
|
|
|
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
|
+
"""Deployment engine executor."""
|
|
16
|
+
|
|
17
|
+
import subprocess
|
|
18
|
+
import sys
|
|
19
|
+
from logging import ERROR, INFO
|
|
20
|
+
from typing import Optional
|
|
21
|
+
|
|
22
|
+
from typing_extensions import override
|
|
23
|
+
|
|
24
|
+
from flwr.cli.config_utils import get_fab_metadata
|
|
25
|
+
from flwr.cli.install import install_from_fab
|
|
26
|
+
from flwr.common.grpc import create_channel
|
|
27
|
+
from flwr.common.logger import log
|
|
28
|
+
from flwr.proto.driver_pb2 import CreateRunRequest # pylint: disable=E0611
|
|
29
|
+
from flwr.proto.driver_pb2_grpc import DriverStub
|
|
30
|
+
from flwr.server.driver.grpc_driver import DEFAULT_SERVER_ADDRESS_DRIVER
|
|
31
|
+
|
|
32
|
+
from .executor import Executor, RunTracker
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class DeploymentEngine(Executor):
|
|
36
|
+
"""Deployment engine executor."""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
address: str = DEFAULT_SERVER_ADDRESS_DRIVER,
|
|
41
|
+
root_certificates: Optional[bytes] = None,
|
|
42
|
+
) -> None:
|
|
43
|
+
self.address = address
|
|
44
|
+
self.root_certificates = root_certificates
|
|
45
|
+
self.stub: Optional[DriverStub] = None
|
|
46
|
+
|
|
47
|
+
def _connect(self) -> None:
|
|
48
|
+
if self.stub is None:
|
|
49
|
+
channel = create_channel(
|
|
50
|
+
server_address=self.address,
|
|
51
|
+
insecure=(self.root_certificates is None),
|
|
52
|
+
root_certificates=self.root_certificates,
|
|
53
|
+
)
|
|
54
|
+
self.stub = DriverStub(channel)
|
|
55
|
+
|
|
56
|
+
def _create_run(self, fab_id: str, fab_version: str) -> int:
|
|
57
|
+
if self.stub is None:
|
|
58
|
+
self._connect()
|
|
59
|
+
|
|
60
|
+
assert self.stub is not None
|
|
61
|
+
|
|
62
|
+
req = CreateRunRequest(fab_id=fab_id, fab_version=fab_version)
|
|
63
|
+
res = self.stub.CreateRun(request=req)
|
|
64
|
+
return int(res.run_id)
|
|
65
|
+
|
|
66
|
+
@override
|
|
67
|
+
def start_run(self, fab_file: bytes) -> Optional[RunTracker]:
|
|
68
|
+
"""Start run using the Flower Deployment Engine."""
|
|
69
|
+
try:
|
|
70
|
+
# Install FAB to flwr dir
|
|
71
|
+
fab_version, fab_id = get_fab_metadata(fab_file)
|
|
72
|
+
fab_path = install_from_fab(fab_file, None, True)
|
|
73
|
+
|
|
74
|
+
# Install FAB Python package
|
|
75
|
+
subprocess.check_call(
|
|
76
|
+
[sys.executable, "-m", "pip", "install", str(fab_path)],
|
|
77
|
+
stdout=subprocess.DEVNULL,
|
|
78
|
+
stderr=subprocess.DEVNULL,
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Call SuperLink to create run
|
|
82
|
+
run_id: int = self._create_run(fab_id, fab_version)
|
|
83
|
+
log(INFO, "Created run %s", str(run_id))
|
|
84
|
+
|
|
85
|
+
# Start ServerApp
|
|
86
|
+
proc = subprocess.Popen( # pylint: disable=consider-using-with
|
|
87
|
+
[
|
|
88
|
+
"flower-server-app",
|
|
89
|
+
"--run-id",
|
|
90
|
+
str(run_id),
|
|
91
|
+
"--insecure",
|
|
92
|
+
],
|
|
93
|
+
stdout=subprocess.PIPE,
|
|
94
|
+
stderr=subprocess.PIPE,
|
|
95
|
+
text=True,
|
|
96
|
+
)
|
|
97
|
+
log(INFO, "Started run %s", str(run_id))
|
|
98
|
+
|
|
99
|
+
return RunTracker(
|
|
100
|
+
run_id=run_id,
|
|
101
|
+
proc=proc,
|
|
102
|
+
)
|
|
103
|
+
# pylint: disable-next=broad-except
|
|
104
|
+
except Exception as e:
|
|
105
|
+
log(ERROR, "Could not start run: %s", str(e))
|
|
106
|
+
return None
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
executor = DeploymentEngine()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/config_utils.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/example.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/install.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/src/py/flwr/cli/new/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240629}/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
|