flwr-nightly 1.26.0.dev20260127__tar.gz → 1.26.0.dev20260128__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 (413) hide show
  1. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/PKG-INFO +2 -1
  2. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config/ls.py +1 -1
  3. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/constant.py +0 -1
  4. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/federation/ls.py +1 -1
  5. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/ls.py +1 -1
  6. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/ls.py +1 -1
  7. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/typing.py +10 -5
  8. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/exit_code.py +6 -0
  9. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/typing.py +2 -0
  10. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2.py +5 -3
  11. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2.pyi +23 -1
  12. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/app.py +4 -11
  13. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/address.py +9 -0
  14. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/constant.py +3 -0
  15. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/sql_mixin.py +2 -2
  16. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/__init__.py +15 -0
  17. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/env.py +81 -0
  18. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/script.py.mako +43 -0
  19. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/utils.py +49 -0
  20. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/versions/__init__.py +15 -0
  21. flwr_nightly-1.26.0.dev20260128/py/flwr/supercore/state/alembic/versions/rev_2026_01_28_initialize_migration_of_state_tables.py +200 -0
  22. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/utils.py +21 -0
  23. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/federation/noop_federation_manager.py +3 -1
  24. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/start_client_internal.py +5 -2
  25. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/pyproject.toml +2 -1
  26. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/README.md +0 -0
  27. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/__init__.py +0 -0
  28. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/__init__.py +0 -0
  29. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/error.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/exception.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/message_type.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/metadata.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/app/user_config.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/__init__.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app_cmd/__init__.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app_cmd/publish.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/app_cmd/review.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/build.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config/__init__.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config_migration.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/config_utils.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/example.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/federation/__init__.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/flower_config.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/install.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/log.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/login/__init__.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/login/login.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/new/__init__.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/new/new.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/pull.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/run/__init__.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/run/run.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/run_utils.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/stop.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/__init__.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/register.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/supernode/unregister.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/cli/utils.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/__init__.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/client.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/message_handler/__init__.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/message_handler/message_handler.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/__init__.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/centraldp_mods.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/comms_mods.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/localdp_mod.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/mod/utils.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/numpy_client.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/rest_client/__init__.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/rest_client/connection.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/run_info_store.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/client/typing.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/__init__.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/client_app.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/mod/__init__.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/typing.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/clientapp/utils.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/__init__.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/args.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/config.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/constant.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/context.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/differential_privacy.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/differential_privacy_constants.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/dp.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/__init__.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/exit.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/exit_handler.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/exit/signal_handler.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/grpc.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/inflatable.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/inflatable_utils.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/logger.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/message.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/object_ref.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/parameter.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/__init__.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/array.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/arraychunk.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/arrayrecord.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/configrecord.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/conversion_utils.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/metricrecord.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/recorddict.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/record/typeddict.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/recorddict_compat.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/retry_invoker.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/serde.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/serde_utils.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/common/telemetry.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/__init__.py +0 -0
  142. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/__init__.py +0 -0
  143. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/app.py +0 -0
  144. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  145. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  146. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/common/__init__.py +0 -0
  147. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/common/constant.py +0 -0
  148. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/server/__init__.py +0 -0
  149. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/server/app.py +0 -0
  150. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/compat/simulation/__init__.py +0 -0
  151. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/__init__.py +0 -0
  152. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2.py +0 -0
  153. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2.pyi +0 -0
  154. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  155. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  156. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2.py +0 -0
  157. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  158. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  159. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  160. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2.py +0 -0
  161. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2.pyi +0 -0
  162. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2.py +0 -0
  165. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2.pyi +0 -0
  166. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2.py +0 -0
  169. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2.pyi +0 -0
  170. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  173. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  174. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2.py +0 -0
  175. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2.pyi +0 -0
  176. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  177. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  178. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  179. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  180. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  181. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  182. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2.py +0 -0
  183. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  184. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  185. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  186. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2.py +0 -0
  187. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2.pyi +0 -0
  188. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2_grpc.py +0 -0
  189. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  190. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2.py +0 -0
  191. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2.pyi +0 -0
  192. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2_grpc.py +0 -0
  193. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  194. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2.py +0 -0
  195. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2.pyi +0 -0
  196. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2_grpc.py +0 -0
  197. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  198. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2.py +0 -0
  199. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  200. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2.py +0 -0
  203. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2.pyi +0 -0
  204. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2.py +0 -0
  207. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  208. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2.py +0 -0
  211. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  212. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  213. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  214. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2.pyi +0 -0
  216. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  217. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  218. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/py.typed +0 -0
  219. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/__init__.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/client_manager.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/client_proxy.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/__init__.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/app.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/app_utils.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/compat/legacy_context.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/criterion.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/__init__.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/grid.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/grpc_grid.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/grid/inmemory_grid.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/history.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/run_serverapp.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/server.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/server_app.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/server_config.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/serverapp/__init__.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/serverapp/app.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/serverapp_components.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/__init__.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/aggregate.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/bulyan.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedadagrad.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedadam.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedavg.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedavg_android.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedavgm.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedmedian.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedopt.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedprox.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/fedyogi.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/krum.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/qfedavg.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/strategy/strategy.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/__init__.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/sql_linkstate.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/superlink/utils.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/typing.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/utils/__init__.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/utils/tensorboard.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/utils/validator.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/__init__.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/constant.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/default_workflows.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/__init__.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/exception.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/__init__.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/krum.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/result.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/strategy.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/__init__.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/app.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/legacy_app.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/ray_transport/utils.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/run_simulation.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/simulation/simulationio_connection.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/__init__.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/app_utils.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/cli/__init__.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/__init__.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/corestate.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/credential_store/__init__.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/date.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/__init__.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/ffs.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/heartbeat.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/__init__.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/object_store.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  367. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/object_store/sql_object_store.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/primitives/__init__.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/__init__.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/README.md +0 -0
  373. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/__init__.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/__init__.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supercore/version.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/__init__.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/federation/__init__.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/federation/federation_manager.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/__init__.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/__init__.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/cli/__init__.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/__init__.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  408. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  409. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/runtime/__init__.py +0 -0
  410. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  411. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/servicer/__init__.py +0 -0
  412. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  413. {flwr_nightly-1.26.0.dev20260127 → flwr_nightly-1.26.0.dev20260128}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.26.0.dev20260127
