flwr-nightly 1.12.0.dev20241006__tar.gz → 1.12.0.dev20241008__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.dev20241006 → flwr_nightly-1.12.0.dev20241008}/PKG-INFO +1 -1
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/pyproject.toml +8 -19
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/new.py +2 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +11 -17
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +16 -36
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +4 -5
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +8 -11
- flwr_nightly-1.12.0.dev20241008/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +63 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +9 -3
- flwr_nightly-1.12.0.dev20241008/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +31 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +7 -2
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +13 -1
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +2 -2
- flwr_nightly-1.12.0.dev20241008/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +7 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +3 -3
- flwr_nightly-1.12.0.dev20241008/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +67 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +3 -2
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +2 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/constant.py +6 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/message.py +32 -15
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/compat/driver_client_proxy.py +15 -29
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/driver/inmemory_driver.py +5 -1
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/aggregate.py +22 -8
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/state/in_memory_state.py +30 -2
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/state/sqlite_state.py +29 -2
- flwr_nightly-1.12.0.dev20241006/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -97
- flwr_nightly-1.12.0.dev20241006/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -20
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/LICENSE +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/README.md +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/build.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/example.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/install.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/log.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +1 -1
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +1 -1
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/run/run.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/client.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/client_app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/clientapp/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/node_state.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/node_state_tests.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/client/typing.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/address.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/config.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/context.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/date.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/dp.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/logger.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/object_ref.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/parameter.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/pyproject.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/serde.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/telemetry.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/typing.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/version.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/driver_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/driver_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/py.typed +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/client_manager.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/compat/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/criterion.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/history.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/server.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/server_app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/server_config.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/driver/driver_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/driver/driver_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/state/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/state/state.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/superlink/state/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/typing.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/simulation/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/superexec/app.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/superexec/executor.py +0 -0
- {flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "flwr-nightly"
|
|
7
|
-
version = "1.12.0.
|
|
7
|
+
version = "1.12.0.dev20241008"
|
|
8
8
|
description = "Flower: A Friendly Federated Learning Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -43,12 +43,8 @@ classifiers = [
|
|
|
43
43
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
44
44
|
"Typing :: Typed",
|
|
45
45
|
]
|
|
46
|
-
packages = [
|
|
47
|
-
|
|
48
|
-
]
|
|
49
|
-
exclude = [
|
|
50
|
-
"src/py/**/*_test.py",
|
|
51
|
-
]
|
|
46
|
+
packages = [{ include = "flwr", from = "src/py" }]
|
|
47
|
+
exclude = ["src/py/**/*_test.py"]
|
|
52
48
|
|
|
53
49
|
[tool.poetry.scripts]
|
|
54
50
|
# `flwr` CLI
|
|
@@ -62,7 +58,7 @@ flower-superlink = "flwr.server.app:run_superlink"
|
|
|
62
58
|
flower-supernode = "flwr.client.supernode.app:run_supernode"
|
|
63
59
|
flower-server-app = "flwr.server.run_serverapp:run_server_app"
|
|
64
60
|
flwr-clientapp = "flwr.client.clientapp:flwr_clientapp"
|
|
65
|
-
flower-client-app = "flwr.client.supernode:run_client_app"
|
|
61
|
+
flower-client-app = "flwr.client.supernode:run_client_app" # Deprecated
|
|
66
62
|
|
|
67
63
|
[tool.poetry.dependencies]
|
|
68
64
|
python = "^3.9"
|
|
@@ -96,6 +92,7 @@ types-setuptools = "==69.0.0.20240125"
|
|
|
96
92
|
clang-format = "==17.0.6"
|
|
97
93
|
isort = "==5.13.2"
|
|
98
94
|
black = { version = "==24.2.0", extras = ["jupyter"] }
|
|
95
|
+
taplo = "==0.9.3"
|
|
99
96
|
docformatter = "==1.7.5"
|
|
100
97
|
mypy = "==1.8.0"
|
|
101
98
|
pylint = "==3.0.3"
|
|
@@ -160,10 +157,7 @@ disable = "duplicate-code,too-few-public-methods,useless-import-alias"
|
|
|
160
157
|
[tool.pytest.ini_options]
|
|
161
158
|
minversion = "6.2"
|
|
162
159
|
addopts = "-qq"
|
|
163
|
-
testpaths = [
|
|
164
|
-
"src/py/flwr",
|
|
165
|
-
"src/py/flwr_tool",
|
|
166
|
-
]
|
|
160
|
+
testpaths = ["src/py/flwr", "src/py/flwr_tool"]
|
|
167
161
|
filterwarnings = "ignore::DeprecationWarning"
|
|
168
162
|
|
|
169
163
|
[tool.pytest-watcher]
|
|
@@ -176,17 +170,12 @@ patterns = ["*.py"]
|
|
|
176
170
|
ignore_patterns = []
|
|
177
171
|
|
|
178
172
|
[tool.mypy]
|
|
179
|
-
plugins = [
|
|
180
|
-
"numpy.typing.mypy_plugin",
|
|
181
|
-
]
|
|
173
|
+
plugins = ["numpy.typing.mypy_plugin"]
|
|
182
174
|
ignore_missing_imports = true
|
|
183
175
|
strict = true
|
|
184
176
|
|
|
185
177
|
[[tool.mypy.overrides]]
|
|
186
|
-
module = [
|
|
187
|
-
"importlib.metadata.*",
|
|
188
|
-
"importlib_metadata.*",
|
|
189
|
-
]
|
|
178
|
+
module = ["importlib.metadata.*", "importlib_metadata.*"]
|
|
190
179
|
follow_imports = "skip"
|
|
191
180
|
follow_imports_for_stubs = true
|
|
192
181
|
disallow_untyped_calls = false
|
{flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/cli/new/new.py
RENAMED
|
@@ -240,6 +240,8 @@ def new(
|
|
|
240
240
|
MlFramework.HUGGINGFACE.value,
|
|
241
241
|
MlFramework.MLX.value,
|
|
242
242
|
MlFramework.TENSORFLOW.value,
|
|
243
|
+
MlFramework.SKLEARN.value,
|
|
244
|
+
MlFramework.NUMPY.value,
|
|
243
245
|
]
|
|
244
246
|
if framework_str in frameworks_with_tasks:
|
|
245
247
|
files[f"{import_name}/task.py"] = {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
3
|
import jax
|
|
4
|
-
from flwr.client import NumPyClient, ClientApp
|
|
5
|
-
from flwr.common import Context
|
|
6
4
|
|
|
5
|
+
from flwr.client import ClientApp, NumPyClient
|
|
6
|
+
from flwr.common import Context
|
|
7
7
|
from $import_name.task import (
|
|
8
8
|
evaluation,
|
|
9
9
|
get_params,
|
|
@@ -17,37 +17,31 @@ from $import_name.task import (
|
|
|
17
17
|
|
|
18
18
|
# Define Flower Client and client_fn
|
|
19
19
|
class FlowerClient(NumPyClient):
|
|
20
|
-
def __init__(self):
|
|
20
|
+
def __init__(self, input_dim):
|
|
21
21
|
self.train_x, self.train_y, self.test_x, self.test_y = load_data()
|
|
22
22
|
self.grad_fn = jax.grad(loss_fn)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
self.params = load_model(model_shape)
|
|
26
|
-
|
|
27
|
-
def get_parameters(self, config):
|
|
28
|
-
return get_params(self.params)
|
|
29
|
-
|
|
30
|
-
def set_parameters(self, parameters):
|
|
31
|
-
set_params(self.params, parameters)
|
|
23
|
+
self.params = load_model((input_dim,))
|
|
32
24
|
|
|
33
25
|
def fit(self, parameters, config):
|
|
34
|
-
self.
|
|
26
|
+
set_params(self.params, parameters)
|
|
35
27
|
self.params, loss, num_examples = train(
|
|
36
28
|
self.params, self.grad_fn, self.train_x, self.train_y
|
|
37
29
|
)
|
|
38
|
-
|
|
39
|
-
return parameters, num_examples, {"loss": float(loss)}
|
|
30
|
+
return get_params(self.params), num_examples, {"loss": float(loss)}
|
|
40
31
|
|
|
41
32
|
def evaluate(self, parameters, config):
|
|
42
|
-
self.
|
|
33
|
+
set_params(self.params, parameters)
|
|
43
34
|
loss, num_examples = evaluation(
|
|
44
35
|
self.params, self.grad_fn, self.test_x, self.test_y
|
|
45
36
|
)
|
|
46
37
|
return float(loss), num_examples, {"loss": float(loss)}
|
|
47
38
|
|
|
39
|
+
|
|
48
40
|
def client_fn(context: Context):
|
|
41
|
+
input_dim = context.run_config["input-dim"]
|
|
42
|
+
|
|
49
43
|
# Return Client instance
|
|
50
|
-
return FlowerClient().to_client()
|
|
44
|
+
return FlowerClient(input_dim).to_client()
|
|
51
45
|
|
|
52
46
|
|
|
53
47
|
# Flower ClientApp
|
|
@@ -3,17 +3,18 @@
|
|
|
3
3
|
import mlx.core as mx
|
|
4
4
|
import mlx.nn as nn
|
|
5
5
|
import mlx.optimizers as optim
|
|
6
|
-
from flwr.client import NumPyClient, ClientApp
|
|
7
|
-
from flwr.common import Context
|
|
8
6
|
|
|
7
|
+
from flwr.client import ClientApp, NumPyClient
|
|
8
|
+
from flwr.common import Context
|
|
9
|
+
from flwr.common.config import UserConfig
|
|
9
10
|
from $import_name.task import (
|
|
11
|
+
MLP,
|
|
10
12
|
batch_iterate,
|
|
11
13
|
eval_fn,
|
|
12
14
|
get_params,
|
|
13
15
|
load_data,
|
|
14
16
|
loss_fn,
|
|
15
17
|
set_params,
|
|
16
|
-
MLP,
|
|
17
18
|
)
|
|
18
19
|
|
|
19
20
|
|
|
@@ -22,37 +23,24 @@ class FlowerClient(NumPyClient):
|
|
|
22
23
|
def __init__(
|
|
23
24
|
self,
|
|
24
25
|
data,
|
|
25
|
-
|
|
26
|
-
hidden_dim,
|
|
26
|
+
run_config: UserConfig,
|
|
27
27
|
num_classes,
|
|
28
|
-
batch_size,
|
|
29
|
-
learning_rate,
|
|
30
|
-
num_epochs,
|
|
31
28
|
):
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
self.num_epochs =
|
|
29
|
+
num_layers = run_config["num-layers"]
|
|
30
|
+
hidden_dim = run_config["hidden-dim"]
|
|
31
|
+
input_dim = run_config["input-dim"]
|
|
32
|
+
batch_size = run_config["batch-size"]
|
|
33
|
+
learning_rate = run_config["lr"]
|
|
34
|
+
self.num_epochs = run_config["local-epochs"]
|
|
38
35
|
|
|
39
36
|
self.train_images, self.train_labels, self.test_images, self.test_labels = data
|
|
40
|
-
self.model = MLP(
|
|
41
|
-
num_layers, self.train_images.shape[-1], hidden_dim, num_classes
|
|
42
|
-
)
|
|
37
|
+
self.model = MLP(num_layers, input_dim, hidden_dim, num_classes)
|
|
43
38
|
self.optimizer = optim.SGD(learning_rate=learning_rate)
|
|
44
39
|
self.loss_and_grad_fn = nn.value_and_grad(self.model, loss_fn)
|
|
45
|
-
self.num_epochs = num_epochs
|
|
46
40
|
self.batch_size = batch_size
|
|
47
41
|
|
|
48
|
-
def get_parameters(self, config):
|
|
49
|
-
return get_params(self.model)
|
|
50
|
-
|
|
51
|
-
def set_parameters(self, parameters):
|
|
52
|
-
set_params(self.model, parameters)
|
|
53
|
-
|
|
54
42
|
def fit(self, parameters, config):
|
|
55
|
-
self.
|
|
43
|
+
set_params(self.model, parameters)
|
|
56
44
|
for _ in range(self.num_epochs):
|
|
57
45
|
for X, y in batch_iterate(
|
|
58
46
|
self.batch_size, self.train_images, self.train_labels
|
|
@@ -60,10 +48,10 @@ class FlowerClient(NumPyClient):
|
|
|
60
48
|
_, grads = self.loss_and_grad_fn(self.model, X, y)
|
|
61
49
|
self.optimizer.update(self.model, grads)
|
|
62
50
|
mx.eval(self.model.parameters(), self.optimizer.state)
|
|
63
|
-
return self.
|
|
51
|
+
return get_params(self.model), len(self.train_images), {}
|
|
64
52
|
|
|
65
53
|
def evaluate(self, parameters, config):
|
|
66
|
-
self.
|
|
54
|
+
set_params(self.model, parameters)
|
|
67
55
|
accuracy = eval_fn(self.model, self.test_images, self.test_labels)
|
|
68
56
|
loss = loss_fn(self.model, self.test_images, self.test_labels)
|
|
69
57
|
return loss.item(), len(self.test_images), {"accuracy": accuracy.item()}
|
|
@@ -73,18 +61,10 @@ def client_fn(context: Context):
|
|
|
73
61
|
partition_id = context.node_config["partition-id"]
|
|
74
62
|
num_partitions = context.node_config["num-partitions"]
|
|
75
63
|
data = load_data(partition_id, num_partitions)
|
|
76
|
-
|
|
77
|
-
num_layers = context.run_config["num-layers"]
|
|
78
|
-
hidden_dim = context.run_config["hidden-dim"]
|
|
79
64
|
num_classes = 10
|
|
80
|
-
batch_size = context.run_config["batch-size"]
|
|
81
|
-
learning_rate = context.run_config["lr"]
|
|
82
|
-
num_epochs = context.run_config["local-epochs"]
|
|
83
65
|
|
|
84
66
|
# Return Client instance
|
|
85
|
-
return FlowerClient(
|
|
86
|
-
data, num_layers, hidden_dim, num_classes, batch_size, learning_rate, num_epochs
|
|
87
|
-
).to_client()
|
|
67
|
+
return FlowerClient(data, context.run_config, num_classes).to_client()
|
|
88
68
|
|
|
89
69
|
|
|
90
70
|
# Flower ClientApp
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
|
-
from flwr.client import
|
|
3
|
+
from flwr.client import ClientApp, NumPyClient
|
|
4
4
|
from flwr.common import Context
|
|
5
|
-
|
|
5
|
+
from $import_name.task import get_dummy_model
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class FlowerClient(NumPyClient):
|
|
9
|
-
def get_parameters(self, config):
|
|
10
|
-
return [np.ones((1, 1))]
|
|
11
9
|
|
|
12
10
|
def fit(self, parameters, config):
|
|
13
|
-
|
|
11
|
+
model = get_dummy_model()
|
|
12
|
+
return [model], 1, {}
|
|
14
13
|
|
|
15
14
|
def evaluate(self, parameters, config):
|
|
16
15
|
return float(0.0), 1, {"accuracy": float(1.0)}
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
3
|
import torch
|
|
4
|
-
from flwr.client import NumPyClient, ClientApp
|
|
5
|
-
from flwr.common import Context
|
|
6
4
|
|
|
7
|
-
from
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
get_weights,
|
|
11
|
-
set_weights,
|
|
12
|
-
train,
|
|
13
|
-
test,
|
|
14
|
-
)
|
|
5
|
+
from flwr.client import ClientApp, NumPyClient
|
|
6
|
+
from flwr.common import Context
|
|
7
|
+
from $import_name.task import Net, get_weights, load_data, set_weights, test, train
|
|
15
8
|
|
|
16
9
|
|
|
17
10
|
# Define Flower Client and client_fn
|
|
@@ -32,7 +25,11 @@ class FlowerClient(NumPyClient):
|
|
|
32
25
|
self.local_epochs,
|
|
33
26
|
self.device,
|
|
34
27
|
)
|
|
35
|
-
return
|
|
28
|
+
return (
|
|
29
|
+
get_weights(self.net),
|
|
30
|
+
len(self.trainloader.dataset),
|
|
31
|
+
{"train_loss": train_loss},
|
|
32
|
+
)
|
|
36
33
|
|
|
37
34
|
def evaluate(self, parameters, config):
|
|
38
35
|
set_weights(self.net, parameters)
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"""$project_name: A Flower / $framework_str app."""
|
|
2
|
+
|
|
3
|
+
import warnings
|
|
4
|
+
|
|
5
|
+
from sklearn.metrics import log_loss
|
|
6
|
+
|
|
7
|
+
from flwr.client import ClientApp, NumPyClient
|
|
8
|
+
from flwr.common import Context
|
|
9
|
+
from $import_name.task import (
|
|
10
|
+
get_model,
|
|
11
|
+
get_model_params,
|
|
12
|
+
load_data,
|
|
13
|
+
set_initial_params,
|
|
14
|
+
set_model_params,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class FlowerClient(NumPyClient):
|
|
19
|
+
def __init__(self, model, X_train, X_test, y_train, y_test):
|
|
20
|
+
self.model = model
|
|
21
|
+
self.X_train = X_train
|
|
22
|
+
self.X_test = X_test
|
|
23
|
+
self.y_train = y_train
|
|
24
|
+
self.y_test = y_test
|
|
25
|
+
|
|
26
|
+
def fit(self, parameters, config):
|
|
27
|
+
set_model_params(self.model, parameters)
|
|
28
|
+
|
|
29
|
+
# Ignore convergence failure due to low local epochs
|
|
30
|
+
with warnings.catch_warnings():
|
|
31
|
+
warnings.simplefilter("ignore")
|
|
32
|
+
self.model.fit(self.X_train, self.y_train)
|
|
33
|
+
|
|
34
|
+
return get_model_params(self.model), len(self.X_train), {}
|
|
35
|
+
|
|
36
|
+
def evaluate(self, parameters, config):
|
|
37
|
+
set_model_params(self.model, parameters)
|
|
38
|
+
|
|
39
|
+
loss = log_loss(self.y_test, self.model.predict_proba(self.X_test))
|
|
40
|
+
accuracy = self.model.score(self.X_test, self.y_test)
|
|
41
|
+
|
|
42
|
+
return loss, len(self.X_test), {"accuracy": accuracy}
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def client_fn(context: Context):
|
|
46
|
+
partition_id = context.node_config["partition-id"]
|
|
47
|
+
num_partitions = context.node_config["num-partitions"]
|
|
48
|
+
|
|
49
|
+
X_train, X_test, y_train, y_test = load_data(partition_id, num_partitions)
|
|
50
|
+
|
|
51
|
+
# Create LogisticRegression Model
|
|
52
|
+
penalty = context.run_config["penalty"]
|
|
53
|
+
local_epochs = context.run_config["local-epochs"]
|
|
54
|
+
model = get_model(penalty, local_epochs)
|
|
55
|
+
|
|
56
|
+
# Setting initial parameters, akin to model.compile for keras models
|
|
57
|
+
set_initial_params(model)
|
|
58
|
+
|
|
59
|
+
return FlowerClient(model, X_train, X_test, y_train, y_test).to_client()
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# Flower ClientApp
|
|
63
|
+
app = ClientApp(client_fn=client_fn)
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
|
-
from flwr.common import Context
|
|
4
|
-
from flwr.server.strategy import FedAvg
|
|
3
|
+
from flwr.common import Context, ndarrays_to_parameters
|
|
5
4
|
from flwr.server import ServerApp, ServerAppComponents, ServerConfig
|
|
5
|
+
from flwr.server.strategy import FedAvg
|
|
6
|
+
from $import_name.task import get_params, load_model
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
def server_fn(context: Context):
|
|
9
10
|
# Read from config
|
|
10
11
|
num_rounds = context.run_config["num-server-rounds"]
|
|
12
|
+
input_dim = context.run_config["input-dim"]
|
|
13
|
+
|
|
14
|
+
# Initialize global model
|
|
15
|
+
params = get_params(load_model((input_dim,)))
|
|
16
|
+
initial_parameters = ndarrays_to_parameters(params)
|
|
11
17
|
|
|
12
18
|
# Define strategy
|
|
13
|
-
strategy = FedAvg()
|
|
19
|
+
strategy = FedAvg(initial_parameters=initial_parameters)
|
|
14
20
|
config = ServerConfig(num_rounds=num_rounds)
|
|
15
21
|
|
|
16
22
|
return ServerAppComponents(strategy=strategy, config=config)
|
|
@@ -0,0 +1,31 @@
|
|
|
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 $import_name.task import MLP, get_params
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def server_fn(context: Context):
|
|
10
|
+
# Read from config
|
|
11
|
+
num_rounds = context.run_config["num-server-rounds"]
|
|
12
|
+
|
|
13
|
+
num_classes = 10
|
|
14
|
+
num_layers = context.run_config["num-layers"]
|
|
15
|
+
input_dim = context.run_config["input-dim"]
|
|
16
|
+
hidden_dim = context.run_config["hidden-dim"]
|
|
17
|
+
|
|
18
|
+
# Initialize global model
|
|
19
|
+
model = MLP(num_layers, input_dim, hidden_dim, num_classes)
|
|
20
|
+
params = get_params(model)
|
|
21
|
+
initial_parameters = ndarrays_to_parameters(params)
|
|
22
|
+
|
|
23
|
+
# Define strategy
|
|
24
|
+
strategy = FedAvg(initial_parameters=initial_parameters)
|
|
25
|
+
config = ServerConfig(num_rounds=num_rounds)
|
|
26
|
+
|
|
27
|
+
return ServerAppComponents(strategy=strategy, config=config)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Create ServerApp
|
|
31
|
+
app = ServerApp(server_fn=server_fn)
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
|
-
from flwr.common import Context
|
|
3
|
+
from flwr.common import Context, ndarrays_to_parameters
|
|
4
4
|
from flwr.server import ServerApp, ServerAppComponents, ServerConfig
|
|
5
5
|
from flwr.server.strategy import FedAvg
|
|
6
|
+
from $import_name.task import get_dummy_model
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
def server_fn(context: Context):
|
|
9
10
|
# Read from config
|
|
10
11
|
num_rounds = context.run_config["num-server-rounds"]
|
|
11
12
|
|
|
13
|
+
# Initial model
|
|
14
|
+
model = get_dummy_model()
|
|
15
|
+
dummy_parameters = ndarrays_to_parameters([model])
|
|
16
|
+
|
|
12
17
|
# Define strategy
|
|
13
|
-
strategy = FedAvg()
|
|
18
|
+
strategy = FedAvg(initial_parameters=dummy_parameters)
|
|
14
19
|
config = ServerConfig(num_rounds=num_rounds)
|
|
15
20
|
|
|
16
21
|
return ServerAppComponents(strategy=strategy, config=config)
|
|
@@ -1,19 +1,31 @@
|
|
|
1
1
|
"""$project_name: A Flower / $framework_str app."""
|
|
2
2
|
|
|
3
|
-
from flwr.common import Context
|
|
3
|
+
from flwr.common import Context, ndarrays_to_parameters
|
|
4
4
|
from flwr.server import ServerApp, ServerAppComponents, ServerConfig
|
|
5
5
|
from flwr.server.strategy import FedAvg
|
|
6
|
+
from $import_name.task import get_model, get_model_params, set_initial_params
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
def server_fn(context: Context):
|
|
9
10
|
# Read from config
|
|
10
11
|
num_rounds = context.run_config["num-server-rounds"]
|
|
11
12
|
|
|
13
|
+
# Create LogisticRegression Model
|
|
14
|
+
penalty = context.run_config["penalty"]
|
|
15
|
+
local_epochs = context.run_config["local-epochs"]
|
|
16
|
+
model = get_model(penalty, local_epochs)
|
|
17
|
+
|
|
18
|
+
# Setting initial parameters, akin to model.compile for keras models
|
|
19
|
+
set_initial_params(model)
|
|
20
|
+
|
|
21
|
+
initial_parameters = ndarrays_to_parameters(get_model_params(model))
|
|
22
|
+
|
|
12
23
|
# Define strategy
|
|
13
24
|
strategy = FedAvg(
|
|
14
25
|
fraction_fit=1.0,
|
|
15
26
|
fraction_evaluate=1.0,
|
|
16
27
|
min_available_clients=2,
|
|
28
|
+
initial_parameters=initial_parameters,
|
|
17
29
|
)
|
|
18
30
|
config = ServerConfig(num_rounds=num_rounds)
|
|
19
31
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import jax
|
|
4
4
|
import jax.numpy as jnp
|
|
5
|
+
import numpy as np
|
|
5
6
|
from sklearn.datasets import make_regression
|
|
6
7
|
from sklearn.model_selection import train_test_split
|
|
7
|
-
import numpy as np
|
|
8
8
|
|
|
9
9
|
key = jax.random.PRNGKey(0)
|
|
10
10
|
|
|
@@ -33,7 +33,7 @@ def train(params, grad_fn, X, y):
|
|
|
33
33
|
num_examples = X.shape[0]
|
|
34
34
|
for epochs in range(50):
|
|
35
35
|
grads = grad_fn(params, X, y)
|
|
36
|
-
params = jax.
|
|
36
|
+
params = jax.tree.map(lambda p, g: p - 0.05 * g, params, grads)
|
|
37
37
|
loss = loss_fn(params, X, y)
|
|
38
38
|
return params, loss, num_examples
|
|
39
39
|
|
|
@@ -5,10 +5,10 @@ from collections import OrderedDict
|
|
|
5
5
|
import torch
|
|
6
6
|
import torch.nn as nn
|
|
7
7
|
import torch.nn.functional as F
|
|
8
|
-
from torch.utils.data import DataLoader
|
|
9
|
-
from torchvision.transforms import Compose, Normalize, ToTensor
|
|
10
8
|
from flwr_datasets import FederatedDataset
|
|
11
9
|
from flwr_datasets.partitioner import IidPartitioner
|
|
10
|
+
from torch.utils.data import DataLoader
|
|
11
|
+
from torchvision.transforms import Compose, Normalize, ToTensor
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class Net(nn.Module):
|
|
@@ -67,7 +67,7 @@ def train(net, trainloader, epochs, device):
|
|
|
67
67
|
"""Train the model on the training set."""
|
|
68
68
|
net.to(device) # move model to GPU if available
|
|
69
69
|
criterion = torch.nn.CrossEntropyLoss().to(device)
|
|
70
|
-
optimizer = torch.optim.
|
|
70
|
+
optimizer = torch.optim.Adam(net.parameters(), lr=0.01)
|
|
71
71
|
net.train()
|
|
72
72
|
running_loss = 0.0
|
|
73
73
|
for _ in range(epochs):
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""$project_name: A Flower / $framework_str app."""
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
from flwr_datasets import FederatedDataset
|
|
5
|
+
from flwr_datasets.partitioner import IidPartitioner
|
|
6
|
+
from sklearn.linear_model import LogisticRegression
|
|
7
|
+
|
|
8
|
+
fds = None # Cache FederatedDataset
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def load_data(partition_id: int, num_partitions: int):
|
|
12
|
+
"""Load partition MNIST data."""
|
|
13
|
+
# Only initialize `FederatedDataset` once
|
|
14
|
+
global fds
|
|
15
|
+
if fds is None:
|
|
16
|
+
partitioner = IidPartitioner(num_partitions=num_partitions)
|
|
17
|
+
fds = FederatedDataset(
|
|
18
|
+
dataset="mnist",
|
|
19
|
+
partitioners={"train": partitioner},
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
dataset = fds.load_partition(partition_id, "train").with_format("numpy")
|
|
23
|
+
|
|
24
|
+
X, y = dataset["image"].reshape((len(dataset), -1)), dataset["label"]
|
|
25
|
+
|
|
26
|
+
# Split the on edge data: 80% train, 20% test
|
|
27
|
+
X_train, X_test = X[: int(0.8 * len(X))], X[int(0.8 * len(X)) :]
|
|
28
|
+
y_train, y_test = y[: int(0.8 * len(y))], y[int(0.8 * len(y)) :]
|
|
29
|
+
|
|
30
|
+
return X_train, X_test, y_train, y_test
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def get_model(penalty: str, local_epochs: int):
|
|
34
|
+
|
|
35
|
+
return LogisticRegression(
|
|
36
|
+
penalty=penalty,
|
|
37
|
+
max_iter=local_epochs,
|
|
38
|
+
warm_start=True,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def get_model_params(model):
|
|
43
|
+
if model.fit_intercept:
|
|
44
|
+
params = [
|
|
45
|
+
model.coef_,
|
|
46
|
+
model.intercept_,
|
|
47
|
+
]
|
|
48
|
+
else:
|
|
49
|
+
params = [model.coef_]
|
|
50
|
+
return params
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def set_model_params(model, params):
|
|
54
|
+
model.coef_ = params[0]
|
|
55
|
+
if model.fit_intercept:
|
|
56
|
+
model.intercept_ = params[1]
|
|
57
|
+
return model
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def set_initial_params(model):
|
|
61
|
+
n_classes = 10 # MNIST has 10 classes
|
|
62
|
+
n_features = 784 # Number of features in dataset
|
|
63
|
+
model.classes_ = np.array([i for i in range(10)])
|
|
64
|
+
|
|
65
|
+
model.coef_ = np.zeros((n_classes, n_features))
|
|
66
|
+
if model.fit_intercept:
|
|
67
|
+
model.intercept_ = np.zeros((n_classes,))
|
|
@@ -9,8 +9,8 @@ description = ""
|
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
dependencies = [
|
|
11
11
|
"flwr[simulation]>=1.10.0",
|
|
12
|
-
"jax==0.4.
|
|
13
|
-
"jaxlib==0.4.
|
|
12
|
+
"jax==0.4.30",
|
|
13
|
+
"jaxlib==0.4.30",
|
|
14
14
|
"scikit-learn==1.3.2",
|
|
15
15
|
]
|
|
16
16
|
|
|
@@ -26,6 +26,7 @@ clientapp = "$import_name.client_app:app"
|
|
|
26
26
|
|
|
27
27
|
[tool.flwr.app.config]
|
|
28
28
|
num-server-rounds = 3
|
|
29
|
+
input-dim = 3
|
|
29
30
|
|
|
30
31
|
[tool.flwr.federations]
|
|
31
32
|
default = "local-simulation"
|
{flwr_nightly-1.12.0.dev20241006 → flwr_nightly-1.12.0.dev20241008}/src/py/flwr/common/constant.py
RENAMED
|
@@ -63,7 +63,10 @@ NODE_ID_NUM_BYTES = 8
|
|
|
63
63
|
|
|
64
64
|
# Constants for FAB
|
|
65
65
|
APP_DIR = "apps"
|
|
66
|
+
FAB_ALLOWED_EXTENSIONS = {".py", ".toml", ".md"}
|
|
66
67
|
FAB_CONFIG_FILE = "pyproject.toml"
|
|
68
|
+
FAB_DATE = (2024, 10, 1, 0, 0, 0)
|
|
69
|
+
FAB_HASH_TRUNCATION = 8
|
|
67
70
|
FLWR_HOME = "FLWR_HOME"
|
|
68
71
|
|
|
69
72
|
# Constants entries in Node config for Simulation
|
|
@@ -78,6 +81,9 @@ GRPC_ADAPTER_METADATA_SHOULD_EXIT_KEY = "should-exit"
|
|
|
78
81
|
GRPC_ADAPTER_METADATA_MESSAGE_MODULE_KEY = "grpc-message-module"
|
|
79
82
|
GRPC_ADAPTER_METADATA_MESSAGE_QUALNAME_KEY = "grpc-message-qualname"
|
|
80
83
|
|
|
84
|
+
# Message TTL
|
|
85
|
+
MESSAGE_TTL_TOLERANCE = 1e-1
|
|
86
|
+
|
|
81
87
|
|
|
82
88
|
class MessageType:
|
|
83
89
|
"""Message type."""
|