flwr-nightly 1.26.0.dev20260112__tar.gz → 1.26.0.dev20260113__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 (396) hide show
  1. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/PKG-INFO +2 -1
  2. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/app.py +6 -6
  3. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/federation/__init__.py +0 -2
  4. flwr_nightly-1.26.0.dev20260112/py/flwr/cli/federation/show.py → flwr_nightly-1.26.0.dev20260113/py/flwr/cli/federation/ls.py +113 -70
  5. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/utils.py +100 -5
  6. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/constant.py +52 -4
  7. flwr_nightly-1.26.0.dev20260113/py/flwr/supercore/typing.py +97 -0
  8. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/pyproject.toml +2 -1
  9. flwr_nightly-1.26.0.dev20260112/py/flwr/cli/federation/ls.py +0 -140
  10. flwr_nightly-1.26.0.dev20260112/py/flwr/supercore/typing.py +0 -29
  11. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/README.md +0 -0
  12. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/__init__.py +0 -0
  13. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/app/__init__.py +0 -0
  14. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/app/error.py +0 -0
  15. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/app/exception.py +0 -0
  16. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/app/message_type.py +0 -0
  17. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/app/metadata.py +0 -0
  18. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/app/user_config.py +0 -0
  19. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/__init__.py +0 -0
  20. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/app_cmd/__init__.py +0 -0
  21. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/app_cmd/publish.py +0 -0
  22. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/app_cmd/review.py +0 -0
  23. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  24. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  25. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  26. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  27. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/build.py +0 -0
  28. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  29. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/config_utils.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/constant.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/example.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/install.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/log.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/login/__init__.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/login/login.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/ls.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/new/__init__.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/new/new.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/pull.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/run/__init__.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/run/run.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/run_utils.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/stop.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/supernode/__init__.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/supernode/ls.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/supernode/register.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/cli/supernode/unregister.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/__init__.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/client.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/message_handler/__init__.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/message_handler/message_handler.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/__init__.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/centraldp_mods.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/comms_mods.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/localdp_mod.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/mod/utils.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/numpy_client.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/rest_client/__init__.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/rest_client/connection.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/run_info_store.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/client/typing.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/clientapp/__init__.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/clientapp/client_app.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/clientapp/mod/__init__.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/clientapp/typing.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/clientapp/utils.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/__init__.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/args.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/config.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/constant.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/context.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/differential_privacy.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/differential_privacy_constants.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/dp.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/exit/__init__.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/exit/exit.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/exit/exit_code.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/exit/exit_handler.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/exit/signal_handler.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/grpc.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/inflatable.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/inflatable_utils.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/logger.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/message.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/object_ref.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/parameter.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/__init__.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/array.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/arraychunk.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/arrayrecord.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/configrecord.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/conversion_utils.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/metricrecord.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/recorddict.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/record/typeddict.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/recorddict_compat.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/retry_invoker.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/serde.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/serde_utils.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/telemetry.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/common/typing.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/__init__.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/client/__init__.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/client/app.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/common/__init__.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/common/constant.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/server/__init__.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/server/app.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/compat/simulation/__init__.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/__init__.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/appio_pb2.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/appio_pb2.pyi +0 -0
  138. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  140. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/clientappio_pb2.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  142. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  143. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  144. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/control_pb2.py +0 -0
  145. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/control_pb2.pyi +0 -0
  146. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/control_pb2_grpc.py +0 -0
  147. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  148. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/error_pb2.py +0 -0
  149. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/error_pb2.pyi +0 -0
  150. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/error_pb2_grpc.py +0 -0
  151. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  152. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fab_pb2.py +0 -0
  153. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fab_pb2.pyi +0 -0
  154. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  155. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  156. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/federation_pb2.py +0 -0
  157. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/federation_pb2.pyi +0 -0
  158. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  159. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  160. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fleet_pb2.py +0 -0
  161. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fleet_pb2.pyi +0 -0
  162. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  165. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  166. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/heartbeat_pb2.py +0 -0
  169. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  170. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/log_pb2.py +0 -0
  173. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/log_pb2.pyi +0 -0
  174. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/log_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/message_pb2.py +0 -0
  177. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/message_pb2.pyi +0 -0
  178. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/message_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/node_pb2.py +0 -0
  181. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/node_pb2.pyi +0 -0
  182. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/node_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/recorddict_pb2.py +0 -0
  185. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  186. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/run_pb2.py +0 -0
  189. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/run_pb2.pyi +0 -0
  190. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/run_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/serverappio_pb2.py +0 -0
  193. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  194. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/simulationio_pb2.py +0 -0
  197. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  198. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/transport_pb2.py +0 -0
  201. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/transport_pb2.pyi +0 -0
  202. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/py.typed +0 -0
  205. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/__init__.py +0 -0
  206. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/app.py +0 -0
  207. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/client_manager.py +0 -0
  208. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/client_proxy.py +0 -0
  209. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/compat/__init__.py +0 -0
  210. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/compat/app.py +0 -0
  211. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/compat/app_utils.py +0 -0
  212. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  213. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/compat/legacy_context.py +0 -0
  214. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/criterion.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  216. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/grid/__init__.py +0 -0
  217. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/grid/grid.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/grid/grpc_grid.py +0 -0
  219. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/grid/inmemory_grid.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/history.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/run_serverapp.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/server.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/server_app.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/server_config.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/serverapp/__init__.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/serverapp/app.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/serverapp_components.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/__init__.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/aggregate.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/bulyan.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedadagrad.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedadam.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedavg.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedavg_android.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedavgm.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedmedian.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedopt.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedprox.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/fedyogi.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/krum.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/qfedavg.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/strategy/strategy.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/__init__.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/superlink/utils.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/typing.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/utils/__init__.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/utils/tensorboard.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/utils/validator.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/workflow/__init__.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/workflow/constant.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/workflow/default_workflows.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/__init__.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/exception.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/__init__.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/krum.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/result.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/strategy.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/__init__.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/app.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/legacy_app.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/ray_transport/utils.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/run_simulation.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/simulation/simulationio_connection.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/__init__.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/address.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/app_utils.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/cli/__init__.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/corestate/__init__.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/corestate/corestate.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/corestate/sqlite_corestate.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/date.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/ffs/__init__.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/ffs/ffs.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/heartbeat.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/object_store/__init__.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/object_store/object_store.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/primitives/__init__.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/sqlite_mixin.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/__init__.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/utils.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supercore/version.py +0 -0
  367. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/__init__.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/federation/__init__.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/federation/federation_manager.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/servicer/__init__.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/__init__.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/cli/__init__.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/nodestate/__init__.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/runtime/__init__.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/servicer/__init__.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260112 → flwr_nightly-1.26.0.dev20260113}/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.26.0.dev20260112