3
+ Version: 1.26.0.dev20260128
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
@@ -31,6 +31,7 @@ Classifier: Typing :: Typed
31
31
  Provides-Extra: rest
32
32
  Provides-Extra: simulation
33
33
  Requires-Dist: SQLAlchemy (>=2.0.45,<3.0.0)
34
+ Requires-Dist: alembic (>=1.18.1,<2.0.0)
34
35
  Requires-Dist: click (<8.2.0)
35
36
  Requires-Dist: cryptography (>=44.0.1,<45.0.0)
36
37
  Requires-Dist: grpcio (>=1.70.0,<2.0.0)
@@ -40,7 +40,7 @@ def ls(
40
40
  ),
41
41
  ] = CliOutputFormat.DEFAULT,
42
42
  ) -> None:
43
- """List all SuperLink connections."""
43
+ """List all SuperLink connections (alias: ls)."""
44
44
  suppress_output = output_format == CliOutputFormat.JSON
45
45
  captured_output = io.StringIO()
46
46
  config_path = None
@@ -101,7 +101,6 @@ default = "local"
101
101
 
102
102
  [superlink.supergrid]
103
103
  address = "{SUPERGRID_ADDRESS}"
104
- federation = "YOUR-FEDERATION-HERE"
105
104
 
106
105
  [superlink.local]
107
106
  options.num-supernodes = 10
@@ -68,7 +68,7 @@ def ls( # pylint: disable=R0914, R0913, R0917, R0912
68
68
  ),
69
69
  ] = None,
70
70
  ) -> None:
71
- """List available federations."""
71
+ """List available federations or details of a specific federation (alias: ls)."""
72
72
  suppress_output = output_format == CliOutputFormat.JSON
73
73
  captured_output = io.StringIO()
74
74
 
@@ -79,7 +79,7 @@ def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
79
79
  ),
80
80
  ] = CliOutputFormat.DEFAULT,
81
81
  ) -> None:
82
- """List the details of one provided run ID or all runs in a Flower federation.
82
+ """List the details of one provided run ID or all runs (alias: ls).
83
83
 
84
84
  The following details are displayed:
85
85
 
@@ -66,7 +66,7 @@ def ls( # pylint: disable=R0914, R0913, R0917
66
66
  ),
67
67
  ] = False,
68
68
  ) -> None:
69
- """List SuperNodes in the federation."""
69
+ """List SuperNodes in the federation (alias: ls)."""
70
70
  suppress_output = output_format == CliOutputFormat.JSON
