flwr 1.13.0__tar.gz → 1.13.1__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.
- {flwr-1.13.0 → flwr-1.13.1}/PKG-INFO +1 -2
- {flwr-1.13.0 → flwr-1.13.1}/pyproject.toml +1 -2
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/build.py +0 -37
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/install.py +1 -19
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/ls.py +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/new.py +23 -13
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/app.py +0 -7
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/app.py +8 -5
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/serverapp/app.py +0 -7
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/app.py +44 -49
- {flwr-1.13.0 → flwr-1.13.1}/LICENSE +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/README.md +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/config_utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/example.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/log.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/run/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/run/run.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/client.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/client_app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/clientapp/utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_client/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_client/connection.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/heartbeat.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/message_handler/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/message_handler/message_handler.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/message_handler/task_handler.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/comms_mods.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/localdp_mod.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/mod/utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/nodestate.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/numpy_client.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/rest_client/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/rest_client/connection.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/run_info_store.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/supernode/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/supernode/app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/client/typing.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/address.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/args.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/config.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/constant.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/context.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/date.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/differential_privacy.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/differential_privacy_constants.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/dp.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/exit_handlers.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/logger.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/message.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/object_ref.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/parameter.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/pyproject.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/configsrecord.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/conversion_utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/metricsrecord.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/parametersrecord.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/recordset.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/record/typeddict.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/recordset_compat.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/retry_invoker.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/serde.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/telemetry.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/typing.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/common/version.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/control_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/py.typed +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/client_manager.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/client_proxy.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/app_utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/compat/legacy_context.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/criterion.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/driver.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/grpc_driver.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/history.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/run_serverapp.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/server.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/server_app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/server_config.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/serverapp/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/serverapp_components.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/aggregate.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/bulyan.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedadam.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedavg.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedavgm.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedmedian.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedopt.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedprox.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/fedyogi.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/krum.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/qfedavg.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/strategy/strategy.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/typing.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/utils/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/utils/tensorboard.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/utils/validator.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/constant.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/default_workflows.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/legacy_app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/run_simulation.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/simulation/simulationio_connection.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/__init__.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/app.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/deployment.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/exec_grpc.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/exec_servicer.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/executor.py +0 -0
- {flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/superexec/simulation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: flwr
|
|
3
|
-
Version: 1.13.
|
|
3
|
+
Version: 1.13.1
|
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
|
5
5
|
Home-page: https://flower.ai
|
|
6
6
|
License: Apache-2.0
|
|
@@ -34,7 +34,6 @@ Provides-Extra: rest
|
|
|
34
34
|
Provides-Extra: simulation
|
|
35
35
|
Requires-Dist: cryptography (>=42.0.4,<43.0.0)
|
|
36
36
|
Requires-Dist: grpcio (>=1.60.0,<2.0.0,!=1.64.2,<=1.64.3)
|
|
37
|
-
Requires-Dist: hatchling (>=1.25.0,<2.0.0)
|
|
38
37
|
Requires-Dist: iterators (>=0.0.2,<0.0.3)
|
|
39
38
|
Requires-Dist: numpy (>=1.26.0,<3.0.0)
|
|
40
39
|
Requires-Dist: pathspec (>=0.12.1,<0.13.0)
|
|
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
|
|
|
4
4
|
|
|
5
5
|
[tool.poetry]
|
|
6
6
|
name = "flwr"
|
|
7
|
-
version = "1.13.
|
|
7
|
+
version = "1.13.1"
|
|
8
8
|
description = "Flower: A Friendly Federated AI Framework"
|
|
9
9
|
license = "Apache-2.0"
|
|
10
10
|
authors = ["The Flower Authors <hello@flower.ai>"]
|
|
@@ -77,7 +77,6 @@ typer = "^0.12.5"
|
|
|
77
77
|
tomli = "^2.0.1"
|
|
78
78
|
tomli-w = "^1.0.0"
|
|
79
79
|
pathspec = "^0.12.1"
|
|
80
|
-
hatchling = "^1.25.0"
|
|
81
80
|
rich = "^13.5.0"
|
|
82
81
|
# Optional dependencies (Simulation Engine)
|
|
83
82
|
ray = { version = "==2.10.0", optional = true, python = ">=3.9,<3.12" }
|
|
@@ -19,18 +19,14 @@ import os
|
|
|
19
19
|
import shutil
|
|
20
20
|
import tempfile
|
|
21
21
|
import zipfile
|
|
22
|
-
from logging import DEBUG, ERROR
|
|
23
22
|
from pathlib import Path
|
|
24
23
|
from typing import Annotated, Any, Optional, Union
|
|
25
24
|
|
|
26
25
|
import pathspec
|
|
27
26
|
import tomli_w
|
|
28
27
|
import typer
|
|
29
|
-
from hatchling.builders.wheel import WheelBuilder
|
|
30
|
-
from hatchling.metadata.core import ProjectMetadata
|
|
31
28
|
|
|
32
29
|
from flwr.common.constant import FAB_ALLOWED_EXTENSIONS, FAB_DATE, FAB_HASH_TRUNCATION
|
|
33
|
-
from flwr.common.logger import log
|
|
34
30
|
|
|
35
31
|
from .config_utils import load_and_validate
|
|
36
32
|
from .utils import is_valid_project_name
|
|
@@ -55,27 +51,6 @@ def get_fab_filename(conf: dict[str, Any], fab_hash: str) -> str:
|
|
|
55
51
|
return f"{publisher}.{name}.{version}.{fab_hash_truncated}.fab"
|
|
56
52
|
|
|
57
53
|
|
|
58
|
-
def _build_app_wheel(app: Path) -> Path:
|
|
59
|
-
"""Build app as a wheel and return its path."""
|
|
60
|
-
# Path to your project directory
|
|
61
|
-
app_dir = str(app.resolve())
|
|
62
|
-
try:
|
|
63
|
-
|
|
64
|
-
# Initialize the WheelBuilder
|
|
65
|
-
builder = WheelBuilder(
|
|
66
|
-
app_dir, metadata=ProjectMetadata(root=app_dir, plugin_manager=None)
|
|
67
|
-
)
|
|
68
|
-
|
|
69
|
-
# Build
|
|
70
|
-
whl_path = Path(next(builder.build(directory=app_dir)))
|
|
71
|
-
log(DEBUG, "Wheel succesfully built: %s", str(whl_path))
|
|
72
|
-
except Exception as ex:
|
|
73
|
-
log(ERROR, "Exception encountered when building wheel.", exc_info=ex)
|
|
74
|
-
raise typer.Exit(code=1) from ex
|
|
75
|
-
|
|
76
|
-
return whl_path
|
|
77
|
-
|
|
78
|
-
|
|
79
54
|
# pylint: disable=too-many-locals, too-many-statements
|
|
80
55
|
def build(
|
|
81
56
|
app: Annotated[
|
|
@@ -131,12 +106,6 @@ def build(
|
|
|
131
106
|
bold=True,
|
|
132
107
|
)
|
|
133
108
|
|
|
134
|
-
# Build wheel
|
|
135
|
-
whl_path = _build_app_wheel(app)
|
|
136
|
-
|
|
137
|
-
# Add path to .whl to `[tool.flwr.app]`
|
|
138
|
-
conf["tool"]["flwr"]["app"]["whl"] = str(whl_path.name)
|
|
139
|
-
|
|
140
109
|
# Load .gitignore rules if present
|
|
141
110
|
ignore_spec = _load_gitignore(app)
|
|
142
111
|
|
|
@@ -168,9 +137,6 @@ def build(
|
|
|
168
137
|
and f.name != "pyproject.toml" # Exclude the original pyproject.toml
|
|
169
138
|
]
|
|
170
139
|
|
|
171
|
-
# Include FAB .whl
|
|
172
|
-
all_files.append(whl_path)
|
|
173
|
-
|
|
174
140
|
for file_path in all_files:
|
|
175
141
|
# Read the file content manually
|
|
176
142
|
with open(file_path, "rb") as f:
|
|
@@ -187,9 +153,6 @@ def build(
|
|
|
187
153
|
# Add CONTENT and CONTENT.jwt to the zip file
|
|
188
154
|
write_to_zip(fab_file, ".info/CONTENT", list_file_content)
|
|
189
155
|
|
|
190
|
-
# Erase FAB .whl in app directory
|
|
191
|
-
whl_path.unlink()
|
|
192
|
-
|
|
193
156
|
# Get hash of FAB file
|
|
194
157
|
content = Path(temp_filename).read_bytes()
|
|
195
158
|
fab_hash = hashlib.sha256(content).hexdigest()
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
|
|
17
17
|
import hashlib
|
|
18
18
|
import shutil
|
|
19
|
-
import subprocess
|
|
20
19
|
import tempfile
|
|
21
20
|
import zipfile
|
|
22
21
|
from io import BytesIO
|
|
@@ -188,25 +187,8 @@ def validate_and_install(
|
|
|
188
187
|
else:
|
|
189
188
|
shutil.copy2(item, install_dir / item.name)
|
|
190
189
|
|
|
191
|
-
whl_file = config["tool"]["flwr"]["app"]["whl"]
|
|
192
|
-
install_whl = install_dir / whl_file
|
|
193
|
-
try:
|
|
194
|
-
subprocess.run(
|
|
195
|
-
["pip", "install", "--no-deps", install_whl],
|
|
196
|
-
capture_output=True,
|
|
197
|
-
text=True,
|
|
198
|
-
check=True,
|
|
199
|
-
)
|
|
200
|
-
except subprocess.CalledProcessError as e:
|
|
201
|
-
typer.secho(
|
|
202
|
-
f"❌ Failed to install {project_name}:\n{e.stderr}",
|
|
203
|
-
fg=typer.colors.RED,
|
|
204
|
-
bold=True,
|
|
205
|
-
)
|
|
206
|
-
raise typer.Exit(code=1) from e
|
|
207
|
-
|
|
208
190
|
typer.secho(
|
|
209
|
-
f"🎊 Successfully installed {project_name}.",
|
|
191
|
+
f"🎊 Successfully installed {project_name} to {install_dir}.",
|
|
210
192
|
fg=typer.colors.GREEN,
|
|
211
193
|
bold=True,
|
|
212
194
|
)
|
|
@@ -82,7 +82,7 @@ def ls(
|
|
|
82
82
|
|
|
83
83
|
if "address" not in federation_config:
|
|
84
84
|
typer.secho(
|
|
85
|
-
"❌ `flwr
|
|
85
|
+
"❌ `flwr ls` currently works with Exec API. Ensure that the correct"
|
|
86
86
|
"Exec API address is provided in the `pyproject.toml`.",
|
|
87
87
|
fg=typer.colors.RED,
|
|
88
88
|
bold=True,
|
|
@@ -268,20 +268,30 @@ def new(
|
|
|
268
268
|
context=context,
|
|
269
269
|
)
|
|
270
270
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
bold=True,
|
|
277
|
-
)
|
|
271
|
+
prompt = typer.style(
|
|
272
|
+
"🎊 Flower App creation successful.\n\n"
|
|
273
|
+
"To run your Flower App, use the following command:\n\n",
|
|
274
|
+
fg=typer.colors.GREEN,
|
|
275
|
+
bold=True,
|
|
278
276
|
)
|
|
279
277
|
|
|
280
278
|
_add = " huggingface-cli login\n" if llm_challenge_str else ""
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
279
|
+
prompt += typer.style(
|
|
280
|
+
_add + f" flwr run {package_name}\n\n",
|
|
281
|
+
fg=typer.colors.BRIGHT_CYAN,
|
|
282
|
+
bold=True,
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
prompt += typer.style(
|
|
286
|
+
"If you haven't installed all dependencies yet, follow these steps:\n\n",
|
|
287
|
+
fg=typer.colors.GREEN,
|
|
288
|
+
bold=True,
|
|
287
289
|
)
|
|
290
|
+
|
|
291
|
+
prompt += typer.style(
|
|
292
|
+
f" cd {package_name}\n" + " pip install -e .\n" + _add + " flwr run .\n",
|
|
293
|
+
fg=typer.colors.BRIGHT_CYAN,
|
|
294
|
+
bold=True,
|
|
295
|
+
)
|
|
296
|
+
|
|
297
|
+
print(prompt)
|
|
@@ -252,12 +252,5 @@ def _parse_args_run_flwr_clientapp() -> argparse.ArgumentParser:
|
|
|
252
252
|
required=False,
|
|
253
253
|
help="Unique token generated by SuperNode for each ClientApp execution",
|
|
254
254
|
)
|
|
255
|
-
parser.add_argument(
|
|
256
|
-
"--root-certificates",
|
|
257
|
-
metavar="ROOT_CERT",
|
|
258
|
-
type=str,
|
|
259
|
-
help="Specifies the path to the PEM-encoded root certificate file for "
|
|
260
|
-
"establishing secure HTTPS connections.",
|
|
261
|
-
)
|
|
262
255
|
add_args_flwr_app_common(parser=parser)
|
|
263
256
|
return parser
|
|
@@ -66,7 +66,6 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
|
|
|
66
66
|
from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
|
|
67
67
|
from flwr.superexec.app import load_executor
|
|
68
68
|
from flwr.superexec.exec_grpc import run_exec_api_grpc
|
|
69
|
-
from flwr.superexec.simulation import SimulationEngine
|
|
70
69
|
|
|
71
70
|
from .client_manager import ClientManager
|
|
72
71
|
from .history import History
|
|
@@ -269,8 +268,7 @@ def run_superlink() -> None:
|
|
|
269
268
|
|
|
270
269
|
# Determine Exec plugin
|
|
271
270
|
# If simulation is used, don't start ServerAppIo and Fleet APIs
|
|
272
|
-
sim_exec =
|
|
273
|
-
|
|
271
|
+
sim_exec = executor.__class__.__qualname__ == "SimulationEngine"
|
|
274
272
|
bckg_threads = []
|
|
275
273
|
|
|
276
274
|
if sim_exec:
|
|
@@ -278,7 +276,7 @@ def run_superlink() -> None:
|
|
|
278
276
|
address=simulationio_address,
|
|
279
277
|
state_factory=state_factory,
|
|
280
278
|
ffs_factory=ffs_factory,
|
|
281
|
-
certificates=
|
|
279
|
+
certificates=None, # SimulationAppIo API doesn't support SSL yet
|
|
282
280
|
)
|
|
283
281
|
grpc_servers.append(simulationio_server)
|
|
284
282
|
|
|
@@ -389,6 +387,9 @@ def run_superlink() -> None:
|
|
|
389
387
|
io_address = (
|
|
390
388
|
f"{CLIENT_OCTET}:{_port}" if _octet == SERVER_OCTET else serverappio_address
|
|
391
389
|
)
|
|
390
|
+
address_arg = (
|
|
391
|
+
"--simulationio-api-address" if sim_exec else "--serverappio-api-address"
|
|
392
|
+
)
|
|
392
393
|
address = simulationio_address if sim_exec else io_address
|
|
393
394
|
cmd = "flwr-simulation" if sim_exec else "flwr-serverapp"
|
|
394
395
|
|
|
@@ -397,6 +398,7 @@ def run_superlink() -> None:
|
|
|
397
398
|
target=_flwr_scheduler,
|
|
398
399
|
args=(
|
|
399
400
|
state_factory,
|
|
401
|
+
address_arg,
|
|
400
402
|
address,
|
|
401
403
|
cmd,
|
|
402
404
|
),
|
|
@@ -422,6 +424,7 @@ def run_superlink() -> None:
|
|
|
422
424
|
|
|
423
425
|
def _flwr_scheduler(
|
|
424
426
|
state_factory: LinkStateFactory,
|
|
427
|
+
io_api_arg: str,
|
|
425
428
|
io_api_address: str,
|
|
426
429
|
cmd: str,
|
|
427
430
|
) -> None:
|
|
@@ -446,7 +449,7 @@ def _flwr_scheduler(
|
|
|
446
449
|
command = [
|
|
447
450
|
cmd,
|
|
448
451
|
"--run-once",
|
|
449
|
-
|
|
452
|
+
io_api_arg,
|
|
450
453
|
io_api_address,
|
|
451
454
|
"--insecure",
|
|
452
455
|
]
|
|
@@ -230,12 +230,5 @@ def _parse_args_run_flwr_serverapp() -> argparse.ArgumentParser:
|
|
|
230
230
|
help="When set, this process will start a single ServerApp for a pending Run. "
|
|
231
231
|
"If there is no pending Run, the process will exit.",
|
|
232
232
|
)
|
|
233
|
-
parser.add_argument(
|
|
234
|
-
"--root-certificates",
|
|
235
|
-
metavar="ROOT_CERT",
|
|
236
|
-
type=str,
|
|
237
|
-
help="Specifies the path to the PEM-encoded root certificate file for "
|
|
238
|
-
"establishing secure HTTPS connections.",
|
|
239
|
-
)
|
|
240
233
|
add_args_flwr_app_common(parser=parser)
|
|
241
234
|
return parser
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""Flower Simulation process."""
|
|
16
16
|
|
|
17
|
-
|
|
18
17
|
import argparse
|
|
18
|
+
import sys
|
|
19
19
|
from logging import DEBUG, ERROR, INFO
|
|
20
20
|
from queue import Queue
|
|
21
21
|
from time import sleep
|
|
@@ -24,7 +24,7 @@ from typing import Optional
|
|
|
24
24
|
from flwr.cli.config_utils import get_fab_metadata
|
|
25
25
|
from flwr.cli.install import install_from_fab
|
|
26
26
|
from flwr.common import EventType
|
|
27
|
-
from flwr.common.args import
|
|
27
|
+
from flwr.common.args import add_args_flwr_app_common
|
|
28
28
|
from flwr.common.config import (
|
|
29
29
|
get_flwr_dir,
|
|
30
30
|
get_fused_config_from_dir,
|
|
@@ -32,7 +32,11 @@ from flwr.common.config import (
|
|
|
32
32
|
get_project_dir,
|
|
33
33
|
unflatten_dict,
|
|
34
34
|
)
|
|
35
|
-
from flwr.common.constant import
|
|
35
|
+
from flwr.common.constant import (
|
|
36
|
+
SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS,
|
|
37
|
+
Status,
|
|
38
|
+
SubStatus,
|
|
39
|
+
)
|
|
36
40
|
from flwr.common.logger import (
|
|
37
41
|
log,
|
|
38
42
|
mirror_output_to_queue,
|
|
@@ -69,61 +73,30 @@ def flwr_simulation() -> None:
|
|
|
69
73
|
log_queue: Queue[Optional[str]] = Queue()
|
|
70
74
|
mirror_output_to_queue(log_queue)
|
|
71
75
|
|
|
72
|
-
|
|
73
|
-
description="Run a Flower Simulation",
|
|
74
|
-
)
|
|
75
|
-
parser.add_argument(
|
|
76
|
-
"--superlink",
|
|
77
|
-
type=str,
|
|
78
|
-
help="Address of SuperLink's SimulationIO API",
|
|
79
|
-
)
|
|
80
|
-
parser.add_argument(
|
|
81
|
-
"--run-once",
|
|
82
|
-
action="store_true",
|
|
83
|
-
help="When set, this process will start a single simulation "
|
|
84
|
-
"for a pending Run. If no pending run the process will exit. ",
|
|
85
|
-
)
|
|
86
|
-
parser.add_argument(
|
|
87
|
-
"--flwr-dir",
|
|
88
|
-
default=None,
|
|
89
|
-
help="""The path containing installed Flower Apps.
|
|
90
|
-
By default, this value is equal to:
|
|
91
|
-
|
|
92
|
-
- `$FLWR_HOME/` if `$FLWR_HOME` is defined
|
|
93
|
-
- `$XDG_DATA_HOME/.flwr/` if `$XDG_DATA_HOME` is defined
|
|
94
|
-
- `$HOME/.flwr/` in all other cases
|
|
95
|
-
""",
|
|
96
|
-
)
|
|
97
|
-
parser.add_argument(
|
|
98
|
-
"--insecure",
|
|
99
|
-
action="store_true",
|
|
100
|
-
help="Run the server without HTTPS, regardless of whether certificate "
|
|
101
|
-
"paths are provided. By default, the server runs with HTTPS enabled. "
|
|
102
|
-
"Use this flag only if you understand the risks.",
|
|
103
|
-
)
|
|
104
|
-
parser.add_argument(
|
|
105
|
-
"--root-certificates",
|
|
106
|
-
metavar="ROOT_CERT",
|
|
107
|
-
type=str,
|
|
108
|
-
help="Specifies the path to the PEM-encoded root certificate file for "
|
|
109
|
-
"establishing secure HTTPS connections.",
|
|
110
|
-
)
|
|
111
|
-
args = parser.parse_args()
|
|
76
|
+
args = _parse_args_run_flwr_simulation().parse_args()
|
|
112
77
|
|
|
113
78
|
log(INFO, "Starting Flower Simulation")
|
|
114
|
-
|
|
79
|
+
|
|
80
|
+
if not args.insecure:
|
|
81
|
+
log(
|
|
82
|
+
ERROR,
|
|
83
|
+
"`flwr-simulation` does not support TLS yet. "
|
|
84
|
+
"Please use the '--insecure' flag.",
|
|
85
|
+
)
|
|
86
|
+
sys.exit(1)
|
|
115
87
|
|
|
116
88
|
log(
|
|
117
89
|
DEBUG,
|
|
118
|
-
"
|
|
119
|
-
|
|
90
|
+
"Starting isolated `Simulation` connected to SuperLink SimulationAppIo API "
|
|
91
|
+
"at %s",
|
|
92
|
+
args.simulationio_api_address,
|
|
120
93
|
)
|
|
121
94
|
run_simulation_process(
|
|
122
|
-
simulationio_api_address=args.
|
|
95
|
+
simulationio_api_address=args.simulationio_api_address,
|
|
123
96
|
log_queue=log_queue,
|
|
124
97
|
run_once=args.run_once,
|
|
125
98
|
flwr_dir_=args.flwr_dir,
|
|
126
|
-
certificates=
|
|
99
|
+
certificates=None,
|
|
127
100
|
)
|
|
128
101
|
|
|
129
102
|
# Restore stdout/stderr
|
|
@@ -225,7 +198,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
|
|
|
225
198
|
)
|
|
226
199
|
backend_config: BackendConfig = fed_opt.get("backend", {})
|
|
227
200
|
verbose: bool = fed_opt.get("verbose", False)
|
|
228
|
-
enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth",
|
|
201
|
+
enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", False)
|
|
229
202
|
|
|
230
203
|
# Launch the simulation
|
|
231
204
|
_run_simulation(
|
|
@@ -274,3 +247,25 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
|
|
|
274
247
|
# Stop the loop if `flwr-simulation` is expected to process a single run
|
|
275
248
|
if run_once:
|
|
276
249
|
break
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def _parse_args_run_flwr_simulation() -> argparse.ArgumentParser:
|
|
253
|
+
"""Parse flwr-simulation command line arguments."""
|
|
254
|
+
parser = argparse.ArgumentParser(
|
|
255
|
+
description="Run a Flower Simulation",
|
|
256
|
+
)
|
|
257
|
+
parser.add_argument(
|
|
258
|
+
"--simulationio-api-address",
|
|
259
|
+
default=SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS,
|
|
260
|
+
type=str,
|
|
261
|
+
help="Address of SuperLink's SimulationIO API (IPv4, IPv6, or a domain name)."
|
|
262
|
+
f"By default, it is set to {SIMULATIONIO_API_DEFAULT_CLIENT_ADDRESS}.",
|
|
263
|
+
)
|
|
264
|
+
parser.add_argument(
|
|
265
|
+
"--run-once",
|
|
266
|
+
action="store_true",
|
|
267
|
+
help="When set, this process will start a single simulation "
|
|
268
|
+
"for a pending Run. If no pending run the process will exit. ",
|
|
269
|
+
)
|
|
270
|
+
add_args_flwr_app_common(parser=parser)
|
|
271
|
+
return parser
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl
RENAMED
|
File without changes
|
{flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flwr-1.13.0 → flwr-1.13.1}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|