flwr-nightly 1.21.0.dev20250819__tar.gz → 1.21.0.dev20250821__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.
Files changed (395) hide show
  1. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/PKG-INFO +1 -1
  2. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/config_utils.py +2 -2
  3. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/exit/exit.py +4 -1
  4. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/exit/exit_code.py +4 -10
  5. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/app.py +33 -21
  6. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/grid/grpc_grid.py +1 -0
  7. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/grid/inmemory_grid.py +1 -0
  8. flwr_nightly-1.21.0.dev20250821/py/flwr/server/serverapp/app.py +284 -0
  9. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +1 -1
  10. flwr_nightly-1.21.0.dev20250821/py/flwr/simulation/app.py +303 -0
  11. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/app_utils.py +0 -31
  12. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/cli/flower_superexec.py +6 -0
  13. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/servicer/control/control_grpc.py +4 -9
  14. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/servicer/control/control_servicer.py +52 -14
  15. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/start_client_internal.py +1 -1
  16. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/pyproject.toml +1 -1
  17. flwr_nightly-1.21.0.dev20250819/py/flwr/server/serverapp/app.py +0 -308
  18. flwr_nightly-1.21.0.dev20250819/py/flwr/simulation/app.py +0 -330
  19. flwr_nightly-1.21.0.dev20250819/py/flwr/superexec/__init__.py +0 -15
  20. flwr_nightly-1.21.0.dev20250819/py/flwr/superexec/deployment.py +0 -20
  21. flwr_nightly-1.21.0.dev20250819/py/flwr/superexec/simulation.py +0 -20
  22. flwr_nightly-1.21.0.dev20250819/py/flwr/superlink/executor/__init__.py +0 -28
  23. flwr_nightly-1.21.0.dev20250819/py/flwr/superlink/executor/app.py +0 -45
  24. flwr_nightly-1.21.0.dev20250819/py/flwr/superlink/executor/deployment.py +0 -188
  25. flwr_nightly-1.21.0.dev20250819/py/flwr/superlink/executor/executor.py +0 -100
  26. flwr_nightly-1.21.0.dev20250819/py/flwr/superlink/executor/simulation.py +0 -126
  27. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/README.md +0 -0
  28. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/__init__.py +0 -0
  29. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/app/__init__.py +0 -0
  30. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/app/error.py +0 -0
  31. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/app/metadata.py +0 -0
  32. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/__init__.py +0 -0
  33. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/app.py +0 -0
  34. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  35. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  36. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/build.py +0 -0
  37. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  38. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/constant.py +0 -0
  39. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/example.py +0 -0
  40. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/install.py +0 -0
  41. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/log.py +0 -0
  42. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/login/__init__.py +0 -0
  43. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/login/login.py +0 -0
  44. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/ls.py +0 -0
  45. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/__init__.py +0 -0
  46. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/new.py +0 -0
  47. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/__init__.py +0 -0
  48. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  49. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  50. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  51. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  52. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  53. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  54. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  55. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  56. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  57. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  58. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  59. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  60. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  61. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  62. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  63. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  64. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  65. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  66. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  67. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  68. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  69. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  70. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  71. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  72. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  73. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  74. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  75. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  76. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  77. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  78. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  79. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  80. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  81. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  82. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  83. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  84. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  85. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  86. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  87. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  88. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  89. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  90. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  91. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  92. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  93. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  94. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  95. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  96. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  97. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  98. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  99. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/run/__init__.py +0 -0
  100. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/run/run.py +0 -0
  101. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/stop.py +0 -0
  102. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/cli/utils.py +0 -0
  103. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/__init__.py +0 -0
  104. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/client.py +0 -0
  105. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/client_app.py +0 -0
  106. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/clientapp/__init__.py +0 -0
  107. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/clientapp/utils.py +0 -0
  108. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  109. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  110. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  111. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  112. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  113. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  114. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  115. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/message_handler/__init__.py +0 -0
  116. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/message_handler/message_handler.py +0 -0
  117. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/__init__.py +0 -0
  118. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/centraldp_mods.py +0 -0
  119. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/comms_mods.py +0 -0
  120. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/localdp_mod.py +0 -0
  121. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  122. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  123. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  124. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/mod/utils.py +0 -0
  125. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/numpy_client.py +0 -0
  126. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/rest_client/__init__.py +0 -0
  127. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/rest_client/connection.py +0 -0
  128. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/run_info_store.py +0 -0
  129. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/client/typing.py +0 -0
  130. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/clientapp/__init__.py +0 -0
  131. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/__init__.py +0 -0
  132. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/address.py +0 -0
  133. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/args.py +0 -0
  134. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/auth_plugin/__init__.py +0 -0
  135. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  136. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/config.py +0 -0
  137. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/constant.py +0 -0
  138. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/context.py +0 -0
  139. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/date.py +0 -0
  140. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/differential_privacy.py +0 -0
  141. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/differential_privacy_constants.py +0 -0
  142. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/dp.py +0 -0
  143. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  144. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  145. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/exit/__init__.py +0 -0
  146. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/exit_handlers.py +0 -0
  147. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/grpc.py +0 -0
  148. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/heartbeat.py +0 -0
  149. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/inflatable.py +0 -0
  150. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  151. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/inflatable_utils.py +0 -0
  152. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/logger.py +0 -0
  153. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/message.py +0 -0
  154. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/object_ref.py +0 -0
  155. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/parameter.py +0 -0
  156. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/pyproject.py +0 -0
  157. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/__init__.py +0 -0
  158. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/array.py +0 -0
  159. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/arraychunk.py +0 -0
  160. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/arrayrecord.py +0 -0
  161. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/configrecord.py +0 -0
  162. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/conversion_utils.py +0 -0
  163. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/metricrecord.py +0 -0
  164. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/recorddict.py +0 -0
  165. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/record/typeddict.py +0 -0
  166. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/recorddict_compat.py +0 -0
  167. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/retry_invoker.py +0 -0
  168. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  169. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  170. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  171. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  172. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  173. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  174. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  175. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  176. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/serde.py +0 -0
  177. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/serde_utils.py +0 -0
  178. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/telemetry.py +0 -0
  179. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/typing.py +0 -0
  180. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/common/version.py +0 -0
  181. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/__init__.py +0 -0
  182. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/client/__init__.py +0 -0
  183. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/client/app.py +0 -0
  184. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  185. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  186. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/common/__init__.py +0 -0
  187. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/server/__init__.py +0 -0
  188. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/server/app.py +0 -0
  189. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/compat/simulation/__init__.py +0 -0
  190. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/__init__.py +0 -0
  191. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/appio_pb2.py +0 -0
  192. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/appio_pb2.pyi +0 -0
  193. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  194. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  195. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/clientappio_pb2.py +0 -0
  196. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  197. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  198. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  199. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/control_pb2.py +0 -0
  200. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/control_pb2.pyi +0 -0
  201. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/control_pb2_grpc.py +0 -0
  202. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  203. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/error_pb2.py +0 -0
  204. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/error_pb2.pyi +0 -0
  205. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/error_pb2_grpc.py +0 -0
  206. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  207. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fab_pb2.py +0 -0
  208. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fab_pb2.pyi +0 -0
  209. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  210. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  211. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fleet_pb2.py +0 -0
  212. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fleet_pb2.pyi +0 -0
  213. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  214. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  215. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  216. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  217. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  218. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  219. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/heartbeat_pb2.py +0 -0
  220. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  221. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  222. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  223. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/log_pb2.py +0 -0
  224. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/log_pb2.pyi +0 -0
  225. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/log_pb2_grpc.py +0 -0
  226. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  227. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/message_pb2.py +0 -0
  228. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/message_pb2.pyi +0 -0
  229. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/message_pb2_grpc.py +0 -0
  230. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  231. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/node_pb2.py +0 -0
  232. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/node_pb2.pyi +0 -0
  233. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/node_pb2_grpc.py +0 -0
  234. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  235. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/recorddict_pb2.py +0 -0
  236. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  237. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  238. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  239. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/run_pb2.py +0 -0
  240. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/run_pb2.pyi +0 -0
  241. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/run_pb2_grpc.py +0 -0
  242. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  243. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/serverappio_pb2.py +0 -0
  244. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  245. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  246. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  247. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/simulationio_pb2.py +0 -0
  248. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  249. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  250. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  251. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/transport_pb2.py +0 -0
  252. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/transport_pb2.pyi +0 -0
  253. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  254. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  255. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/py.typed +0 -0
  256. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/__init__.py +0 -0
  257. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/client_manager.py +0 -0
  258. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/client_proxy.py +0 -0
  259. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/compat/__init__.py +0 -0
  260. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/compat/app.py +0 -0
  261. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/compat/app_utils.py +0 -0
  262. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  263. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/compat/legacy_context.py +0 -0
  264. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/criterion.py +0 -0
  265. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  266. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/grid/__init__.py +0 -0
  267. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/grid/grid.py +0 -0
  268. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/history.py +0 -0
  269. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/run_serverapp.py +0 -0
  270. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/server.py +0 -0
  271. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/server_app.py +0 -0
  272. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/server_config.py +0 -0
  273. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/serverapp/__init__.py +0 -0
  274. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/serverapp_components.py +0 -0
  275. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/__init__.py +0 -0
  276. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/aggregate.py +0 -0
  277. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/bulyan.py +0 -0
  278. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  279. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  280. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  281. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  282. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  283. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedadagrad.py +0 -0
  284. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedadam.py +0 -0
  285. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedavg.py +0 -0
  286. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedavg_android.py +0 -0
  287. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedavgm.py +0 -0
  288. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedmedian.py +0 -0
  289. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedopt.py +0 -0
  290. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedprox.py +0 -0
  291. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  292. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  293. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  294. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  295. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/fedyogi.py +0 -0
  296. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/krum.py +0 -0
  297. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/qfedavg.py +0 -0
  298. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/strategy/strategy.py +0 -0
  299. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/__init__.py +0 -0
  300. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  301. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  302. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  303. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  304. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  305. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  306. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  307. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  308. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  309. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  310. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  311. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  312. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  313. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  314. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  315. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  316. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  317. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  318. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  319. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  320. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  321. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  322. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  323. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  324. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  325. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  326. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  327. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  328. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  329. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  330. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  331. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/superlink/utils.py +0 -0
  332. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/typing.py +0 -0
  333. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/utils/__init__.py +0 -0
  334. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/utils/tensorboard.py +0 -0
  335. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/utils/validator.py +0 -0
  336. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/workflow/__init__.py +0 -0
  337. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/workflow/constant.py +0 -0
  338. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/workflow/default_workflows.py +0 -0
  339. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  340. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  341. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  342. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/serverapp/__init__.py +0 -0
  343. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/__init__.py +0 -0
  344. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/legacy_app.py +0 -0
  345. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  346. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  347. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  348. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/ray_transport/utils.py +0 -0
  349. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/run_simulation.py +0 -0
  350. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/simulation/simulationio_connection.py +0 -0
  351. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/__init__.py +0 -0
  352. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/cli/__init__.py +0 -0
  353. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/corestate/__init__.py +0 -0
  354. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/corestate/corestate.py +0 -0
  355. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/ffs/__init__.py +0 -0
  356. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  357. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/ffs/ffs.py +0 -0
  358. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  359. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  360. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  361. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  362. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  363. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/object_store/__init__.py +0 -0
  364. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  365. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/object_store/object_store.py +0 -0
  366. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  367. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/object_store/utils.py +0 -0
  368. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/__init__.py +0 -0
  369. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  370. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  371. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  372. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  373. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  374. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  375. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  376. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supercore/utils.py +0 -0
  377. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/__init__.py +0 -0
  378. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/servicer/__init__.py +0 -0
  379. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  380. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  381. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  382. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/superlink/servicer/control/control_user_auth_interceptor.py +0 -0
  383. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/__init__.py +0 -0
  384. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/cli/__init__.py +0 -0
  385. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  386. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  387. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/nodestate/__init__.py +0 -0
  388. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  389. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  390. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  391. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/runtime/__init__.py +0 -0
  392. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  393. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/servicer/__init__.py +0 -0
  394. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  395. {flwr_nightly-1.21.0.dev20250819 → flwr_nightly-1.21.0.dev20250821}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.21.0.dev20250819