71
71
  captured_output = io.StringIO()
72
72
 
@@ -22,6 +22,7 @@ from flwr.cli.constant import (
22
22
  DEFAULT_SIMULATION_BACKEND_NAME,
23
23
  SuperLinkConnectionTomlKey,
24
24
  )
25
+ from flwr.supercore.utils import check_federation_format
25
26
 
26
27
  _ERROR_MSG_FMT = "SuperLinkConnection.%s is None"
27
28
 
@@ -176,11 +177,15 @@ class SuperLinkConnection:
176
177
  + f"expected bool, but got {type(self._insecure).__name__}."
177
178
  )
178
179
 
179
- if self.federation is not None and not isinstance(self.federation, str):
180
- raise ValueError(
181
- err_prefix % SuperLinkConnectionTomlKey.FEDERATION
182
- + f"expected str, but got {type(self.federation).__name__}."
183
- )
180
+ if self.federation is not None:
181
+ if not isinstance(self.federation, str):
182
+ raise ValueError(
183
+ err_prefix % SuperLinkConnectionTomlKey.FEDERATION
184
+ + f"expected str, but got {type(self.federation).__name__}."
185
+ )
186
+
187
+ # Check if the federation string is valid
188
+ check_federation_format(self.federation)
184
189
 
185
190
  # The connection needs to have either an address or options (or both).
186
191
  if self.address is None and self.options is None:
@@ -33,6 +33,7 @@ class ExitCode:
33
33
  SUPERLINK_LICENSE_MISSING = 102
34
34
  SUPERLINK_LICENSE_URL_INVALID = 103
35
35
  SUPERLINK_INVALID_ARGS = 104
36
+ SUPERLINK_DATABASE_SCHEMA_MISMATCH = 105
36
37
 
37
38
  # ServerApp-specific exit codes (200-299)
38
39
  SERVERAPP_STRATEGY_PRECONDITION_UNMET = 200
@@ -91,6 +92,11 @@ EXIT_CODE_HELP = {
91
92
  "Invalid arguments provided to SuperLink. Use `--help` check for the correct "
92
93
  "usage. Alternatively, check the documentation."
93
94
  ),
95
+ ExitCode.SUPERLINK_DATABASE_SCHEMA_MISMATCH: (
96
+ "The database schema does not match the expected schema for this version of "
97
+ "SuperLink. Please refer to the documentation for guidance on how to resolve "
98
+ "this issue."
99
+ ),
94
100
  # ServerApp-specific exit codes (200-299)