3
+ Version: 1.26.0.dev20260113
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
@@ -30,6 +30,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
30
30
  Classifier: Typing :: Typed
31
31
  Provides-Extra: rest
32
32
  Provides-Extra: simulation
33
+ Requires-Dist: SQLAlchemy (>=2.0.45,<3.0.0)
33
34
  Requires-Dist: click (<8.2.0)
34
35
  Requires-Dist: cryptography (>=44.0.1,<45.0.0)
35
36
  Requires-Dist: grpcio (>=1.70.0,<2.0.0)
@@ -23,7 +23,6 @@ from .app_cmd import publish as app_publish
23
23
  from .app_cmd import review as app_review
24
24
  from .build import build
25
25
  from .federation import ls as federation_list
26
- from .federation import show as federation_show
27
26
  from .install import install
28
27
  from .log import log
29
28
  from .login import login
@@ -35,6 +34,7 @@ from .stop import stop
35
34
  from .supernode import ls as supernode_list
36
35
  from .supernode import register as supernode_register
37
36
  from .supernode import unregister as supernode_unregister
37
+ from .utils import init_flwr_config
38
38
 
39
39
  app = typer.Typer(
40
40
  help=typer.style(
@@ -80,14 +80,13 @@ federation_app.command("list")(federation_list)
80
80
  # Hide "ls" command (left as alias)
81
81
  federation_app.command(hidden=True)(federation_list)
82
82
  app.add_typer(federation_app, name="federation")
83
- federation_app.command()(federation_show)
84
83
 
85
84
  typer_click_object = get_command(app)
86
85
 
87
86
 
88
87
  @app.callback(invoke_without_command=True)
89
- def version_callback(
90
- ver: bool = typer.Option(
88
+ def main(
89
+ version: bool = typer.Option(
91
90
  None,
92
91
  "-V",
93
92
  "--version",
@@ -95,8 +94,9 @@ def version_callback(
95
94
  help="Show the version and exit.",
96
95
  ),
97
96
  ) -> None:
98
- """Print version."""
99
- if ver:
97
+ """Flower CLI."""
98
+ init_flwr_config()
99
+ if version:
100
100
  typer.secho(f"Flower version: {package_version}", fg="blue")
101
101
  raise typer.Exit()
102
102
 
@@ -16,9 +16,7 @@
16
16
 
17
17
 
18
18
  from .ls import ls as ls
19
- from .show import show as show
20
19
 
21
20
  __all__ = [
22
21
  "ls",
23
- "show",
24
22
  ]
@@ -12,12 +12,12 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower command line interface `federation show` command."""
15
+ """Flower command line interface `federation list` command."""
16
16
 
17
17
 
18
18
  import io
19
19
  from pathlib import Path
20
- from typing import Annotated, Any
20
+ from typing import Annotated, Any, cast
21
21
 
22
22
  import typer
23
23
  from rich.console import Console
@@ -35,24 +35,27 @@ from flwr.common.constant import FAB_CONFIG_FILE, NOOP_ACCOUNT_NAME, CliOutputFo
35
35
  from flwr.common.logger import print_json_error, redirect_output, restore_output
36
36
  from flwr.common.serde import run_from_proto
37
37
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
38
+ ListFederationsRequest,
39
+ ListFederationsResponse,
38
40
  ShowFederationRequest,
39
41
  ShowFederationResponse,
40
42
  )
41
43
  from flwr.proto.control_pb2_grpc import ControlStub
44
+ from flwr.proto.federation_pb2 import Federation # pylint: disable=E0611
42
45
  from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
43
- from flwr.supercore.constant import NOOP_FEDERATION
44
46
  from flwr.supercore.utils import humanize_duration
45
47
 
46
48
  from ..run_utils import RunRow, format_runs
47
49
  from ..utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
48
50
 
49
51
 
50
- def show( # pylint: disable=R0914, R0913, R0917
52
+ def ls( # pylint: disable=R0914, R0913, R0917, R0912
53
+ ctx: typer.Context,
51
54
  app: Annotated[
52
55
  Path,
53
56
  typer.Argument(help="Path of the Flower project"),
54
57
  ] = Path("."),
55
- federation: Annotated[
58
+ toml_federation: Annotated[
56
59
  str | None,
57
60
  typer.Argument(help="Name of the federation"),
58
61
  ] = None,
@@ -64,12 +67,19 @@ def show( # pylint: disable=R0914, R0913, R0917
64
67
  help="Format output using 'default' view or 'json'",
65
68
  ),
66
69
  ] = CliOutputFormat.DEFAULT,
70
+ federation: Annotated[
71
+ str | None,
72
+ typer.Option(
73
+ "--federation",
74
+ case_sensitive=False,
75
+ help="Name of the federation to display",
76
+ ),
77
+ ] = None,
67
78
  ) -> None:
68
- """Show details of a federation.
79
+ """List available federations."""
80
+ # Resolve command used (list or ls)
81
+ command_name = cast(str, ctx.command.name) if ctx.command else "ls"
69
82
 
70
- Display comprehensive information about a federation including its members,
71
- registered SuperNodes, and runs.
72
- """
73
83
  suppress_output = output_format == CliOutputFormat.JSON
74
84
  captured_output = io.StringIO()
75
85
  try:
@@ -80,25 +90,41 @@ def show( # pylint: disable=R0914, R0913, R0917
80
90
  pyproject_path = app / FAB_CONFIG_FILE if app else None
81
91
  config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
82
92
  config = process_loaded_project_config(config, errors, warnings)
83
- federation, federation_config = validate_federation_in_project_config(
84
- federation, config
93
+ toml_federation_name, federation_config = validate_federation_in_project_config(
94
+ toml_federation, config
85
95
  )
86
- exit_if_no_address(federation_config, "federation show")
87
- real_federation: str = federation_config.get("federation", NOOP_FEDERATION)
96
+ exit_if_no_address(federation_config, f"federation {command_name}")
88
97
  channel = None
89
98
  try:
90
- auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
99
+ auth_plugin = load_cli_auth_plugin(
100
+ app, toml_federation_name, federation_config
101
+ )
91
102
  channel = init_channel(app, federation_config, auth_plugin)
92
103
  stub = ControlStub(channel)
93
- typer.echo(f"📄 Showing '{real_federation}' federation ...")
94
- members, nodes, runs = _show_federation(stub, real_federation)
95
- restore_output()
96
- if output_format == CliOutputFormat.JSON:
97
- Console().print_json(data=_to_json(members, nodes, runs))
104
+
105
+ if federation:
106
+ # Show specific federation details
107
+ typer.echo(f"📄 Showing '{federation}' federation ...")
108
+ members, nodes, runs = _show_federation(stub, federation)
109
+
110
+ restore_output()
111
+ if output_format == CliOutputFormat.JSON:
112
+ Console().print_json(
113
+ data=_to_json(members=members, nodes=nodes, runs=runs)
114
+ )
115
+ else:
116
+ Console().print(_to_members_table(members))
117
+ Console().print(_to_nodes_table(nodes))
118
+ Console().print(_to_runs_table(runs))
98
119
  else:
99
- Console().print(_to_members_table(members))
100
- Console().print(_to_nodes_table(nodes))
101
- Console().print(_to_runs_table(runs))
120
+ # List federations
121
+ typer.echo("📄 Listing federations...")
122
+ federations = _list_federations(stub)
123
+ restore_output()
124
+ if output_format == CliOutputFormat.JSON:
125
+ Console().print_json(data=_to_json(federations=federations))
126
+ else:
127
+ Console().print(_to_table(federations))
102
128
  finally:
103
129
  if channel:
104
130
  channel.close()
@@ -120,6 +146,71 @@ def show( # pylint: disable=R0914, R0913, R0917
120
146
  captured_output.close()
121
147
 
122
148
 
149
+ def _list_federations(stub: ControlStub) -> list[Federation]:
150
+ """List all federations."""
151
+ with flwr_cli_grpc_exc_handler():
152
+ res: ListFederationsResponse = stub.ListFederations(ListFederationsRequest())
153
+
154
+ return list(res.federations)
155
+
156
+
157
+ def _to_table(federations: list[Federation]) -> Table:
158
+ """Format the provided federations list to a rich Table."""
159
+ table = Table(header_style="bold cyan", show_lines=True)
160
+
161
+ # Add columns
162
+ table.add_column(
163
+ Text("Federation", justify="center"), style="bright_black", no_wrap=True
164
+ )
165
+
166
+ for federation in federations:
167
+ table.add_row(federation.name)
168
+
169
+ return table
170
+
171
+
172
+ def _to_json(
173
+ federations: list[Federation] | None = None,
174
+ members: list[str] | None = None,
175
+ nodes: list[NodeInfo] | None = None,
176
+ runs: list[RunRow] | None = None,
177
+ ) -> list[dict[str, str]] | list[list[dict[str, Any]]]:
178
+ """Format the provided federations list to JSON serializable format."""
179
+ if federations is not None:
180
+ return [{"name": federation.name} for federation in federations]
181
+
182
+ if members is None or nodes is None or runs is None:
183
+ return []
184
+
185
+ members_list: list[dict[str, Any]] = []
186
+ nodes_list: list[dict[str, Any]] = []
187
+ runs_list: list[dict[str, Any]] = []
188
+
189
+ for member in members:
190
+ members_list.append({"member_id": member, "role": "Member"})
191
+
192
+ for node in nodes:
193
+ nodes_list.append(
194
+ {
195
+ "node_id": f"{node.node_id}",
196
+ "owner": node.owner_name,
197
+ "status": node.status,
198
+ }
199
+ )
200
+
201
+ for run in runs:
202
+ runs_list.append(
203
+ {
204
+ "run_id": f"{run.run_id}",
205
+ "app": f"@{run.fab_id}=={run.fab_version}",
206
+ "status": run.status_text,
207
+ "elapsed": run.elapsed,
208
+ }
209
+ )
210
+
211
+ return [members_list, nodes_list, runs_list]
212
+
213
+
123
214
  def _show_federation(
124
215
  stub: ControlStub, federation: str
125
216
  ) -> tuple[list[str], list[NodeInfo], list[RunRow]]:
@@ -268,51 +359,3 @@ def _to_runs_table(run_list: list[RunRow]) -> Table:
268
359
  table.add_row(*formatted_row)
269
360
 
270
361
  return table
271
-
272
-
273
- def _to_json(
274
- members: list[str], nodes: list[NodeInfo], runs: list[RunRow]
275
- ) -> list[list[dict[str, str]]]:
276
- """Format the provided federation information to JSON serializable format.
277
-
278
- Parameters
279
- ----------
280
- members : list[str]
281
- List of member account identifiers.
282
- nodes : list[NodeInfo]
283
- List of NodeInfo objects.
284
- runs : list[RunRow]
285
- List of RunRow objects.
286
-
287
- Returns
288
- -------
289
- list[list[dict[str, str]]]
290
- Nested list containing dictionaries for members, nodes, and runs.
291
- """
292
- members_list: list[dict[str, Any]] = []
293
- nodes_list: list[dict[str, Any]] = []
294
- runs_list: list[dict[str, Any]] = []
295
-
296
- for member in members:
297
- members_list.append({"member_id": member, "role": "Member"})
298
-
299
- for node in nodes:
300
- nodes_list.append(
301
- {
302
- "node_id": f"{node.node_id}",
303
- "owner": node.owner_name,
304
- "status": node.status,
305
- }
306
- )
307
-
308
- for run in runs:
309
- runs_list.append(
310
- {
311
- "run_id": f"{run.run_id}",
312
- "app": f"@{run.fab_id}=={run.fab_version}",
313
- "status": run.status_text,
314
- "elapsed": run.elapsed,
315
- }
316
- )
317
-
318
- return [members_list, nodes_list, runs_list]
@@ -48,8 +48,23 @@ from flwr.common.grpc import (
48
48
  create_channel,
49
49
  on_channel_state_change,
50
50
  )
51
- from flwr.supercore.constant import FLOWER_CONFIG_FILE, SuperLinkConnectionTomlKey
52
- from flwr.supercore.typing import SuperLinkConnection
51
+ from flwr.supercore.constant import (
52
+ DEFAULT_FLOWER_CONFIG_TOML,
53
+ DEFAULT_SIMULATION_BACKEND_NAME,
54
+ FLOWER_CONFIG_FILE,
55
+ SimulationBackendConfigTomlKey,
56
+ SimulationClientResourcesTomlKey,
57
+ SimulationInitArgsTomlKey,
58
+ SuperLinkConnectionTomlKey,
59
+ SuperLinkSimulationOptionsTomlKey,
60
+ )
61
+ from flwr.supercore.typing import (
62
+ SimulationBackendConfig,
63
+ SimulationClientResources,
64
+ SimulationInitArgs,
65
+ SuperLinkConnection,
66
+ SuperLinkSimulationOptions,
67
+ )
53
68
  from flwr.supercore.utils import get_flwr_home
54
69
 
55
70
  from .auth_plugin import CliAuthPlugin, get_cli_plugin_class
@@ -626,6 +641,74 @@ def validate_credentials_content(creds_path: Path) -> str:
626
641
  return creds[ACCESS_TOKEN_KEY]
627
642
 
628
643
 
644
+ def _parse_simulation_options(options: dict[str, Any]) -> SuperLinkSimulationOptions:
645
+ """Parse simulation options from a dictionary in a SuperLink connection."""
646
+ num_supernodes = options.get(SuperLinkSimulationOptionsTomlKey.NUM_SUPERNODES)
647
+ # Validation handled in SuperLinkSimulationOptions.__post_init__
648
+
649
+ backend_dict = options.get(SuperLinkSimulationOptionsTomlKey.BACKEND)
650
+ simulation_backend: SimulationBackendConfig | None = None
651
+
652
+ if isinstance(backend_dict, dict):
653
+ # Parse client resources
654
+ client_resources_dict = backend_dict.get(
655
+ SimulationBackendConfigTomlKey.CLIENT_RESOURCES
656
+ )
657
+ client_resources: SimulationClientResources | None = None
658
+ if isinstance(client_resources_dict, dict):
659
+ client_resources = SimulationClientResources(
660
+ num_cpus=client_resources_dict.get(
661
+ SimulationClientResourcesTomlKey.NUM_CPUS
662
+ ),
663
+ num_gpus=client_resources_dict.get(
664
+ SimulationClientResourcesTomlKey.NUM_GPUS
665
+ ),
666
+ )
667
+
668
+ # Parse init args
669
+ init_args_dict = backend_dict.get(SimulationBackendConfigTomlKey.INIT_ARGS)
670
+ init_args: SimulationInitArgs | None = None
671
+ if isinstance(init_args_dict, dict):
672
+ init_args = SimulationInitArgs(
673
+ num_cpus=init_args_dict.get(SimulationInitArgsTomlKey.NUM_CPUS),
674
+ num_gpus=init_args_dict.get(SimulationInitArgsTomlKey.NUM_GPUS),
675
+ logging_level=init_args_dict.get(
676
+ SimulationInitArgsTomlKey.LOGGING_LEVEL
677
+ ),
678
+ log_to_drive=init_args_dict.get(SimulationInitArgsTomlKey.LOG_TO_DRIVE),
679
+ )
680
+
681
+ simulation_backend = SimulationBackendConfig(
682
+ name=backend_dict.get(
683
+ SimulationBackendConfigTomlKey.NAME, DEFAULT_SIMULATION_BACKEND_NAME
684
+ ),
685
+ client_resources=client_resources,
686
+ init_args=init_args,
687
+ )
688
+
689
+ # Note: validation happens in SuperLinkSimulationOptions.__post_init__
690
+ return SuperLinkSimulationOptions(
691
+ num_supernodes=cast(int, num_supernodes),
692
+ backend=simulation_backend,
693
+ )
694
+
695
+
696
+ def init_flwr_config() -> None:
697
+ """Initialize the Flower configuration file."""
698
+ config_path = get_flwr_home() / FLOWER_CONFIG_FILE
699
+
700
+ if not config_path.exists():
701
+ # Create parent directory if it doesn't exist
702
+ config_path.parent.mkdir(parents=True, exist_ok=True)
703
+ # Write Flower config file
704
+ config_path.write_text(DEFAULT_FLOWER_CONFIG_TOML, encoding="utf-8")
705
+
706
+ typer.secho(
707
+ f"\nFlower configuration not found. Created default configuration"
708
+ f" at {config_path}\n",
709
+ )
710
+
711
+
629
712
  def parse_superlink_connection(
630
713
  conn_dict: dict[str, Any], name: str
631
714
  ) -> SuperLinkConnection:
@@ -643,20 +726,31 @@ def parse_superlink_connection(
643
726
  SuperLinkConnection
644
727
  The parsed SuperLink connection configuration.
645
728
  """
646
- # Check required fields
729
+ # Check fields
647
730
  address = conn_dict.get(SuperLinkConnectionTomlKey.ADDRESS)
648
731
  root_certificates = conn_dict.get(SuperLinkConnectionTomlKey.ROOT_CERTIFICATES)
649
732
  insecure = conn_dict.get(SuperLinkConnectionTomlKey.INSECURE)
650
733
  enable_account_auth = conn_dict.get(SuperLinkConnectionTomlKey.ENABLE_ACCOUNT_AUTH)
651
- if not (
734
+ options = conn_dict.get("options")
735
+
736
+ is_address_setup = (
652
737
  isinstance(address, str)
653
738
  # root-certificates is optional in TOML (can be missing)
654
739
  and isinstance(root_certificates, (str, type(None)))
655
740
  and isinstance(insecure, bool)
656
741
  and isinstance(enable_account_auth, bool)
657
- ):
742
+ )
743
+
744
+ is_simulation_setup = isinstance(options, dict)
745
+
746
+ if not (is_address_setup or is_simulation_setup):
658
747
  raise ValueError("Invalid SuperLink connection format.")
659
748
 
749
+ simulation_options: SuperLinkSimulationOptions | None = None
750
+ if is_simulation_setup:
751
+ options = cast(dict[str, Any], options)
752
+ simulation_options = _parse_simulation_options(options)
753
+
660
754
  # Build and return SuperLinkConnection
661
755
  return SuperLinkConnection(
662
756
  name=name,
@@ -664,6 +758,7 @@ def parse_superlink_connection(
664
758
  root_certificates=root_certificates,
665
759
  insecure=insecure,
666
760
  enable_account_auth=enable_account_auth,
761
+ options=simulation_options,
667
762
  )
668
763
 
669
764
 
@@ -60,6 +60,9 @@ FORCE_EXIT_TIMEOUT_SECONDS = 5 # Used in `flwr_exit` function
60
60
  # Constants for message processing timing
61
61
  MESSAGE_TIME_ENTRY_MAX_AGE_SECONDS = 3600
62
62
 
63
+ # Constants for simulations
64
+ DEFAULT_SIMULATION_BACKEND_NAME = "ray"
65
+
63
66
  # System message type
64
67
  SYSTEM_MESSAGE_TYPE = "system"
65
68
 
@@ -77,10 +80,6 @@ class NodeStatus:
77
80
  raise TypeError(f"{cls.__name__} cannot be instantiated.")
78
81
 
79
82
 
80
- # CLI connection configuration file name
81
- FLOWER_CONFIG_FILE = "config.toml"
82
-
83
-
84
83
  class SuperLinkConnectionTomlKey:
85
84
  """TOML keys for SuperLink connection configuration."""
86
85
 
@@ -90,3 +89,52 @@ class SuperLinkConnectionTomlKey:
90
89
  ROOT_CERTIFICATES = "root-certificates"
91
90
  INSECURE = "insecure"
92
91
  ENABLE_ACCOUNT_AUTH = "enable-account-auth"
92
+
93
+
94
+ class SimulationClientResourcesTomlKey:
95
+ """TOML keys for SimulationClientResources."""
96
+
97
+ NUM_CPUS = "num-cpus"
98
+ NUM_GPUS = "num-gpus"
99
+
100
+
101
+ class SimulationInitArgsTomlKey:
102
+ """TOML keys for SimulationInitArgs."""
103
+
104
+ NUM_CPUS = "num-cpus"
105
+ NUM_GPUS = "num-gpus"
106
+ LOGGING_LEVEL = "logging-level"
107
+ LOG_TO_DRIVE = "log-to-drive"
108
+
109
+
110
+ class SimulationBackendConfigTomlKey:
111
+ """TOML keys for SimulationBackendConfig."""
112
+
113
+ CLIENT_RESOURCES = "client-resources"
114
+ INIT_ARGS = "init-args"
115
+ NAME = "name"
116
+
117
+
118
+ class SuperLinkSimulationOptionsTomlKey:
119
+ """TOML keys for SuperLinkSimulationOptions."""
120
+
121
+ NUM_SUPERNODES = "num-supernodes"
122
+ BACKEND = "backend"
123
+
124
+
125
+ # CLI connection configuration file name
126
+ FLOWER_CONFIG_FILE = "config.toml"
127
+
128
+ # The default configuration for the Flower config file
129
+ DEFAULT_FLOWER_CONFIG_TOML = f"""[{SuperLinkConnectionTomlKey.SUPERLINK}]
130
+ {SuperLinkConnectionTomlKey.DEFAULT} = "local-simulation"
131
+
132
+ [{SuperLinkConnectionTomlKey.SUPERLINK}.supergrid]
133
+ {SuperLinkConnectionTomlKey.ADDRESS} = "supergrid.flower.ai"
134
+ {SuperLinkConnectionTomlKey.ENABLE_ACCOUNT_AUTH} = true
135
+
136
+ [{SuperLinkConnectionTomlKey.SUPERLINK}.local-simulation]
137
+ options.num-supernodes = 10
138
+ options.backend.client-resources.num-cpus = 1
139
+ options.backend.client-resources.num-gpus = 0
140
+ """
@@ -0,0 +1,97 @@
1
+ # Copyright 2026 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 type definitions for infrastructure."""
16
+
17
+
18
+ from dataclasses import dataclass
19
+
20
+ from flwr.supercore.constant import DEFAULT_SIMULATION_BACKEND_NAME
21
+
22
+
23
+ @dataclass
24
+ class SimulationClientResources:
25
+ """Resource configuration for the ClientApp."""
26
+
27
+ num_cpus: float | None = None
28
+ num_gpus: float | None = None
29
+
30
+ def __post_init__(self) -> None:
31
+ """Validate client resources configuration."""
32
+ if self.num_cpus is not None and not isinstance(self.num_cpus, (int, float)):
33
+ raise ValueError("client-resources.num-cpus must be a number (int/float).")
34
+ if self.num_gpus is not None and not isinstance(self.num_gpus, (int, float)):
35
+ raise ValueError("client-resources.num-gpus must be a number (int/float).")
36
+
37
+
38
+ @dataclass
39
+ class SimulationInitArgs:
40
+ """Initialization arguments for the simulation."""
41
+
42
+ num_cpus: int | None = None
43
+ num_gpus: int | None = None
44
+ logging_level: str | None = None
45
+ log_to_drive: bool | None = None
46
+
47
+ def __post_init__(self) -> None:
48
+ """Validate initialization arguments."""
49
+ if self.num_cpus is not None and not isinstance(self.num_cpus, int):
50
+ raise ValueError("init-args.num-cpus must be an integer.")
51
+ if self.num_gpus is not None and not isinstance(self.num_gpus, int):
52
+ raise ValueError("init-args.num-gpus must be an integer.")
53
+ if self.logging_level is not None and not isinstance(self.logging_level, str):
54
+ raise ValueError("init-args.logging-level must be a string.")
55
+ if self.log_to_drive is not None and not isinstance(self.log_to_drive, bool):
56
+ raise ValueError("init-args.log-to-drive must be a boolean.")
57
+
58
+
59
+ @dataclass
60
+ class SimulationBackendConfig:
61
+ """Backend configuration for the simulation."""
62
+
63
+ client_resources: SimulationClientResources | None = None
64
+ init_args: SimulationInitArgs | None = None
65
+ name: str = DEFAULT_SIMULATION_BACKEND_NAME
66
+
67
+ def __post_init__(self) -> None:
68
+ """Validate backend configuration."""
69
+ if not isinstance(self.name, str):
70
+ raise ValueError("backend.name must be a string.")
71
+
72
+
73
+ @dataclass
74
+ class SuperLinkSimulationOptions:
75
+ """Options for local simulation."""
76
+
77
+ num_supernodes: int
78
+ backend: SimulationBackendConfig | None = None
79
+
80
+ def __post_init__(self) -> None:
81
+ """Validate simulation options."""
82
+ if not isinstance(self.num_supernodes, int):
83
+ raise ValueError(
84
+ "Invalid simulation options: num-supernodes must be an integer."
85
+ )
86
+
87
+
88
+ @dataclass
89
+ class SuperLinkConnection:
90
+ """SuperLink connection configuration for CLI commands."""
91
+
92
+ name: str
93
+ address: str | None = None
94
+ root_certificates: str | None = None
95
+ insecure: bool | None = None
96
+ enable_account_auth: bool | None = None
97
+ options: SuperLinkSimulationOptions | None = None
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.26.0.dev20260112"
7
+ version = "1.26.0.dev20260113"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -78,6 +78,7 @@ rich = "^13.5.0"
78
78
  pyyaml = "^6.0.2"
79
79
  requests = "^2.31.0"
80
80
  click = "<8.2.0"
81
+ SQLAlchemy = "^2.0.45"
81
82
  # Optional dependencies (Simulation Engine)
82
83
  ray = [
83
84
  { version = "==2.51.1", optional = true, python = ">=3.10,<3.13" },