flwr-nightly 1.12.0.dev20240906__tar.gz → 1.12.0.dev20240913__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.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/PKG-INFO +4 -6
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/README.md +0 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/pyproject.toml +7 -7
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/build.py +1 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/config_utils.py +10 -10
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/install.py +1 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/new.py +26 -40
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +19 -29
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -3
- flwr_nightly-1.12.0.dev20240913/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +38 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +16 -13
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +9 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/run/run.py +6 -7
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/utils.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/app.py +14 -14
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/client_app.py +5 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/clientapp/app.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/dpfedavg_numpy_client.py +6 -7
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_adapter_client/connection.py +4 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_client/connection.py +4 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +5 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_rere_client/connection.py +5 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/message_handler/message_handler.py +3 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +25 -25
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/utils.py +1 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/node_state.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/numpy_client.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/rest_client/connection.py +5 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/supernode/app.py +7 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/address.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/config.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/constant.py +12 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/differential_privacy.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/dp.py +1 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/exit_handlers.py +3 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/grpc.py +2 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/logger.py +3 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/object_ref.py +3 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/record/configsrecord.py +3 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/record/metricsrecord.py +3 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/record/parametersrecord.py +3 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/record/recordset.py +1 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/record/typeddict.py +23 -10
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/recordset_compat.py +7 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/retry_invoker.py +6 -17
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +10 -10
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +16 -16
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/quantization.py +7 -7
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +3 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/serde.py +11 -9
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/telemetry.py +5 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/typing.py +19 -19
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/version.py +2 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/app.py +18 -18
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/client_manager.py +6 -6
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/compat/app_utils.py +2 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/driver/driver.py +3 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/driver/grpc_driver.py +7 -7
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/driver/inmemory_driver.py +5 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/history.py +8 -9
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/run_serverapp.py +5 -6
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/server.py +36 -36
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/aggregate.py +13 -13
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/bulyan.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +20 -20
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/dp_fixed_clipping.py +19 -19
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +6 -6
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/dpfedavg_fixed.py +10 -10
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +11 -11
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedadagrad.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedadam.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedavg.py +16 -16
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedavg_android.py +16 -16
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedavgm.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedmedian.py +4 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedopt.py +5 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedprox.py +6 -6
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedtrimmedavg.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedxgb_bagging.py +11 -11
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedxgb_cyclic.py +9 -9
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +5 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/fedyogi.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/krum.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/qfedavg.py +15 -15
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/strategy.py +10 -10
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/driver/driver_grpc.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/driver/driver_servicer.py +6 -6
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/ffs/disk_ffs.py +4 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/ffs/ffs.py +4 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +2 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +2 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +9 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +5 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +2 -1
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +2 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +3 -3
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +26 -17
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +6 -6
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/state/in_memory_state.py +18 -18
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/state/sqlite_state.py +22 -21
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/state/state.py +7 -7
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/utils/tensorboard.py +4 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/utils/validator.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/workflow/default_workflows.py +5 -5
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +22 -22
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/simulation/app.py +8 -8
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/simulation/ray_transport/ray_actor.py +23 -23
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/simulation/run_simulation.py +16 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/superexec/app.py +4 -4
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/superexec/deployment.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/superexec/exec_grpc.py +2 -2
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/superexec/exec_servicer.py +3 -2
- flwr_nightly-1.12.0.dev20240906/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -23
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/LICENSE +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/message.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flwr-nightly
|
|
3
|
-
Version: 1.12.0.
|
|
3
|
+
Version: 1.12.0.dev20240913
|
|
4
4
|
Summary: Flower: A Friendly Federated Learning Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
7
7
|
Keywords: flower,fl,federated learning,federated analytics,federated evaluation,machine learning
|
|
8
8
|
Author: The Flower Authors
|
|
9
9
|
Author-email: hello@flower.ai
|
|
10
|
-
Requires-Python: >=3.
|
|
10
|
+
Requires-Python: >=3.9,<4.0
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
12
12
|
Classifier: Intended Audience :: Developers
|
|
13
13
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -16,7 +16,6 @@ Classifier: Operating System :: MacOS :: MacOS X
|
|
|
16
16
|
Classifier: Operating System :: POSIX :: Linux
|
|
17
17
|
Classifier: Programming Language :: Python
|
|
18
18
|
Classifier: Programming Language :: Python :: 3
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -33,13 +32,13 @@ Classifier: Typing :: Typed
|
|
|
33
32
|
Provides-Extra: rest
|
|
34
33
|
Provides-Extra: simulation
|
|
35
34
|
Requires-Dist: cryptography (>=42.0.4,<43.0.0)
|
|
36
|
-
Requires-Dist: grpcio (>=1.60.0,<2.0.0,!=1.64.2,!=1.65.1,!=1.65.2,!=1.65.4)
|
|
35
|
+
Requires-Dist: grpcio (>=1.60.0,<2.0.0,!=1.64.2,!=1.65.1,!=1.65.2,!=1.65.4,!=1.65.5,!=1.66.0,!=1.66.1)
|
|
37
36
|
Requires-Dist: iterators (>=0.0.2,<0.0.3)
|
|
38
37
|
Requires-Dist: numpy (>=1.21.0,<2.0.0)
|
|
39
38
|
Requires-Dist: pathspec (>=0.12.1,<0.13.0)
|
|
40
39
|
Requires-Dist: protobuf (>=4.25.2,<5.0.0)
|
|
41
40
|
Requires-Dist: pycryptodome (>=3.18.0,<4.0.0)
|
|
42
|
-
Requires-Dist: ray (==2.10.0) ; (python_version >= "3.
|
|
41
|
+
Requires-Dist: ray (==2.10.0) ; (python_version >= "3.9" and python_version < "3.12") and (extra == "simulation")
|
|
43
42
|
Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
|
|
44
43
|
Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
|
|
45
44
|
Requires-Dist: tomli (>=2.0.1,<3.0.0)
|
|
@@ -199,7 +198,6 @@ Other [examples](https://github.com/adap/flower/tree/main/examples):
|
|
|
199
198
|
- [Federated Finetuning of a Vision Transformer](https://github.com/adap/flower/tree/main/examples/flowertune-vit)
|
|
200
199
|
- [Advanced Flower with TensorFlow/Keras](https://github.com/adap/flower/tree/main/examples/advanced-tensorflow)
|
|
201
200
|
- [Advanced Flower with PyTorch](https://github.com/adap/flower/tree/main/examples/advanced-pytorch)
|
|
202
|
-
- Single-Machine Simulation of Federated Learning Systems ([PyTorch](https://github.com/adap/flower/tree/main/examples/simulation-pytorch)) ([Tensorflow](https://github.com/adap/flower/tree/main/examples/simulation-tensorflow))
|
|
203
201
|
- [Comprehensive Flower+XGBoost](https://github.com/adap/flower/tree/main/examples/xgboost-comprehensive)
|
|
204
202
|
- [Flower through Docker Compose and with Grafana dashboard](https://github.com/adap/flower/tree/main/examples/flower-via-docker-compose)
|
|
205
203
|
- [Flower with KaplanMeierFitter from the lifelines library](https://github.com/adap/flower/tree/main/examples/federated-kaplan-meier-fitter)
|
|
@@ -147,7 +147,6 @@ Other [examples](https://github.com/adap/flower/tree/main/examples):
|
|
|
147
147
|
- [Federated Finetuning of a Vision Transformer](https://github.com/adap/flower/tree/main/examples/flowertune-vit)
|
|
148
148
|
- [Advanced Flower with TensorFlow/Keras](https://github.com/adap/flower/tree/main/examples/advanced-tensorflow)
|
|
149
149
|
- [Advanced Flower with PyTorch](https://github.com/adap/flower/tree/main/examples/advanced-pytorch)
|
|
150
|
-
- Single-Machine Simulation of Federated Learning Systems ([PyTorch](https://github.com/adap/flower/tree/main/examples/simulation-pytorch)) ([Tensorflow](https://github.com/adap/flower/tree/main/examples/simulation-tensorflow))
|
|
151
150
|
- [Comprehensive Flower+XGBoost](https://github.com/adap/flower/tree/main/examples/xgboost-comprehensive)
|
|
152
151
|
- [Flower through Docker Compose and with Grafana dashboard](https://github.com/adap/flower/tree/main/examples/flower-via-docker-compose)
|
|
153
152
|
- [Flower with KaplanMeierFitter from the lifelines library](https://github.com/adap/flower/tree/main/examples/federated-kaplan-meier-fitter)
|
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "flwr-nightly"
|
|
7
|
-
version = "1.12.0.
|
|
7
|
+
version = "1.12.0.dev20240913"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -30,7 +30,6 @@ classifiers = [
|
|
|
30
30
|
"Programming Language :: Python",
|
|
31
31
|
"Programming Language :: Python :: 3",
|
|
32
32
|
"Programming Language :: Python :: 3 :: Only",
|
|
33
|
-
"Programming Language :: Python :: 3.8",
|
|
34
33
|
"Programming Language :: Python :: 3.9",
|
|
35
34
|
"Programming Language :: Python :: 3.10",
|
|
36
35
|
"Programming Language :: Python :: 3.11",
|
|
@@ -66,10 +65,10 @@ flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
|
|
|
66
65
|
flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
|
|
67
66
|
|
|
68
67
|
[tool.poetry.dependencies]
|
|
69
|
-
python = "^3.
|
|
68
|
+
python = "^3.9"
|
|
70
69
|
# Mandatory dependencies
|
|
71
70
|
numpy = "^1.21.0"
|
|
72
|
-
grpcio = "^1.60.0,!=1.64.2,!=1.65.1,!=1.65.2,!=1.65.4"
|
|
71
|
+
grpcio = "^1.60.0,!=1.64.2,!=1.65.1,!=1.65.2,!=1.65.4,!=1.65.5,!=1.66.0,!=1.66.1"
|
|
73
72
|
protobuf = "^4.25.2"
|
|
74
73
|
cryptography = "^42.0.4"
|
|
75
74
|
pycryptodome = "^3.18.0"
|
|
@@ -79,7 +78,7 @@ tomli = "^2.0.1"
|
|
|
79
78
|
tomli-w = "^1.0.0"
|
|
80
79
|
pathspec = "^0.12.1"
|
|
81
80
|
# Optional dependencies (Simulation Engine)
|
|
82
|
-
ray = { version = "==2.10.0", optional = true, python = ">=3.
|
|
81
|
+
ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
|
|
83
82
|
# Optional dependencies (REST transport layer)
|
|
84
83
|
requests = { version = "^2.31.0", optional = true }
|
|
85
84
|
starlette = { version = "^0.31.0", optional = true }
|
|
@@ -101,6 +100,7 @@ docformatter = "==1.7.5"
|
|
|
101
100
|
mypy = "==1.8.0"
|
|
102
101
|
pylint = "==3.0.3"
|
|
103
102
|
flake8 = "==5.0.4"
|
|
103
|
+
parameterized = "==0.9.0"
|
|
104
104
|
pytest = "==7.4.4"
|
|
105
105
|
pytest-cov = "==4.1.0"
|
|
106
106
|
pytest-watcher = "==0.4.1"
|
|
@@ -143,7 +143,7 @@ known_first_party = ["flwr", "flwr_tool"]
|
|
|
143
143
|
|
|
144
144
|
[tool.black]
|
|
145
145
|
line-length = 88
|
|
146
|
-
target-version = ["
|
|
146
|
+
target-version = ["py39", "py310", "py311"]
|
|
147
147
|
|
|
148
148
|
[tool.pylint."MESSAGES CONTROL"]
|
|
149
149
|
disable = "duplicate-code,too-few-public-methods,useless-import-alias"
|
|
@@ -192,7 +192,7 @@ wrap-summaries = 88
|
|
|
192
192
|
wrap-descriptions = 88
|
|
193
193
|
|
|
194
194
|
[tool.ruff]
|
|
195
|
-
target-version = "
|
|
195
|
+
target-version = "py39"
|
|
196
196
|
line-length = 88
|
|
197
197
|
select = ["D", "E", "F", "W", "B", "ISC", "C4", "UP"]
|
|
198
198
|
fixable = ["D", "E", "F", "W", "B", "ISC", "C4", "UP"]
|
{flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/build.py
RENAMED
|
@@ -17,12 +17,11 @@
|
|
|
17
17
|
import os
|
|
18
18
|
import zipfile
|
|
19
19
|
from pathlib import Path
|
|
20
|
-
from typing import Optional
|
|
20
|
+
from typing import Annotated, Optional
|
|
21
21
|
|
|
22
22
|
import pathspec
|
|
23
23
|
import tomli_w
|
|
24
24
|
import typer
|
|
25
|
-
from typing_extensions import Annotated
|
|
26
25
|
|
|
27
26
|
from .config_utils import load_and_validate
|
|
28
27
|
from .utils import get_sha256_hash, is_valid_project_name
|
{flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/config_utils.py
RENAMED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
import zipfile
|
|
18
18
|
from io import BytesIO
|
|
19
19
|
from pathlib import Path
|
|
20
|
-
from typing import IO, Any,
|
|
20
|
+
from typing import IO, Any, Optional, Union, get_args
|
|
21
21
|
|
|
22
22
|
import tomli
|
|
23
23
|
|
|
@@ -25,7 +25,7 @@ from flwr.common import object_ref
|
|
|
25
25
|
from flwr.common.typing import UserConfigValue
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
def get_fab_config(fab_file: Union[Path, bytes]) ->
|
|
28
|
+
def get_fab_config(fab_file: Union[Path, bytes]) -> dict[str, Any]:
|
|
29
29
|
"""Extract the config from a FAB file or path.
|
|
30
30
|
|
|
31
31
|
Parameters
|
|
@@ -62,7 +62,7 @@ def get_fab_config(fab_file: Union[Path, bytes]) -> Dict[str, Any]:
|
|
|
62
62
|
return conf
|
|
63
63
|
|
|
64
64
|
|
|
65
|
-
def get_fab_metadata(fab_file: Union[Path, bytes]) ->
|
|
65
|
+
def get_fab_metadata(fab_file: Union[Path, bytes]) -> tuple[str, str]:
|
|
66
66
|
"""Extract the fab_id and the fab_version from a FAB file or path.
|
|
67
67
|
|
|
68
68
|
Parameters
|
|
@@ -87,7 +87,7 @@ def get_fab_metadata(fab_file: Union[Path, bytes]) -> Tuple[str, str]:
|
|
|
87
87
|
def load_and_validate(
|
|
88
88
|
path: Optional[Path] = None,
|
|
89
89
|
check_module: bool = True,
|
|
90
|
-
) ->
|
|
90
|
+
) -> tuple[Optional[dict[str, Any]], list[str], list[str]]:
|
|
91
91
|
"""Load and validate pyproject.toml as dict.
|
|
92
92
|
|
|
93
93
|
Returns
|
|
@@ -116,7 +116,7 @@ def load_and_validate(
|
|
|
116
116
|
return (config, errors, warnings)
|
|
117
117
|
|
|
118
118
|
|
|
119
|
-
def load(toml_path: Path) -> Optional[
|
|
119
|
+
def load(toml_path: Path) -> Optional[dict[str, Any]]:
|
|
120
120
|
"""Load pyproject.toml and return as dict."""
|
|
121
121
|
if not toml_path.is_file():
|
|
122
122
|
return None
|
|
@@ -125,7 +125,7 @@ def load(toml_path: Path) -> Optional[Dict[str, Any]]:
|
|
|
125
125
|
return load_from_string(toml_file.read())
|
|
126
126
|
|
|
127
127
|
|
|
128
|
-
def _validate_run_config(config_dict:
|
|
128
|
+
def _validate_run_config(config_dict: dict[str, Any], errors: list[str]) -> None:
|
|
129
129
|
for key, value in config_dict.items():
|
|
130
130
|
if isinstance(value, dict):
|
|
131
131
|
_validate_run_config(config_dict[key], errors)
|
|
@@ -137,7 +137,7 @@ def _validate_run_config(config_dict: Dict[str, Any], errors: List[str]) -> None
|
|
|
137
137
|
|
|
138
138
|
|
|
139
139
|
# pylint: disable=too-many-branches
|
|
140
|
-
def validate_fields(config:
|
|
140
|
+
def validate_fields(config: dict[str, Any]) -> tuple[bool, list[str], list[str]]:
|
|
141
141
|
"""Validate pyproject.toml fields."""
|
|
142
142
|
errors = []
|
|
143
143
|
warnings = []
|
|
@@ -183,10 +183,10 @@ def validate_fields(config: Dict[str, Any]) -> Tuple[bool, List[str], List[str]]
|
|
|
183
183
|
|
|
184
184
|
|
|
185
185
|
def validate(
|
|
186
|
-
config:
|
|
186
|
+
config: dict[str, Any],
|
|
187
187
|
check_module: bool = True,
|
|
188
188
|
project_dir: Optional[Union[str, Path]] = None,
|
|
189
|
-
) ->
|
|
189
|
+
) -> tuple[bool, list[str], list[str]]:
|
|
190
190
|
"""Validate pyproject.toml."""
|
|
191
191
|
is_valid, errors, warnings = validate_fields(config)
|
|
192
192
|
|
|
@@ -210,7 +210,7 @@ def validate(
|
|
|
210
210
|
return True, [], []
|
|
211
211
|
|
|
212
212
|
|
|
213
|
-
def load_from_string(toml_content: str) -> Optional[
|
|
213
|
+
def load_from_string(toml_content: str) -> Optional[dict[str, Any]]:
|
|
214
214
|
"""Load TOML content from a string and return as dict."""
|
|
215
215
|
try:
|
|
216
216
|
data = tomli.loads(toml_content)
|
{flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/install.py
RENAMED
|
@@ -21,10 +21,9 @@ import tempfile
|
|
|
21
21
|
import zipfile
|
|
22
22
|
from io import BytesIO
|
|
23
23
|
from pathlib import Path
|
|
24
|
-
from typing import IO, Optional, Union
|
|
24
|
+
from typing import IO, Annotated, Optional, Union
|
|
25
25
|
|
|
26
26
|
import typer
|
|
27
|
-
from typing_extensions import Annotated
|
|
28
27
|
|
|
29
28
|
from flwr.common.config import get_flwr_dir
|
|
30
29
|
|
{flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/new/new.py
RENAMED
|
@@ -18,10 +18,9 @@ import re
|
|
|
18
18
|
from enum import Enum
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
from string import Template
|
|
21
|
-
from typing import
|
|
21
|
+
from typing import Annotated, Optional
|
|
22
22
|
|
|
23
23
|
import typer
|
|
24
|
-
from typing_extensions import Annotated
|
|
25
24
|
|
|
26
25
|
from ..utils import (
|
|
27
26
|
is_valid_project_name,
|
|
@@ -70,7 +69,7 @@ def load_template(name: str) -> str:
|
|
|
70
69
|
return tpl_file.read()
|
|
71
70
|
|
|
72
71
|
|
|
73
|
-
def render_template(template: str, data:
|
|
72
|
+
def render_template(template: str, data: dict[str, str]) -> str:
|
|
74
73
|
"""Render template."""
|
|
75
74
|
tpl_file = load_template(template)
|
|
76
75
|
tpl = Template(tpl_file)
|
|
@@ -85,7 +84,7 @@ def create_file(file_path: Path, content: str) -> None:
|
|
|
85
84
|
file_path.write_text(content)
|
|
86
85
|
|
|
87
86
|
|
|
88
|
-
def render_and_create(file_path: Path, template: str, context:
|
|
87
|
+
def render_and_create(file_path: Path, template: str, context: dict[str, str]) -> None:
|
|
89
88
|
"""Render template and write to file."""
|
|
90
89
|
content = render_template(template, context)
|
|
91
90
|
create_file(file_path, content)
|
|
@@ -136,36 +135,23 @@ def new(
|
|
|
136
135
|
username = prompt_text("Please provide your Flower username")
|
|
137
136
|
|
|
138
137
|
if framework is not None:
|
|
139
|
-
|
|
138
|
+
framework_str = str(framework.value)
|
|
140
139
|
else:
|
|
141
|
-
|
|
140
|
+
framework_str = prompt_options(
|
|
142
141
|
"Please select ML framework by typing in the number",
|
|
143
142
|
[mlf.value for mlf in MlFramework],
|
|
144
143
|
)
|
|
145
|
-
selected_value = [
|
|
146
|
-
name
|
|
147
|
-
for name, value in vars(MlFramework).items()
|
|
148
|
-
if value == framework_value
|
|
149
|
-
]
|
|
150
|
-
framework_str_upper = selected_value[0]
|
|
151
|
-
|
|
152
|
-
framework_str = framework_str_upper.lower()
|
|
153
144
|
|
|
154
145
|
llm_challenge_str = None
|
|
155
|
-
if framework_str ==
|
|
146
|
+
if framework_str == MlFramework.FLOWERTUNE:
|
|
156
147
|
llm_challenge_value = prompt_options(
|
|
157
148
|
"Please select LLM challenge by typing in the number",
|
|
158
149
|
sorted([challenge.value for challenge in LlmChallengeName]),
|
|
159
150
|
)
|
|
160
|
-
|
|
161
|
-
name
|
|
162
|
-
for name, value in vars(LlmChallengeName).items()
|
|
163
|
-
if value == llm_challenge_value
|
|
164
|
-
]
|
|
165
|
-
llm_challenge_str = selected_value[0]
|
|
166
|
-
llm_challenge_str = llm_challenge_str.lower()
|
|
151
|
+
llm_challenge_str = llm_challenge_value.lower()
|
|
167
152
|
|
|
168
|
-
|
|
153
|
+
if framework_str == MlFramework.BASELINE:
|
|
154
|
+
framework_str = "baseline"
|
|
169
155
|
|
|
170
156
|
print(
|
|
171
157
|
typer.style(
|
|
@@ -176,19 +162,21 @@ def new(
|
|
|
176
162
|
)
|
|
177
163
|
|
|
178
164
|
context = {
|
|
179
|
-
"framework_str":
|
|
165
|
+
"framework_str": framework_str,
|
|
180
166
|
"import_name": import_name.replace("-", "_"),
|
|
181
167
|
"package_name": package_name,
|
|
182
168
|
"project_name": app_name,
|
|
183
169
|
"username": username,
|
|
184
170
|
}
|
|
185
171
|
|
|
172
|
+
template_name = framework_str.lower()
|
|
173
|
+
|
|
186
174
|
# List of files to render
|
|
187
175
|
if llm_challenge_str:
|
|
188
176
|
files = {
|
|
189
177
|
".gitignore": {"template": "app/.gitignore.tpl"},
|
|
190
|
-
"pyproject.toml": {"template": f"app/pyproject.{
|
|
191
|
-
"README.md": {"template": f"app/README.{
|
|
178
|
+
"pyproject.toml": {"template": f"app/pyproject.{template_name}.toml.tpl"},
|
|
179
|
+
"README.md": {"template": f"app/README.{template_name}.md.tpl"},
|
|
192
180
|
f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
|
|
193
181
|
f"{import_name}/server_app.py": {
|
|
194
182
|
"template": "app/code/flwr_tune/server_app.py.tpl"
|
|
@@ -235,44 +223,42 @@ def new(
|
|
|
235
223
|
files = {
|
|
236
224
|
".gitignore": {"template": "app/.gitignore.tpl"},
|
|
237
225
|
"README.md": {"template": "app/README.md.tpl"},
|
|
238
|
-
"pyproject.toml": {"template": f"app/pyproject.{
|
|
226
|
+
"pyproject.toml": {"template": f"app/pyproject.{template_name}.toml.tpl"},
|
|
239
227
|
f"{import_name}/__init__.py": {"template": "app/code/__init__.py.tpl"},
|
|
240
228
|
f"{import_name}/server_app.py": {
|
|
241
|
-
"template": f"app/code/server.{
|
|
229
|
+
"template": f"app/code/server.{template_name}.py.tpl"
|
|
242
230
|
},
|
|
243
231
|
f"{import_name}/client_app.py": {
|
|
244
|
-
"template": f"app/code/client.{
|
|
232
|
+
"template": f"app/code/client.{template_name}.py.tpl"
|
|
245
233
|
},
|
|
246
234
|
}
|
|
247
235
|
|
|
248
236
|
# Depending on the framework, generate task.py file
|
|
249
237
|
frameworks_with_tasks = [
|
|
250
|
-
MlFramework.PYTORCH.value
|
|
251
|
-
MlFramework.JAX.value
|
|
252
|
-
MlFramework.HUGGINGFACE.value
|
|
253
|
-
MlFramework.MLX.value
|
|
254
|
-
MlFramework.TENSORFLOW.value
|
|
238
|
+
MlFramework.PYTORCH.value,
|
|
239
|
+
MlFramework.JAX.value,
|
|
240
|
+
MlFramework.HUGGINGFACE.value,
|
|
241
|
+
MlFramework.MLX.value,
|
|
242
|
+
MlFramework.TENSORFLOW.value,
|
|
255
243
|
]
|
|
256
244
|
if framework_str in frameworks_with_tasks:
|
|
257
245
|
files[f"{import_name}/task.py"] = {
|
|
258
|
-
"template": f"app/code/task.{
|
|
246
|
+
"template": f"app/code/task.{template_name}.py.tpl"
|
|
259
247
|
}
|
|
260
248
|
|
|
261
|
-
if
|
|
249
|
+
if framework_str == "baseline":
|
|
262
250
|
# Include additional files for baseline template
|
|
263
251
|
for file_name in ["model", "dataset", "strategy", "utils", "__init__"]:
|
|
264
252
|
files[f"{import_name}/{file_name}.py"] = {
|
|
265
|
-
"template": f"app/code/{file_name}.{
|
|
253
|
+
"template": f"app/code/{file_name}.{template_name}.py.tpl"
|
|
266
254
|
}
|
|
267
255
|
|
|
268
256
|
# Replace README.md
|
|
269
|
-
files["README.md"]["template"] = f"app/README.{
|
|
257
|
+
files["README.md"]["template"] = f"app/README.{template_name}.md.tpl"
|
|
270
258
|
|
|
271
259
|
# Add LICENSE
|
|
272
260
|
files["LICENSE"] = {"template": "app/LICENSE.tpl"}
|
|
273
261
|
|
|
274
|
-
context["framework_str"] = "baseline"
|
|
275
|
-
|
|
276
262
|
for file_path, value in files.items():
|
|
277
263
|
render_and_create(
|
|
278
264
|
file_path=project_dir / file_path,
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
|
+
import torch
|
|
3
4
|
from flwr.client import ClientApp, NumPyClient
|
|
4
5
|
from flwr.common import Context
|
|
5
6
|
from transformers import AutoModelForSequenceClassification
|
|
6
7
|
|
|
7
|
-
from $import_name.task import
|
|
8
|
-
get_weights,
|
|
9
|
-
load_data,
|
|
10
|
-
set_weights,
|
|
11
|
-
train,
|
|
12
|
-
test,
|
|
13
|
-
CHECKPOINT,
|
|
14
|
-
DEVICE,
|
|
15
|
-
)
|
|
8
|
+
from $import_name.task import get_weights, load_data, set_weights, test, train
|
|
16
9
|
|
|
17
10
|
|
|
18
11
|
# Flower client
|
|
@@ -22,37 +15,34 @@ class FlowerClient(NumPyClient):
|
|
|
22
15
|
self.trainloader = trainloader
|
|
23
16
|
self.testloader = testloader
|
|
24
17
|
self.local_epochs = local_epochs
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return get_weights(self.net)
|
|
28
|
-
|
|
29
|
-
def set_parameters(self, parameters):
|
|
30
|
-
set_weights(self.net, parameters)
|
|
18
|
+
self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
|
|
19
|
+
self.net.to(self.device)
|
|
31
20
|
|
|
32
21
|
def fit(self, parameters, config):
|
|
33
|
-
self.
|
|
34
|
-
train(
|
|
35
|
-
|
|
36
|
-
self.trainloader,
|
|
37
|
-
epochs=self.local_epochs,
|
|
38
|
-
)
|
|
39
|
-
return self.get_parameters(config={}), len(self.trainloader), {}
|
|
22
|
+
set_weights(self.net, parameters)
|
|
23
|
+
train(self.net, self.trainloader, epochs=self.local_epochs, device=self.device)
|
|
24
|
+
return get_weights(self.net), len(self.trainloader), {}
|
|
40
25
|
|
|
41
26
|
def evaluate(self, parameters, config):
|
|
42
|
-
self.
|
|
43
|
-
loss, accuracy = test(self.net, self.testloader)
|
|
27
|
+
set_weights(self.net, parameters)
|
|
28
|
+
loss, accuracy = test(self.net, self.testloader, self.device)
|
|
44
29
|
return float(loss), len(self.testloader), {"accuracy": accuracy}
|
|
45
30
|
|
|
46
31
|
|
|
47
32
|
def client_fn(context: Context):
|
|
48
|
-
# Load model and data
|
|
49
|
-
net = AutoModelForSequenceClassification.from_pretrained(
|
|
50
|
-
CHECKPOINT, num_labels=2
|
|
51
|
-
).to(DEVICE)
|
|
52
33
|
|
|
34
|
+
# Get this client's dataset partition
|
|
53
35
|
partition_id = context.node_config["partition-id"]
|
|
54
36
|
num_partitions = context.node_config["num-partitions"]
|
|
55
|
-
|
|
37
|
+
model_name = context.run_config["model-name"]
|
|
38
|
+
trainloader, valloader = load_data(partition_id, num_partitions, model_name)
|
|
39
|
+
|
|
40
|
+
# Load model
|
|
41
|
+
num_labels = context.run_config["num-labels"]
|
|
42
|
+
net = AutoModelForSequenceClassification.from_pretrained(
|
|
43
|
+
model_name, num_labels=num_labels
|
|
44
|
+
)
|
|
45
|
+
|
|
56
46
|
local_epochs = context.run_config["local-epochs"]
|
|
57
47
|
|
|
58
48
|
# Return Client instance
|
|
@@ -17,9 +17,6 @@ class FlowerClient(NumPyClient):
|
|
|
17
17
|
self.batch_size = batch_size
|
|
18
18
|
self.verbose = verbose
|
|
19
19
|
|
|
20
|
-
def get_parameters(self, config):
|
|
21
|
-
return self.model.get_weights()
|
|
22
|
-
|
|
23
20
|
def fit(self, parameters, config):
|
|
24
21
|
self.model.set_weights(parameters)
|
|
25
22
|
self.model.fit(
|
flwr_nightly-1.12.0.dev20240913/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""$project_name: A Flower / $framework_str app."""
|
|
2
|
+
|
|
3
|
+
from flwr.common import Context, ndarrays_to_parameters
|
|
4
|
+
from flwr.server import ServerApp, ServerAppComponents, ServerConfig
|
|
5
|
+
from flwr.server.strategy import FedAvg
|
|
6
|
+
from transformers import AutoModelForSequenceClassification
|
|
7
|
+
|
|
8
|
+
from $import_name.task import get_weights
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def server_fn(context: Context):
|
|
12
|
+
# Read from config
|
|
13
|
+
num_rounds = context.run_config["num-server-rounds"]
|
|
14
|
+
fraction_fit = context.run_config["fraction-fit"]
|
|
15
|
+
|
|
16
|
+
# Initialize global model
|
|
17
|
+
model_name = context.run_config["model-name"]
|
|
18
|
+
num_labels = context.run_config["num-labels"]
|
|
19
|
+
net = AutoModelForSequenceClassification.from_pretrained(
|
|
20
|
+
model_name, num_labels=num_labels
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
weights = get_weights(net)
|
|
24
|
+
initial_parameters = ndarrays_to_parameters(weights)
|
|
25
|
+
|
|
26
|
+
# Define strategy
|
|
27
|
+
strategy = FedAvg(
|
|
28
|
+
fraction_fit=fraction_fit,
|
|
29
|
+
fraction_evaluate=1.0,
|
|
30
|
+
initial_parameters=initial_parameters,
|
|
31
|
+
)
|
|
32
|
+
config = ServerConfig(num_rounds=num_rounds)
|
|
33
|
+
|
|
34
|
+
return ServerAppComponents(strategy=strategy, config=config)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# Create ServerApp
|
|
38
|
+
app = ServerApp(server_fn=server_fn)
|
|
@@ -4,24 +4,25 @@ import warnings
|
|
|
4
4
|
from collections import OrderedDict
|
|
5
5
|
|
|
6
6
|
import torch
|
|
7
|
+
import transformers
|
|
8
|
+
from datasets.utils.logging import disable_progress_bar
|
|
7
9
|
from evaluate import load as load_metric
|
|
10
|
+
from flwr_datasets import FederatedDataset
|
|
11
|
+
from flwr_datasets.partitioner import IidPartitioner
|
|
8
12
|
from torch.optim import AdamW
|
|
9
13
|
from torch.utils.data import DataLoader
|
|
10
14
|
from transformers import AutoTokenizer, DataCollatorWithPadding
|
|
11
15
|
|
|
12
|
-
from flwr_datasets import FederatedDataset
|
|
13
|
-
from flwr_datasets.partitioner import IidPartitioner
|
|
14
|
-
|
|
15
|
-
|
|
16
16
|
warnings.filterwarnings("ignore", category=UserWarning)
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
warnings.filterwarnings("ignore", category=FutureWarning)
|
|
18
|
+
disable_progress_bar()
|
|
19
|
+
transformers.logging.set_verbosity_error()
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
fds = None # Cache FederatedDataset
|
|
22
23
|
|
|
23
24
|
|
|
24
|
-
def load_data(partition_id: int, num_partitions: int):
|
|
25
|
+
def load_data(partition_id: int, num_partitions: int, model_name: str):
|
|
25
26
|
"""Load IMDB data (training and eval)"""
|
|
26
27
|
# Only initialize `FederatedDataset` once
|
|
27
28
|
global fds
|
|
@@ -35,10 +36,12 @@ def load_data(partition_id: int, num_partitions: int):
|
|
|
35
36
|
# Divide data: 80% train, 20% test
|
|
36
37
|
partition_train_test = partition.train_test_split(test_size=0.2, seed=42)
|
|
37
38
|
|
|
38
|
-
tokenizer = AutoTokenizer.from_pretrained(
|
|
39
|
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|
39
40
|
|
|
40
41
|
def tokenize_function(examples):
|
|
41
|
-
return tokenizer(
|
|
42
|
+
return tokenizer(
|
|
43
|
+
examples["text"], truncation=True, add_special_tokens=True, max_length=512
|
|
44
|
+
)
|
|
42
45
|
|
|
43
46
|
partition_train_test = partition_train_test.map(tokenize_function, batched=True)
|
|
44
47
|
partition_train_test = partition_train_test.remove_columns("text")
|
|
@@ -59,12 +62,12 @@ def load_data(partition_id: int, num_partitions: int):
|
|
|
59
62
|
return trainloader, testloader
|
|
60
63
|
|
|
61
64
|
|
|
62
|
-
def train(net, trainloader, epochs):
|
|
65
|
+
def train(net, trainloader, epochs, device):
|
|
63
66
|
optimizer = AdamW(net.parameters(), lr=5e-5)
|
|
64
67
|
net.train()
|
|
65
68
|
for _ in range(epochs):
|
|
66
69
|
for batch in trainloader:
|
|
67
|
-
batch = {k: v.to(
|
|
70
|
+
batch = {k: v.to(device) for k, v in batch.items()}
|
|
68
71
|
outputs = net(**batch)
|
|
69
72
|
loss = outputs.loss
|
|
70
73
|
loss.backward()
|
|
@@ -72,12 +75,12 @@ def train(net, trainloader, epochs):
|
|
|
72
75
|
optimizer.zero_grad()
|
|
73
76
|
|
|
74
77
|
|
|
75
|
-
def test(net, testloader):
|
|
78
|
+
def test(net, testloader, device):
|
|
76
79
|
metric = load_metric("accuracy")
|
|
77
80
|
loss = 0
|
|
78
81
|
net.eval()
|
|
79
82
|
for batch in testloader:
|
|
80
|
-
batch = {k: v.to(
|
|
83
|
+
batch = {k: v.to(device) for k, v in batch.items()}
|
|
81
84
|
with torch.no_grad():
|
|
82
85
|
outputs = net(**batch)
|
|
83
86
|
logits = outputs.logits
|
|
@@ -8,7 +8,7 @@ version = "1.0.0"
|
|
|
8
8
|
description = ""
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
dependencies = [
|
|
11
|
-
"flwr[simulation]>=1.
|
|
11
|
+
"flwr[simulation]>=1.11.0",
|
|
12
12
|
"flwr-datasets>=0.3.0",
|
|
13
13
|
"torch==2.2.1",
|
|
14
14
|
"transformers>=4.30.0,<5.0",
|
|
@@ -29,10 +29,18 @@ clientapp = "$import_name.client_app:app"
|
|
|
29
29
|
|
|
30
30
|
[tool.flwr.app.config]
|
|
31
31
|
num-server-rounds = 3
|
|
32
|
+
fraction-fit = 0.5
|
|
32
33
|
local-epochs = 1
|
|
34
|
+
model-name = "prajjwal1/bert-tiny" # Set a larger model if you have access to more GPU resources
|
|
35
|
+
num-labels = 2
|
|
33
36
|
|
|
34
37
|
[tool.flwr.federations]
|
|
35
38
|
default = "localhost"
|
|
36
39
|
|
|
37
40
|
[tool.flwr.federations.localhost]
|
|
38
41
|
options.num-supernodes = 10
|
|
42
|
+
|
|
43
|
+
[tool.flwr.federations.localhost-gpu]
|
|
44
|
+
options.num-supernodes = 10
|
|
45
|
+
options.backend.client-resources.num-cpus = 4 # each ClientApp assumes to use 4CPUs
|
|
46
|
+
options.backend.client-resources.num-gpus = 0.25 # at most 4 ClientApps will run in a given GPU
|
{flwr_nightly-1.12.0.dev20240906 → flwr_nightly-1.12.0.dev20240913}/src/py/flwr/cli/run/run.py
RENAMED
|
@@ -20,10 +20,9 @@ import subprocess
|
|
|
20
20
|
import sys
|
|
21
21
|
from logging import DEBUG
|
|
22
22
|
from pathlib import Path
|
|
23
|
-
from typing import
|
|
23
|
+
from typing import Annotated, Any, Optional
|
|
24
24
|
|
|
25
25
|
import typer
|
|
26
|
-
from typing_extensions import Annotated
|
|
27
26
|
|
|
28
27
|
from flwr.cli.build import build
|
|
29
28
|
from flwr.cli.config_utils import load_and_validate
|
|
@@ -52,7 +51,7 @@ def run(
|
|
|
52
51
|
typer.Argument(help="Name of the federation to run the app on."),
|
|
53
52
|
] = None,
|
|
54
53
|
config_overrides: Annotated[
|
|
55
|
-
Optional[
|
|
54
|
+
Optional[list[str]],
|
|
56
55
|
typer.Option(
|
|
57
56
|
"--run-config",
|
|
58
57
|
"-c",
|
|
@@ -125,8 +124,8 @@ def run(
|
|
|
125
124
|
|
|
126
125
|
def _run_with_superexec(
|
|
127
126
|
app: Path,
|
|
128
|
-
federation_config:
|
|
129
|
-
config_overrides: Optional[
|
|
127
|
+
federation_config: dict[str, Any],
|
|
128
|
+
config_overrides: Optional[list[str]],
|
|
130
129
|
) -> None:
|
|
131
130
|
|
|
132
131
|
insecure_str = federation_config.get("insecure")
|
|
@@ -187,8 +186,8 @@ def _run_with_superexec(
|
|
|
187
186
|
|
|
188
187
|
def _run_without_superexec(
|
|
189
188
|
app: Optional[Path],
|
|
190
|
-
federation_config:
|
|
191
|
-
config_overrides: Optional[
|
|
189
|
+
federation_config: dict[str, Any],
|
|
190
|
+
config_overrides: Optional[list[str]],
|
|
192
191
|
federation: str,
|
|
193
192
|
) -> None:
|
|
194
193
|
try:
|