flwr-nightly 1.9.0.dev20240523__tar.gz → 1.9.0.dev20240527__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.dev20240523 → flwr_nightly-1.9.0.dev20240527}/PKG-INFO +2 -3
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/pyproject.toml +3 -4
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/supernode/app.py +41 -23
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/recordset_compat.py +8 -1
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -15
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/app.py +66 -112
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/LICENSE +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/README.md +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/client.hf.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/server.hf.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/task.hf.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/pyproject.hf.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/simulation/run_simulation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.9.0.
|
|
3
|
+
Version: 1.9.0.dev20240527
|
|
4
4
|
Summary: Flower: A Friendly Federated Learning Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -39,9 +39,8 @@ Requires-Dist: numpy (>=1.21.0,<2.0.0)
|
|
|
39
39
|
Requires-Dist: pathspec (>=0.12.1,<0.13.0)
|
|
40
40
|
Requires-Dist: protobuf (>=4.25.2,<5.0.0)
|
|
41
41
|
Requires-Dist: pycryptodome (>=3.18.0,<4.0.0)
|
|
42
|
-
Requires-Dist: ray (==2.
|
|
42
|
+
Requires-Dist: ray (==2.10.0) ; (python_version >= "3.8" and python_version < "3.12") and (extra == "simulation")
|
|
43
43
|
Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
|
|
44
|
-
Requires-Dist: setuptools (!=70.0.0)
|
|
45
44
|
Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
|
|
46
45
|
Requires-Dist: tomli (>=2.0.1,<3.0.0)
|
|
47
46
|
Requires-Dist: typer[all] (>=0.9.0,<0.10.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.dev20240527"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -73,16 +73,15 @@ iterators = "^0.0.2"
|
|
|
73
73
|
typer = { version = "^0.9.0", extras=["all"] }
|
|
74
74
|
tomli = "^2.0.1"
|
|
75
75
|
pathspec = "^0.12.1"
|
|
76
|
-
setuptools = "!=70.0.0"
|
|
77
76
|
# Optional dependencies (Simulation Engine)
|
|
78
|
-
ray = { version = "==2.
|
|
77
|
+
ray = { version = "==2.10.0", optional = true, python = ">=3.8,<3.12" }
|
|
79
78
|
# Optional dependencies (REST transport layer)
|
|
80
79
|
requests = { version = "^2.31.0", optional = true }
|
|
81
80
|
starlette = { version = "^0.31.0", optional = true }
|
|
82
81
|
uvicorn = { version = "^0.23.0", extras = ["standard"], optional = true }
|
|
83
82
|
|
|
84
83
|
[tool.poetry.extras]
|
|
85
|
-
simulation = ["ray"
|
|
84
|
+
simulation = ["ray"]
|
|
86
85
|
rest = ["requests", "starlette", "uvicorn"]
|
|
87
86
|
|
|
88
87
|
[tool.poetry.group.dev.dependencies]
|
|
@@ -20,6 +20,7 @@ from logging import DEBUG, INFO, WARN
|
|
|
20
20
|
from pathlib import Path
|
|
21
21
|
from typing import Callable, Optional, Tuple
|
|
22
22
|
|
|
23
|
+
from cryptography.exceptions import UnsupportedAlgorithm
|
|
23
24
|
from cryptography.hazmat.primitives.asymmetric import ec
|
|
24
25
|
from cryptography.hazmat.primitives.serialization import (
|
|
25
26
|
load_ssh_private_key,
|
|
@@ -31,9 +32,6 @@ from flwr.common import EventType, event
|
|
|
31
32
|
from flwr.common.exit_handlers import register_exit_handlers
|
|
32
33
|
from flwr.common.logger import log
|
|
33
34
|
from flwr.common.object_ref import load_app, validate
|
|
34
|
-
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
|
35
|
-
ssh_types_to_elliptic_curve,
|
|
36
|
-
)
|
|
37
35
|
|
|
38
36
|
from ..app import _start_client_internal
|
|
39
37
|
|
|
@@ -242,40 +240,60 @@ def _parse_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
242
240
|
" Default: current working directory.",
|
|
243
241
|
)
|
|
244
242
|
parser.add_argument(
|
|
245
|
-
"--
|
|
246
|
-
|
|
247
|
-
|
|
243
|
+
"--auth-supernode-private-key",
|
|
244
|
+
type=str,
|
|
245
|
+
help="The SuperNode's private key (as a path str) to enable authentication.",
|
|
246
|
+
)
|
|
247
|
+
parser.add_argument(
|
|
248
|
+
"--auth-supernode-public-key",
|
|
248
249
|
type=str,
|
|
249
|
-
help="
|
|
250
|
-
"key file, and (2) the client's public key file.",
|
|
250
|
+
help="The SuperNode's public key (as a path str) to enable authentication.",
|
|
251
251
|
)
|
|
252
252
|
|
|
253
253
|
|
|
254
254
|
def _try_setup_client_authentication(
|
|
255
255
|
args: argparse.Namespace,
|
|
256
256
|
) -> Optional[Tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]]:
|
|
257
|
-
if not args.
|
|
257
|
+
if not args.auth_supernode_private_key and not args.auth_supernode_public_key:
|
|
258
258
|
return None
|
|
259
259
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
260
|
+
if not args.auth_supernode_private_key or not args.auth_supernode_public_key:
|
|
261
|
+
sys.exit(
|
|
262
|
+
"Authentication requires file paths to both "
|
|
263
|
+
"'--auth-supernode-private-key' and '--auth-supernode-public-key'"
|
|
264
|
+
"to be provided (providing only one of them is not sufficient)."
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
try:
|
|
268
|
+
ssh_private_key = load_ssh_private_key(
|
|
269
|
+
Path(args.auth_supernode_private_key).read_bytes(),
|
|
270
|
+
None,
|
|
271
|
+
)
|
|
272
|
+
if not isinstance(ssh_private_key, ec.EllipticCurvePrivateKey):
|
|
273
|
+
raise ValueError()
|
|
274
|
+
except (ValueError, UnsupportedAlgorithm):
|
|
275
|
+
sys.exit(
|
|
276
|
+
"Error: Unable to parse the private key file in "
|
|
277
|
+
"'--auth-supernode-private-key'. Authentication requires elliptic "
|
|
278
|
+
"curve private and public key pair. Please ensure that the file "
|
|
279
|
+
"path points to a valid private key file and try again."
|
|
280
|
+
)
|
|
265
281
|
|
|
266
282
|
try:
|
|
267
|
-
|
|
268
|
-
|
|
283
|
+
ssh_public_key = load_ssh_public_key(
|
|
284
|
+
Path(args.auth_supernode_public_key).read_bytes()
|
|
269
285
|
)
|
|
270
|
-
|
|
286
|
+
if not isinstance(ssh_public_key, ec.EllipticCurvePublicKey):
|
|
287
|
+
raise ValueError()
|
|
288
|
+
except (ValueError, UnsupportedAlgorithm):
|
|
271
289
|
sys.exit(
|
|
272
|
-
"
|
|
273
|
-
"key
|
|
274
|
-
"private key pair. Please
|
|
275
|
-
"
|
|
290
|
+
"Error: Unable to parse the public key file in "
|
|
291
|
+
"'--auth-supernode-public-key'. Authentication requires elliptic "
|
|
292
|
+
"curve private and public key pair. Please ensure that the file "
|
|
293
|
+
"path points to a valid public key file and try again."
|
|
276
294
|
)
|
|
277
295
|
|
|
278
296
|
return (
|
|
279
|
-
|
|
280
|
-
|
|
297
|
+
ssh_private_key,
|
|
298
|
+
ssh_public_key,
|
|
281
299
|
)
|
|
@@ -35,6 +35,8 @@ from .typing import (
|
|
|
35
35
|
Status,
|
|
36
36
|
)
|
|
37
37
|
|
|
38
|
+
EMPTY_TENSOR_KEY = "_empty"
|
|
39
|
+
|
|
38
40
|
|
|
39
41
|
def parametersrecord_to_parameters(
|
|
40
42
|
record: ParametersRecord, keep_input: bool
|
|
@@ -59,7 +61,8 @@ def parametersrecord_to_parameters(
|
|
|
59
61
|
parameters = Parameters(tensors=[], tensor_type="")
|
|
60
62
|
|
|
61
63
|
for key in list(record.keys()):
|
|
62
|
-
|
|
64
|
+
if key != EMPTY_TENSOR_KEY:
|
|
65
|
+
parameters.tensors.append(record[key].data)
|
|
63
66
|
|
|
64
67
|
if not parameters.tensor_type:
|
|
65
68
|
# Setting from first array in record. Recall the warning in the docstrings
|
|
@@ -103,6 +106,10 @@ def parameters_to_parametersrecord(
|
|
|
103
106
|
data=tensor, dtype="", stype=tensor_type, shape=[]
|
|
104
107
|
)
|
|
105
108
|
|
|
109
|
+
if num_arrays == 0:
|
|
110
|
+
ordered_dict[EMPTY_TENSOR_KEY] = Array(
|
|
111
|
+
data=b"", dtype="", stype=tensor_type, shape=[]
|
|
112
|
+
)
|
|
106
113
|
return ParametersRecord(ordered_dict, keep_input=keep_input)
|
|
107
114
|
|
|
108
115
|
|
|
@@ -117,18 +117,3 @@ def verify_hmac(key: bytes, message: bytes, hmac_value: bytes) -> bool:
|
|
|
117
117
|
return True
|
|
118
118
|
except InvalidSignature:
|
|
119
119
|
return False
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
def ssh_types_to_elliptic_curve(
|
|
123
|
-
private_key: serialization.SSHPrivateKeyTypes,
|
|
124
|
-
public_key: serialization.SSHPublicKeyTypes,
|
|
125
|
-
) -> Tuple[ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]:
|
|
126
|
-
"""Cast SSH key types to elliptic curve."""
|
|
127
|
-
if isinstance(private_key, ec.EllipticCurvePrivateKey) and isinstance(
|
|
128
|
-
public_key, ec.EllipticCurvePublicKey
|
|
129
|
-
):
|
|
130
|
-
return (private_key, public_key)
|
|
131
|
-
|
|
132
|
-
raise TypeError(
|
|
133
|
-
"The provided key is not an EllipticCurvePrivateKey or EllipticCurvePublicKey"
|
|
134
|
-
)
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
"""Flower server app."""
|
|
16
16
|
|
|
17
17
|
import argparse
|
|
18
|
-
import asyncio
|
|
19
18
|
import csv
|
|
20
19
|
import importlib.util
|
|
21
20
|
import sys
|
|
@@ -26,6 +25,7 @@ from pathlib import Path
|
|
|
26
25
|
from typing import List, Optional, Sequence, Set, Tuple
|
|
27
26
|
|
|
28
27
|
import grpc
|
|
28
|
+
from cryptography.exceptions import UnsupportedAlgorithm
|
|
29
29
|
from cryptography.hazmat.primitives.asymmetric import ec
|
|
30
30
|
from cryptography.hazmat.primitives.serialization import (
|
|
31
31
|
load_ssh_private_key,
|
|
@@ -38,14 +38,12 @@ from flwr.common.constant import (
|
|
|
38
38
|
MISSING_EXTRA_REST,
|
|
39
39
|
TRANSPORT_TYPE_GRPC_RERE,
|
|
40
40
|
TRANSPORT_TYPE_REST,
|
|
41
|
-
TRANSPORT_TYPE_VCE,
|
|
42
41
|
)
|
|
43
42
|
from flwr.common.exit_handlers import register_exit_handlers
|
|
44
43
|
from flwr.common.logger import log, warn_deprecated_feature
|
|
45
44
|
from flwr.common.secure_aggregation.crypto.symmetric_encryption import (
|
|
46
45
|
private_key_to_bytes,
|
|
47
46
|
public_key_to_bytes,
|
|
48
|
-
ssh_types_to_elliptic_curve,
|
|
49
47
|
)
|
|
50
48
|
from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
|
|
51
49
|
add_FleetServicer_to_server,
|
|
@@ -63,7 +61,6 @@ from .superlink.fleet.grpc_bidi.grpc_server import (
|
|
|
63
61
|
)
|
|
64
62
|
from .superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
|
|
65
63
|
from .superlink.fleet.grpc_rere.server_interceptor import AuthenticateServerInterceptor
|
|
66
|
-
from .superlink.fleet.vce import start_vce
|
|
67
64
|
from .superlink.state import StateFactory
|
|
68
65
|
|
|
69
66
|
ADDRESS_DRIVER_API = "0.0.0.0:9091"
|
|
@@ -401,17 +398,6 @@ def run_superlink() -> None:
|
|
|
401
398
|
interceptors=interceptors,
|
|
402
399
|
)
|
|
403
400
|
grpc_servers.append(fleet_server)
|
|
404
|
-
elif args.fleet_api_type == TRANSPORT_TYPE_VCE:
|
|
405
|
-
f_stop = asyncio.Event() # Does nothing
|
|
406
|
-
_run_fleet_api_vce(
|
|
407
|
-
num_supernodes=args.num_supernodes,
|
|
408
|
-
client_app_attr=args.client_app,
|
|
409
|
-
backend_name=args.backend,
|
|
410
|
-
backend_config_json_stream=args.backend_config,
|
|
411
|
-
app_dir=args.app_dir,
|
|
412
|
-
state_factory=state_factory,
|
|
413
|
-
f_stop=f_stop,
|
|
414
|
-
)
|
|
415
401
|
else:
|
|
416
402
|
raise ValueError(f"Unknown fleet_api_type: {args.fleet_api_type}")
|
|
417
403
|
|
|
@@ -435,44 +421,69 @@ def _try_setup_client_authentication(
|
|
|
435
421
|
args: argparse.Namespace,
|
|
436
422
|
certificates: Optional[Tuple[bytes, bytes, bytes]],
|
|
437
423
|
) -> Optional[Tuple[Set[bytes], ec.EllipticCurvePrivateKey, ec.EllipticCurvePublicKey]]:
|
|
438
|
-
if
|
|
424
|
+
if (
|
|
425
|
+
not args.auth_list_public_keys
|
|
426
|
+
and not args.auth_superlink_private_key
|
|
427
|
+
and not args.auth_superlink_public_key
|
|
428
|
+
):
|
|
439
429
|
return None
|
|
440
430
|
|
|
431
|
+
if (
|
|
432
|
+
not args.auth_list_public_keys
|
|
433
|
+
or not args.auth_superlink_private_key
|
|
434
|
+
or not args.auth_superlink_public_key
|
|
435
|
+
):
|
|
436
|
+
sys.exit(
|
|
437
|
+
"Authentication requires providing file paths for "
|
|
438
|
+
"'--auth-list-public-keys', '--auth-superlink-private-key' and "
|
|
439
|
+
"'--auth-superlink-public-key'. Provide all three to enable authentication."
|
|
440
|
+
)
|
|
441
|
+
|
|
441
442
|
if certificates is None:
|
|
442
443
|
sys.exit(
|
|
443
|
-
"
|
|
444
|
-
"Please provide certificate paths using '--certificates'
|
|
445
|
-
"
|
|
444
|
+
"Authentication requires secure connections. "
|
|
445
|
+
"Please provide certificate paths using '--certificates' and "
|
|
446
|
+
"try again."
|
|
446
447
|
)
|
|
447
448
|
|
|
448
|
-
client_keys_file_path = Path(args.
|
|
449
|
+
client_keys_file_path = Path(args.auth_list_public_keys)
|
|
449
450
|
if not client_keys_file_path.exists():
|
|
450
451
|
sys.exit(
|
|
451
|
-
"The provided path to the
|
|
452
|
+
"The provided path to the known public keys CSV file does not exist: "
|
|
452
453
|
f"{client_keys_file_path}. "
|
|
453
|
-
"Please provide the CSV file path containing known
|
|
454
|
-
"to '--
|
|
454
|
+
"Please provide the CSV file path containing known public keys "
|
|
455
|
+
"to '--auth-list-public-keys'."
|
|
455
456
|
)
|
|
456
457
|
|
|
457
458
|
client_public_keys: Set[bytes] = set()
|
|
458
|
-
ssh_private_key = load_ssh_private_key(
|
|
459
|
-
Path(args.require_client_authentication[1]).read_bytes(),
|
|
460
|
-
None,
|
|
461
|
-
)
|
|
462
|
-
ssh_public_key = load_ssh_public_key(
|
|
463
|
-
Path(args.require_client_authentication[2]).read_bytes()
|
|
464
|
-
)
|
|
465
459
|
|
|
466
460
|
try:
|
|
467
|
-
|
|
468
|
-
|
|
461
|
+
ssh_private_key = load_ssh_private_key(
|
|
462
|
+
Path(args.auth_superlink_private_key).read_bytes(),
|
|
463
|
+
None,
|
|
469
464
|
)
|
|
470
|
-
|
|
465
|
+
if not isinstance(ssh_private_key, ec.EllipticCurvePrivateKey):
|
|
466
|
+
raise ValueError()
|
|
467
|
+
except (ValueError, UnsupportedAlgorithm):
|
|
471
468
|
sys.exit(
|
|
472
|
-
"
|
|
473
|
-
"key
|
|
474
|
-
"private key pair. Please
|
|
475
|
-
"
|
|
469
|
+
"Error: Unable to parse the private key file in "
|
|
470
|
+
"'--auth-superlink-private-key'. Authentication requires elliptic "
|
|
471
|
+
"curve private and public key pair. Please ensure that the file "
|
|
472
|
+
"path points to a valid private key file and try again."
|
|
473
|
+
)
|
|
474
|
+
|
|
475
|
+
try:
|
|
476
|
+
ssh_public_key = load_ssh_public_key(
|
|
477
|
+
Path(args.auth_superlink_public_key).read_bytes()
|
|
478
|
+
)
|
|
479
|
+
if not isinstance(ssh_public_key, ec.EllipticCurvePublicKey):
|
|
480
|
+
raise ValueError()
|
|
481
|
+
except (ValueError, UnsupportedAlgorithm):
|
|
482
|
+
sys.exit(
|
|
483
|
+
"Error: Unable to parse the public key file in "
|
|
484
|
+
"'--auth-superlink-public-key'. Authentication requires elliptic "
|
|
485
|
+
"curve private and public key pair. Please ensure that the file "
|
|
486
|
+
"path points to a valid public key file and try again."
|
|
476
487
|
)
|
|
477
488
|
|
|
478
489
|
with open(client_keys_file_path, newline="", encoding="utf-8") as csvfile:
|
|
@@ -484,14 +495,14 @@ def _try_setup_client_authentication(
|
|
|
484
495
|
client_public_keys.add(public_key_to_bytes(public_key))
|
|
485
496
|
else:
|
|
486
497
|
sys.exit(
|
|
487
|
-
"Error: Unable to parse the public keys in the
|
|
488
|
-
"file. Please ensure that the
|
|
489
|
-
"SSH public keys and try again."
|
|
498
|
+
"Error: Unable to parse the public keys in the CSV "
|
|
499
|
+
"file. Please ensure that the CSV file path points to a valid "
|
|
500
|
+
"known SSH public keys files and try again."
|
|
490
501
|
)
|
|
491
502
|
return (
|
|
492
503
|
client_public_keys,
|
|
493
|
-
|
|
494
|
-
|
|
504
|
+
ssh_private_key,
|
|
505
|
+
ssh_public_key,
|
|
495
506
|
)
|
|
496
507
|
|
|
497
508
|
|
|
@@ -544,29 +555,6 @@ def _run_fleet_api_grpc_rere(
|
|
|
544
555
|
return fleet_grpc_server
|
|
545
556
|
|
|
546
557
|
|
|
547
|
-
# pylint: disable=too-many-arguments
|
|
548
|
-
def _run_fleet_api_vce(
|
|
549
|
-
num_supernodes: int,
|
|
550
|
-
client_app_attr: str,
|
|
551
|
-
backend_name: str,
|
|
552
|
-
backend_config_json_stream: str,
|
|
553
|
-
app_dir: str,
|
|
554
|
-
state_factory: StateFactory,
|
|
555
|
-
f_stop: asyncio.Event,
|
|
556
|
-
) -> None:
|
|
557
|
-
log(INFO, "Flower VCE: Starting Fleet API (VirtualClientEngine)")
|
|
558
|
-
|
|
559
|
-
start_vce(
|
|
560
|
-
num_supernodes=num_supernodes,
|
|
561
|
-
client_app_attr=client_app_attr,
|
|
562
|
-
backend_name=backend_name,
|
|
563
|
-
backend_config_json_stream=backend_config_json_stream,
|
|
564
|
-
state_factory=state_factory,
|
|
565
|
-
app_dir=app_dir,
|
|
566
|
-
f_stop=f_stop,
|
|
567
|
-
)
|
|
568
|
-
|
|
569
|
-
|
|
570
558
|
# pylint: disable=import-outside-toplevel,too-many-arguments
|
|
571
559
|
def _run_fleet_api_rest(
|
|
572
560
|
host: str,
|
|
@@ -714,13 +702,20 @@ def _add_args_common(parser: argparse.ArgumentParser) -> None:
|
|
|
714
702
|
default=DATABASE,
|
|
715
703
|
)
|
|
716
704
|
parser.add_argument(
|
|
717
|
-
"--
|
|
718
|
-
nargs=3,
|
|
719
|
-
metavar=("CLIENT_KEYS", "SERVER_PRIVATE_KEY", "SERVER_PUBLIC_KEY"),
|
|
705
|
+
"--auth-list-public-keys",
|
|
720
706
|
type=str,
|
|
721
|
-
help="
|
|
722
|
-
"
|
|
723
|
-
|
|
707
|
+
help="A CSV file (as a path str) containing a list of known public "
|
|
708
|
+
"keys to enable authentication.",
|
|
709
|
+
)
|
|
710
|
+
parser.add_argument(
|
|
711
|
+
"--auth-superlink-private-key",
|
|
712
|
+
type=str,
|
|
713
|
+
help="The SuperLink's private key (as a path str) to enable authentication.",
|
|
714
|
+
)
|
|
715
|
+
parser.add_argument(
|
|
716
|
+
"--auth-superlink-public-key",
|
|
717
|
+
type=str,
|
|
718
|
+
help="The SuperLink's public key (as a path str) to enable authentication.",
|
|
724
719
|
)
|
|
725
720
|
|
|
726
721
|
|
|
@@ -751,14 +746,6 @@ def _add_args_fleet_api(parser: argparse.ArgumentParser) -> None:
|
|
|
751
746
|
help="Start a Fleet API server (REST, experimental)",
|
|
752
747
|
)
|
|
753
748
|
|
|
754
|
-
ex_group.add_argument(
|
|
755
|
-
"--vce",
|
|
756
|
-
action="store_const",
|
|
757
|
-
dest="fleet_api_type",
|
|
758
|
-
const=TRANSPORT_TYPE_VCE,
|
|
759
|
-
help="Start a Fleet API server (VirtualClientEngine)",
|
|
760
|
-
)
|
|
761
|
-
|
|
762
749
|
# Fleet API gRPC-rere options
|
|
763
750
|
grpc_rere_group = parser.add_argument_group(
|
|
764
751
|
"Fleet API (gRPC-rere) server options", ""
|
|
@@ -794,36 +781,3 @@ def _add_args_fleet_api(parser: argparse.ArgumentParser) -> None:
|
|
|
794
781
|
type=int,
|
|
795
782
|
default=1,
|
|
796
783
|
)
|
|
797
|
-
|
|
798
|
-
# Fleet API VCE options
|
|
799
|
-
vce_group = parser.add_argument_group("Fleet API (VCE) server options", "")
|
|
800
|
-
vce_group.add_argument(
|
|
801
|
-
"--client-app",
|
|
802
|
-
help="For example: `client:app` or `project.package.module:wrapper.app`.",
|
|
803
|
-
)
|
|
804
|
-
vce_group.add_argument(
|
|
805
|
-
"--num-supernodes",
|
|
806
|
-
type=int,
|
|
807
|
-
help="Number of simulated SuperNodes.",
|
|
808
|
-
)
|
|
809
|
-
vce_group.add_argument(
|
|
810
|
-
"--backend",
|
|
811
|
-
default="ray",
|
|
812
|
-
type=str,
|
|
813
|
-
help="Simulation backend that executes the ClientApp.",
|
|
814
|
-
)
|
|
815
|
-
vce_group.add_argument(
|
|
816
|
-
"--backend-config",
|
|
817
|
-
type=str,
|
|
818
|
-
default='{"client_resources": {"num_cpus":1, "num_gpus":0.0}, "tensorflow": 0}',
|
|
819
|
-
help='A JSON formatted stream, e.g \'{"<keyA>":<value>, "<keyB>":<value>}\' to '
|
|
820
|
-
"configure a backend. Values supported in <value> are those included by "
|
|
821
|
-
"`flwr.common.typing.ConfigsRecordValues`. ",
|
|
822
|
-
)
|
|
823
|
-
parser.add_argument(
|
|
824
|
-
"--app-dir",
|
|
825
|
-
default="",
|
|
826
|
-
help="Add specified directory to the PYTHONPATH and load"
|
|
827
|
-
"ClientApp from there."
|
|
828
|
-
" Default: current working directory.",
|
|
829
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/config_utils.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/example.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/new/new.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/run/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/cli/run/run.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/client.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/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
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/heartbeat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240523 → flwr_nightly-1.9.0.dev20240527}/src/py/flwr/client/mod/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|