flwr-nightly 1.10.0.dev20240624__tar.gz → 1.10.0.dev20240707__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.dev20240707}/PKG-INFO +1 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/pyproject.toml +2 -2
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/build.py +2 -2
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/run/run.py +13 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/__init__.py +2 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/app.py +15 -10
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/client_app.py +29 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/message_handler/message_handler.py +3 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/node_state.py +6 -3
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/node_state_tests.py +1 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/supernode/app.py +11 -3
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/typing.py +2 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/constant.py +3 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/context.py +11 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/logger.py +13 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/message.py +0 -17
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -1
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +3 -8
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/in_memory_state.py +4 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/sqlite_state.py +4 -4
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/utils.py +6 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/app.py +51 -36
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +16 -9
- flwr_nightly-1.10.0.dev20240707/src/py/flwr/superexec/deployment.py +109 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/LICENSE +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/README.md +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/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.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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.dev20240707"
|
|
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.dev20240707}/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.dev20240707}/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.dev20240707}/src/py/flwr/client/__init__.py
RENAMED
|
@@ -23,11 +23,13 @@ from .numpy_client import NumPyClient as NumPyClient
|
|
|
23
23
|
from .supernode import run_client_app as run_client_app
|
|
24
24
|
from .supernode import run_supernode as run_supernode
|
|
25
25
|
from .typing import ClientFn as ClientFn
|
|
26
|
+
from .typing import ClientFnExt as ClientFnExt
|
|
26
27
|
|
|
27
28
|
__all__ = [
|
|
28
29
|
"Client",
|
|
29
30
|
"ClientApp",
|
|
30
31
|
"ClientFn",
|
|
32
|
+
"ClientFnExt",
|
|
31
33
|
"NumPyClient",
|
|
32
34
|
"mod",
|
|
33
35
|
"run_client_app",
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/app.py
RENAMED
|
@@ -26,7 +26,7 @@ from grpc import RpcError
|
|
|
26
26
|
|
|
27
27
|
from flwr.client.client import Client
|
|
28
28
|
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
29
|
-
from flwr.client.typing import
|
|
29
|
+
from flwr.client.typing import ClientFnExt
|
|
30
30
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, Message, event
|
|
31
31
|
from flwr.common.address import parse_address
|
|
32
32
|
from flwr.common.constant import (
|
|
@@ -51,7 +51,7 @@ from .numpy_client import NumPyClient
|
|
|
51
51
|
|
|
52
52
|
|
|
53
53
|
def _check_actionable_client(
|
|
54
|
-
client: Optional[Client], client_fn: Optional[
|
|
54
|
+
client: Optional[Client], client_fn: Optional[ClientFnExt]
|
|
55
55
|
) -> None:
|
|
56
56
|
if client_fn is None and client is None:
|
|
57
57
|
raise ValueError(
|
|
@@ -72,7 +72,7 @@ def _check_actionable_client(
|
|
|
72
72
|
def start_client(
|
|
73
73
|
*,
|
|
74
74
|
server_address: str,
|
|
75
|
-
client_fn: Optional[
|
|
75
|
+
client_fn: Optional[ClientFnExt] = None,
|
|
76
76
|
client: Optional[Client] = None,
|
|
77
77
|
grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
|
|
78
78
|
root_certificates: Optional[Union[bytes, str]] = None,
|
|
@@ -92,7 +92,7 @@ def start_client(
|
|
|
92
92
|
The IPv4 or IPv6 address of the server. If the Flower
|
|
93
93
|
server runs on the same machine on port 8080, then `server_address`
|
|
94
94
|
would be `"[::]:8080"`.
|
|
95
|
-
client_fn : Optional[
|
|
95
|
+
client_fn : Optional[ClientFnExt]
|
|
96
96
|
A callable that instantiates a Client. (default: None)
|
|
97
97
|
client : Optional[flwr.client.Client]
|
|
98
98
|
An implementation of the abstract base
|
|
@@ -136,7 +136,7 @@ def start_client(
|
|
|
136
136
|
|
|
137
137
|
Starting an SSL-enabled gRPC client using system certificates:
|
|
138
138
|
|
|
139
|
-
>>> def client_fn(
|
|
139
|
+
>>> def client_fn(node_id: int, partition_id: Optional[int]):
|
|
140
140
|
>>> return FlowerClient()
|
|
141
141
|
>>>
|
|
142
142
|
>>> start_client(
|
|
@@ -180,7 +180,7 @@ def _start_client_internal(
|
|
|
180
180
|
*,
|
|
181
181
|
server_address: str,
|
|
182
182
|
load_client_app_fn: Optional[Callable[[str, str], ClientApp]] = None,
|
|
183
|
-
client_fn: Optional[
|
|
183
|
+
client_fn: Optional[ClientFnExt] = None,
|
|
184
184
|
client: Optional[Client] = None,
|
|
185
185
|
grpc_max_message_length: int = GRPC_MAX_MESSAGE_LENGTH,
|
|
186
186
|
root_certificates: Optional[Union[bytes, str]] = None,
|
|
@@ -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
|
|
|
@@ -202,7 +203,7 @@ def _start_client_internal(
|
|
|
202
203
|
would be `"[::]:8080"`.
|
|
203
204
|
load_client_app_fn : Optional[Callable[[], ClientApp]] (default: None)
|
|
204
205
|
A function that can be used to load a `ClientApp` instance.
|
|
205
|
-
client_fn : Optional[
|
|
206
|
+
client_fn : Optional[ClientFnExt]
|
|
206
207
|
A callable that instantiates a Client. (default: None)
|
|
207
208
|
client : Optional[flwr.client.Client]
|
|
208
209
|
An implementation of the abstract base
|
|
@@ -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
|
|
@@ -244,7 +248,8 @@ def _start_client_internal(
|
|
|
244
248
|
if client_fn is None:
|
|
245
249
|
# Wrap `Client` instance in `client_fn`
|
|
246
250
|
def single_client_factory(
|
|
247
|
-
|
|
251
|
+
node_id: int, # pylint: disable=unused-argument
|
|
252
|
+
partition_id: Optional[int], # pylint: disable=unused-argument
|
|
248
253
|
) -> Client:
|
|
249
254
|
if client is None: # Added this to keep mypy happy
|
|
250
255
|
raise ValueError(
|
|
@@ -293,7 +298,7 @@ def _start_client_internal(
|
|
|
293
298
|
retry_invoker = RetryInvoker(
|
|
294
299
|
wait_gen_factory=exponential,
|
|
295
300
|
recoverable_exceptions=connection_error_type,
|
|
296
|
-
max_tries=max_retries,
|
|
301
|
+
max_tries=max_retries + 1 if max_retries is not None else None,
|
|
297
302
|
max_time=max_wait_time,
|
|
298
303
|
on_giveup=lambda retry_state: (
|
|
299
304
|
log(
|
|
@@ -309,7 +314,7 @@ def _start_client_internal(
|
|
|
309
314
|
on_backoff=_on_backoff,
|
|
310
315
|
)
|
|
311
316
|
|
|
312
|
-
node_state = NodeState()
|
|
317
|
+
node_state = NodeState(partition_id=partition_id)
|
|
313
318
|
# run_id -> (fab_id, fab_version)
|
|
314
319
|
run_info: Dict[int, Tuple[str, str]] = {}
|
|
315
320
|
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/src/py/flwr/client/client_app.py
RENAMED
|
@@ -15,19 +15,42 @@
|
|
|
15
15
|
"""Flower ClientApp."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
import inspect
|
|
18
19
|
from typing import Callable, List, Optional
|
|
19
20
|
|
|
21
|
+
from flwr.client.client import Client
|
|
20
22
|
from flwr.client.message_handler.message_handler import (
|
|
21
23
|
handle_legacy_message_from_msgtype,
|
|
22
24
|
)
|
|
23
25
|
from flwr.client.mod.utils import make_ffn
|
|
24
|
-
from flwr.client.typing import
|
|
26
|
+
from flwr.client.typing import ClientFnExt, Mod
|
|
25
27
|
from flwr.common import Context, Message, MessageType
|
|
26
|
-
from flwr.common.logger import warn_preview_feature
|
|
28
|
+
from flwr.common.logger import warn_deprecated_feature, warn_preview_feature
|
|
27
29
|
|
|
28
30
|
from .typing import ClientAppCallable
|
|
29
31
|
|
|
30
32
|
|
|
33
|
+
def _inspect_maybe_adapt_client_fn_signature(client_fn: ClientFnExt) -> ClientFnExt:
|
|
34
|
+
client_fn_args = inspect.signature(client_fn).parameters
|
|
35
|
+
|
|
36
|
+
if not all(key in client_fn_args for key in ["node_id", "partition_id"]):
|
|
37
|
+
warn_deprecated_feature(
|
|
38
|
+
"`client_fn` now expects a signature `def client_fn(node_id: int, "
|
|
39
|
+
"partition_id: Optional[int])`.\nYou provided `client_fn` with signature: "
|
|
40
|
+
f"{dict(client_fn_args.items())}"
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
# Wrap depcreated client_fn inside a function with the expected signature
|
|
44
|
+
def adaptor_fn(
|
|
45
|
+
node_id: int, partition_id: Optional[int] # pylint: disable=unused-argument
|
|
46
|
+
) -> Client:
|
|
47
|
+
return client_fn(str(partition_id)) # type: ignore
|
|
48
|
+
|
|
49
|
+
return adaptor_fn
|
|
50
|
+
|
|
51
|
+
return client_fn
|
|
52
|
+
|
|
53
|
+
|
|
31
54
|
class ClientAppException(Exception):
|
|
32
55
|
"""Exception raised when an exception is raised while executing a ClientApp."""
|
|
33
56
|
|
|
@@ -48,7 +71,7 @@ class ClientApp:
|
|
|
48
71
|
>>> class FlowerClient(NumPyClient):
|
|
49
72
|
>>> # ...
|
|
50
73
|
>>>
|
|
51
|
-
>>> def client_fn(
|
|
74
|
+
>>> def client_fn(node_id: int, partition_id: Optional[int]):
|
|
52
75
|
>>> return FlowerClient().to_client()
|
|
53
76
|
>>>
|
|
54
77
|
>>> app = ClientApp(client_fn)
|
|
@@ -65,7 +88,7 @@ class ClientApp:
|
|
|
65
88
|
|
|
66
89
|
def __init__(
|
|
67
90
|
self,
|
|
68
|
-
client_fn: Optional[
|
|
91
|
+
client_fn: Optional[ClientFnExt] = None, # Only for backward compatibility
|
|
69
92
|
mods: Optional[List[Mod]] = None,
|
|
70
93
|
) -> None:
|
|
71
94
|
self._mods: List[Mod] = mods if mods is not None else []
|
|
@@ -74,6 +97,8 @@ class ClientApp:
|
|
|
74
97
|
self._call: Optional[ClientAppCallable] = None
|
|
75
98
|
if client_fn is not None:
|
|
76
99
|
|
|
100
|
+
client_fn = _inspect_maybe_adapt_client_fn_signature(client_fn)
|
|
101
|
+
|
|
77
102
|
def ffn(
|
|
78
103
|
message: Message,
|
|
79
104
|
context: Context,
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Client-side message handler."""
|
|
16
16
|
|
|
17
|
-
|
|
18
17
|
from logging import WARN
|
|
19
18
|
from typing import Optional, Tuple, cast
|
|
20
19
|
|
|
@@ -25,7 +24,7 @@ from flwr.client.client import (
|
|
|
25
24
|
maybe_call_get_properties,
|
|
26
25
|
)
|
|
27
26
|
from flwr.client.numpy_client import NumPyClient
|
|
28
|
-
from flwr.client.typing import
|
|
27
|
+
from flwr.client.typing import ClientFnExt
|
|
29
28
|
from flwr.common import ConfigsRecord, Context, Message, Metadata, RecordSet, log
|
|
30
29
|
from flwr.common.constant import MessageType, MessageTypeLegacy
|
|
31
30
|
from flwr.common.recordset_compat import (
|
|
@@ -90,10 +89,10 @@ def handle_control_message(message: Message) -> Tuple[Optional[Message], int]:
|
|
|
90
89
|
|
|
91
90
|
|
|
92
91
|
def handle_legacy_message_from_msgtype(
|
|
93
|
-
client_fn:
|
|
92
|
+
client_fn: ClientFnExt, message: Message, context: Context
|
|
94
93
|
) -> Message:
|
|
95
94
|
"""Handle legacy message in the inner most mod."""
|
|
96
|
-
client = client_fn(
|
|
95
|
+
client = client_fn(message.metadata.dst_node_id, context.partition_id)
|
|
97
96
|
|
|
98
97
|
# Check if NumPyClient is returend
|
|
99
98
|
if isinstance(client, NumPyClient):
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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
|
|
@@ -344,8 +345,8 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
344
345
|
"--max-retries",
|
|
345
346
|
type=int,
|
|
346
347
|
default=None,
|
|
347
|
-
help="The maximum number of times the client will try to
|
|
348
|
-
"
|
|
348
|
+
help="The maximum number of times the client will try to reconnect to the"
|
|
349
|
+
"SuperLink before giving up in case of a connection error. By default,"
|
|
349
350
|
"it is set to None, meaning there is no limit to the number of tries.",
|
|
350
351
|
)
|
|
351
352
|
parser.add_argument(
|
|
@@ -353,7 +354,7 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
353
354
|
type=float,
|
|
354
355
|
default=None,
|
|
355
356
|
help="The maximum duration before the client stops trying to"
|
|
356
|
-
"connect to the
|
|
357
|
+
"connect to the SuperLink in case of connection error. By default, it"
|
|
357
358
|
"is set to None, meaning there is no limit to the total time.",
|
|
358
359
|
)
|
|
359
360
|
parser.add_argument(
|
|
@@ -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.dev20240707}/src/py/flwr/client/typing.py
RENAMED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"""Custom types for Flower clients."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
-
from typing import Callable
|
|
18
|
+
from typing import Callable, Optional
|
|
19
19
|
|
|
20
20
|
from flwr.common import Context, Message
|
|
21
21
|
|
|
@@ -23,6 +23,7 @@ from .client import Client as Client
|
|
|
23
23
|
|
|
24
24
|
# Compatibility
|
|
25
25
|
ClientFn = Callable[[str], Client]
|
|
26
|
+
ClientFnExt = Callable[[int, Optional[int]], Client]
|
|
26
27
|
|
|
27
28
|
ClientAppCallable = Callable[[Message, Context], Message]
|
|
28
29
|
Mod = Callable[[Message, Context, ClientAppCallable], Message]
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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.dev20240707}/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.dev20240707}/src/py/flwr/common/logger.py
RENAMED
|
@@ -197,6 +197,19 @@ def warn_deprecated_feature(name: str) -> None:
|
|
|
197
197
|
)
|
|
198
198
|
|
|
199
199
|
|
|
200
|
+
def warn_unsupported_feature(name: str) -> None:
|
|
201
|
+
"""Warn the user when they use an unsupported feature."""
|
|
202
|
+
log(
|
|
203
|
+
WARN,
|
|
204
|
+
"""UNSUPPORTED FEATURE: %s
|
|
205
|
+
|
|
206
|
+
This is an unsupported feature. It will be removed
|
|
207
|
+
entirely in future versions of Flower.
|
|
208
|
+
""",
|
|
209
|
+
name,
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
|
|
200
213
|
def set_logger_propagation(
|
|
201
214
|
child_logger: logging.Logger, value: bool = True
|
|
202
215
|
) -> logging.Logger:
|
{flwr_nightly-1.10.0.dev20240624 → flwr_nightly-1.10.0.dev20240707}/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 = ?;"
|