flwr-nightly 1.14.0.dev20241202__tar.gz → 1.14.0.dev20241214__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.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/PKG-INFO +8 -7
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/README.md +5 -5
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/pyproject.toml +9 -7
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/app.py +5 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/build.py +1 -0
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/cli_user_auth_interceptor.py +86 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/config_utils.py +19 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/example.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/install.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/log.py +11 -31
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/login/__init__.py +22 -0
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/login/login.py +83 -0
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/ls.py +324 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/__init__.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/new.py +2 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +2 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/run/__init__.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/run/run.py +96 -39
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/cli/stop.py +91 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/utils.py +109 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/app.py +3 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/client.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/app.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/utils.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_adapter_client/connection.py +1 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_client/connection.py +1 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/connection.py +3 -3
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/message_handler/message_handler.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/comms_mods.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/localdp_mod.py +1 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/__init__.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/nodestate.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/nodestate_factory.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/rest_client/connection.py +3 -3
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/supernode/app.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/address.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/args.py +1 -0
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/common/auth_plugin/__init__.py +24 -0
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/common/auth_plugin/auth_plugin.py +111 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/config.py +3 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/constant.py +17 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/logger.py +25 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/message.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/object_ref.py +57 -54
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/pyproject.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/__init__.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/parametersrecord.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/retry_invoker.py +75 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +2 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/telemetry.py +2 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/typing.py +12 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/version.py +1 -0
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/proto/exec_pb2.py +74 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/exec_pb2.pyi +107 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/exec_pb2_grpc.py +102 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/exec_pb2_grpc.pyi +39 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2.py +4 -4
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2.pyi +4 -1
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/proto/serverappio_pb2.py +52 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/serverappio_pb2.pyi +8 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/serverappio_pb2_grpc.py +34 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +13 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2.py +2 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2_grpc.py +34 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +13 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/app.py +53 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/app_utils.py +7 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/grpc_driver.py +11 -63
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/inmemory_driver.py +5 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/serverapp/app.py +9 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dpfedavg_fixed.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +73 -23
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/disk_ffs.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +32 -12
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +31 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +4 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/__init__.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +14 -30
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/linkstate.py +13 -2
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +24 -44
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +20 -0
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/server/superlink/utils.py +65 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/app.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/ray_actor.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/utils.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/run_simulation.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/app.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/deployment.py +1 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/exec_grpc.py +19 -1
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/exec_servicer.py +76 -2
- flwr_nightly-1.14.0.dev20241214/src/py/flwr/superexec/exec_user_auth_interceptor.py +101 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/executor.py +1 -0
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/cli/ls.py +0 -228
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2.py +0 -36
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2.pyi +0 -121
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2_grpc.py +0 -4
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/common_pb2_grpc.pyi +0 -4
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2.py +0 -27
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2.pyi +0 -7
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2_grpc.py +0 -135
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/control_pb2_grpc.pyi +0 -53
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/exec_pb2.py +0 -50
- flwr_nightly-1.14.0.dev20241202/src/py/flwr/proto/serverappio_pb2.py +0 -52
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/LICENSE +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.14.0.
|
|
3
|
+
Version: 1.14.0.dev20241214
|
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -39,8 +39,9 @@ Requires-Dist: numpy (>=1.26.0,<3.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: pyyaml (>=6.0.2,<7.0.0)
|
|
42
43
|
Requires-Dist: ray (==2.10.0) ; (python_version >= "3.9" and python_version < "3.12") and (extra == "simulation")
|
|
43
|
-
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
44
|
+
Requires-Dist: requests (>=2.31.0,<3.0.0)
|
|
44
45
|
Requires-Dist: rich (>=13.5.0,<14.0.0)
|
|
45
46
|
Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
|
|
46
47
|
Requires-Dist: tomli (>=2.0.1,<3.0.0)
|
|
@@ -101,23 +102,23 @@ Flower's goal is to make federated learning accessible to everyone. This series
|
|
|
101
102
|
|
|
102
103
|
0. **What is Federated Learning?**
|
|
103
104
|
|
|
104
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
105
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb))
|
|
105
106
|
|
|
106
107
|
1. **An Introduction to Federated Learning**
|
|
107
108
|
|
|
108
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
109
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
|
|
109
110
|
|
|
110
111
|
2. **Using Strategies in Federated Learning**
|
|
111
112
|
|
|
112
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
113
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
|
|
113
114
|
|
|
114
115
|
3. **Building Strategies for Federated Learning**
|
|
115
116
|
|
|
116
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
117
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
|
|
117
118
|
|
|
118
119
|
4. **Custom Clients for Federated Learning**
|
|
119
120
|
|
|
120
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/
|
|
121
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
|
|
121
122
|
|
|
122
123
|
Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
|
|
123
124
|
|
|
@@ -48,23 +48,23 @@ Flower's goal is to make federated learning accessible to everyone. This series
|
|
|
48
48
|
|
|
49
49
|
0. **What is Federated Learning?**
|
|
50
50
|
|
|
51
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
51
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-what-is-federated-learning.ipynb))
|
|
52
52
|
|
|
53
53
|
1. **An Introduction to Federated Learning**
|
|
54
54
|
|
|
55
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
55
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-get-started-with-flower-pytorch.ipynb))
|
|
56
56
|
|
|
57
57
|
2. **Using Strategies in Federated Learning**
|
|
58
58
|
|
|
59
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
59
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-use-a-federated-learning-strategy-pytorch.ipynb))
|
|
60
60
|
|
|
61
61
|
3. **Building Strategies for Federated Learning**
|
|
62
62
|
|
|
63
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
|
63
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-build-a-strategy-from-scratch-pytorch.ipynb))
|
|
64
64
|
|
|
65
65
|
4. **Custom Clients for Federated Learning**
|
|
66
66
|
|
|
67
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/
|
|
67
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/doc/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
|
|
68
68
|
|
|
69
69
|
Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
|
|
70
70
|
|
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "flwr-nightly"
|
|
7
|
-
version = "1.14.0.
|
|
7
|
+
version = "1.14.0.dev20241214"
|
|
8
8
|
description = "Flower: A Friendly Federated AI Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -78,16 +78,17 @@ tomli = "^2.0.1"
|
|
|
78
78
|
tomli-w = "^1.0.0"
|
|
79
79
|
pathspec = "^0.12.1"
|
|
80
80
|
rich = "^13.5.0"
|
|
81
|
+
pyyaml = "^6.0.2"
|
|
82
|
+
requests = "^2.31.0"
|
|
81
83
|
# Optional dependencies (Simulation Engine)
|
|
82
84
|
ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
|
|
83
85
|
# Optional dependencies (REST transport layer)
|
|
84
|
-
requests = { version = "^2.31.0", optional = true }
|
|
85
86
|
starlette = { version = "^0.31.0", optional = true }
|
|
86
87
|
uvicorn = { version = "^0.23.0", extras = ["standard"], optional = true }
|
|
87
88
|
|
|
88
89
|
[tool.poetry.extras]
|
|
89
90
|
simulation = ["ray"]
|
|
90
|
-
rest = ["
|
|
91
|
+
rest = ["starlette", "uvicorn"]
|
|
91
92
|
|
|
92
93
|
[tool.poetry.group.dev.dependencies]
|
|
93
94
|
types-dataclasses = "==0.6.6"
|
|
@@ -131,6 +132,7 @@ mdformat-gfm = "==0.3.6"
|
|
|
131
132
|
mdformat-frontmatter = "==2.0.1"
|
|
132
133
|
mdformat-beautysh = "==0.1.1"
|
|
133
134
|
twine = "==5.1.1"
|
|
135
|
+
types-PyYAML = "^6.0.2"
|
|
134
136
|
pyroma = "==4.2"
|
|
135
137
|
check-wheel-contents = "==0.4.0"
|
|
136
138
|
GitPython = "==3.1.32"
|
|
@@ -144,10 +146,10 @@ docsig = "==0.64.0"
|
|
|
144
146
|
|
|
145
147
|
[tool.docstrfmt]
|
|
146
148
|
extend_exclude = [
|
|
147
|
-
"
|
|
148
|
-
"
|
|
149
|
-
"
|
|
150
|
-
"
|
|
149
|
+
"framework/docs/source/conf.py",
|
|
150
|
+
"framework/docs/source/tutorial-quickstart-huggingface.rst",
|
|
151
|
+
"framework/docs/source/_templates/autosummary/*",
|
|
152
|
+
"framework/docs/source/ref-api/*",
|
|
151
153
|
]
|
|
152
154
|
|
|
153
155
|
[tool.isort]
|
|
@@ -14,15 +14,18 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Flower command line interface."""
|
|
16
16
|
|
|
17
|
+
|
|
17
18
|
import typer
|
|
18
19
|
from typer.main import get_command
|
|
19
20
|
|
|
20
21
|
from .build import build
|
|
21
22
|
from .install import install
|
|
22
23
|
from .log import log
|
|
24
|
+
from .login import login
|
|
23
25
|
from .ls import ls
|
|
24
26
|
from .new import new
|
|
25
27
|
from .run import run
|
|
28
|
+
from .stop import stop
|
|
26
29
|
|
|
27
30
|
app = typer.Typer(
|
|
28
31
|
help=typer.style(
|
|
@@ -39,6 +42,8 @@ app.command()(build)
|
|
|
39
42
|
app.command()(install)
|
|
40
43
|
app.command()(log)
|
|
41
44
|
app.command()(ls)
|
|
45
|
+
app.command()(stop)
|
|
46
|
+
app.command()(login)
|
|
42
47
|
|
|
43
48
|
typer_click_object = get_command(app)
|
|
44
49
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Copyright 2024 Flower Labs GmbH. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Flower run interceptor."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
from typing import Any, Callable, Union
|
|
19
|
+
|
|
20
|
+
import grpc
|
|
21
|
+
|
|
22
|
+
from flwr.common.auth_plugin import CliAuthPlugin
|
|
23
|
+
from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
24
|
+
StartRunRequest,
|
|
25
|
+
StreamLogsRequest,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
Request = Union[
|
|
29
|
+
StartRunRequest,
|
|
30
|
+
StreamLogsRequest,
|
|
31
|
+
]
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class CliUserAuthInterceptor(
|
|
35
|
+
grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInterceptor # type: ignore
|
|
36
|
+
):
|
|
37
|
+
"""CLI interceptor for user authentication."""
|
|
38
|
+
|
|
39
|
+
def __init__(self, auth_plugin: CliAuthPlugin):
|
|
40
|
+
self.auth_plugin = auth_plugin
|
|
41
|
+
|
|
42
|
+
def _authenticated_call(
|
|
43
|
+
self,
|
|
44
|
+
continuation: Callable[[Any, Any], Any],
|
|
45
|
+
client_call_details: grpc.ClientCallDetails,
|
|
46
|
+
request: Request,
|
|
47
|
+
) -> grpc.Call:
|
|
48
|
+
"""Send and receive tokens via metadata."""
|
|
49
|
+
new_metadata = self.auth_plugin.write_tokens_to_metadata(
|
|
50
|
+
client_call_details.metadata or []
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
details = client_call_details._replace(metadata=new_metadata)
|
|
54
|
+
|
|
55
|
+
response = continuation(details, request)
|
|
56
|
+
if response.initial_metadata():
|
|
57
|
+
retrieved_metadata = dict(response.initial_metadata())
|
|
58
|
+
self.auth_plugin.store_tokens(retrieved_metadata)
|
|
59
|
+
|
|
60
|
+
return response
|
|
61
|
+
|
|
62
|
+
def intercept_unary_unary(
|
|
63
|
+
self,
|
|
64
|
+
continuation: Callable[[Any, Any], Any],
|
|
65
|
+
client_call_details: grpc.ClientCallDetails,
|
|
66
|
+
request: Request,
|
|
67
|
+
) -> grpc.Call:
|
|
68
|
+
"""Intercept a unary-unary call for user authentication.
|
|
69
|
+
|
|
70
|
+
This method intercepts a unary-unary RPC call initiated from the CLI and adds
|
|
71
|
+
the required authentication tokens to the RPC metadata.
|
|
72
|
+
"""
|
|
73
|
+
return self._authenticated_call(continuation, client_call_details, request)
|
|
74
|
+
|
|
75
|
+
def intercept_unary_stream(
|
|
76
|
+
self,
|
|
77
|
+
continuation: Callable[[Any, Any], Any],
|
|
78
|
+
client_call_details: grpc.ClientCallDetails,
|
|
79
|
+
request: Request,
|
|
80
|
+
) -> grpc.Call:
|
|
81
|
+
"""Intercept a unary-stream call for user authentication.
|
|
82
|
+
|
|
83
|
+
This method intercepts a unary-stream RPC call initiated from the CLI and adds
|
|
84
|
+
the required authentication tokens to the RPC metadata.
|
|
85
|
+
"""
|
|
86
|
+
return self._authenticated_call(continuation, client_call_details, request)
|
{flwr_nightly-1.14.0.dev20241202 → flwr_nightly-1.14.0.dev20241214}/src/py/flwr/cli/config_utils.py
RENAMED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Utility to validate the `pyproject.toml` file."""
|
|
16
16
|
|
|
17
|
+
|
|
17
18
|
import zipfile
|
|
18
19
|
from io import BytesIO
|
|
19
20
|
from pathlib import Path
|
|
@@ -230,10 +231,14 @@ def load_from_string(toml_content: str) -> Optional[dict[str, Any]]:
|
|
|
230
231
|
return None
|
|
231
232
|
|
|
232
233
|
|
|
233
|
-
def
|
|
234
|
+
def process_loaded_project_config(
|
|
234
235
|
config: Union[dict[str, Any], None], errors: list[str], warnings: list[str]
|
|
235
236
|
) -> dict[str, Any]:
|
|
236
|
-
"""
|
|
237
|
+
"""Process and return the loaded project configuration.
|
|
238
|
+
|
|
239
|
+
This function handles errors and warnings from the `load_and_validate` function,
|
|
240
|
+
exits on critical issues, and returns the validated configuration.
|
|
241
|
+
"""
|
|
237
242
|
if config is None:
|
|
238
243
|
typer.secho(
|
|
239
244
|
"Project configuration could not be loaded.\n"
|
|
@@ -324,3 +329,15 @@ def validate_certificate_in_federation_config(
|
|
|
324
329
|
raise typer.Exit(code=1)
|
|
325
330
|
|
|
326
331
|
return insecure, root_certificates_bytes
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def exit_if_no_address(federation_config: dict[str, Any], cmd: str) -> None:
|
|
335
|
+
"""Exit if the provided federation_config has no "address" key."""
|
|
336
|
+
if "address" not in federation_config:
|
|
337
|
+
typer.secho(
|
|
338
|
+
f"❌ `flwr {cmd}` currently works with a SuperLink. Ensure that the correct"
|
|
339
|
+
"SuperLink (Exec API) address is provided in `pyproject.toml`.",
|
|
340
|
+
fg=typer.colors.RED,
|
|
341
|
+
bold=True,
|
|
342
|
+
)
|
|
343
|
+
raise typer.Exit(code=1)
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Flower command line interface `log` command."""
|
|
16
16
|
|
|
17
|
+
|
|
17
18
|
import time
|
|
18
19
|
from logging import DEBUG, ERROR, INFO
|
|
19
20
|
from pathlib import Path
|
|
@@ -23,17 +24,18 @@ import grpc
|
|
|
23
24
|
import typer
|
|
24
25
|
|
|
25
26
|
from flwr.cli.config_utils import (
|
|
27
|
+
exit_if_no_address,
|
|
26
28
|
load_and_validate,
|
|
27
|
-
|
|
29
|
+
process_loaded_project_config,
|
|
28
30
|
validate_federation_in_project_config,
|
|
29
|
-
validate_project_config,
|
|
30
31
|
)
|
|
31
32
|
from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
|
|
32
|
-
from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
|
|
33
33
|
from flwr.common.logger import log as logger
|
|
34
34
|
from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
|
|
35
35
|
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
36
36
|
|
|
37
|
+
from .utils import init_channel, try_obtain_cli_auth_plugin
|
|
38
|
+
|
|
37
39
|
|
|
38
40
|
def start_stream(
|
|
39
41
|
run_id: int, channel: grpc.Channel, refresh_period: int = CONN_REFRESH_PERIOD
|
|
@@ -126,11 +128,6 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
|
|
|
126
128
|
logger(DEBUG, "Channel closed")
|
|
127
129
|
|
|
128
130
|
|
|
129
|
-
def on_channel_state_change(channel_connectivity: str) -> None:
|
|
130
|
-
"""Log channel connectivity."""
|
|
131
|
-
logger(DEBUG, channel_connectivity)
|
|
132
|
-
|
|
133
|
-
|
|
134
131
|
def log(
|
|
135
132
|
run_id: Annotated[
|
|
136
133
|
int,
|
|
@@ -157,41 +154,24 @@ def log(
|
|
|
157
154
|
|
|
158
155
|
pyproject_path = app / "pyproject.toml" if app else None
|
|
159
156
|
config, errors, warnings = load_and_validate(path=pyproject_path)
|
|
160
|
-
config =
|
|
157
|
+
config = process_loaded_project_config(config, errors, warnings)
|
|
161
158
|
federation, federation_config = validate_federation_in_project_config(
|
|
162
159
|
federation, config
|
|
163
160
|
)
|
|
161
|
+
exit_if_no_address(federation_config, "log")
|
|
164
162
|
|
|
165
|
-
|
|
166
|
-
typer.secho(
|
|
167
|
-
"❌ `flwr log` currently works with Exec API. Ensure that the correct"
|
|
168
|
-
"Exec API address is provided in the `pyproject.toml`.",
|
|
169
|
-
fg=typer.colors.RED,
|
|
170
|
-
bold=True,
|
|
171
|
-
)
|
|
172
|
-
raise typer.Exit(code=1)
|
|
173
|
-
|
|
174
|
-
_log_with_exec_api(app, federation_config, run_id, stream)
|
|
163
|
+
_log_with_exec_api(app, federation, federation_config, run_id, stream)
|
|
175
164
|
|
|
176
165
|
|
|
177
166
|
def _log_with_exec_api(
|
|
178
167
|
app: Path,
|
|
168
|
+
federation: str,
|
|
179
169
|
federation_config: dict[str, Any],
|
|
180
170
|
run_id: int,
|
|
181
171
|
stream: bool,
|
|
182
172
|
) -> None:
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
app, federation_config
|
|
186
|
-
)
|
|
187
|
-
channel = create_channel(
|
|
188
|
-
server_address=federation_config["address"],
|
|
189
|
-
insecure=insecure,
|
|
190
|
-
root_certificates=root_certificates_bytes,
|
|
191
|
-
max_message_length=GRPC_MAX_MESSAGE_LENGTH,
|
|
192
|
-
interceptors=None,
|
|
193
|
-
)
|
|
194
|
-
channel.subscribe(on_channel_state_change)
|
|
173
|
+
auth_plugin = try_obtain_cli_auth_plugin(app, federation, federation_config)
|
|
174
|
+
channel = init_channel(app, federation_config, auth_plugin)
|
|
195
175
|
|
|
196
176
|
if stream:
|
|
197
177
|
start_stream(run_id, channel, CONN_REFRESH_PERIOD)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Copyright 2024 Flower Labs GmbH. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Flower command line interface `login` command."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
from .login import login as login
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"login",
|
|
22
|
+
]
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Copyright 2024 Flower Labs GmbH. All Rights Reserved.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
# ==============================================================================
|
|
15
|
+
"""Flower command line interface `login` command."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Annotated, Optional
|
|
20
|
+
|
|
21
|
+
import typer
|
|
22
|
+
|
|
23
|
+
from flwr.cli.config_utils import (
|
|
24
|
+
exit_if_no_address,
|
|
25
|
+
load_and_validate,
|
|
26
|
+
process_loaded_project_config,
|
|
27
|
+
validate_federation_in_project_config,
|
|
28
|
+
)
|
|
29
|
+
from flwr.common.constant import AUTH_TYPE
|
|
30
|
+
from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
|
|
31
|
+
GetLoginDetailsRequest,
|
|
32
|
+
GetLoginDetailsResponse,
|
|
33
|
+
)
|
|
34
|
+
from flwr.proto.exec_pb2_grpc import ExecStub
|
|
35
|
+
|
|
36
|
+
from ..utils import init_channel, try_obtain_cli_auth_plugin
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def login( # pylint: disable=R0914
|
|
40
|
+
app: Annotated[
|
|
41
|
+
Path,
|
|
42
|
+
typer.Argument(help="Path of the Flower App to run."),
|
|
43
|
+
] = Path("."),
|
|
44
|
+
federation: Annotated[
|
|
45
|
+
Optional[str],
|
|
46
|
+
typer.Argument(help="Name of the federation to login into."),
|
|
47
|
+
] = None,
|
|
48
|
+
) -> None:
|
|
49
|
+
"""Login to Flower SuperLink."""
|
|
50
|
+
typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
|
|
51
|
+
|
|
52
|
+
pyproject_path = app / "pyproject.toml" if app else None
|
|
53
|
+
config, errors, warnings = load_and_validate(path=pyproject_path)
|
|
54
|
+
|
|
55
|
+
config = process_loaded_project_config(config, errors, warnings)
|
|
56
|
+
federation, federation_config = validate_federation_in_project_config(
|
|
57
|
+
federation, config
|
|
58
|
+
)
|
|
59
|
+
exit_if_no_address(federation_config, "login")
|
|
60
|
+
channel = init_channel(app, federation_config, None)
|
|
61
|
+
stub = ExecStub(channel)
|
|
62
|
+
|
|
63
|
+
login_request = GetLoginDetailsRequest()
|
|
64
|
+
login_response: GetLoginDetailsResponse = stub.GetLoginDetails(login_request)
|
|
65
|
+
|
|
66
|
+
# Get the auth plugin
|
|
67
|
+
auth_type = login_response.login_details.get(AUTH_TYPE)
|
|
68
|
+
auth_plugin = try_obtain_cli_auth_plugin(
|
|
69
|
+
app, federation, federation_config, auth_type
|
|
70
|
+
)
|
|
71
|
+
if auth_plugin is None:
|
|
72
|
+
typer.secho(
|
|
73
|
+
f'❌ Authentication type "{auth_type}" not found',
|
|
74
|
+
fg=typer.colors.RED,
|
|
75
|
+
bold=True,
|
|
76
|
+
)
|
|
77
|
+
raise typer.Exit(code=1)
|
|
78
|
+
|
|
79
|
+
# Login
|
|
80
|
+
auth_config = auth_plugin.login(dict(login_response.login_details), stub)
|
|
81
|
+
|
|
82
|
+
# Store the tokens
|
|
83
|
+
auth_plugin.store_tokens(auth_config)
|