95
101
  ExitCode.SERVERAPP_STRATEGY_PRECONDITION_UNMET: (
96
102
  "The strategy received replies that cannot be aggregated. Please ensure all "
@@ -24,6 +24,7 @@ import numpy as np
24
24
  import numpy.typing as npt
25
25
 
26
26
  from flwr.app.user_config import UserConfig
27
+ from flwr.proto.federation_pb2 import Account # pylint: disable=E0611
27
28
  from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
28
29
 
29
30
  NDArray = npt.NDArray[Any]
@@ -343,5 +344,6 @@ class Federation:
343
344
 
344
345
  name: str
345
346
  member_aids: list[str]
347
+ accounts: list[Account]
346
348
  nodes: list[NodeInfo]
347
349
  runs: list[Run]
@@ -26,13 +26,15 @@ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
26
26
  from flwr.proto import node_pb2 as flwr_dot_proto_dot_node__pb2
27
27
 
28
28
 
29
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lwr/proto/federation.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"s\n\nFederation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bmember_aids\x18\x02 \x03(\t\x12#\n\x05nodes\x18\x03 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x1d\n\x04runs\x18\x04 \x03(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
29
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x66lwr/proto/federation.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x15\x66lwr/proto/node.proto\"#\n\x07\x41\x63\x63ount\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x9a\x01\n\nFederation\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0bmember_aids\x18\x02 \x03(\t\x12%\n\x08\x61\x63\x63ounts\x18\x03 \x03(\x0b\x32\x13.flwr.proto.Account\x12#\n\x05nodes\x18\x04 \x03(\x0b\x32\x14.flwr.proto.NodeInfo\x12\x1d\n\x04runs\x18\x05 \x03(\x0b\x32\x0f.flwr.proto.Runb\x06proto3')
30
30
 
31
31
  _globals = globals()
32
32
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
33
33
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.federation_pb2', _globals)
34
34
  if not _descriptor._USE_C_DESCRIPTORS:
35
35
  DESCRIPTOR._loaded_options = None
36
- _globals['_FEDERATION']._serialized_start=88
37
- _globals['_FEDERATION']._serialized_end=203
36
+ _globals['_ACCOUNT']._serialized_start=88
37
+ _globals['_ACCOUNT']._serialized_end=123
38
+ _globals['_FEDERATION']._serialized_start=126
39
+ _globals['_FEDERATION']._serialized_end=280
38
40
  # @@protoc_insertion_point(module_scope)
@@ -28,18 +28,39 @@ import typing
28
28
 
29
29
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
30
30
 
31
+ @typing.final
32
+ class Account(google.protobuf.message.Message):
33
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
34
+
35
+ ID_FIELD_NUMBER: builtins.int
36
+ NAME_FIELD_NUMBER: builtins.int
37
+ id: builtins.str
38
+ name: builtins.str
39
+ def __init__(
40
+ self,
41
+ *,
42
+ id: builtins.str = ...,
43
+ name: builtins.str = ...,
44
+ ) -> None: ...
45
+ def ClearField(self, field_name: typing.Literal["id", b"id", "name", b"name"]) -> None: ...
46
+
47
+ global___Account = Account
48
+
31
49
  @typing.final
32
50
  class Federation(google.protobuf.message.Message):
33
51
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
34
52
 
35
53
  NAME_FIELD_NUMBER: builtins.int
36
54
  MEMBER_AIDS_FIELD_NUMBER: builtins.int
55
+ ACCOUNTS_FIELD_NUMBER: builtins.int
37
56
  NODES_FIELD_NUMBER: builtins.int
38
57
  RUNS_FIELD_NUMBER: builtins.int
39
58
  name: builtins.str
40
59
  @property
41
60
  def member_aids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
42
61
  @property
62
+ def accounts(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___Account]: ...
63
+ @property
43
64
  def nodes(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.node_pb2.NodeInfo]: ...
44
65
  @property
45
66
  def runs(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.run_pb2.Run]: ...
@@ -48,9 +69,10 @@ class Federation(google.protobuf.message.Message):
48
69
  *,
49
70
  name: builtins.str = ...,
50
71
  member_aids: collections.abc.Iterable[builtins.str] | None = ...,
72
+ accounts: collections.abc.Iterable[global___Account] | None = ...,
51
73
  nodes: collections.abc.Iterable[flwr.proto.node_pb2.NodeInfo] | None = ...,
52
74
  runs: collections.abc.Iterable[flwr.proto.run_pb2.Run] | None = ...,
53
75
  ) -> None: ...
54
- def ClearField(self, field_name: typing.Literal["member_aids", b"member_aids", "name", b"name", "nodes", b"nodes", "runs", b"runs"]) -> None: ...
76
+ def ClearField(self, field_name: typing.Literal["accounts", b"accounts", "member_aids", b"member_aids", "name", b"name", "nodes", b"nodes", "runs", b"runs"]) -> None: ...
55
77
 
56
78
  global___Federation = Federation
@@ -36,13 +36,11 @@ from flwr.common.config import get_flwr_dir
36
36
  from flwr.common.constant import (
37
37
  AUTHN_TYPE_YAML_KEY,
38
38
  AUTHZ_TYPE_YAML_KEY,
39
- CLIENT_OCTET,
40
39
  CONTROL_API_DEFAULT_SERVER_ADDRESS,
41
40
  FLEET_API_GRPC_RERE_DEFAULT_ADDRESS,
42
41
  FLEET_API_REST_DEFAULT_ADDRESS,
43
42
  ISOLATION_MODE_PROCESS,
44
43
  ISOLATION_MODE_SUBPROCESS,
45
- SERVER_OCTET,
46
44
  SERVERAPPIO_API_DEFAULT_SERVER_ADDRESS,
47
45
  SIMULATIONIO_API_DEFAULT_SERVER_ADDRESS,
48
46
  TRANSPORT_TYPE_GRPC_ADAPTER,
@@ -62,7 +60,7 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
62
60
  )
63
61
  from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
64
62
  from flwr.server.fleet_event_log_interceptor import FleetEventLogInterceptor
