flwr-nightly 1.9.0.dev20240429__tar.gz → 1.9.0.dev20240430__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.dev20240429 → flwr_nightly-1.9.0.dev20240430}/PKG-INFO +1 -1
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/pyproject.toml +1 -1
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +9 -1
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/logger.py +26 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/message.py +72 -82
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/record/recordset.py +5 -4
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +5 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/simulation/app.py +16 -1
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/simulation/run_simulation.py +3 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/LICENSE +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/README.md +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/new.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/constant.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/state/in_memory_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/state/sqlite_state.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/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.dev20240430"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -32,6 +32,7 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
|
32
32
|
CreateNodeRequest,
|
|
33
33
|
DeleteNodeRequest,
|
|
34
34
|
GetRunRequest,
|
|
35
|
+
PingRequest,
|
|
35
36
|
PullTaskInsRequest,
|
|
36
37
|
PushTaskResRequest,
|
|
37
38
|
)
|
|
@@ -45,6 +46,7 @@ Request = Union[
|
|
|
45
46
|
PullTaskInsRequest,
|
|
46
47
|
PushTaskResRequest,
|
|
47
48
|
GetRunRequest,
|
|
49
|
+
PingRequest,
|
|
48
50
|
]
|
|
49
51
|
|
|
50
52
|
|
|
@@ -115,7 +117,13 @@ class AuthenticateClientInterceptor(grpc.UnaryUnaryClientInterceptor): # type:
|
|
|
115
117
|
postprocess = True
|
|
116
118
|
elif isinstance(
|
|
117
119
|
request,
|
|
118
|
-
(
|
|
120
|
+
(
|
|
121
|
+
DeleteNodeRequest,
|
|
122
|
+
PullTaskInsRequest,
|
|
123
|
+
PushTaskResRequest,
|
|
124
|
+
GetRunRequest,
|
|
125
|
+
PingRequest,
|
|
126
|
+
),
|
|
119
127
|
):
|
|
120
128
|
if self.shared_secret is None:
|
|
121
129
|
raise RuntimeError("Failure to compute hmac")
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/logger.py
RENAMED
|
@@ -188,3 +188,29 @@ def warn_deprecated_feature(name: str) -> None:
|
|
|
188
188
|
""",
|
|
189
189
|
name,
|
|
190
190
|
)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def set_logger_propagation(
|
|
194
|
+
child_logger: logging.Logger, value: bool = True
|
|
195
|
+
) -> logging.Logger:
|
|
196
|
+
"""Set the logger propagation attribute.
|
|
197
|
+
|
|
198
|
+
Parameters
|
|
199
|
+
----------
|
|
200
|
+
child_logger : logging.Logger
|
|
201
|
+
Child logger object
|
|
202
|
+
value : bool
|
|
203
|
+
Boolean setting for propagation. If True, both parent and child logger
|
|
204
|
+
display messages. Otherwise, only the child logger displays a message.
|
|
205
|
+
This False setting prevents duplicate logs in Colab notebooks.
|
|
206
|
+
Reference: https://stackoverflow.com/a/19561320
|
|
207
|
+
|
|
208
|
+
Returns
|
|
209
|
+
-------
|
|
210
|
+
logging.Logger
|
|
211
|
+
Child logger object with updated propagation setting
|
|
212
|
+
"""
|
|
213
|
+
child_logger.propagate = value
|
|
214
|
+
if not child_logger.propagate:
|
|
215
|
+
child_logger.log(logging.DEBUG, "Logger propagate set to False")
|
|
216
|
+
return child_logger
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/common/message.py
RENAMED
|
@@ -19,6 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
import time
|
|
20
20
|
import warnings
|
|
21
21
|
from dataclasses import dataclass
|
|
22
|
+
from typing import Optional, cast
|
|
22
23
|
|
|
23
24
|
from .record import RecordSet
|
|
24
25
|
|
|
@@ -55,17 +56,6 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
55
56
|
is more relevant when conducting simulations.
|
|
56
57
|
"""
|
|
57
58
|
|
|
58
|
-
_run_id: int
|
|
59
|
-
_message_id: str
|
|
60
|
-
_src_node_id: int
|
|
61
|
-
_dst_node_id: int
|
|
62
|
-
_reply_to_message: str
|
|
63
|
-
_group_id: str
|
|
64
|
-
_ttl: float
|
|
65
|
-
_message_type: str
|
|
66
|
-
_partition_id: int | None
|
|
67
|
-
_created_at: float # Unix timestamp (in seconds) to be set upon message creation
|
|
68
|
-
|
|
69
59
|
def __init__( # pylint: disable=too-many-arguments
|
|
70
60
|
self,
|
|
71
61
|
run_id: int,
|
|
@@ -78,95 +68,98 @@ class Metadata: # pylint: disable=too-many-instance-attributes
|
|
|
78
68
|
message_type: str,
|
|
79
69
|
partition_id: int | None = None,
|
|
80
70
|
) -> None:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
71
|
+
var_dict = {
|
|
72
|
+
"_run_id": run_id,
|
|
73
|
+
"_message_id": message_id,
|
|
74
|
+
"_src_node_id": src_node_id,
|
|
75
|
+
"_dst_node_id": dst_node_id,
|
|
76
|
+
"_reply_to_message": reply_to_message,
|
|
77
|
+
"_group_id": group_id,
|
|
78
|
+
"_ttl": ttl,
|
|
79
|
+
"_message_type": message_type,
|
|
80
|
+
"_partition_id": partition_id,
|
|
81
|
+
}
|
|
82
|
+
self.__dict__.update(var_dict)
|
|
90
83
|
|
|
91
84
|
@property
|
|
92
85
|
def run_id(self) -> int:
|
|
93
86
|
"""An identifier for the current run."""
|
|
94
|
-
return self._run_id
|
|
87
|
+
return cast(int, self.__dict__["_run_id"])
|
|
95
88
|
|
|
96
89
|
@property
|
|
97
90
|
def message_id(self) -> str:
|
|
98
91
|
"""An identifier for the current message."""
|
|
99
|
-
return self._message_id
|
|
92
|
+
return cast(str, self.__dict__["_message_id"])
|
|
100
93
|
|
|
101
94
|
@property
|
|
102
95
|
def src_node_id(self) -> int:
|
|
103
96
|
"""An identifier for the node sending this message."""
|
|
104
|
-
return self._src_node_id
|
|
97
|
+
return cast(int, self.__dict__["_src_node_id"])
|
|
105
98
|
|
|
106
99
|
@property
|
|
107
100
|
def reply_to_message(self) -> str:
|
|
108
101
|
"""An identifier for the message this message replies to."""
|
|
109
|
-
return self._reply_to_message
|
|
102
|
+
return cast(str, self.__dict__["_reply_to_message"])
|
|
110
103
|
|
|
111
104
|
@property
|
|
112
105
|
def dst_node_id(self) -> int:
|
|
113
106
|
"""An identifier for the node receiving this message."""
|
|
114
|
-
return self._dst_node_id
|
|
107
|
+
return cast(int, self.__dict__["_dst_node_id"])
|
|
115
108
|
|
|
116
109
|
@dst_node_id.setter
|
|
117
110
|
def dst_node_id(self, value: int) -> None:
|
|
118
111
|
"""Set dst_node_id."""
|
|
119
|
-
self._dst_node_id = value
|
|
112
|
+
self.__dict__["_dst_node_id"] = value
|
|
120
113
|
|
|
121
114
|
@property
|
|
122
115
|
def group_id(self) -> str:
|
|
123
116
|
"""An identifier for grouping messages."""
|
|
124
|
-
return self._group_id
|
|
117
|
+
return cast(str, self.__dict__["_group_id"])
|
|
125
118
|
|
|
126
119
|
@group_id.setter
|
|
127
120
|
def group_id(self, value: str) -> None:
|
|
128
121
|
"""Set group_id."""
|
|
129
|
-
self._group_id = value
|
|
122
|
+
self.__dict__["_group_id"] = value
|
|
130
123
|
|
|
131
124
|
@property
|
|
132
125
|
def created_at(self) -> float:
|
|
133
126
|
"""Unix timestamp when the message was created."""
|
|
134
|
-
return self._created_at
|
|
127
|
+
return cast(float, self.__dict__["_created_at"])
|
|
135
128
|
|
|
136
129
|
@created_at.setter
|
|
137
130
|
def created_at(self, value: float) -> None:
|
|
138
|
-
"""Set creation timestamp for this
|
|
139
|
-
self._created_at = value
|
|
131
|
+
"""Set creation timestamp for this message."""
|
|
132
|
+
self.__dict__["_created_at"] = value
|
|
140
133
|
|
|
141
134
|
@property
|
|
142
135
|
def ttl(self) -> float:
|
|
143
136
|
"""Time-to-live for this message."""
|
|
144
|
-
return self._ttl
|
|
137
|
+
return cast(float, self.__dict__["_ttl"])
|
|
145
138
|
|
|
146
139
|
@ttl.setter
|
|
147
140
|
def ttl(self, value: float) -> None:
|
|
148
141
|
"""Set ttl."""
|
|
149
|
-
self._ttl = value
|
|
142
|
+
self.__dict__["_ttl"] = value
|
|
150
143
|
|
|
151
144
|
@property
|
|
152
145
|
def message_type(self) -> str:
|
|
153
146
|
"""A string that encodes the action to be executed on the receiving end."""
|
|
154
|
-
return self._message_type
|
|
147
|
+
return cast(str, self.__dict__["_message_type"])
|
|
155
148
|
|
|
156
149
|
@message_type.setter
|
|
157
150
|
def message_type(self, value: str) -> None:
|
|
158
151
|
"""Set message_type."""
|
|
159
|
-
self._message_type = value
|
|
152
|
+
self.__dict__["_message_type"] = value
|
|
160
153
|
|
|
161
154
|
@property
|
|
162
155
|
def partition_id(self) -> int | None:
|
|
163
156
|
"""An identifier telling which data partition a ClientApp should use."""
|
|
164
|
-
return self._partition_id
|
|
157
|
+
return cast(int, self.__dict__["_partition_id"])
|
|
165
158
|
|
|
166
159
|
@partition_id.setter
|
|
167
160
|
def partition_id(self, value: int) -> None:
|
|
168
|
-
"""Set
|
|
169
|
-
self._partition_id = value
|
|
161
|
+
"""Set partition_id."""
|
|
162
|
+
self.__dict__["_partition_id"] = value
|
|
170
163
|
|
|
171
164
|
|
|
172
165
|
@dataclass
|
|
@@ -181,22 +174,22 @@ class Error:
|
|
|
181
174
|
A reason for why the error arose (e.g. an exception stack-trace)
|
|
182
175
|
"""
|
|
183
176
|
|
|
184
|
-
_code: int
|
|
185
|
-
_reason: str | None = None
|
|
186
|
-
|
|
187
177
|
def __init__(self, code: int, reason: str | None = None) -> None:
|
|
188
|
-
|
|
189
|
-
|
|
178
|
+
var_dict = {
|
|
179
|
+
"_code": code,
|
|
180
|
+
"_reason": reason,
|
|
181
|
+
}
|
|
182
|
+
self.__dict__.update(var_dict)
|
|
190
183
|
|
|
191
184
|
@property
|
|
192
185
|
def code(self) -> int:
|
|
193
186
|
"""Error code."""
|
|
194
|
-
return self._code
|
|
187
|
+
return cast(int, self.__dict__["_code"])
|
|
195
188
|
|
|
196
189
|
@property
|
|
197
190
|
def reason(self) -> str | None:
|
|
198
191
|
"""Reason reported about the error."""
|
|
199
|
-
return self._reason
|
|
192
|
+
return cast(Optional[str], self.__dict__["_reason"])
|
|
200
193
|
|
|
201
194
|
|
|
202
195
|
@dataclass
|
|
@@ -215,88 +208,70 @@ class Message:
|
|
|
215
208
|
when processing another message.
|
|
216
209
|
"""
|
|
217
210
|
|
|
218
|
-
_metadata: Metadata
|
|
219
|
-
_content: RecordSet | None = None
|
|
220
|
-
_error: Error | None = None
|
|
221
|
-
|
|
222
211
|
def __init__(
|
|
223
212
|
self,
|
|
224
213
|
metadata: Metadata,
|
|
225
214
|
content: RecordSet | None = None,
|
|
226
215
|
error: Error | None = None,
|
|
227
216
|
) -> None:
|
|
228
|
-
self._metadata = metadata
|
|
229
|
-
|
|
230
|
-
# Set message creation timestamp
|
|
231
|
-
self._metadata.created_at = time.time()
|
|
232
|
-
|
|
233
217
|
if not (content is None) ^ (error is None):
|
|
234
218
|
raise ValueError("Either `content` or `error` must be set, but not both.")
|
|
235
219
|
|
|
236
|
-
|
|
237
|
-
|
|
220
|
+
metadata.created_at = time.time() # Set the message creation timestamp
|
|
221
|
+
var_dict = {
|
|
222
|
+
"_metadata": metadata,
|
|
223
|
+
"_content": content,
|
|
224
|
+
"_error": error,
|
|
225
|
+
}
|
|
226
|
+
self.__dict__.update(var_dict)
|
|
238
227
|
|
|
239
228
|
@property
|
|
240
229
|
def metadata(self) -> Metadata:
|
|
241
230
|
"""A dataclass including information about the message to be executed."""
|
|
242
|
-
return self._metadata
|
|
231
|
+
return cast(Metadata, self.__dict__["_metadata"])
|
|
243
232
|
|
|
244
233
|
@property
|
|
245
234
|
def content(self) -> RecordSet:
|
|
246
235
|
"""The content of this message."""
|
|
247
|
-
if self._content is None:
|
|
236
|
+
if self.__dict__["_content"] is None:
|
|
248
237
|
raise ValueError(
|
|
249
238
|
"Message content is None. Use <message>.has_content() "
|
|
250
239
|
"to check if a message has content."
|
|
251
240
|
)
|
|
252
|
-
return self._content
|
|
241
|
+
return cast(RecordSet, self.__dict__["_content"])
|
|
253
242
|
|
|
254
243
|
@content.setter
|
|
255
244
|
def content(self, value: RecordSet) -> None:
|
|
256
245
|
"""Set content."""
|
|
257
|
-
if self._error is None:
|
|
258
|
-
self._content = value
|
|
246
|
+
if self.__dict__["_error"] is None:
|
|
247
|
+
self.__dict__["_content"] = value
|
|
259
248
|
else:
|
|
260
249
|
raise ValueError("A message with an error set cannot have content.")
|
|
261
250
|
|
|
262
251
|
@property
|
|
263
252
|
def error(self) -> Error:
|
|
264
253
|
"""Error captured by this message."""
|
|
265
|
-
if self._error is None:
|
|
254
|
+
if self.__dict__["_error"] is None:
|
|
266
255
|
raise ValueError(
|
|
267
256
|
"Message error is None. Use <message>.has_error() "
|
|
268
257
|
"to check first if a message carries an error."
|
|
269
258
|
)
|
|
270
|
-
return self._error
|
|
259
|
+
return cast(Error, self.__dict__["_error"])
|
|
271
260
|
|
|
272
261
|
@error.setter
|
|
273
262
|
def error(self, value: Error) -> None:
|
|
274
263
|
"""Set error."""
|
|
275
264
|
if self.has_content():
|
|
276
265
|
raise ValueError("A message with content set cannot carry an error.")
|
|
277
|
-
self._error = value
|
|
266
|
+
self.__dict__["_error"] = value
|
|
278
267
|
|
|
279
268
|
def has_content(self) -> bool:
|
|
280
269
|
"""Return True if message has content, else False."""
|
|
281
|
-
return self._content is not None
|
|
270
|
+
return self.__dict__["_content"] is not None
|
|
282
271
|
|
|
283
272
|
def has_error(self) -> bool:
|
|
284
273
|
"""Return True if message has an error, else False."""
|
|
285
|
-
return self._error is not None
|
|
286
|
-
|
|
287
|
-
def _create_reply_metadata(self, ttl: float) -> Metadata:
|
|
288
|
-
"""Construct metadata for a reply message."""
|
|
289
|
-
return Metadata(
|
|
290
|
-
run_id=self.metadata.run_id,
|
|
291
|
-
message_id="",
|
|
292
|
-
src_node_id=self.metadata.dst_node_id,
|
|
293
|
-
dst_node_id=self.metadata.src_node_id,
|
|
294
|
-
reply_to_message=self.metadata.message_id,
|
|
295
|
-
group_id=self.metadata.group_id,
|
|
296
|
-
ttl=ttl,
|
|
297
|
-
message_type=self.metadata.message_type,
|
|
298
|
-
partition_id=self.metadata.partition_id,
|
|
299
|
-
)
|
|
274
|
+
return self.__dict__["_error"] is not None
|
|
300
275
|
|
|
301
276
|
def create_error_reply(self, error: Error, ttl: float | None = None) -> Message:
|
|
302
277
|
"""Construct a reply message indicating an error happened.
|
|
@@ -323,7 +298,7 @@ class Message:
|
|
|
323
298
|
# message creation)
|
|
324
299
|
ttl_ = DEFAULT_TTL if ttl is None else ttl
|
|
325
300
|
# Create reply with error
|
|
326
|
-
message = Message(metadata=
|
|
301
|
+
message = Message(metadata=_create_reply_metadata(self, ttl_), error=error)
|
|
327
302
|
|
|
328
303
|
if ttl is None:
|
|
329
304
|
# Set TTL equal to the remaining time for the received message to expire
|
|
@@ -369,7 +344,7 @@ class Message:
|
|
|
369
344
|
ttl_ = DEFAULT_TTL if ttl is None else ttl
|
|
370
345
|
|
|
371
346
|
message = Message(
|
|
372
|
-
metadata=
|
|
347
|
+
metadata=_create_reply_metadata(self, ttl_),
|
|
373
348
|
content=content,
|
|
374
349
|
)
|
|
375
350
|
|
|
@@ -381,3 +356,18 @@ class Message:
|
|
|
381
356
|
message.metadata.ttl = ttl
|
|
382
357
|
|
|
383
358
|
return message
|
|
359
|
+
|
|
360
|
+
|
|
361
|
+
def _create_reply_metadata(msg: Message, ttl: float) -> Metadata:
|
|
362
|
+
"""Construct metadata for a reply message."""
|
|
363
|
+
return Metadata(
|
|
364
|
+
run_id=msg.metadata.run_id,
|
|
365
|
+
message_id="",
|
|
366
|
+
src_node_id=msg.metadata.dst_node_id,
|
|
367
|
+
dst_node_id=msg.metadata.src_node_id,
|
|
368
|
+
reply_to_message=msg.metadata.message_id,
|
|
369
|
+
group_id=msg.metadata.group_id,
|
|
370
|
+
ttl=ttl,
|
|
371
|
+
message_type=msg.metadata.message_type,
|
|
372
|
+
partition_id=msg.metadata.partition_id,
|
|
373
|
+
)
|
|
@@ -24,6 +24,7 @@ from .parametersrecord import ParametersRecord
|
|
|
24
24
|
from .typeddict import TypedDict
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
@dataclass
|
|
27
28
|
class RecordSetData:
|
|
28
29
|
"""Inner data container for the RecordSet class."""
|
|
29
30
|
|
|
@@ -97,22 +98,22 @@ class RecordSet:
|
|
|
97
98
|
metrics_records=metrics_records,
|
|
98
99
|
configs_records=configs_records,
|
|
99
100
|
)
|
|
100
|
-
|
|
101
|
+
self.__dict__["_data"] = data
|
|
101
102
|
|
|
102
103
|
@property
|
|
103
104
|
def parameters_records(self) -> TypedDict[str, ParametersRecord]:
|
|
104
105
|
"""Dictionary holding ParametersRecord instances."""
|
|
105
|
-
data = cast(RecordSetData,
|
|
106
|
+
data = cast(RecordSetData, self.__dict__["_data"])
|
|
106
107
|
return data.parameters_records
|
|
107
108
|
|
|
108
109
|
@property
|
|
109
110
|
def metrics_records(self) -> TypedDict[str, MetricsRecord]:
|
|
110
111
|
"""Dictionary holding MetricsRecord instances."""
|
|
111
|
-
data = cast(RecordSetData,
|
|
112
|
+
data = cast(RecordSetData, self.__dict__["_data"])
|
|
112
113
|
return data.metrics_records
|
|
113
114
|
|
|
114
115
|
@property
|
|
115
116
|
def configs_records(self) -> TypedDict[str, ConfigsRecord]:
|
|
116
117
|
"""Dictionary holding ConfigsRecord instances."""
|
|
117
|
-
data = cast(RecordSetData,
|
|
118
|
+
data = cast(RecordSetData, self.__dict__["_data"])
|
|
118
119
|
return data.configs_records
|
|
@@ -36,6 +36,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
|
|
|
36
36
|
DeleteNodeResponse,
|
|
37
37
|
GetRunRequest,
|
|
38
38
|
GetRunResponse,
|
|
39
|
+
PingRequest,
|
|
40
|
+
PingResponse,
|
|
39
41
|
PullTaskInsRequest,
|
|
40
42
|
PullTaskInsResponse,
|
|
41
43
|
PushTaskResRequest,
|
|
@@ -51,6 +53,7 @@ Request = Union[
|
|
|
51
53
|
PullTaskInsRequest,
|
|
52
54
|
PushTaskResRequest,
|
|
53
55
|
GetRunRequest,
|
|
56
|
+
PingRequest,
|
|
54
57
|
]
|
|
55
58
|
|
|
56
59
|
Response = Union[
|
|
@@ -59,6 +62,7 @@ Response = Union[
|
|
|
59
62
|
PullTaskInsResponse,
|
|
60
63
|
PushTaskResResponse,
|
|
61
64
|
GetRunResponse,
|
|
65
|
+
PingResponse,
|
|
62
66
|
]
|
|
63
67
|
|
|
64
68
|
|
|
@@ -140,6 +144,7 @@ class AuthenticateServerInterceptor(grpc.ServerInterceptor): # type: ignore
|
|
|
140
144
|
PullTaskInsRequest,
|
|
141
145
|
PushTaskResRequest,
|
|
142
146
|
GetRunRequest,
|
|
147
|
+
PingRequest,
|
|
143
148
|
),
|
|
144
149
|
):
|
|
145
150
|
hmac_value = base64.urlsafe_b64decode(
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/simulation/app.py
RENAMED
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
"""Flower simulation app."""
|
|
16
16
|
|
|
17
17
|
|
|
18
|
+
import asyncio
|
|
19
|
+
import logging
|
|
18
20
|
import sys
|
|
19
21
|
import threading
|
|
20
22
|
import traceback
|
|
@@ -27,7 +29,7 @@ from ray.util.scheduling_strategies import NodeAffinitySchedulingStrategy
|
|
|
27
29
|
|
|
28
30
|
from flwr.client import ClientFn
|
|
29
31
|
from flwr.common import EventType, event
|
|
30
|
-
from flwr.common.logger import log
|
|
32
|
+
from flwr.common.logger import log, set_logger_propagation
|
|
31
33
|
from flwr.server.client_manager import ClientManager
|
|
32
34
|
from flwr.server.history import History
|
|
33
35
|
from flwr.server.server import Server, init_defaults, run_fl
|
|
@@ -156,6 +158,7 @@ def start_simulation(
|
|
|
156
158
|
is an advanced feature. For all details, please refer to the Ray documentation:
|
|
157
159
|
https://docs.ray.io/en/latest/ray-core/scheduling/index.html
|
|
158
160
|
|
|
161
|
+
|
|
159
162
|
Returns
|
|
160
163
|
-------
|
|
161
164
|
hist : flwr.server.history.History
|
|
@@ -167,6 +170,18 @@ def start_simulation(
|
|
|
167
170
|
{"num_clients": len(clients_ids) if clients_ids is not None else num_clients},
|
|
168
171
|
)
|
|
169
172
|
|
|
173
|
+
# Set logger propagation
|
|
174
|
+
loop: Optional[asyncio.AbstractEventLoop] = None
|
|
175
|
+
try:
|
|
176
|
+
loop = asyncio.get_running_loop()
|
|
177
|
+
except RuntimeError:
|
|
178
|
+
loop = None
|
|
179
|
+
finally:
|
|
180
|
+
if loop and loop.is_running():
|
|
181
|
+
# Set logger propagation to False to prevent duplicated log output in Colab.
|
|
182
|
+
logger = logging.getLogger("flwr")
|
|
183
|
+
_ = set_logger_propagation(logger, False)
|
|
184
|
+
|
|
170
185
|
# Initialize server and server config
|
|
171
186
|
initialized_server, initialized_config = init_defaults(
|
|
172
187
|
server=server,
|
|
@@ -28,6 +28,7 @@ import grpc
|
|
|
28
28
|
|
|
29
29
|
from flwr.client import ClientApp
|
|
30
30
|
from flwr.common import EventType, event, log
|
|
31
|
+
from flwr.common.logger import set_logger_propagation
|
|
31
32
|
from flwr.common.typing import ConfigsRecordValues
|
|
32
33
|
from flwr.server.driver import Driver, GrpcDriver
|
|
33
34
|
from flwr.server.run_serverapp import run
|
|
@@ -364,6 +365,8 @@ def _run_simulation(
|
|
|
364
365
|
|
|
365
366
|
finally:
|
|
366
367
|
if run_in_thread:
|
|
368
|
+
# Set logger propagation to False to prevent duplicated log output in Colab.
|
|
369
|
+
logger = set_logger_propagation(logger, False)
|
|
367
370
|
log(DEBUG, "Starting Simulation Engine on a new thread.")
|
|
368
371
|
simulation_engine_th = threading.Thread(target=_main_loop, args=args)
|
|
369
372
|
simulation_engine_th.start()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/config_utils.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/example.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/new/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/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
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/run/__init__.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/cli/run/run.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/client.py
RENAMED
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/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.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/heartbeat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr_nightly-1.9.0.dev20240429 → flwr_nightly-1.9.0.dev20240430}/src/py/flwr/client/mod/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|