flwr-nightly 1.9.0.dev20240420__tar.gz → 1.9.0.dev20240423__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.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/PKG-INFO +1 -1
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/pyproject.toml +2 -8
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/new.py +1 -0
- flwr_nightly-1.9.0.dev20240423/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +94 -0
- flwr_nightly-1.9.0.dev20240423/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +17 -0
- flwr_nightly-1.9.0.dev20240423/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +24 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/supernode/app.py +16 -4
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/compat/app.py +2 -2
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/compat/driver_client_proxy.py +1 -1
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/driver/__init__.py +3 -0
- flwr_nightly-1.9.0.dev20240420/src/py/flwr/server/driver/driver.py → flwr_nightly-1.9.0.dev20240423/src/py/flwr/server/driver/grpc_driver.py +8 -72
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/run_serverapp.py +4 -4
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/simulation/run_simulation.py +2 -2
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/LICENSE +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/README.md +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/criterion.py +0 -0
- /flwr_nightly-1.9.0.dev20240420/src/py/flwr/server/driver/abc_driver.py → /flwr_nightly-1.9.0.dev20240423/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/simulation/ray_transport/utils.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.9.0.
|
|
7
|
+
version = "1.9.0.dev20240423"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -136,7 +136,7 @@ multi_line_output = 3
|
|
|
136
136
|
include_trailing_comma = true
|
|
137
137
|
force_grid_wrap = 0
|
|
138
138
|
use_parentheses = true
|
|
139
|
-
known_first_party = ["flwr", "
|
|
139
|
+
known_first_party = ["flwr", "flwr_tool"]
|
|
140
140
|
|
|
141
141
|
[tool.black]
|
|
142
142
|
line-length = 88
|
|
@@ -170,12 +170,6 @@ plugins = [
|
|
|
170
170
|
ignore_missing_imports = true
|
|
171
171
|
strict = true
|
|
172
172
|
|
|
173
|
-
[[tool.mypy.overrides]]
|
|
174
|
-
module = [
|
|
175
|
-
"flwr_experimental.*",
|
|
176
|
-
]
|
|
177
|
-
ignore_errors = true
|
|
178
|
-
|
|
179
173
|
[[tool.mypy.overrides]]
|
|
180
174
|
module = [
|
|
181
175
|
"importlib.metadata.*",
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"""$project_name: A Flower / Scikit-Learn app."""
|
|
2
|
+
|
|
3
|
+
import warnings
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
from flwr.client import NumPyClient, ClientApp
|
|
7
|
+
from flwr_datasets import FederatedDataset
|
|
8
|
+
from sklearn.linear_model import LogisticRegression
|
|
9
|
+
from sklearn.metrics import log_loss
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def get_model_parameters(model):
|
|
13
|
+
if model.fit_intercept:
|
|
14
|
+
params = [
|
|
15
|
+
model.coef_,
|
|
16
|
+
model.intercept_,
|
|
17
|
+
]
|
|
18
|
+
else:
|
|
19
|
+
params = [model.coef_]
|
|
20
|
+
return params
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def set_model_params(model, params):
|
|
24
|
+
model.coef_ = params[0]
|
|
25
|
+
if model.fit_intercept:
|
|
26
|
+
model.intercept_ = params[1]
|
|
27
|
+
return model
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def set_initial_params(model):
|
|
31
|
+
n_classes = 10 # MNIST has 10 classes
|
|
32
|
+
n_features = 784 # Number of features in dataset
|
|
33
|
+
model.classes_ = np.array([i for i in range(10)])
|
|
34
|
+
|
|
35
|
+
model.coef_ = np.zeros((n_classes, n_features))
|
|
36
|
+
if model.fit_intercept:
|
|
37
|
+
model.intercept_ = np.zeros((n_classes,))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class FlowerClient(NumPyClient):
|
|
41
|
+
def __init__(self, model, X_train, X_test, y_train, y_test):
|
|
42
|
+
self.model = model
|
|
43
|
+
self.X_train = X_train
|
|
44
|
+
self.X_test = X_test
|
|
45
|
+
self.y_train = y_train
|
|
46
|
+
self.y_test = y_test
|
|
47
|
+
|
|
48
|
+
def get_parameters(self, config):
|
|
49
|
+
return get_model_parameters(self.model)
|
|
50
|
+
|
|
51
|
+
def fit(self, parameters, config):
|
|
52
|
+
set_model_params(self.model, parameters)
|
|
53
|
+
|
|
54
|
+
# Ignore convergence failure due to low local epochs
|
|
55
|
+
with warnings.catch_warnings():
|
|
56
|
+
warnings.simplefilter("ignore")
|
|
57
|
+
self.model.fit(self.X_train, self.y_train)
|
|
58
|
+
|
|
59
|
+
return get_model_parameters(self.model), len(self.X_train), {}
|
|
60
|
+
|
|
61
|
+
def evaluate(self, parameters, config):
|
|
62
|
+
set_model_params(self.model, parameters)
|
|
63
|
+
|
|
64
|
+
loss = log_loss(self.y_test, self.model.predict_proba(self.X_test))
|
|
65
|
+
accuracy = self.model.score(self.X_test, self.y_test)
|
|
66
|
+
|
|
67
|
+
return loss, len(self.X_test), {"accuracy": accuracy}
|
|
68
|
+
|
|
69
|
+
fds = FederatedDataset(dataset="mnist", partitioners={"train": 2})
|
|
70
|
+
|
|
71
|
+
def client_fn(cid: str):
|
|
72
|
+
dataset = fds.load_partition(int(cid), "train").with_format("numpy")
|
|
73
|
+
|
|
74
|
+
X, y = dataset["image"].reshape((len(dataset), -1)), dataset["label"]
|
|
75
|
+
|
|
76
|
+
# Split the on edge data: 80% train, 20% test
|
|
77
|
+
X_train, X_test = X[: int(0.8 * len(X))], X[int(0.8 * len(X)) :]
|
|
78
|
+
y_train, y_test = y[: int(0.8 * len(y))], y[int(0.8 * len(y)) :]
|
|
79
|
+
|
|
80
|
+
# Create LogisticRegression Model
|
|
81
|
+
model = LogisticRegression(
|
|
82
|
+
penalty="l2",
|
|
83
|
+
max_iter=1, # local epoch
|
|
84
|
+
warm_start=True, # prevent refreshing weights when fitting
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
# Setting initial parameters, akin to model.compile for keras models
|
|
88
|
+
set_initial_params(model)
|
|
89
|
+
|
|
90
|
+
return FlowerClient(model, X_train, X_test, y_train, y_test).to_client()
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
# Flower ClientApp
|
|
94
|
+
app = ClientApp(client_fn=client_fn)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""$project_name: A Flower / Scikit-Learn app."""
|
|
2
|
+
|
|
3
|
+
from flwr.server import ServerApp, ServerConfig
|
|
4
|
+
from flwr.server.strategy import FedAvg
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
strategy = FedAvg(
|
|
8
|
+
fraction_fit=1.0,
|
|
9
|
+
fraction_evaluate=1.0,
|
|
10
|
+
min_available_clients=2,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
# Create ServerApp
|
|
14
|
+
app = ServerApp(
|
|
15
|
+
config=ServerConfig(num_rounds=3),
|
|
16
|
+
strategy=strategy,
|
|
17
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "$project_name"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = ""
|
|
9
|
+
authors = [
|
|
10
|
+
{ name = "The Flower Authors", email = "hello@flower.ai" },
|
|
11
|
+
]
|
|
12
|
+
license = {text = "Apache License (2.0)"}
|
|
13
|
+
dependencies = [
|
|
14
|
+
"flwr[simulation]>=1.8.0,<2.0",
|
|
15
|
+
"flwr-datasets[vision]>=0.0.2,<1.0.0",
|
|
16
|
+
"scikit-learn>=1.1.1",
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
[tool.hatch.build.targets.wheel]
|
|
20
|
+
packages = ["."]
|
|
21
|
+
|
|
22
|
+
[flower.components]
|
|
23
|
+
serverapp = "$project_name.server:app"
|
|
24
|
+
clientapp = "$project_name.client:app"
|
|
@@ -28,12 +28,11 @@ def run_supernode() -> None:
|
|
|
28
28
|
|
|
29
29
|
event(EventType.RUN_SUPERNODE_ENTER)
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
_ = _parse_args_run_supernode().parse_args()
|
|
32
32
|
|
|
33
33
|
log(
|
|
34
34
|
DEBUG,
|
|
35
|
-
"Flower
|
|
36
|
-
getattr(args, "client-app"),
|
|
35
|
+
"Flower SuperNode starting...",
|
|
37
36
|
)
|
|
38
37
|
|
|
39
38
|
# Graceful shutdown
|
|
@@ -48,7 +47,16 @@ def _parse_args_run_supernode() -> argparse.ArgumentParser:
|
|
|
48
47
|
description="Start a Flower SuperNode",
|
|
49
48
|
)
|
|
50
49
|
|
|
51
|
-
|
|
50
|
+
parser.add_argument(
|
|
51
|
+
"client-app",
|
|
52
|
+
nargs="?",
|
|
53
|
+
default="",
|
|
54
|
+
help="For example: `client:app` or `project.package.module:wrapper.app`. "
|
|
55
|
+
"This is optional and serves as the default ClientApp to be loaded when "
|
|
56
|
+
"the ServerApp does not specify `fab_id` and `fab_version`. "
|
|
57
|
+
"If not provided, defaults to an empty string.",
|
|
58
|
+
)
|
|
59
|
+
_parse_args_common(parser)
|
|
52
60
|
|
|
53
61
|
return parser
|
|
54
62
|
|
|
@@ -59,6 +67,10 @@ def parse_args_run_client_app(parser: argparse.ArgumentParser) -> None:
|
|
|
59
67
|
"client-app",
|
|
60
68
|
help="For example: `client:app` or `project.package.module:wrapper.app`",
|
|
61
69
|
)
|
|
70
|
+
_parse_args_common(parser)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
62
74
|
parser.add_argument(
|
|
63
75
|
"--insecure",
|
|
64
76
|
action="store_true",
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/server/compat/app.py
RENAMED
|
@@ -29,7 +29,7 @@ from flwr.server.server import Server, init_defaults, run_fl
|
|
|
29
29
|
from flwr.server.server_config import ServerConfig
|
|
30
30
|
from flwr.server.strategy import Strategy
|
|
31
31
|
|
|
32
|
-
from ..driver import Driver
|
|
32
|
+
from ..driver import Driver, GrpcDriver
|
|
33
33
|
from .app_utils import start_update_client_manager_thread
|
|
34
34
|
|
|
35
35
|
DEFAULT_SERVER_ADDRESS_DRIVER = "[::]:9091"
|
|
@@ -114,7 +114,7 @@ def start_driver( # pylint: disable=too-many-arguments, too-many-locals
|
|
|
114
114
|
# Create the Driver
|
|
115
115
|
if isinstance(root_certificates, str):
|
|
116
116
|
root_certificates = Path(root_certificates).read_bytes()
|
|
117
|
-
driver =
|
|
117
|
+
driver = GrpcDriver(
|
|
118
118
|
driver_service_address=address, root_certificates=root_certificates
|
|
119
119
|
)
|
|
120
120
|
|
|
@@ -25,7 +25,7 @@ from flwr.common import serde
|
|
|
25
25
|
from flwr.proto import driver_pb2, node_pb2, task_pb2 # pylint: disable=E0611
|
|
26
26
|
from flwr.server.client_proxy import ClientProxy
|
|
27
27
|
|
|
28
|
-
from ..driver.
|
|
28
|
+
from ..driver.grpc_driver import GrpcDriverHelper
|
|
29
29
|
|
|
30
30
|
SLEEP_TIME = 1
|
|
31
31
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
# ==============================================================================
|
|
15
|
-
"""Flower
|
|
15
|
+
"""Flower gRPC Driver."""
|
|
16
16
|
|
|
17
17
|
import time
|
|
18
18
|
import warnings
|
|
@@ -39,6 +39,8 @@ from flwr.proto.driver_pb2_grpc import DriverStub # pylint: disable=E0611
|
|
|
39
39
|
from flwr.proto.node_pb2 import Node # pylint: disable=E0611
|
|
40
40
|
from flwr.proto.task_pb2 import TaskIns # pylint: disable=E0611
|
|
41
41
|
|
|
42
|
+
from .driver import Driver
|
|
43
|
+
|
|
42
44
|
DEFAULT_SERVER_ADDRESS_DRIVER = "[::]:9091"
|
|
43
45
|
|
|
44
46
|
ERROR_MESSAGE_DRIVER_NOT_CONNECTED = """
|
|
@@ -133,7 +135,7 @@ class GrpcDriverHelper:
|
|
|
133
135
|
return res
|
|
134
136
|
|
|
135
137
|
|
|
136
|
-
class Driver:
|
|
138
|
+
class GrpcDriver(Driver):
|
|
137
139
|
"""`Driver` class provides an interface to the Driver API.
|
|
138
140
|
|
|
139
141
|
Parameters
|
|
@@ -198,30 +200,6 @@ class Driver:
|
|
|
198
200
|
|
|
199
201
|
This method constructs a new `Message` with given content and metadata.
|
|
200
202
|
The `run_id` and `src_node_id` will be set automatically.
|
|
201
|
-
|
|
202
|
-
Parameters
|
|
203
|
-
----------
|
|
204
|
-
content : RecordSet
|
|
205
|
-
The content for the new message. This holds records that are to be sent
|
|
206
|
-
to the destination node.
|
|
207
|
-
message_type : str
|
|
208
|
-
The type of the message, defining the action to be executed on
|
|
209
|
-
the receiving end.
|
|
210
|
-
dst_node_id : int
|
|
211
|
-
The ID of the destination node to which the message is being sent.
|
|
212
|
-
group_id : str
|
|
213
|
-
The ID of the group to which this message is associated. In some settings,
|
|
214
|
-
this is used as the FL round.
|
|
215
|
-
ttl : Optional[float] (default: None)
|
|
216
|
-
Time-to-live for the round trip of this message, i.e., the time from sending
|
|
217
|
-
this message to receiving a reply. It specifies in seconds the duration for
|
|
218
|
-
which the message and its potential reply are considered valid. If unset,
|
|
219
|
-
the default TTL (i.e., `common.DEFAULT_TTL`) will be used.
|
|
220
|
-
|
|
221
|
-
Returns
|
|
222
|
-
-------
|
|
223
|
-
message : Message
|
|
224
|
-
A new `Message` instance with the specified content and metadata.
|
|
225
203
|
"""
|
|
226
204
|
_, run_id = self._get_grpc_driver_helper_and_run_id()
|
|
227
205
|
if ttl:
|
|
@@ -257,17 +235,6 @@ class Driver:
|
|
|
257
235
|
|
|
258
236
|
This method takes an iterable of messages and sends each message
|
|
259
237
|
to the node specified in `dst_node_id`.
|
|
260
|
-
|
|
261
|
-
Parameters
|
|
262
|
-
----------
|
|
263
|
-
messages : Iterable[Message]
|
|
264
|
-
An iterable of messages to be sent.
|
|
265
|
-
|
|
266
|
-
Returns
|
|
267
|
-
-------
|
|
268
|
-
message_ids : Iterable[str]
|
|
269
|
-
An iterable of IDs for the messages that were sent, which can be used
|
|
270
|
-
to pull replies.
|
|
271
238
|
"""
|
|
272
239
|
grpc_driver_helper, _ = self._get_grpc_driver_helper_and_run_id()
|
|
273
240
|
# Construct TaskIns
|
|
@@ -288,18 +255,8 @@ class Driver:
|
|
|
288
255
|
def pull_messages(self, message_ids: Iterable[str]) -> Iterable[Message]:
|
|
289
256
|
"""Pull messages based on message IDs.
|
|
290
257
|
|
|
291
|
-
This method is used to collect messages from the SuperLink
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
Parameters
|
|
295
|
-
----------
|
|
296
|
-
message_ids : Iterable[str]
|
|
297
|
-
An iterable of message IDs for which reply messages are to be retrieved.
|
|
298
|
-
|
|
299
|
-
Returns
|
|
300
|
-
-------
|
|
301
|
-
messages : Iterable[Message]
|
|
302
|
-
An iterable of messages received.
|
|
258
|
+
This method is used to collect messages from the SuperLink that correspond to a
|
|
259
|
+
set of given message IDs.
|
|
303
260
|
"""
|
|
304
261
|
grpc_driver, _ = self._get_grpc_driver_helper_and_run_id()
|
|
305
262
|
# Pull TaskRes
|
|
@@ -319,29 +276,8 @@ class Driver:
|
|
|
319
276
|
"""Push messages to specified node IDs and pull the reply messages.
|
|
320
277
|
|
|
321
278
|
This method sends a list of messages to their destination node IDs and then
|
|
322
|
-
waits for the replies. It continues to pull replies until either all
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
Parameters
|
|
326
|
-
----------
|
|
327
|
-
messages : Iterable[Message]
|
|
328
|
-
An iterable of messages to be sent.
|
|
329
|
-
timeout : Optional[float] (default: None)
|
|
330
|
-
The timeout duration in seconds. If specified, the method will wait for
|
|
331
|
-
replies for this duration. If `None`, there is no time limit and the method
|
|
332
|
-
will wait until replies for all messages are received.
|
|
333
|
-
|
|
334
|
-
Returns
|
|
335
|
-
-------
|
|
336
|
-
replies : Iterable[Message]
|
|
337
|
-
An iterable of reply messages received from the SuperLink.
|
|
338
|
-
|
|
339
|
-
Notes
|
|
340
|
-
-----
|
|
341
|
-
This method uses `push_messages` to send the messages and `pull_messages`
|
|
342
|
-
to collect the replies. If `timeout` is set, the method may not return
|
|
343
|
-
replies for all sent messages. A message remains valid until its TTL,
|
|
344
|
-
which is not affected by `timeout`.
|
|
279
|
+
waits for the replies. It continues to pull replies until either all replies are
|
|
280
|
+
received or the specified timeout duration is exceeded.
|
|
345
281
|
"""
|
|
346
282
|
# Push messages
|
|
347
283
|
msg_ids = set(self.push_messages(messages))
|
|
@@ -25,7 +25,7 @@ from flwr.common import Context, EventType, RecordSet, event
|
|
|
25
25
|
from flwr.common.logger import log, update_console_handler
|
|
26
26
|
from flwr.common.object_ref import load_app
|
|
27
27
|
|
|
28
|
-
from .driver
|
|
28
|
+
from .driver import Driver, GrpcDriver
|
|
29
29
|
from .server_app import LoadServerAppError, ServerApp
|
|
30
30
|
|
|
31
31
|
|
|
@@ -128,13 +128,13 @@ def run_server_app() -> None:
|
|
|
128
128
|
server_app_dir = args.dir
|
|
129
129
|
server_app_attr = getattr(args, "server-app")
|
|
130
130
|
|
|
131
|
-
# Initialize
|
|
132
|
-
driver =
|
|
131
|
+
# Initialize GrpcDriver
|
|
132
|
+
driver = GrpcDriver(
|
|
133
133
|
driver_service_address=args.server,
|
|
134
134
|
root_certificates=root_certificates,
|
|
135
135
|
)
|
|
136
136
|
|
|
137
|
-
# Run the
|
|
137
|
+
# Run the ServerApp with the Driver
|
|
138
138
|
run(driver=driver, server_app_dir=server_app_dir, server_app_attr=server_app_attr)
|
|
139
139
|
|
|
140
140
|
# Clean up
|
|
@@ -29,7 +29,7 @@ import grpc
|
|
|
29
29
|
from flwr.client import ClientApp
|
|
30
30
|
from flwr.common import EventType, event, log
|
|
31
31
|
from flwr.common.typing import ConfigsRecordValues
|
|
32
|
-
from flwr.server.driver
|
|
32
|
+
from flwr.server.driver import Driver, GrpcDriver
|
|
33
33
|
from flwr.server.run_serverapp import run
|
|
34
34
|
from flwr.server.server_app import ServerApp
|
|
35
35
|
from flwr.server.superlink.driver.driver_grpc import run_driver_api_grpc
|
|
@@ -204,7 +204,7 @@ def _main_loop(
|
|
|
204
204
|
serverapp_th = None
|
|
205
205
|
try:
|
|
206
206
|
# Initialize Driver
|
|
207
|
-
driver =
|
|
207
|
+
driver = GrpcDriver(
|
|
208
208
|
driver_service_address=driver_api_address,
|
|
209
209
|
root_certificates=None,
|
|
210
210
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/config_utils.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/example.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/new/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/run/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/cli/run/run.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/client.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/client_app.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/heartbeat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/mod/utils.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/node_state.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/numpy_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/client/typing.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/address.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/constant.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/context.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/date.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/grpc.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/logger.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/message.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/object_ref.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/parameter.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240420 → flwr_nightly-1.9.0.dev20240423}/src/py/flwr/common/pyproject.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|