3
+ Version: 1.21.0.dev20250821
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -230,8 +230,8 @@ def exit_if_no_address(federation_config: dict[str, Any], cmd: str) -> None:
230
230
  """Exit if the provided federation_config has no "address" key."""
231
231
  if "address" not in federation_config:
232
232
  typer.secho(
233
- f"❌ `flwr {cmd}` currently works with a SuperLink. Ensure that the correct"
234
- "SuperLink (Control API) address is provided in `pyproject.toml`.",
233
+ f"❌ `flwr {cmd}` currently works with a SuperLink. Ensure that the "
234
+ "correct SuperLink (Control API) address is provided in `pyproject.toml`.",
235
235
  fg=typer.colors.RED,
236
236
  bold=True,
237
237
  )
@@ -22,11 +22,14 @@ from logging import ERROR, INFO
22
22
  from typing import Any, NoReturn
23
23
 
24
24
  from flwr.common import EventType, event
25
+ from flwr.common.version import package_version
25
26
 
26
27
  from ..logger import log
27
28
  from .exit_code import EXIT_CODE_HELP
28
29
 
29
- HELP_PAGE_URL = "https://flower.ai/docs/framework/ref-exit-codes/"
30
+ HELP_PAGE_URL = (
31
+ f"https://flower.ai/docs/framework/v{package_version}/en/ref-exit-codes/"
32
+ )
30
33
 
