flwr-nightly 1.23.0.dev20250930__tar.gz → 1.23.0.dev20251002__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 (436) hide show
  1. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/PKG-INFO +1 -1
  2. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/app.py +13 -0
  3. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/auth_plugin/__init__.py +6 -3
  4. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/auth_plugin/auth_plugin.py +23 -11
  5. flwr_nightly-1.23.0.dev20251002/py/flwr/cli/auth_plugin/noop_auth_plugin.py +58 -0
  6. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +12 -22
  7. flwr_nightly-1.23.0.dev20250930/py/flwr/cli/cli_user_auth_interceptor.py → flwr_nightly-1.23.0.dev20251002/py/flwr/cli/cli_account_auth_interceptor.py +4 -4
  8. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/login/login.py +29 -9
  9. flwr_nightly-1.23.0.dev20251002/py/flwr/cli/supernode/__init__.py +25 -0
  10. flwr_nightly-1.23.0.dev20251002/py/flwr/cli/supernode/create.py +58 -0
  11. flwr_nightly-1.23.0.dev20251002/py/flwr/cli/supernode/delete.py +58 -0
  12. flwr_nightly-1.23.0.dev20251002/py/flwr/cli/supernode/ls.py +51 -0
  13. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/utils.py +29 -15
  14. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/__init__.py +2 -1
  15. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/clientapp/__init__.py +1 -2
  16. {flwr_nightly-1.23.0.dev20250930/py/flwr/client → flwr_nightly-1.23.0.dev20251002/py/flwr}/clientapp/utils.py +1 -1
  17. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/constant.py +10 -4
  18. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/arrayrecord.py +10 -1
  19. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/typing.py +5 -5
  20. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/client/app.py +1 -1
  21. flwr_nightly-1.23.0.dev20251002/py/flwr/proto/control_pb2.py +79 -0
  22. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/control_pb2.pyi +63 -0
  23. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/control_pb2_grpc.py +102 -0
  24. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/control_pb2_grpc.pyi +39 -0
  25. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/node_pb2.py +3 -1
  26. flwr_nightly-1.23.0.dev20251002/py/flwr/proto/node_pb2.pyi +54 -0
  27. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/app.py +17 -10
  28. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/vce/backend/backend.py +1 -1
  29. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +1 -1
  30. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/vce/vce_api.py +2 -2
  31. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/ray_transport/ray_actor.py +1 -1
  32. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/ray_transport/ray_client_proxy.py +1 -1
  33. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/run_simulation.py +1 -1
  34. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/auth_plugin/__init__.py +5 -2
  35. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/auth_plugin/auth_plugin.py +16 -12
  36. flwr_nightly-1.23.0.dev20251002/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +87 -0
  37. flwr_nightly-1.23.0.dev20250930/py/flwr/superlink/servicer/control/control_user_auth_interceptor.py → flwr_nightly-1.23.0.dev20251002/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +16 -16
  38. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +1 -1
  39. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/servicer/control/control_grpc.py +6 -6
  40. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/servicer/control/control_servicer.py +45 -17
  41. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/runtime/run_clientapp.py +2 -2
  42. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/pyproject.toml +1 -1
  43. flwr_nightly-1.23.0.dev20250930/py/flwr/client/clientapp/__init__.py +0 -15
  44. flwr_nightly-1.23.0.dev20250930/py/flwr/proto/control_pb2.py +0 -66
  45. flwr_nightly-1.23.0.dev20250930/py/flwr/proto/node_pb2.pyi +0 -21
  46. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/README.md +0 -0
  47. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/__init__.py +0 -0
  48. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/app/__init__.py +0 -0
  49. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/app/error.py +0 -0
  50. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/app/exception.py +0 -0
  51. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/app/metadata.py +0 -0
  52. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/__init__.py +0 -0
  53. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/build.py +0 -0
  54. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/config_utils.py +0 -0
  55. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/constant.py +0 -0
  56. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/example.py +0 -0
  57. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/install.py +0 -0
  58. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/log.py +0 -0
  59. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/login/__init__.py +0 -0
  60. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/ls.py +0 -0
  61. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/__init__.py +0 -0
  62. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/new.py +0 -0
  63. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/__init__.py +0 -0
  64. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  65. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  66. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  67. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  68. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  69. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  70. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  71. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  72. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  73. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/__init__.pytorch_legacy_api.py.tpl +0 -0
  74. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  75. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  76. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  77. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  78. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  79. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  80. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.pytorch_legacy_api.py.tpl +0 -0
  81. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  82. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  83. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/client.xgboost.py.tpl +0 -0
  84. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  85. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  86. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  87. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  88. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  89. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  90. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  91. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  92. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  93. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  94. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  95. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  96. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  97. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  98. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.pytorch_legacy_api.py.tpl +0 -0
  99. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  100. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  101. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/server.xgboost.py.tpl +0 -0
  102. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  103. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  104. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  105. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  106. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  107. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  108. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.pytorch_legacy_api.py.tpl +0 -0
  109. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  110. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  111. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/task.xgboost.py.tpl +0 -0
  112. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  113. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  114. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  115. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  116. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  117. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  118. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  119. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  120. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.pytorch_legacy_api.toml.tpl +0 -0
  121. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  122. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  123. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/new/templates/app/pyproject.xgboost.toml.tpl +0 -0
  124. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/pull.py +0 -0
  125. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/run/__init__.py +0 -0
  126. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/run/run.py +0 -0
  127. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/cli/stop.py +0 -0
  128. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/client.py +0 -0
  129. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  130. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  131. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  132. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  133. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  134. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  135. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  136. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/message_handler/__init__.py +0 -0
  137. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/message_handler/message_handler.py +0 -0
  138. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/__init__.py +0 -0
  139. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/centraldp_mods.py +0 -0
  140. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/comms_mods.py +0 -0
  141. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/localdp_mod.py +0 -0
  142. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  143. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  144. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  145. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/mod/utils.py +0 -0
  146. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/numpy_client.py +0 -0
  147. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/rest_client/__init__.py +0 -0
  148. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/rest_client/connection.py +0 -0
  149. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/run_info_store.py +0 -0
  150. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/client/typing.py +0 -0
  151. {flwr_nightly-1.23.0.dev20250930/py/flwr/client → flwr_nightly-1.23.0.dev20251002/py/flwr/clientapp}/client_app.py +0 -0
  152. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/clientapp/mod/__init__.py +0 -0
  153. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  154. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  155. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/clientapp/typing.py +0 -0
  156. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/__init__.py +0 -0
  157. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/address.py +0 -0
  158. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/args.py +0 -0
  159. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/config.py +0 -0
  160. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/context.py +0 -0
  161. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/date.py +0 -0
  162. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/differential_privacy.py +0 -0
  163. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/differential_privacy_constants.py +0 -0
  164. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/dp.py +0 -0
  165. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  166. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  167. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/exit/__init__.py +0 -0
  168. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/exit/exit.py +0 -0
  169. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/exit/exit_code.py +0 -0
  170. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/exit/exit_handler.py +0 -0
  171. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/exit/signal_handler.py +0 -0
  172. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/grpc.py +0 -0
  173. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/heartbeat.py +0 -0
  174. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/inflatable.py +0 -0
  175. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  176. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/inflatable_utils.py +0 -0
  177. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/logger.py +0 -0
  178. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/message.py +0 -0
  179. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/object_ref.py +0 -0
  180. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/parameter.py +0 -0
  181. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/pyproject.py +0 -0
  182. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/__init__.py +0 -0
  183. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/array.py +0 -0
  184. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/arraychunk.py +0 -0
  185. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/configrecord.py +0 -0
  186. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/conversion_utils.py +0 -0
  187. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/metricrecord.py +0 -0
  188. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/recorddict.py +0 -0
  189. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/record/typeddict.py +0 -0
  190. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/recorddict_compat.py +0 -0
  191. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/retry_invoker.py +0 -0
  192. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  193. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  194. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  195. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  196. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  197. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  198. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  199. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  200. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/serde.py +0 -0
  201. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/serde_utils.py +0 -0
  202. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/telemetry.py +0 -0
  203. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/common/version.py +0 -0
  204. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/__init__.py +0 -0
  205. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/client/__init__.py +0 -0
  206. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  207. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  208. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/common/__init__.py +0 -0
  209. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/server/__init__.py +0 -0
  210. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/server/app.py +0 -0
  211. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/compat/simulation/__init__.py +0 -0
  212. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/__init__.py +0 -0
  213. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/appio_pb2.py +0 -0
  214. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/appio_pb2.pyi +0 -0
  215. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  216. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  217. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/clientappio_pb2.py +0 -0
  218. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  219. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  220. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  221. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/error_pb2.py +0 -0
  222. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/error_pb2.pyi +0 -0
  223. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/error_pb2_grpc.py +0 -0
  224. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  225. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fab_pb2.py +0 -0
  226. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fab_pb2.pyi +0 -0
  227. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  228. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  229. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fleet_pb2.py +0 -0
  230. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fleet_pb2.pyi +0 -0
  231. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  232. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  233. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  234. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  235. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  236. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  237. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/heartbeat_pb2.py +0 -0
  238. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  239. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  240. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  241. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/log_pb2.py +0 -0
  242. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/log_pb2.pyi +0 -0
  243. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/log_pb2_grpc.py +0 -0
  244. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  245. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/message_pb2.py +0 -0
  246. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/message_pb2.pyi +0 -0
  247. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/message_pb2_grpc.py +0 -0
  248. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  249. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/node_pb2_grpc.py +0 -0
  250. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  251. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/recorddict_pb2.py +0 -0
  252. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  253. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  254. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  255. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/run_pb2.py +0 -0
  256. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/run_pb2.pyi +0 -0
  257. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/run_pb2_grpc.py +0 -0
  258. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  259. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/serverappio_pb2.py +0 -0
  260. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  261. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  262. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  263. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/simulationio_pb2.py +0 -0
  264. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  265. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  266. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  267. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/transport_pb2.py +0 -0
  268. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/transport_pb2.pyi +0 -0
  269. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  270. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  271. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/py.typed +0 -0
  272. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/__init__.py +0 -0
  273. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/client_manager.py +0 -0
  274. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/client_proxy.py +0 -0
  275. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/compat/__init__.py +0 -0
  276. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/compat/app.py +0 -0
  277. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/compat/app_utils.py +0 -0
  278. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  279. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/compat/legacy_context.py +0 -0
  280. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/criterion.py +0 -0
  281. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  282. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/grid/__init__.py +0 -0
  283. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/grid/grid.py +0 -0
  284. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/grid/grpc_grid.py +0 -0
  285. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/grid/inmemory_grid.py +0 -0
  286. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/history.py +0 -0
  287. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/run_serverapp.py +0 -0
  288. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/server.py +0 -0
  289. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/server_app.py +0 -0
  290. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/server_config.py +0 -0
  291. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/serverapp/__init__.py +0 -0
  292. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/serverapp/app.py +0 -0
  293. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/serverapp_components.py +0 -0
  294. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/__init__.py +0 -0
  295. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/aggregate.py +0 -0
  296. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/bulyan.py +0 -0
  297. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  298. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  299. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  300. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  301. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  302. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedadagrad.py +0 -0
  303. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedadam.py +0 -0
  304. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedavg.py +0 -0
  305. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedavg_android.py +0 -0
  306. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedavgm.py +0 -0
  307. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedmedian.py +0 -0
  308. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedopt.py +0 -0
  309. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedprox.py +0 -0
  310. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  311. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  312. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  313. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  314. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/fedyogi.py +0 -0
  315. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/krum.py +0 -0
  316. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/qfedavg.py +0 -0
  317. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/strategy/strategy.py +0 -0
  318. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/__init__.py +0 -0
  319. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  320. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  321. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  322. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  323. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  324. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  325. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  326. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  327. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  328. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  329. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  330. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  331. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  332. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  333. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  334. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  335. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  336. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  337. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  338. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  339. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  340. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  341. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  342. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  343. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  344. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  345. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  346. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  347. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  348. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/superlink/utils.py +0 -0
  349. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/typing.py +0 -0
  350. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/utils/__init__.py +0 -0
  351. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/utils/tensorboard.py +0 -0
  352. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/utils/validator.py +0 -0
  353. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/workflow/__init__.py +0 -0
  354. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/workflow/constant.py +0 -0
  355. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/workflow/default_workflows.py +0 -0
  356. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  357. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  358. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  359. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/__init__.py +0 -0
  360. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/exception.py +0 -0
  361. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/__init__.py +0 -0
  362. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  363. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  364. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  365. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  366. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  367. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  368. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  369. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  370. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  371. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  372. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  373. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  374. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  375. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  376. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/krum.py +0 -0
  377. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  378. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  379. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/result.py +0 -0
  380. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/strategy.py +0 -0
  381. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  382. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/__init__.py +0 -0
  383. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/app.py +0 -0
  384. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/legacy_app.py +0 -0
  385. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  386. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/ray_transport/utils.py +0 -0
  387. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/simulation/simulationio_connection.py +0 -0
  388. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/__init__.py +0 -0
  389. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/app_utils.py +0 -0
  390. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/cli/__init__.py +0 -0
  391. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  392. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/constant.py +0 -0
  393. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/corestate/__init__.py +0 -0
  394. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/corestate/corestate.py +0 -0
  395. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/ffs/__init__.py +0 -0
  396. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  397. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/ffs/ffs.py +0 -0
  398. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  399. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  400. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  401. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  402. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  403. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  404. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/object_store/__init__.py +0 -0
  405. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  406. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/object_store/object_store.py +0 -0
  407. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  408. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/object_store/utils.py +0 -0
  409. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/__init__.py +0 -0
  410. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  411. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  412. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  413. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  414. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  415. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  416. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  417. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supercore/utils.py +0 -0
  418. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/__init__.py +0 -0
  419. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  420. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  421. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/servicer/__init__.py +0 -0
  422. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  423. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  424. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/__init__.py +0 -0
  425. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/cli/__init__.py +0 -0
  426. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  427. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  428. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/nodestate/__init__.py +0 -0
  429. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  430. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  431. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  432. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/runtime/__init__.py +0 -0
  433. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/servicer/__init__.py +0 -0
  434. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  435. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  436. {flwr_nightly-1.23.0.dev20250930 → flwr_nightly-1.23.0.dev20251002}/py/flwr/supernode/start_client_internal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.23.0.dev20250930
