flwr-nightly 1.13.0.dev20241106__tar.gz → 1.13.0.dev20241107__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of flwr-nightly might be problematic. Click here for more details.
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/PKG-INFO +1 -1
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/pyproject.toml +1 -1
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/run/run.py +16 -5
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/app.py +10 -6
- flwr_nightly-1.13.0.dev20241107/src/py/flwr/client/nodestate/__init__.py +25 -0
- flwr_nightly-1.13.0.dev20241107/src/py/flwr/client/nodestate/in_memory_nodestate.py +38 -0
- flwr_nightly-1.13.0.dev20241107/src/py/flwr/client/nodestate/nodestate.py +30 -0
- flwr_nightly-1.13.0.dev20241107/src/py/flwr/client/nodestate/nodestate_factory.py +37 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/config.py +10 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/constant.py +0 -1
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/object_ref.py +40 -33
- flwr_nightly-1.13.0.dev20241107/src/py/flwr/proto/exec_pb2.py +41 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/exec_pb2.pyi +6 -20
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/driver/driver.py +1 -1
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/driver/grpc_driver.py +2 -6
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/driver/inmemory_driver.py +1 -3
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/run_serverapp.py +2 -2
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/serverapp/app.py +1 -1
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -16
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -15
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/linkstate/utils.py +2 -33
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/run_simulation.py +1 -1
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/superexec/deployment.py +1 -1
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/superexec/exec_servicer.py +2 -2
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/superexec/executor.py +4 -3
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/superexec/simulation.py +8 -8
- flwr_nightly-1.13.0.dev20241106/src/py/flwr/proto/exec_pb2.py +0 -44
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/LICENSE +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/README.md +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/superexec/exec_grpc.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.13.0.
|
|
7
|
+
version = "1.13.0.dev20241107"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
{flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/cli/run/run.py
RENAMED
|
@@ -29,10 +29,18 @@ from flwr.cli.config_utils import (
|
|
|
29
29
|
validate_federation_in_project_config,
|
|
30
30
|
validate_project_config,
|
|
31
31
|
)
|
|
32
|
-
from flwr.common.config import
|
|
32
|
+
from flwr.common.config import (
|
|
33
|
+
flatten_dict,
|
|
34
|
+
parse_config_args,
|
|
35
|
+
user_config_to_configsrecord,
|
|
36
|
+
)
|
|
33
37
|
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
34
38
|
from flwr.common.logger import log
|
|
35
|
-
from flwr.common.serde import
|
|
39
|
+
from flwr.common.serde import (
|
|
40
|
+
configs_record_to_proto,
|
|
41
|
+
fab_to_proto,
|
|
42
|
+
user_config_to_proto,
|
|
43
|
+
)
|
|
36
44
|
from flwr.common.typing import Fab
|
|
37
45
|
from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
|
|
38
46
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
@@ -94,6 +102,7 @@ def run(
|
|
|
94
102
|
_run_without_exec_api(app, federation_config, config_overrides, federation)
|
|
95
103
|
|
|
96
104
|
|
|
105
|
+
# pylint: disable-next=too-many-locals
|
|
97
106
|
def _run_with_exec_api(
|
|
98
107
|
app: Path,
|
|
99
108
|
federation_config: dict[str, Any],
|
|
@@ -118,12 +127,14 @@ def _run_with_exec_api(
|
|
|
118
127
|
content = Path(fab_path).read_bytes()
|
|
119
128
|
fab = Fab(fab_hash, content)
|
|
120
129
|
|
|
130
|
+
# Construct a `ConfigsRecord` out of a flattened `UserConfig`
|
|
131
|
+
fed_conf = flatten_dict(federation_config.get("options", {}))
|
|
132
|
+
c_record = user_config_to_configsrecord(fed_conf)
|
|
133
|
+
|
|
121
134
|
req = StartRunRequest(
|
|
122
135
|
fab=fab_to_proto(fab),
|
|
123
136
|
override_config=user_config_to_proto(parse_config_args(config_overrides)),
|
|
124
|
-
|
|
125
|
-
flatten_dict(federation_config.get("options"))
|
|
126
|
-
),
|
|
137
|
+
federation_options=configs_record_to_proto(c_record),
|
|
127
138
|
)
|
|
128
139
|
res = stub.StartRun(req)
|
|
129
140
|
|
{flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/client/app.py
RENAMED
|
@@ -32,6 +32,7 @@ from flwr.cli.config_utils import get_fab_metadata
|
|
|
32
32
|
from flwr.cli.install import install_from_fab
|
|
33
33
|
from flwr.client.client import Client
|
|
34
34
|
from flwr.client.client_app import ClientApp, LoadClientAppError
|
|
35
|
+
from flwr.client.nodestate.nodestate_factory import NodeStateFactory
|
|
35
36
|
from flwr.client.typing import ClientFnExt
|
|
36
37
|
from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, event
|
|
37
38
|
from flwr.common.address import parse_address
|
|
@@ -365,6 +366,8 @@ def start_client_internal(
|
|
|
365
366
|
|
|
366
367
|
# DeprecatedRunInfoStore gets initialized when the first connection is established
|
|
367
368
|
run_info_store: Optional[DeprecatedRunInfoStore] = None
|
|
369
|
+
state_factory = NodeStateFactory()
|
|
370
|
+
state = state_factory.state()
|
|
368
371
|
|
|
369
372
|
runs: dict[int, Run] = {}
|
|
370
373
|
|
|
@@ -396,13 +399,14 @@ def start_client_internal(
|
|
|
396
399
|
)
|
|
397
400
|
else:
|
|
398
401
|
# Call create_node fn to register node
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
402
|
+
# and store node_id in state
|
|
403
|
+
if (node_id := create_node()) is None:
|
|
404
|
+
raise ValueError(
|
|
405
|
+
"Failed to register SuperNode with the SuperLink"
|
|
406
|
+
)
|
|
407
|
+
state.set_node_id(node_id)
|
|
404
408
|
run_info_store = DeprecatedRunInfoStore(
|
|
405
|
-
node_id=
|
|
409
|
+
node_id=state.get_node_id(),
|
|
406
410
|
node_config=node_config,
|
|
407
411
|
)
|
|
408
412
|
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
"""Flower NodeState."""
|
|
16
|
+
|
|
17
|
+
from .in_memory_nodestate import InMemoryNodeState as InMemoryNodeState
|
|
18
|
+
from .nodestate import NodeState as NodeState
|
|
19
|
+
from .nodestate_factory import NodeStateFactory as NodeStateFactory
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"InMemoryNodeState",
|
|
23
|
+
"NodeState",
|
|
24
|
+
"NodeStateFactory",
|
|
25
|
+
]
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
"""In-memory NodeState implementation."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
from typing import Optional
|
|
19
|
+
|
|
20
|
+
from flwr.client.nodestate.nodestate import NodeState
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class InMemoryNodeState(NodeState):
|
|
24
|
+
"""In-memory NodeState implementation."""
|
|
25
|
+
|
|
26
|
+
def __init__(self) -> None:
|
|
27
|
+
# Store node_id
|
|
28
|
+
self.node_id: Optional[int] = None
|
|
29
|
+
|
|
30
|
+
def set_node_id(self, node_id: Optional[int]) -> None:
|
|
31
|
+
"""Set the node ID."""
|
|
32
|
+
self.node_id = node_id
|
|
33
|
+
|
|
34
|
+
def get_node_id(self) -> int:
|
|
35
|
+
"""Get the node ID."""
|
|
36
|
+
if self.node_id is None:
|
|
37
|
+
raise ValueError("Node ID not set")
|
|
38
|
+
return self.node_id
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
"""Abstract base class NodeState."""
|
|
16
|
+
|
|
17
|
+
import abc
|
|
18
|
+
from typing import Optional
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class NodeState(abc.ABC):
|
|
22
|
+
"""Abstract NodeState."""
|
|
23
|
+
|
|
24
|
+
@abc.abstractmethod
|
|
25
|
+
def set_node_id(self, node_id: Optional[int]) -> None:
|
|
26
|
+
"""Set the node ID."""
|
|
27
|
+
|
|
28
|
+
@abc.abstractmethod
|
|
29
|
+
def get_node_id(self) -> int:
|
|
30
|
+
"""Get the node ID."""
|
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
"""Factory class that creates NodeState instances."""
|
|
16
|
+
|
|
17
|
+
import threading
|
|
18
|
+
from typing import Optional
|
|
19
|
+
|
|
20
|
+
from .in_memory_nodestate import InMemoryNodeState
|
|
21
|
+
from .nodestate import NodeState
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class NodeStateFactory:
|
|
25
|
+
"""Factory class that creates NodeState instances."""
|
|
26
|
+
|
|
27
|
+
def __init__(self) -> None:
|
|
28
|
+
self.state_instance: Optional[NodeState] = None
|
|
29
|
+
self.lock = threading.RLock()
|
|
30
|
+
|
|
31
|
+
def state(self) -> NodeState:
|
|
32
|
+
"""Return a State instance and create it, if necessary."""
|
|
33
|
+
# Lock access to NodeStateFactory to prevent returning different instances
|
|
34
|
+
with self.lock:
|
|
35
|
+
if self.state_instance is None:
|
|
36
|
+
self.state_instance = InMemoryNodeState()
|
|
37
|
+
return self.state_instance
|
{flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/config.py
RENAMED
|
@@ -22,6 +22,7 @@ from typing import Any, Optional, Union, cast, get_args
|
|
|
22
22
|
import tomli
|
|
23
23
|
|
|
24
24
|
from flwr.cli.config_utils import get_fab_config, validate_fields
|
|
25
|
+
from flwr.common import ConfigsRecord
|
|
25
26
|
from flwr.common.constant import (
|
|
26
27
|
APP_DIR,
|
|
27
28
|
FAB_CONFIG_FILE,
|
|
@@ -229,3 +230,12 @@ def get_metadata_from_config(config: dict[str, Any]) -> tuple[str, str]:
|
|
|
229
230
|
config["project"]["version"],
|
|
230
231
|
f"{config['tool']['flwr']['app']['publisher']}/{config['project']['name']}",
|
|
231
232
|
)
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def user_config_to_configsrecord(config: UserConfig) -> ConfigsRecord:
|
|
236
|
+
"""Construct a `ConfigsRecord` out of a `UserConfig`."""
|
|
237
|
+
c_record = ConfigsRecord()
|
|
238
|
+
for k, v in config.items():
|
|
239
|
+
c_record[k] = v
|
|
240
|
+
|
|
241
|
+
return c_record
|
{flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/common/object_ref.py
RENAMED
|
@@ -55,8 +55,8 @@ def validate(
|
|
|
55
55
|
specified attribute within it.
|
|
56
56
|
project_dir : Optional[Union[str, Path]] (default: None)
|
|
57
57
|
The directory containing the module. If None, the current working directory
|
|
58
|
-
is used. If `check_module` is True, the `project_dir` will be
|
|
59
|
-
the system path
|
|
58
|
+
is used. If `check_module` is True, the `project_dir` will be temporarily
|
|
59
|
+
inserted into the system path and then removed after the validation is complete.
|
|
60
60
|
|
|
61
61
|
Returns
|
|
62
62
|
-------
|
|
@@ -66,8 +66,8 @@ def validate(
|
|
|
66
66
|
|
|
67
67
|
Note
|
|
68
68
|
----
|
|
69
|
-
This function will modify `sys.path` by inserting the provided
|
|
70
|
-
|
|
69
|
+
This function will temporarily modify `sys.path` by inserting the provided
|
|
70
|
+
`project_dir`, which will be removed after the validation is complete.
|
|
71
71
|
"""
|
|
72
72
|
module_str, _, attributes_str = module_attribute_str.partition(":")
|
|
73
73
|
if not module_str:
|
|
@@ -82,11 +82,19 @@ def validate(
|
|
|
82
82
|
)
|
|
83
83
|
|
|
84
84
|
if check_module:
|
|
85
|
+
if project_dir is None:
|
|
86
|
+
project_dir = Path.cwd()
|
|
87
|
+
project_dir = Path(project_dir).absolute()
|
|
85
88
|
# Set the system path
|
|
86
|
-
|
|
89
|
+
sys.path.insert(0, str(project_dir))
|
|
87
90
|
|
|
88
91
|
# Load module
|
|
89
92
|
module = find_spec(module_str)
|
|
93
|
+
|
|
94
|
+
# Unset the system path
|
|
95
|
+
sys.path.remove(str(project_dir))
|
|
96
|
+
|
|
97
|
+
# Check if the module and the attribute exist
|
|
90
98
|
if module and module.origin:
|
|
91
99
|
if not _find_attribute_in_module(module.origin, attributes_str):
|
|
92
100
|
return (
|
|
@@ -133,8 +141,10 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
133
141
|
|
|
134
142
|
Note
|
|
135
143
|
----
|
|
136
|
-
This function will
|
|
137
|
-
|
|
144
|
+
- This function will unload all modules in the previously provided `project_dir`,
|
|
145
|
+
if it is invoked again.
|
|
146
|
+
- This function will modify `sys.path` by inserting the provided `project_dir`
|
|
147
|
+
and removing the previously inserted `project_dir`.
|
|
138
148
|
"""
|
|
139
149
|
valid, error_msg = validate(module_attribute_str, check_module=False)
|
|
140
150
|
if not valid and error_msg:
|
|
@@ -143,33 +153,21 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
143
153
|
module_str, _, attributes_str = module_attribute_str.partition(":")
|
|
144
154
|
|
|
145
155
|
try:
|
|
156
|
+
if _current_sys_path:
|
|
157
|
+
# Hack: `tabnet` does not work with reloading
|
|
158
|
+
if "tabnet" in sys.modules:
|
|
159
|
+
log(
|
|
160
|
+
WARN,
|
|
161
|
+
"Cannot reload module `%s` from disk due to compatibility issues "
|
|
162
|
+
"with the `tabnet` library. The module will be loaded from the "
|
|
163
|
+
"cache instead. If you experience issues, consider restarting "
|
|
164
|
+
"the application.",
|
|
165
|
+
module_str,
|
|
166
|
+
)
|
|
167
|
+
else:
|
|
168
|
+
_unload_modules(Path(_current_sys_path))
|
|
146
169
|
_set_sys_path(project_dir)
|
|
147
|
-
|
|
148
|
-
if module_str not in sys.modules:
|
|
149
|
-
module = importlib.import_module(module_str)
|
|
150
|
-
# Hack: `tabnet` does not work with `importlib.reload`
|
|
151
|
-
elif "tabnet" in sys.modules:
|
|
152
|
-
log(
|
|
153
|
-
WARN,
|
|
154
|
-
"Cannot reload module `%s` from disk due to compatibility issues "
|
|
155
|
-
"with the `tabnet` library. The module will be loaded from the "
|
|
156
|
-
"cache instead. If you experience issues, consider restarting "
|
|
157
|
-
"the application.",
|
|
158
|
-
module_str,
|
|
159
|
-
)
|
|
160
|
-
module = sys.modules[module_str]
|
|
161
|
-
else:
|
|
162
|
-
module = sys.modules[module_str]
|
|
163
|
-
|
|
164
|
-
if project_dir is None:
|
|
165
|
-
project_dir = Path.cwd()
|
|
166
|
-
|
|
167
|
-
# Reload cached modules in the project directory
|
|
168
|
-
for m in list(sys.modules.values()):
|
|
169
|
-
path: Optional[str] = getattr(m, "__file__", None)
|
|
170
|
-
if path is not None and path.startswith(str(project_dir)):
|
|
171
|
-
importlib.reload(m)
|
|
172
|
-
|
|
170
|
+
module = importlib.import_module(module_str)
|
|
173
171
|
except ModuleNotFoundError as err:
|
|
174
172
|
raise error_type(
|
|
175
173
|
f"Unable to load module {module_str}{OBJECT_REF_HELP_STR}",
|
|
@@ -189,6 +187,15 @@ def load_app( # pylint: disable= too-many-branches
|
|
|
189
187
|
return attribute
|
|
190
188
|
|
|
191
189
|
|
|
190
|
+
def _unload_modules(project_dir: Path) -> None:
|
|
191
|
+
"""Unload modules from the project directory."""
|
|
192
|
+
dir_str = str(project_dir.absolute())
|
|
193
|
+
for name, m in list(sys.modules.items()):
|
|
194
|
+
path: Optional[str] = getattr(m, "__file__", None)
|
|
195
|
+
if path is not None and path.startswith(dir_str):
|
|
196
|
+
del sys.modules[name]
|
|
197
|
+
|
|
198
|
+
|
|
192
199
|
def _set_sys_path(directory: Optional[Union[str, Path]]) -> None:
|
|
193
200
|
"""Set the system path."""
|
|
194
201
|
if directory is None:
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: flwr/proto/exec.proto
|
|
4
|
+
# Protobuf Python Version: 4.25.0
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
|
|
16
|
+
from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
|
|
17
|
+
from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\x1a\x1a\x66lwr/proto/recordset.proto\"\xfb\x01\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12\x35\n\x12\x66\x65\x64\x65ration_options\x18\x03 \x01(\x0b\x32\x19.flwr.proto.ConfigsRecord\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"<\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\x12\x17\n\x0f\x61\x66ter_timestamp\x18\x02 \x01(\x01\"B\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t\x12\x18\n\x10latest_timestamp\x18\x02 \x01(\x01\x32\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
|
|
21
|
+
|
|
22
|
+
_globals = globals()
|
|
23
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
24
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.exec_pb2', _globals)
|
|
25
|
+
if _descriptor._USE_C_DESCRIPTORS == False:
|
|
26
|
+
DESCRIPTOR._options = None
|
|
27
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._options = None
|
|
28
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
|
|
29
|
+
_globals['_STARTRUNREQUEST']._serialized_start=116
|
|
30
|
+
_globals['_STARTRUNREQUEST']._serialized_end=367
|
|
31
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=294
|
|
32
|
+
_globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=367
|
|
33
|
+
_globals['_STARTRUNRESPONSE']._serialized_start=369
|
|
34
|
+
_globals['_STARTRUNRESPONSE']._serialized_end=403
|
|
35
|
+
_globals['_STREAMLOGSREQUEST']._serialized_start=405
|
|
36
|
+
_globals['_STREAMLOGSREQUEST']._serialized_end=465
|
|
37
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_start=467
|
|
38
|
+
_globals['_STREAMLOGSRESPONSE']._serialized_end=533
|
|
39
|
+
_globals['_EXEC']._serialized_start=536
|
|
40
|
+
_globals['_EXEC']._serialized_end=696
|
|
41
|
+
# @@protoc_insertion_point(module_scope)
|
{flwr_nightly-1.13.0.dev20241106 → flwr_nightly-1.13.0.dev20241107}/src/py/flwr/proto/exec_pb2.pyi
RENAMED
|
@@ -4,6 +4,7 @@ isort:skip_file
|
|
|
4
4
|
"""
|
|
5
5
|
import builtins
|
|
6
6
|
import flwr.proto.fab_pb2
|
|
7
|
+
import flwr.proto.recordset_pb2
|
|
7
8
|
import flwr.proto.transport_pb2
|
|
8
9
|
import google.protobuf.descriptor
|
|
9
10
|
import google.protobuf.internal.containers
|
|
@@ -30,38 +31,23 @@ class StartRunRequest(google.protobuf.message.Message):
|
|
|
30
31
|
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
31
32
|
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
32
33
|
|
|
33
|
-
class FederationConfigEntry(google.protobuf.message.Message):
|
|
34
|
-
DESCRIPTOR: google.protobuf.descriptor.Descriptor
|
|
35
|
-
KEY_FIELD_NUMBER: builtins.int
|
|
36
|
-
VALUE_FIELD_NUMBER: builtins.int
|
|
37
|
-
key: typing.Text
|
|
38
|
-
@property
|
|
39
|
-
def value(self) -> flwr.proto.transport_pb2.Scalar: ...
|
|
40
|
-
def __init__(self,
|
|
41
|
-
*,
|
|
42
|
-
key: typing.Text = ...,
|
|
43
|
-
value: typing.Optional[flwr.proto.transport_pb2.Scalar] = ...,
|
|
44
|
-
) -> None: ...
|
|
45
|
-
def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
|
|
46
|
-
def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
|
|
47
|
-
|
|
48
34
|
FAB_FIELD_NUMBER: builtins.int
|
|
49
35
|
OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
|
|
50
|
-
|
|
36
|
+
FEDERATION_OPTIONS_FIELD_NUMBER: builtins.int
|
|
51
37
|
@property
|
|
52
38
|
def fab(self) -> flwr.proto.fab_pb2.Fab: ...
|
|
53
39
|
@property
|
|
54
40
|
def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
|
|
55
41
|
@property
|
|
56
|
-
def
|
|
42
|
+
def federation_options(self) -> flwr.proto.recordset_pb2.ConfigsRecord: ...
|
|
57
43
|
def __init__(self,
|
|
58
44
|
*,
|
|
59
45
|
fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
|
|
60
46
|
override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
|
|
61
|
-
|
|
47
|
+
federation_options: typing.Optional[flwr.proto.recordset_pb2.ConfigsRecord] = ...,
|
|
62
48
|
) -> None: ...
|
|
63
|
-
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
|
|
64
|
-
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","
|
|
49
|
+
def HasField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options"]) -> builtins.bool: ...
|
|
50
|
+
def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_options",b"federation_options","override_config",b"override_config"]) -> None: ...
|
|
65
51
|
global___StartRunRequest = StartRunRequest
|
|
66
52
|
|
|
67
53
|
class StartRunResponse(google.protobuf.message.Message):
|
|
@@ -27,7 +27,7 @@ class Driver(ABC):
|
|
|
27
27
|
"""Abstract base Driver class for the ServerAppIo API."""
|
|
28
28
|
|
|
29
29
|
@abstractmethod
|
|
30
|
-
def
|
|
30
|
+
def set_run(self, run_id: int) -> None:
|
|
31
31
|
"""Request a run to the SuperLink with a given `run_id`.
|
|
32
32
|
|
|
33
33
|
If a Run with the specified `run_id` exists, a local Run
|
|
@@ -112,12 +112,8 @@ class GrpcDriver(Driver):
|
|
|
112
112
|
channel.close()
|
|
113
113
|
log(DEBUG, "[Driver] Disconnected")
|
|
114
114
|
|
|
115
|
-
def
|
|
116
|
-
"""
|
|
117
|
-
# Check if is initialized
|
|
118
|
-
if self._run is not None:
|
|
119
|
-
return
|
|
120
|
-
|
|
115
|
+
def set_run(self, run_id: int) -> None:
|
|
116
|
+
"""Set the run."""
|
|
121
117
|
# Get the run info
|
|
122
118
|
req = GetRunRequest(run_id=run_id)
|
|
123
119
|
res: GetRunResponse = self._stub.GetRun(req)
|
|
@@ -62,10 +62,8 @@ class InMemoryDriver(Driver):
|
|
|
62
62
|
):
|
|
63
63
|
raise ValueError(f"Invalid message: {message}")
|
|
64
64
|
|
|
65
|
-
def
|
|
65
|
+
def set_run(self, run_id: int) -> None:
|
|
66
66
|
"""Initialize the run."""
|
|
67
|
-
if self._run is not None:
|
|
68
|
-
return
|
|
69
67
|
run = self.state.get_run(run_id)
|
|
70
68
|
if run is None:
|
|
71
69
|
raise RuntimeError(f"Cannot find the run with ID: {run_id}")
|
|
@@ -174,7 +174,7 @@ def run_server_app() -> None:
|
|
|
174
174
|
root_certificates=root_certificates,
|
|
175
175
|
)
|
|
176
176
|
flwr_dir = get_flwr_dir(args.flwr_dir)
|
|
177
|
-
driver.
|
|
177
|
+
driver.set_run(args.run_id)
|
|
178
178
|
run_ = driver.run
|
|
179
179
|
if not run_.fab_hash:
|
|
180
180
|
raise ValueError("FAB hash not provided.")
|
|
@@ -204,7 +204,7 @@ def run_server_app() -> None:
|
|
|
204
204
|
req = CreateRunRequest(fab_id=fab_id, fab_version=fab_version)
|
|
205
205
|
res: CreateRunResponse = driver._stub.CreateRun(req) # pylint: disable=W0212
|
|
206
206
|
# Fetch full `Run` using `run_id`
|
|
207
|
-
driver.
|
|
207
|
+
driver.set_run(res.run_id) # pylint: disable=W0212
|
|
208
208
|
run_id = res.run_id
|
|
209
209
|
|
|
210
210
|
# Obtain server app reference and the run config
|
|
@@ -189,7 +189,7 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212
|
|
|
189
189
|
run = run_from_proto(res.run)
|
|
190
190
|
fab = fab_from_proto(res.fab)
|
|
191
191
|
|
|
192
|
-
driver.
|
|
192
|
+
driver.set_run(run.run_id)
|
|
193
193
|
|
|
194
194
|
# Start log uploader for this run
|
|
195
195
|
log_uploader = start_log_uploader(
|
|
@@ -40,7 +40,6 @@ from .utils import (
|
|
|
40
40
|
generate_rand_int_from_bytes,
|
|
41
41
|
has_valid_sub_status,
|
|
42
42
|
is_valid_transition,
|
|
43
|
-
make_node_unavailable_taskres,
|
|
44
43
|
)
|
|
45
44
|
|
|
46
45
|
|
|
@@ -257,21 +256,6 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
|
257
256
|
task_res_list.append(task_res)
|
|
258
257
|
replied_task_ids.add(reply_to)
|
|
259
258
|
|
|
260
|
-
# Check if the node is offline
|
|
261
|
-
for task_id in task_ids - replied_task_ids:
|
|
262
|
-
task_ins = self.task_ins_store.get(task_id)
|
|
263
|
-
if task_ins is None:
|
|
264
|
-
continue
|
|
265
|
-
node_id = task_ins.task.consumer.node_id
|
|
266
|
-
online_until, _ = self.node_ids[node_id]
|
|
267
|
-
# Generate a TaskRes containing an error reply if the node is offline.
|
|
268
|
-
if online_until < time.time():
|
|
269
|
-
err_taskres = make_node_unavailable_taskres(
|
|
270
|
-
ref_taskins=task_ins,
|
|
271
|
-
)
|
|
272
|
-
self.task_res_store[UUID(err_taskres.task_id)] = err_taskres
|
|
273
|
-
task_res_list.append(err_taskres)
|
|
274
|
-
|
|
275
259
|
# Mark all of them as delivered
|
|
276
260
|
delivered_at = now().isoformat()
|
|
277
261
|
for task_res in task_res_list:
|
|
@@ -57,7 +57,6 @@ from .utils import (
|
|
|
57
57
|
generate_rand_int_from_bytes,
|
|
58
58
|
has_valid_sub_status,
|
|
59
59
|
is_valid_transition,
|
|
60
|
-
make_node_unavailable_taskres,
|
|
61
60
|
)
|
|
62
61
|
|
|
63
62
|
SQL_CREATE_TABLE_NODE = """
|
|
@@ -640,20 +639,6 @@ class SqliteLinkState(LinkState): # pylint: disable=R0904
|
|
|
640
639
|
data = {f"id_{i}": str(node_id) for i, node_id in enumerate(offline_node_ids)}
|
|
641
640
|
task_ins_rows = self.query(query, data)
|
|
642
641
|
|
|
643
|
-
# Make TaskRes containing node unavailabe error
|
|
644
|
-
for row in task_ins_rows:
|
|
645
|
-
for row in rows:
|
|
646
|
-
# Convert values from sint64 to uint64
|
|
647
|
-
convert_sint64_values_in_dict_to_uint64(
|
|
648
|
-
row, ["run_id", "producer_node_id", "consumer_node_id"]
|
|
649
|
-
)
|
|
650
|
-
|
|
651
|
-
task_ins = dict_to_task_ins(row)
|
|
652
|
-
err_taskres = make_node_unavailable_taskres(
|
|
653
|
-
ref_taskins=task_ins,
|
|
654
|
-
)
|
|
655
|
-
result.append(err_taskres)
|
|
656
|
-
|
|
657
642
|
return result
|
|
658
643
|
|
|
659
644
|
def num_task_ins(self) -> int:
|