31
34
 
32
35
  def flwr_exit(
@@ -34,18 +34,14 @@ class ExitCode:
34
34
  SUPERLINK_LICENSE_URL_INVALID = 103
35
35
  SUPERLINK_INVALID_ARGS = 104
36
36
 
37
- # ServerApp-specific exit codes (200-299)
38
-
39
37
  # SuperNode-specific exit codes (300-399)
40
38
  SUPERNODE_REST_ADDRESS_INVALID = 300
41
39
  SUPERNODE_NODE_AUTH_KEYS_REQUIRED = 301
42
40
  SUPERNODE_NODE_AUTH_KEYS_INVALID = 302
43
41
 
44
- # ClientApp-specific exit codes (400-499)
45
-
46
- # Simulation-specific exit codes (500-599)
42
+ # SuperExec-specific exit codes (400-499)
47
43
 
48
- # Common exit codes (600-)
44
+ # Common exit codes (600-699)
49
45
  COMMON_ADDRESS_INVALID = 600
50
46
  COMMON_MISSING_EXTRA_REST = 601
51
47
  COMMON_TLS_NOT_SUPPORTED = 602
@@ -80,7 +76,6 @@ EXIT_CODE_HELP = {
80
76
  "Invalid arguments provided to SuperLink. Use `--help` check for the correct "
81
77
  "usage. Alternatively, check the documentation."
82
78
  ),
83
- # ServerApp-specific exit codes (200-299)
84
79
  # SuperNode-specific exit codes (300-399)
85
80
  ExitCode.SUPERNODE_REST_ADDRESS_INVALID: (
86
81
  "When using the REST API, please provide `https://` or "
@@ -96,9 +91,8 @@ EXIT_CODE_HELP = {
96
91
  "Please ensure that the file path points to a valid private/public key "
97
92
  "file and try again."
98
93
  ),
99
- # ClientApp-specific exit codes (400-499)
100
- # Simulation-specific exit codes (500-599)
101
- # Common exit codes (600-)
94
+ # SuperExec-specific exit codes (400-499)
95
+ # Common exit codes (600-699)
102
96
  ExitCode.COMMON_ADDRESS_INVALID: (
103
97
  "Please provide a valid URL, IPv4 or IPv6 address."
104
98
  ),
@@ -37,7 +37,7 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH, EventType, event
37
37
  from flwr.common.address import parse_address
38
38
  from flwr.common.args import try_obtain_server_certificates
39
39
  from flwr.common.auth_plugin import ControlAuthPlugin, ControlAuthzPlugin
40
- from flwr.common.config import get_flwr_dir, parse_config_args
40
+ from flwr.common.config import get_flwr_dir
41
41
  from flwr.common.constant import (
42
42
  AUTH_TYPE_YAML_KEY,
43
43
  AUTHZ_TYPE_YAML_KEY,
@@ -71,7 +71,6 @@ from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
71
71
  from flwr.server.fleet_event_log_interceptor import FleetEventLogInterceptor
72
72
  from flwr.supercore.ffs import FfsFactory
73
73
  from flwr.supercore.object_store import ObjectStoreFactory
74
- from flwr.superlink.executor import load_executor
75
74
  from flwr.superlink.servicer.control import run_control_api_grpc
76
75
 
77
76
  from .superlink.fleet.grpc_adapter.grpc_adapter_servicer import GrpcAdapterServicer
@@ -136,6 +135,15 @@ def run_superlink() -> None:
136
135
  WARN, "The `--flwr-dir` option is currently not in use and will be ignored."
137
136
  )
138
137
 
138
+ # Detect if `--executor*` arguments were set
139
+ if args.executor or args.executor_dir or args.executor_config:
140
+ flwr_exit(
141
+ ExitCode.SUPERLINK_INVALID_ARGS,
142
+ "The arguments `--executor`, `--executor-dir`, and `--executor-config` are "
143
+ "deprecated and will be removed in a future release. To run SuperLink with "
144
+ "the SimulationIo API, please use `--simulation`.",
145
+ )
146
+
139
147
  # Detect if both Control API and Exec API addresses were set explicitly
140
148
  explicit_args = set()
141
149
  for arg in sys.argv[1:]:
@@ -198,26 +206,19 @@ def run_superlink() -> None:
198
206
  objectstore_factory = ObjectStoreFactory()
199
207
 
200
208
  # Start Control API
201
- executor = load_executor(args)
209
+ is_simulation = args.simulation
202
210
  control_server: grpc.Server = run_control_api_grpc(
203
211
  address=control_address,
204
212
  state_factory=state_factory,
205
213
  ffs_factory=ffs_factory,
206
214
  objectstore_factory=objectstore_factory,
207
- executor=executor,
208
215
  certificates=certificates,
209
- config=parse_config_args(
210
- [args.executor_config] if args.executor_config else args.executor_config
211
- ),
216
+ is_simulation=is_simulation,
212
217
  auth_plugin=auth_plugin,
213
218
  authz_plugin=authz_plugin,
214
219
  event_log_plugin=event_log_plugin,
215
220
  )
216
221
  grpc_servers = [control_server]
217
-
218
- # Determine Exec plugin
219
- # If simulation is used, don't start ServerAppIo and Fleet APIs
220
- is_simulation = executor.__class__.__qualname__ == "SimulationEngine"
221
222
  bckg_threads: list[threading.Thread] = []
222
223
 
223
224
  if is_simulation:
@@ -518,7 +519,9 @@ def _run_fleet_api_grpc_rere( # pylint: disable=R0913, R0917
518
519
  interceptors=interceptors,
519
520
  )
520
521
 
521
- log(INFO, "Flower ECE: Starting Fleet API (gRPC-rere) on %s", address)
522
+ log(
523
+ INFO, "Flower Deployment Runtime: Starting Fleet API (gRPC-rere) on %s", address
524
+ )
522
525
  fleet_grpc_server.start()
523
526
 
524
527
  return fleet_grpc_server
@@ -546,7 +549,11 @@ def _run_fleet_api_grpc_adapter(
546
549
  certificates=certificates,
547
550
  )
548
551
 
549
- log(INFO, "Flower ECE: Starting Fleet API (GrpcAdapter) on %s", address)
552
+ log(
553
+ INFO,
554
+ "Flower Deployment Runtime: Starting Fleet API (GrpcAdapter) on %s",
555
+ address,
556
+ )
550
557
  fleet_grpc_server.start()
551
558
 
552
559
  return fleet_grpc_server
@@ -741,20 +748,25 @@ def _add_args_control_api(parser: argparse.ArgumentParser) -> None:
741
748
  )
742
749
  parser.add_argument(
743
750
  "--executor",
744
- help="For example: `deployment:exec` or `project.package.module:wrapper.exec`. "
745
- "The default is `flwr.superexec.deployment:executor`",
746
- default="flwr.superexec.deployment:executor",
751
+ help="This argument is deprecated and will be removed in a future release.",
752
+ default=None,
747
753
  )
748
754
  parser.add_argument(
749
755
  "--executor-dir",
750
- help="The directory for the executor.",
751
- default=".",
756
+ help="This argument is deprecated and will be removed in a future release.",
757
+ default=None,
752
758
  )
753
759
  parser.add_argument(
754
760
  "--executor-config",
755
- help="Key-value pairs for the executor config, separated by spaces. "
756
- "For example:\n\n`--executor-config 'verbose=true "
757
- 'root-certificates="certificates/superlink-ca.crt"\'`',
761
+ help="This argument is deprecated and will be removed in a future release.",
762
+ default=None,
763
+ )
764
+ parser.add_argument(
765
+ "--simulation",
766
+ action="store_true",
767
+ default=False,
768
+ help="Launch the SimulationIo API server in place of "
769
+ "the ServerAppIo API server.",
758
770
  )
759
771
 
760
772
 
@@ -384,6 +384,7 @@ class GrpcGrid(Grid):
384
384
  """
385
385
  # Push messages
386
386
  msg_ids = set(self.push_messages(messages))
387
+ del messages
387
388
 
388
389
  # Pull messages
389
390
  end_time = time.time() + (timeout if timeout is not None else 0.0)
@@ -153,6 +153,7 @@ class InMemoryGrid(Grid):
153
153
  """
154
154
  # Push messages
155
155
  msg_ids = set(self.push_messages(messages))
156
+ del messages
156
157
 
157
158
  # Pull messages
158
159
  end_time = time.time() + (timeout if timeout is not None else 0.0)
@@ -0,0 +1,284 @@
1
+ # Copyright 2025 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Flower ServerApp process."""
16
+
17
+
18
+ import argparse
19
+ from logging import DEBUG, ERROR, INFO
20
+ from pathlib import Path
21
+ from queue import Queue
22
+ from typing import Optional
23
+
24
+ from flwr.cli.config_utils import get_fab_metadata
25
+ from flwr.cli.install import install_from_fab
26
+ from flwr.cli.utils import get_sha256_hash
27
+ from flwr.common.args import add_args_flwr_app_common
28
+ from flwr.common.config import (
29
+ get_flwr_dir,
30
+ get_fused_config_from_dir,
31
+ get_project_config,
32
+ get_project_dir,
33
+ )
34
+ from flwr.common.constant import (
35
+ SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS,
36
+ ExecPluginType,
37
+ Status,
38
+ SubStatus,
39
+ )
40
+ from flwr.common.exit import ExitCode, flwr_exit
41
+ from flwr.common.heartbeat import HeartbeatSender, get_grpc_app_heartbeat_fn
42
+ from flwr.common.logger import (
43
+ log,
44
+ mirror_output_to_queue,
45
+ restore_output,
46
+ start_log_uploader,
47
+ stop_log_uploader,
48
+ )
49
+ from flwr.common.serde import (
50
+ context_from_proto,
51
+ context_to_proto,
52
+ fab_from_proto,
53
+ run_from_proto,
54
+ run_status_to_proto,
55
+ )
56
+ from flwr.common.telemetry import EventType, event
57
+ from flwr.common.typing import RunNotRunningException, RunStatus
58
+ from flwr.proto.appio_pb2 import ( # pylint: disable=E0611
59
+ PullAppInputsRequest,
60
+ PullAppInputsResponse,
61
+ PushAppOutputsRequest,
62
+ )
63
+ from flwr.proto.run_pb2 import UpdateRunStatusRequest # pylint: disable=E0611
64
+ from flwr.proto.serverappio_pb2_grpc import ServerAppIoStub
65
+ from flwr.server.grid.grpc_grid import GrpcGrid
66
+ from flwr.server.run_serverapp import run as run_
67
+ from flwr.supercore.app_utils import start_parent_process_monitor
68
+ from flwr.supercore.superexec.plugin import ServerAppExecPlugin
69
+ from flwr.supercore.superexec.run_superexec import run_with_deprecation_warning
70
+
71
+
72
+ def flwr_serverapp() -> None:
73
+ """Run process-isolated Flower ServerApp."""
74
+ # Capture stdout/stderr
75
+ log_queue: Queue[Optional[str]] = Queue()
76
+ mirror_output_to_queue(log_queue)
77
+
78
+ args = _parse_args_run_flwr_serverapp().parse_args()
79
+
80
+ if not args.insecure:
81
+ flwr_exit(
82
+ ExitCode.COMMON_TLS_NOT_SUPPORTED,
83
+ "`flwr-serverapp` does not support TLS yet.",
84
+ )
85
+
86
+ # Disallow long-running `flwr-serverapp` processes
87
+ if args.token is None:
88
+ run_with_deprecation_warning(
89
+ cmd="flwr-serverapp",
90
+ plugin_type=ExecPluginType.SERVER_APP,
91
+ plugin_class=ServerAppExecPlugin,
92
+ stub_class=ServerAppIoStub,
93
+ appio_api_address=args.serverappio_api_address,
94
+ flwr_dir=args.flwr_dir,
95
+ parent_pid=args.parent_pid,
96
+ warn_run_once=args.run_once,
97
+ )
98
+ return
99
+
100
+ log(INFO, "Start `flwr-serverapp` process")
101
+ log(
102
+ DEBUG,
103
+ "`flwr-serverapp` will attempt to connect to SuperLink's "
104
+ "ServerAppIo API at %s",
105
+ args.serverappio_api_address,
106
+ )
107
+ run_serverapp(
108
+ serverappio_api_address=args.serverappio_api_address,
109
+ log_queue=log_queue,
110
+ token=args.token,
111
+ flwr_dir=args.flwr_dir,
112
+ certificates=None,
113
+ parent_pid=args.parent_pid,
114
+ )
115
+
116
+ # Restore stdout/stderr
117
+ restore_output()
118
+
119
+
120
+ def run_serverapp( # pylint: disable=R0913, R0914, R0915, R0917, W0212
121
+ serverappio_api_address: str,
122
+ log_queue: Queue[Optional[str]],
123
+ token: str,
124
+ flwr_dir: Optional[str] = None,
125
+ certificates: Optional[bytes] = None,
126
+ parent_pid: Optional[int] = None,
127
+ ) -> None:
128
+ """Run Flower ServerApp process."""
129
+ # Monitor the main process in case of SIGKILL
130
+ if parent_pid is not None:
131
+ start_parent_process_monitor(parent_pid)
132
+
133
+ # Resolve directory where FABs are installed
134
+ flwr_dir_ = get_flwr_dir(flwr_dir)
135
+ log_uploader = None
136
+ success = True
137
+ hash_run_id = None
138
+ run_status = None
139
+ heartbeat_sender = None
140
+ grid = None
141
+ context = None
142
+
143
+ try:
144
+ # Initialize the GrpcGrid
145
+ grid = GrpcGrid(
146
+ serverappio_service_address=serverappio_api_address,
147
+ root_certificates=certificates,
148
+ )
149
+
150
+ # Pull ServerAppInputs from LinkState
151
+ req = PullAppInputsRequest(token=token)
152
+ log(DEBUG, "[flwr-serverapp] Pull ServerAppInputs")
153
+ res: PullAppInputsResponse = grid._stub.PullAppInputs(req)
154
+ context = context_from_proto(res.context)
155
+ run = run_from_proto(res.run)
156
+ fab = fab_from_proto(res.fab)
157
+
158
+ hash_run_id = get_sha256_hash(run.run_id)
159
+
160
+ grid.set_run(run.run_id)
161
+
162
+ # Start log uploader for this run
163
+ log_uploader = start_log_uploader(
164
+ log_queue=log_queue,
165
+ node_id=0,
166
+ run_id=run.run_id,
167
+ stub=grid._stub,
168
+ )
169
+
170
+ log(DEBUG, "[flwr-serverapp] Start FAB installation.")
171
+ install_from_fab(fab.content, flwr_dir=flwr_dir_, skip_prompt=True)
172
+
173
+ fab_id, fab_version = get_fab_metadata(fab.content)
174
+
175
+ app_path = str(get_project_dir(fab_id, fab_version, fab.hash_str, flwr_dir_))
176
+ config = get_project_config(app_path)
177
+
178
+ # Obtain server app reference and the run config
179
+ server_app_attr = config["tool"]["flwr"]["app"]["components"]["serverapp"]
180
+ server_app_run_config = get_fused_config_from_dir(
181
+ Path(app_path), run.override_config
182
+ )
183
+
184
+ # Update run_config in context
185
+ context.run_config = server_app_run_config
186
+
187
+ log(
188
+ DEBUG,
189
+ "[flwr-serverapp] Will load ServerApp `%s` in %s",
190
+ server_app_attr,
191
+ app_path,
192
+ )
193
+
194
+ # Change status to Running
195
+ run_status_proto = run_status_to_proto(RunStatus(Status.RUNNING, "", ""))
196
+ grid._stub.UpdateRunStatus(
197
+ UpdateRunStatusRequest(run_id=run.run_id, run_status=run_status_proto)
198
+ )
199
+
200
+ event(
201
+ EventType.FLWR_SERVERAPP_RUN_ENTER,
202
+ event_details={"run-id-hash": hash_run_id},
203
+ )
204
+
205
+ # Set up heartbeat sender
206
+ heartbeat_fn = get_grpc_app_heartbeat_fn(
207
+ grid._stub,
208
+ run.run_id,
209
+ failure_message="Heartbeat failed unexpectedly. The SuperLink could "
210
+ "not find the provided run ID, or the run status is invalid.",
211
+ )
212
+ heartbeat_sender = HeartbeatSender(heartbeat_fn)
213
+ heartbeat_sender.start()
214
+
215
+ # Load and run the ServerApp with the Grid
216
+ updated_context = run_(
217
+ grid=grid,
218
+ server_app_dir=app_path,
219
+ server_app_attr=server_app_attr,
220
+ context=context,
221
+ )
222
+
223
+ # Send resulting context
224
+ context_proto = context_to_proto(updated_context)
225
+ log(DEBUG, "[flwr-serverapp] Will push ServerAppOutputs")
226
+ out_req = PushAppOutputsRequest(
227
+ token=token, run_id=run.run_id, context=context_proto
228
+ )
229
+ _ = grid._stub.PushAppOutputs(out_req)
230
+
231
+ run_status = RunStatus(Status.FINISHED, SubStatus.COMPLETED, "")
232
+ except RunNotRunningException:
233
+ log(INFO, "")
234
+ log(INFO, "Run ID %s stopped.", run.run_id)
235
+ log(INFO, "")
236
+ run_status = None
237
+ success = False
238
+
239
+ except Exception as ex: # pylint: disable=broad-exception-caught
240
+ exc_entity = "ServerApp"
241
+ log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
242
+ run_status = RunStatus(Status.FINISHED, SubStatus.FAILED, str(ex))
243
+ success = False
244
+
245
+ finally:
246
+ # Stop heartbeat sender
247
+ if heartbeat_sender:
248
+ heartbeat_sender.stop()
249
+
250
+ # Stop log uploader for this run and upload final logs
251
+ if log_uploader:
252
+ stop_log_uploader(log_queue, log_uploader)
253
+
254
+ # Update run status
255
+ if run_status and grid:
256
+ run_status_proto = run_status_to_proto(run_status)
257
+ grid._stub.UpdateRunStatus(
258
+ UpdateRunStatusRequest(run_id=run.run_id, run_status=run_status_proto)
259
+ )
260
+
261
+ # Close the Grpc connection
262
+ if grid:
263
+ grid.close()
264
+
265
+ event(
266
+ EventType.FLWR_SERVERAPP_RUN_LEAVE,
267
+ event_details={"run-id-hash": hash_run_id, "success": success},
268
+ )
269
+
270
+
271
+ def _parse_args_run_flwr_serverapp() -> argparse.ArgumentParser:
272
+ """Parse flwr-serverapp command line arguments."""
273
+ parser = argparse.ArgumentParser(
274
+ description="Run a Flower ServerApp",
275
+ )
276
+ parser.add_argument(
277
+ "--serverappio-api-address",
278
+ default=SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS,
279
+ type=str,
280
+ help="Address of SuperLink's ServerAppIo API (IPv4, IPv6, or a domain name)."
281
+ f"By default, it is set to {SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS}.",
282
+ )
283
+ add_args_flwr_app_common(parser=parser)
284
+ return parser
@@ -58,7 +58,7 @@ def run_serverappio_api_grpc(
58
58
  certificates=certificates,
59
59
  )
60
60
 
61
- log(INFO, "Flower ECE: Starting ServerAppIo API (gRPC-rere) on %s", address)
61
+ log(INFO, "Flower Deployment Runtime: Starting ServerAppIo API on %s", address)
62
62
  serverappio_grpc_server.start()
63
63
 
64
64
  return serverappio_grpc_server