3
+ Version: 1.23.0.dev20251002
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
@@ -28,6 +28,9 @@ from .new import new
28
28
  from .pull import pull
29
29
  from .run import run
30
30
  from .stop import stop
31
+ from .supernode import create as supernode_create
32
+ from .supernode import delete as supernode_delete
33
+ from .supernode import ls as supernode_list
31
34
 
32
35
  app = typer.Typer(
33
36
  help=typer.style(
@@ -49,6 +52,16 @@ app.command()(stop)
49
52
  app.command()(login)
50
53
  app.command()(pull)
51
54
 
55
+ # Create supernode command group
56
+ supernode_app = typer.Typer(help="Manage SuperNodes")
57
+ supernode_app.command()(supernode_create)
58
+ supernode_app.command()(supernode_delete)
59
+ # Make it appear as "list"
60
+ supernode_app.command("list")(supernode_list)
61
+ # Hide "ls" command (left as alias)
62
+ supernode_app.command(hidden=True)(supernode_list)
63
+ app.add_typer(supernode_app, name="supernode")
64
+
52
65
  typer_click_object = get_command(app)
53
66
 
54
67
 
@@ -12,22 +12,25 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower user auth plugins."""
15
+ """Flower account auth plugins."""
16
16
 
17
17
 
18
18
  from flwr.common.constant import AuthType
19
19
 
20
- from .auth_plugin import CliAuthPlugin
20
+ from .auth_plugin import CliAuthPlugin, LoginError
21
+ from .noop_auth_plugin import NoOpCliAuthPlugin
21
22
  from .oidc_cli_plugin import OidcCliPlugin
22
23
 
23
24
 
24
25
  def get_cli_auth_plugins() -> dict[str, type[CliAuthPlugin]]:
25
26
  """Return all CLI authentication plugins."""
26
- return {AuthType.OIDC: OidcCliPlugin}
27
+ return {AuthType.NOOP: NoOpCliAuthPlugin, AuthType.OIDC: OidcCliPlugin}
27
28
 
28
29
 
29
30
  __all__ = [
30
31
  "CliAuthPlugin",
32
+ "LoginError",
33
+ "NoOpCliAuthPlugin",
31
34
  "OidcCliPlugin",
32
35
  "get_cli_auth_plugins",
33
36
  ]
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Abstract classes for Flower User Auth Plugin."""
15
+ """Abstract classes for Flower account auth plugin."""
16
16
 
17
17
 
18
18
  from abc import ABC, abstractmethod
@@ -20,38 +20,50 @@ from collections.abc import Sequence
20
20
  from pathlib import Path
21
21
  from typing import Optional, Union
22
22
 
23
- from flwr.common.typing import UserAuthCredentials, UserAuthLoginDetails
23
+ from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
24
24
  from flwr.proto.control_pb2_grpc import ControlStub
25
25
 
26
26
 
27
+ class LoginError(Exception):
28
+ """Login error exception."""
29
+
30
+ def __init__(self, message: str):
31
+ self.message = message
32
+
33
+
27
34
  class CliAuthPlugin(ABC):
28
35
  """Abstract Flower Auth Plugin class for CLI.
29
36
 
30
37
  Parameters
31
38
  ----------
32
39
  credentials_path : Path
33
- Path to the user's authentication credentials file.
40
+ Path to the Flower account's authentication credentials file.
34
41
  """
35
42
 
36
43
  @staticmethod
37
44
  @abstractmethod
38
45
  def login(
39
- login_details: UserAuthLoginDetails,
46
+ login_details: AccountAuthLoginDetails,
40
47
  control_stub: ControlStub,
41
- ) -> UserAuthCredentials:
42
- """Authenticate the user and retrieve authentication credentials.
48
+ ) -> AccountAuthCredentials:
49
+ """Authenticate the account and retrieve authentication credentials.
43
50
 
44
51
  Parameters
45
52
  ----------
46
- login_details : UserAuthLoginDetails
47
- An object containing the user's login details.
53
+ login_details : AccountAuthLoginDetails
54
+ An object containing the account's login details.
48
55
  control_stub : ControlStub
49
56
  A stub for executing RPC calls to the server.
50
57
 
51
58
  Returns
52
59
  -------
53
- UserAuthCredentials
60
+ AccountAuthCredentials
54
61
  The authentication credentials obtained after login.
62
+
63
+ Raises
64
+ ------
65
+ LoginError
66
+ If the login process fails.
55
67
  """
56
68
 
57
69
  @abstractmethod
@@ -59,7 +71,7 @@ class CliAuthPlugin(ABC):
59
71
  """Abstract constructor."""
60
72
 
61
73
  @abstractmethod
62
- def store_tokens(self, credentials: UserAuthCredentials) -> None:
74
+ def store_tokens(self, credentials: AccountAuthCredentials) -> None:
63
75
  """Store authentication tokens to the `credentials_path`.
64
76
 
65
77
  The credentials, including tokens, will be saved as a JSON file
@@ -79,5 +91,5 @@ class CliAuthPlugin(ABC):
79
91
  @abstractmethod
80
92
  def read_tokens_from_metadata(
81
93
  self, metadata: Sequence[tuple[str, Union[str, bytes]]]
82
- ) -> Optional[UserAuthCredentials]:
94
+ ) -> Optional[AccountAuthCredentials]:
83
95
  """Read authentication tokens from the provided metadata."""
@@ -0,0 +1,58 @@
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
+ """Concrete NoOp implementation for CLI-side account authentication plugin."""
16
+
17
+
18
+ from collections.abc import Sequence
19
+ from pathlib import Path
20
+ from typing import Optional, Union
21
+
22
+ from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
23
+ from flwr.proto.control_pb2_grpc import ControlStub
24
+
25
+ from .auth_plugin import CliAuthPlugin, LoginError
26
+
27
+
28
+ class NoOpCliAuthPlugin(CliAuthPlugin):
29
+ """No-operation implementation of the CliAuthPlugin."""
30
+
31
+ @staticmethod
32
+ def login(
33
+ login_details: AccountAuthLoginDetails,
34
+ control_stub: ControlStub,
35
+ ) -> AccountAuthCredentials:
36
+ """Raise LoginError as no-op plugin does not support login."""
37
+ raise LoginError("Account authentication is not enabled on this SuperLink.")
38
+
39
+ def __init__(self, credentials_path: Path) -> None:
40
+ pass
41
+
42
+ def store_tokens(self, credentials: AccountAuthCredentials) -> None:
43
+ """Do nothing."""
44
+
45
+ def load_tokens(self) -> None:
46
+ """Do nothing."""
47
+
48
+ def write_tokens_to_metadata(
49
+ self, metadata: Sequence[tuple[str, Union[str, bytes]]]
50
+ ) -> Sequence[tuple[str, Union[str, bytes]]]:
51
+ """Return the metadata unchanged."""
52
+ return metadata
53
+
54
+ def read_tokens_from_metadata(
55
+ self, metadata: Sequence[tuple[str, Union[str, bytes]]]
56
+ ) -> Optional[AccountAuthCredentials]:
57
+ """Return None."""
58
+ return None
@@ -12,7 +12,7 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower CLI user auth plugin for OIDC."""
15
+ """Flower CLI account auth plugin for OIDC."""
16
16
 
17
17
 
18
18
  import json
@@ -29,14 +29,14 @@ from flwr.common.constant import (
29
29
  REFRESH_TOKEN_KEY,
30
30
  AuthType,
31
31
  )
32
- from flwr.common.typing import UserAuthCredentials, UserAuthLoginDetails
32
+ from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
33
33
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
34
34
  GetAuthTokensRequest,
35
35
  GetAuthTokensResponse,
36
36
  )
37
37
  from flwr.proto.control_pb2_grpc import ControlStub
38
38
 
39
- from .auth_plugin import CliAuthPlugin
39
+ from .auth_plugin import CliAuthPlugin, LoginError
40
40
 
41
41
 
42
42
  class OidcCliPlugin(CliAuthPlugin):
@@ -49,12 +49,12 @@ class OidcCliPlugin(CliAuthPlugin):
49
49
 
50
50
  @staticmethod
51
51
  def login(
52
- login_details: UserAuthLoginDetails,
52
+ login_details: AccountAuthLoginDetails,
53
53
  control_stub: ControlStub,
54
- ) -> UserAuthCredentials:
55
- """Authenticate the user and retrieve authentication credentials."""
54
+ ) -> AccountAuthCredentials:
55
+ """Authenticate the account and retrieve authentication credentials."""
56
56
  typer.secho(
57
- "Please login with your user credentials here: "
57
+ "Please log into your Flower account here: "
58
58
  f"{login_details.verification_uri_complete}",
59
59
  fg=typer.colors.BLUE,
60
60
  )
@@ -70,26 +70,16 @@ class OidcCliPlugin(CliAuthPlugin):
70
70
  refresh_token = res.refresh_token
71
71
 
72
72
  if access_token and refresh_token:
73
- typer.secho(
74
- "✅ Login successful.",
75
- fg=typer.colors.GREEN,
76
- bold=False,
77
- )
78
- return UserAuthCredentials(
73
+ return AccountAuthCredentials(
79
74
  access_token=access_token,
80
75
  refresh_token=refresh_token,
81
76
  )
82
77
 
83
78
  time.sleep(login_details.interval)
84
79
 
85
- typer.secho(
86
- "❌ Timeout, failed to sign in.",
87
- fg=typer.colors.RED,
88
- bold=True,
89
- )
90
- raise typer.Exit(code=1)
80
+ raise LoginError("Process timed out.")
91
81
 
92
- def store_tokens(self, credentials: UserAuthCredentials) -> None:
82
+ def store_tokens(self, credentials: AccountAuthCredentials) -> None:
93
83
  """Store authentication tokens to the `credentials_path`.
94
84
 
95
85
  The credentials, including tokens, will be saved as a JSON file
@@ -136,14 +126,14 @@ class OidcCliPlugin(CliAuthPlugin):
136
126
 
137
127
  def read_tokens_from_metadata(
138
128
  self, metadata: Sequence[tuple[str, Union[str, bytes]]]
139
- ) -> Optional[UserAuthCredentials]:
129
+ ) -> Optional[AccountAuthCredentials]:
140
130
  """Read authentication tokens from the provided metadata."""