65
- from flwr.supercore.address import parse_address
63
+ from flwr.supercore.address import parse_address, resolve_bind_address
66
64
  from flwr.supercore.constant import FLWR_IN_MEMORY_DB_NAME
67
65
  from flwr.supercore.ffs import FfsFactory
68
66
  from flwr.supercore.grpc_health import add_args_health, run_health_server_grpc_no_tls
@@ -429,16 +427,11 @@ def run_superlink() -> None:
429
427
  raise ValueError(f"Unknown fleet_api_type: {args.fleet_api_type}")
430
428
 
431
429
  if args.isolation == ISOLATION_MODE_SUBPROCESS:
432
-
433
- _octet, _colon, _port = serverappio_address.rpartition(":")
434
- io_address = (
435
- f"{CLIENT_OCTET}:{_port}" if _octet == SERVER_OCTET else serverappio_address
430
+ appio_address = resolve_bind_address(
431
+ simulationio_address if is_simulation else serverappio_address
436
432
  )
437
433
  command = ["flower-superexec", "--insecure"]
438
- command += [
439
- "--appio-api-address",
440
- simulationio_address if is_simulation else io_address,
441
- ]
434
+ command += ["--appio-api-address", appio_address]
442
435
  command += [
443
436
  "--plugin-type",
444
437
  ExecPluginType.SIMULATION if is_simulation else ExecPluginType.SERVER_APP,
@@ -100,3 +100,12 @@ def is_port_in_use(address: str) -> bool:
100
100
  return True
101
101
 
102
102
  return False
103
+
104
+
105
+ def resolve_bind_address(address: str) -> str:
106
+ """Replace bind-all addresses (0.0.0.0, ::) with localhost (127.0.0.1, ::1)."""
107
+ if address.startswith("[::]"):
108
+ return address.replace("[::]", "[::1]", 1)
109
+ if address.startswith("0.0.0.0"):
110
+ return address.replace("0.0.0.0", "127.0.0.1", 1)
111
+ return address
@@ -25,6 +25,9 @@ EXEC_PLUGIN_SECTION = "exec_plugin"
25
25
  # Flower in-memory Python-based database name
26
26
  FLWR_IN_MEMORY_DB_NAME = ":flwr-in-memory:"
27
27
 
28
+ # Flower in-memory SQLite database URL
29
+ FLWR_IN_MEMORY_SQLITE_DB_URL = "sqlite:///:memory:"
30
+
28
31
  # Constants for Hub
29
32
  APP_ID_PATTERN = r"^@[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$"
30
33
  APP_VERSION_PATTERN = r"^\d+\.\d+\.\d+$"
@@ -29,7 +29,7 @@ from sqlalchemy.exc import SQLAlchemyError
29
29
  from sqlalchemy.orm import Session, sessionmaker
30
30
 
31
31
  from flwr.common.logger import log
32
- from flwr.supercore.constant import SQLITE_PRAGMAS
32
+ from flwr.supercore.constant import FLWR_IN_MEMORY_SQLITE_DB_URL, SQLITE_PRAGMAS
33
33
 
34
34
  _current_session: ContextVar[Session | None] = ContextVar(
35
35
  "current_sqlalchemy_session",
@@ -95,7 +95,7 @@ class SqlMixin(ABC):
95
95
 
96
96
  # Auto-convert file path to SQLAlchemy SQLite URL if needed
97
97
  if database_path == ":memory:":
98
- self.database_url = "sqlite:///:memory:"
98
+ self.database_url = FLWR_IN_MEMORY_SQLITE_DB_URL
99
99
  elif not database_path.startswith("sqlite://"):
100
100
  # Treat as file path, convert to absolute and create SQLite URL
101
101
  abs_path = Path(database_path).resolve()
@@ -0,0 +1,15 @@
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
+ """Alembic helpers and migration environment for SQL state."""
@@ -0,0 +1,81 @@
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
+ """Alembic environment configuration for State migrations."""
16
+
17
+
18
+ from logging.config import fileConfig
19
+
20
+ from alembic import context
21
+ from sqlalchemy import engine_from_config, pool
22
+
23
+ from flwr.supercore.state.alembic.utils import get_combined_metadata
24
+
25
+ # Alembic Config object
26
+ config = context.config # pylint: disable=no-member
27
+
28
+ # Interpret the config file for Python logging
29
+ if config.config_file_name is not None:
30
+ fileConfig(config.config_file_name)
31
+
32
+
33
+ # Target metadata for autogenerate
34
+ target_metadata = get_combined_metadata()
35
+
36
+
37
+ def run_migrations_offline() -> None:
38
+ """Run migrations in 'offline' mode.
39
+
40
+ This configures the context with just a URL and not an Engine, though an Engine is
41
+ acceptable here as well. By skipping the Engine creation we don't even need a DBAPI
42
+ to be available.
43
+
44
+ Calls to context.execute() here emit the given string to the script output.
45
+ """
46
+ url = config.get_main_option("sqlalchemy.url")
47
+ context.configure( # pylint: disable=no-member
48
+ url=url,
49
+ target_metadata=target_metadata,
50
+ literal_binds=True,
51
+ dialect_opts={"paramstyle": "named"},
52
+ )
53
+
54
+ with context.begin_transaction(): # pylint: disable=no-member
55
+ context.run_migrations() # pylint: disable=no-member
56
+
57
+
58
+ def run_migrations_online() -> None:
59
+ """Run migrations in 'online' mode.
60
+
61
+ In this scenario we need to create an Engine and associate a connection with the
62
+ context.
63
+ """
64
+ connectable = engine_from_config(
65
+ config.get_section(config.config_ini_section, {}),
66
+ prefix="sqlalchemy.",
67
+ poolclass=pool.NullPool,
68
+ )
69
+
70
+ with connectable.connect() as connection:
71
+ # pylint: disable-next=no-member
72
+ context.configure(connection=connection, target_metadata=target_metadata)
73
+
74
+ with context.begin_transaction(): # pylint: disable=no-member
75
+ context.run_migrations() # pylint: disable=no-member
76
+
77
+
78
+ if context.is_offline_mode(): # pylint: disable=no-member
79
+ run_migrations_offline()
80
+ else:
81
+ run_migrations_online()
@@ -0,0 +1,43 @@
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
+ """${message}.
16
+
17
+ Revision ID: ${up_revision}
18
+ Revises: ${down_revision | comma,n}
19
+ Create Date: ${create_date}
20
+ """
21
+ from typing import Sequence, Union
22
+
23
+ from alembic import op
24
+ import sqlalchemy as sa
25
+ ${imports if imports else ""}
26
+
27
+ # pylint: disable=no-member
28
+
29
+ # revision identifiers, used by Alembic.
30
+ revision: str = ${repr(up_revision)}
31
+ down_revision: Union[str, Sequence[str], None] = ${repr(down_revision)}
32
+ branch_labels: Union[str, Sequence[str], None] = ${repr(branch_labels)}
33
+ depends_on: Union[str, Sequence[str], None] = ${repr(depends_on)}
34
+
35
+
36
+ def upgrade() -> None:
37
+ """Upgrade schema."""
38
+ ${upgrades if upgrades else "pass"}
39
+
40
+
41
+ def downgrade() -> None:
42
+ """Downgrade schema."""
43
+ ${downgrades if downgrades else "pass"}
@@ -0,0 +1,49 @@
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
+ """Helpers for running and validating Alembic migrations."""
16
+
17
+
18
+ from sqlalchemy import MetaData
19
+
20
+ from flwr.supercore.state.schema.corestate_tables import create_corestate_metadata
21
+ from flwr.supercore.state.schema.linkstate_tables import create_linkstate_metadata
22
+ from flwr.supercore.state.schema.objectstore_tables import create_objectstore_metadata
23
+
24
+
25
+ def get_combined_metadata() -> MetaData:
26
+ """Combine all Flower state metadata objects into a single MetaData instance.
27
+
28
+ This ensures Alembic can track all tables across CoreState, LinkState, and
29
+ ObjectStore.
30
+
31
+ Returns
32
+ -------
33
+ MetaData
34
+ Combined SQLAlchemy MetaData with all Flower state tables.
35
+ """
36
+ # Start with linkstate tables
37
+ metadata = create_linkstate_metadata()
38
+
39
+ # Add corestate tables
40
+ corestate_metadata = create_corestate_metadata()
41
+ for table in corestate_metadata.tables.values():
42
+ table.to_metadata(metadata)
43
+
44
+ # Add objectstore tables
45
+ objectstore_metadata = create_objectstore_metadata()
46
+ for table in objectstore_metadata.tables.values():
47
+ table.to_metadata(metadata)
48
+
49
+ return metadata
@@ -0,0 +1,15 @@
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
+ """Alembic migration versions."""