141
131
  metadata_dict = dict(metadata)
142
132
  access_token = metadata_dict.get(ACCESS_TOKEN_KEY)
143
133
  refresh_token = metadata_dict.get(REFRESH_TOKEN_KEY)
144
134
 
145
135
  if isinstance(access_token, str) and isinstance(refresh_token, str):
146
- return UserAuthCredentials(
136
+ return AccountAuthCredentials(
147
137
  access_token=access_token,
148
138
  refresh_token=refresh_token,
149
139
  )
@@ -32,10 +32,10 @@ Request = Union[
32
32
  ]
33
33
 
34
34
 
35
- class CliUserAuthInterceptor(
35
+ class CliAccountAuthInterceptor(
36
36
  grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInterceptor # type: ignore
37
37
  ):
38
- """CLI interceptor for user authentication."""
38
+ """CLI interceptor for account authentication."""
39
39
 
40
40
  def __init__(self, auth_plugin: CliAuthPlugin):
41
41
  self.auth_plugin = auth_plugin
@@ -70,7 +70,7 @@ class CliUserAuthInterceptor(
70
70
  client_call_details: grpc.ClientCallDetails,
71
71
  request: Request,
72
72
  ) -> grpc.Call:
73
- """Intercept a unary-unary call for user authentication.
73
+ """Intercept a unary-unary call for account authentication.
74
74
 
75
75
  This method intercepts a unary-unary RPC call initiated from the CLI and adds
76
76
  the required authentication tokens to the RPC metadata.
@@ -83,7 +83,7 @@ class CliUserAuthInterceptor(
83
83
  client_call_details: grpc.ClientCallDetails,
84
84
  request: Request,
85
85
  ) -> grpc.Call:
86
- """Intercept a unary-stream call for user authentication.
86
+ """Intercept a unary-stream call for account authentication.
87
87
 
88
88
  This method intercepts a unary-stream RPC call initiated from the CLI and adds
89
89
  the required authentication tokens to the RPC metadata.
@@ -20,6 +20,7 @@ from typing import Annotated, Optional
20
20
 
21
21
  import typer
22
22
 
23
+ from flwr.cli.auth_plugin import LoginError
23
24
  from flwr.cli.config_utils import (
24
25
  exit_if_no_address,
25
26
  get_insecure_flag,
@@ -28,14 +29,19 @@ from flwr.cli.config_utils import (
28
29
  validate_federation_in_project_config,
29
30
  )
30
31
  from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
31
- from flwr.common.typing import UserAuthLoginDetails
32
+ from flwr.common.typing import AccountAuthLoginDetails
32
33
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
33
34
  GetLoginDetailsRequest,
34
35
  GetLoginDetailsResponse,
35
36
  )
36
37
  from flwr.proto.control_pb2_grpc import ControlStub
37
38
 
38
- from ..utils import flwr_cli_grpc_exc_handler, init_channel, try_obtain_cli_auth_plugin
39
+ from ..utils import (
40
+ account_auth_enabled,
41
+ flwr_cli_grpc_exc_handler,
42
+ init_channel,
43
+ try_obtain_cli_auth_plugin,
44
+ )
39
45
 
40
46
 
41
47
  def login( # pylint: disable=R0914
@@ -68,11 +74,12 @@ def login( # pylint: disable=R0914
68
74
  exit_if_no_address(federation_config, "login")
69
75
 
70
76
  # Check if `enable-user-auth` is set to `true`
71
- if not federation_config.get("enable-user-auth", False):
77
+
78
+ if not account_auth_enabled(federation_config):
72
79
  typer.secho(
73
- f"❌ User authentication is not enabled for the federation '{federation}'. "
74
- "To enable it, set `enable-user-auth = true` in the federation "
75
- "configuration.",
80
+ "❌ Account authentication is not enabled for the federation "
81
+ f"'{federation}'. To enable it, set `enable-account-auth = true` "
82
+ "in the federation configuration.",
76
83
  fg=typer.colors.RED,
77
84
  bold=True,
78
85
  )
@@ -109,15 +116,28 @@ def login( # pylint: disable=R0914
109
116
  raise typer.Exit(code=1)
110
117
 
111
118
  # Login
112
- details = UserAuthLoginDetails(
119
+ details = AccountAuthLoginDetails(
113
120
  auth_type=login_response.auth_type,
114
121
  device_code=login_response.device_code,
115
122
  verification_uri_complete=login_response.verification_uri_complete,
116
123
  expires_in=login_response.expires_in,
117
124
  interval=login_response.interval,
118
125
  )
119
- with flwr_cli_grpc_exc_handler():
120
- credentials = auth_plugin.login(details, stub)
126
+ try:
127
+ with flwr_cli_grpc_exc_handler():
128
+ credentials = auth_plugin.login(details, stub)
129
+ typer.secho(
130
+ "✅ Login successful.",
131
+ fg=typer.colors.GREEN,
132
+ bold=False,
133
+ )
134
+ except LoginError as e:
135
+ typer.secho(
136
+ f"❌ Login failed: {e.message}",
137
+ fg=typer.colors.RED,
138
+ bold=True,
139
+ )
140
+ raise typer.Exit(code=1) from None
121
141
 
122
142
  # Store the tokens
123
143
  auth_plugin.store_tokens(credentials)
@@ -0,0 +1,25 @@
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 command line interface `supernode` command."""
16
+
17
+ from .create import create as create
18
+ from .delete import delete as delete
19
+ from .ls import ls as ls
20
+
21
+ __all__ = [
22
+ "create",
23
+ "delete",
24
+ "ls",
25
+ ]
@@ -0,0 +1,58 @@
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 command line interface `supernode create` command."""
16
+
17
+ from pathlib import Path
18
+ from typing import Annotated, Optional
19
+
20
+ import typer
21
+
22
+ from flwr.cli.config_utils import (
23
+ exit_if_no_address,
24
+ load_and_validate,
25
+ process_loaded_project_config,
26
+ validate_federation_in_project_config,
27
+ )
28
+ from flwr.common.constant import FAB_CONFIG_FILE
29
+
30
+
31
+ def create( # pylint: disable=R0914
32
+ public_key: Annotated[
33
+ Path,
34
+ typer.Argument(
35
+ help="Path to the public key file.",
36
+ ),
37
+ ],
38
+ app: Annotated[
39
+ Path,
40
+ typer.Argument(help="Path of the Flower project"),
41
+ ] = Path("."),
42
+ federation: Annotated[
43
+ Optional[str],
44
+ typer.Argument(help="Name of the federation"),
45
+ ] = None,
46
+ ) -> None:
47
+ """Add a SuperNode to the federation."""
48
+ typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
49
+
50
+ pyproject_path = app / FAB_CONFIG_FILE if app else None
51
+ config, errors, warnings = load_and_validate(path=pyproject_path)
52
+ config = process_loaded_project_config(config, errors, warnings)
53
+ federation, federation_config = validate_federation_in_project_config(
54
+ federation, config
55
+ )
56
+ exit_if_no_address(federation_config, "supernode add")
57
+
58
+ _ = public_key
@@ -0,0 +1,58 @@
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 command line interface `supernode delete` command."""
16
+
17
+ from pathlib import Path
18
+ from typing import Annotated, Optional
19
+
20
+ import typer
21
+
22
+ from flwr.cli.config_utils import (
23
+ exit_if_no_address,
24
+ load_and_validate,
25
+ process_loaded_project_config,
26
+ validate_federation_in_project_config,
27
+ )
28
+ from flwr.common.constant import FAB_CONFIG_FILE
29
+
30
+
31
+ def delete( # pylint: disable=R0914
32
+ node_id: Annotated[
33
+ int,
34
+ typer.Argument(
35
+ help="ID of the SuperNode to remove.",
36
+ ),
37
+ ],
38
+ app: Annotated[
39
+ Path,
40
+ typer.Argument(help="Path of the Flower project"),
41
+ ] = Path("."),
42
+ federation: Annotated[
43
+ Optional[str],
44
+ typer.Argument(help="Name of the federation"),
45
+ ] = None,
46
+ ) -> None:
47
+ """Remove a SuperNode from the federation."""
48
+ typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
49
+
50
+ pyproject_path = app / FAB_CONFIG_FILE if app else None
51
+ config, errors, warnings = load_and_validate(path=pyproject_path)
52
+ config = process_loaded_project_config(config, errors, warnings)
53
+ federation, federation_config = validate_federation_in_project_config(
54
+ federation, config
55
+ )
56
+ exit_if_no_address(federation_config, "supernode rm")
57
+
58
+ _ = node_id
@@ -0,0 +1,51 @@
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 command line interface `supernode list` command."""
16
+
17
+
18
+ from pathlib import Path
19
+ from typing import Annotated, Optional
20
+
21
+ import typer
22
+
23
+ from flwr.cli.config_utils import (
24
+ exit_if_no_address,
25
+ load_and_validate,
26
+ process_loaded_project_config,
27
+ validate_federation_in_project_config,
28
+ )
29
+ from flwr.common.constant import FAB_CONFIG_FILE
30
+
31
+
32
+ def ls( # pylint: disable=R0914
33
+ app: Annotated[
34
+ Path,
35
+ typer.Argument(help="Path of the Flower project"),
36
+ ] = Path("."),
37
+ federation: Annotated[
38
+ Optional[str],
39
+ typer.Argument(help="Name of the federation"),
40
+ ] = None,
41
+ ) -> None:
42
+ """List SuperNodes in the federation."""
43
+ typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
44
+
45
+ pyproject_path = app / FAB_CONFIG_FILE if app else None
46
+ config, errors, warnings = load_and_validate(path=pyproject_path)
47
+ config = process_loaded_project_config(config, errors, warnings)
48
+ federation, federation_config = validate_federation_in_project_config(
49
+ federation, config
50
+ )
51
+ exit_if_no_address(federation_config, "supernode ls")