flwr-nightly 1.26.0.dev20260121__tar.gz → 1.26.0.dev20260123__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 (410) hide show
  1. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/PKG-INFO +2 -2
  2. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app.py +7 -7
  3. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/publish.py +6 -30
  4. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/review.py +3 -37
  5. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/auth_plugin.py +5 -10
  6. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +1 -2
  7. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +27 -31
  8. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config_utils.py +0 -132
  9. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/constant.py +8 -2
  10. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/federation/ls.py +19 -35
  11. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/login/login.py +29 -42
  12. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/ls.py +19 -33
  13. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/register.py +17 -30
  14. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/unregister.py +17 -31
  15. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/utils.py +34 -257
  16. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/__init__.py +0 -2
  17. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/linkstate_factory.py +4 -4
  18. flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sqlite_linkstate.py → flwr_nightly-1.26.0.dev20260123/py/flwr/server/superlink/linkstate/sql_linkstate.py +397 -505
  19. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/utils.py +47 -0
  20. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/constant.py +3 -0
  21. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/object_store_factory.py +4 -4
  22. flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/object_store/sqlite_object_store.py → flwr_nightly-1.26.0.dev20260123/py/flwr/supercore/object_store/sql_object_store.py +107 -113
  23. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/sql_mixin.py +22 -5
  24. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/pyproject.toml +2 -2
  25. flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sql_linkstate.py +0 -221
  26. flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/corestate/sqlite_corestate.py +0 -157
  27. flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/sqlite_mixin.py +0 -156
  28. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/README.md +0 -0
  29. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/__init__.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/__init__.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/error.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/exception.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/message_type.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/metadata.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/user_config.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/__init__.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/__init__.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/build.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config/__init__.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config/ls.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config_migration.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/example.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/federation/__init__.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/flower_config.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/install.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/log.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/login/__init__.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/ls.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/new/__init__.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/new/new.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/pull.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run/__init__.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run/run.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run_utils.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/stop.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/__init__.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/typing.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/__init__.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/client.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/message_handler/__init__.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/message_handler/message_handler.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/__init__.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/centraldp_mods.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/comms_mods.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/localdp_mod.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/utils.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/numpy_client.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/rest_client/__init__.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/rest_client/connection.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/run_info_store.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/typing.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/__init__.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/client_app.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/__init__.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/typing.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/utils.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/__init__.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/args.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/config.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/constant.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/context.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/differential_privacy.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/differential_privacy_constants.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/dp.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/__init__.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit_code.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit_handler.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/signal_handler.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/grpc.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable_utils.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/logger.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/message.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/object_ref.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/parameter.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/__init__.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/array.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/arraychunk.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/arrayrecord.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/configrecord.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/conversion_utils.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/metricrecord.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/recorddict.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/typeddict.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/recorddict_compat.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/retry_invoker.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/serde.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/serde_utils.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/telemetry.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/typing.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/__init__.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/__init__.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/app.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  142. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/common/__init__.py +0 -0
  143. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/common/constant.py +0 -0
  144. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/server/__init__.py +0 -0
  145. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/server/app.py +0 -0
  146. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/simulation/__init__.py +0 -0
  147. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/__init__.py +0 -0
  148. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2.py +0 -0
  149. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2.pyi +0 -0
  150. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  151. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  152. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2.py +0 -0
  153. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  154. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  155. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  156. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2.py +0 -0
  157. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2.pyi +0 -0
  158. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2_grpc.py +0 -0
  159. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  160. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2.py +0 -0
  161. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2.pyi +0 -0
  162. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2.py +0 -0
  165. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2.pyi +0 -0
  166. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2.py +0 -0
  169. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2.pyi +0 -0
  170. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2.py +0 -0
  173. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2.pyi +0 -0
  174. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  177. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  178. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2.py +0 -0
  181. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  182. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2.py +0 -0
  185. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2.pyi +0 -0
  186. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2.py +0 -0
  189. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2.pyi +0 -0
  190. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2.py +0 -0
  193. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2.pyi +0 -0
  194. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2.py +0 -0
  197. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  198. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2.py +0 -0
  201. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2.pyi +0 -0
  202. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2.py +0 -0
  205. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  206. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  207. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  208. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2.py +0 -0
  209. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  210. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  211. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  212. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2.py +0 -0
  213. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2.pyi +0 -0
  214. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  216. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/py.typed +0 -0
  217. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/__init__.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/app.py +0 -0
  219. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/client_manager.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/client_proxy.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/__init__.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/app.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/app_utils.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/legacy_context.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/criterion.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/__init__.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/grid.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/grpc_grid.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/inmemory_grid.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/history.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/run_serverapp.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server_app.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server_config.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp/__init__.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp/app.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp_components.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/__init__.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/aggregate.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/bulyan.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedadagrad.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedadam.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavg.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavg_android.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavgm.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedmedian.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedopt.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedprox.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedyogi.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/krum.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/qfedavg.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/strategy.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/__init__.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/utils.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/typing.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/__init__.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/tensorboard.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/validator.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/__init__.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/constant.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/default_workflows.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/__init__.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/exception.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/__init__.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/krum.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/result.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/strategy.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/__init__.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/app.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/legacy_app.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/utils.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/run_simulation.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/simulationio_connection.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/__init__.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/address.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/app_utils.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/cli/__init__.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/__init__.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/corestate.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/__init__.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/date.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/__init__.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/ffs.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/heartbeat.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/__init__.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/object_store.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/__init__.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/__init__.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/README.md +0 -0
  367. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/__init__.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/__init__.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/utils.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/version.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/__init__.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/__init__.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/federation_manager.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/__init__.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/__init__.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/__init__.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/__init__.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/runtime/__init__.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/__init__.py +0 -0
  408. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  409. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  410. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260123}/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.dev20260121
3
+ Version: 1.26.0.dev20260123
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
@@ -45,7 +45,7 @@ Requires-Dist: ray (==2.51.1) ; (python_version >= "3.10" and python_version < "
45
45
  Requires-Dist: ray (==2.51.1) ; (sys_platform != "win32" and python_version == "3.13") and (extra == "simulation")
46
46
  Requires-Dist: requests (>=2.31.0,<3.0.0)
47
47
  Requires-Dist: rich (>=13.5.0,<14.0.0)
48
- Requires-Dist: starlette (>=0.45.2,<0.46.0) ; extra == "rest"
48
+ Requires-Dist: starlette (>=0.47.2,<0.48.0) ; extra == "rest"
49
49
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
50
50
  Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
51
51
  Requires-Dist: typer (>=0.12.5,<0.21.0)
@@ -67,17 +67,17 @@ app.command(**ALLOW_EXTRAS)(log)
67
67
  app.command("list", **ALLOW_EXTRAS)(ls)
68
68
  app.command(hidden=True, **ALLOW_EXTRAS)(ls)
69
69
  app.command(**ALLOW_EXTRAS)(stop)
70
- app.command()(login)
70
+ app.command(**ALLOW_EXTRAS)(login)
71
71
  app.command(**ALLOW_EXTRAS)(pull)
72
72
 
73
73
  # Create supernode command group
74
74
  supernode_app = typer.Typer(help="Manage SuperNodes")
75
- supernode_app.command()(supernode_register)
76
- supernode_app.command()(supernode_unregister)
75
+ supernode_app.command(**ALLOW_EXTRAS)(supernode_register)
76
+ supernode_app.command(**ALLOW_EXTRAS)(supernode_unregister)
77
77
  # Make it appear as "list"
78
- supernode_app.command("list")(supernode_list)
78
+ supernode_app.command("list", **ALLOW_EXTRAS)(supernode_list)
79
79
  # Hide "ls" command (left as alias)
80
- supernode_app.command(hidden=True)(supernode_list)
80
+ supernode_app.command(hidden=True, **ALLOW_EXTRAS)(supernode_list)
81
81
  app.add_typer(supernode_app, name="supernode")
82
82
 
83
83
  # Create app command group
@@ -89,9 +89,9 @@ app.add_typer(app_app, name="app")
89
89
  # Create federation command group
90
90
  federation_app = typer.Typer(help="Manage Federations")
91
91
  # Make it appear as "list"
92
- federation_app.command("list")(federation_list)
92
+ federation_app.command("list", **ALLOW_EXTRAS)(federation_list)
93
93
  # Hide "ls" command (left as alias)
94
- federation_app.command(hidden=True)(federation_list)
94
+ federation_app.command(hidden=True, **ALLOW_EXTRAS)(federation_list)
95
95
  app.add_typer(federation_app, name="federation")
96
96
 
97
97
  # Create config command group
@@ -23,7 +23,6 @@ import requests
23
23
  import typer
24
24
  from requests import Response
25
25
 
26
- from flwr.common.constant import FAB_CONFIG_FILE
27
26
  from flwr.supercore.constant import (
28
27
  APP_PUBLISH_EXCLUDE_PATTERNS,
29
28
  APP_PUBLISH_INCLUDE_PATTERNS,
@@ -33,18 +32,17 @@ from flwr.supercore.constant import (
33
32
  MAX_TOTAL_BYTES,
34
33
  MIME_MAP,
35
34
  PLATFORM_API_URL,
35
+ SUPERGRID_ADDRESS,
36
36
  UTF8,
37
37
  )
38
38
  from flwr.supercore.version import package_version as flwr_version
39
39
 
40
40
  from ..auth_plugin.oidc_cli_plugin import OidcCliPlugin
41
- from ..config_utils import (
42
- load_and_validate,
43
- process_loaded_project_config,
44
- validate_federation_in_project_config,
41
+ from ..utils import (
42
+ build_pathspec,
43
+ load_cli_auth_plugin_from_connection,
44
+ load_gitignore_patterns,
45
45
  )
46
- from ..constant import FEDERATION_CONFIG_HELP_MESSAGE
47
- from ..utils import build_pathspec, load_cli_auth_plugin, load_gitignore_patterns
48
46
 
49
47
 
50
48
  # pylint: disable=too-many-locals
@@ -55,35 +53,13 @@ def publish(
55
53
  help="Project directory to upload (defaults to current directory)."
56
54
  ),
57
55
  ] = Path("."),
58
- federation: Annotated[
59
- str | None,
60
- typer.Argument(
61
- help="Name of the federation used for login before publishing app."
62
- ),
63
- ] = None,
64
- federation_config_overrides: Annotated[
65
- list[str] | None,
66
- typer.Option(
67
- "--federation-config",
68
- help=FEDERATION_CONFIG_HELP_MESSAGE,
69
- ),
70
- ] = None,
71
56
  ) -> None:
72
57
  """Publish a Flower App to the Flower Platform.
73
58
 
74
59
  This command uploads your app project to the Flower Platform. Files are filtered
75
60
  based on .gitignore patterns and allowed file extensions.
76
61
  """
77
- # Load configs
78
- pyproject_path = app / FAB_CONFIG_FILE if app else None
79
- config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
80
- config = process_loaded_project_config(config, errors, warnings)
81
- federation, federation_config = validate_federation_in_project_config(
82
- federation, config, federation_config_overrides
83
- )
84
-
85
- # Load the authentication plugin
86
- auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
62
+ auth_plugin = load_cli_auth_plugin_from_connection(SUPERGRID_ADDRESS)
87
63
  auth_plugin.load_tokens()
88
64
  if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
89
65
  typer.secho(
@@ -28,8 +28,7 @@ from cryptography.hazmat.primitives.asymmetric import ed25519
28
28
 
29
29
  from flwr.common import now
30
30
  from flwr.common.config import get_flwr_dir
31
- from flwr.common.constant import FAB_CONFIG_FILE
32
- from flwr.supercore.constant import PLATFORM_API_URL
31
+ from flwr.supercore.constant import PLATFORM_API_URL, SUPERGRID_ADDRESS
33
32
  from flwr.supercore.primitives.asymmetric_ed25519 import (
34
33
  create_message_to_sign,
35
34
  load_private_key,
@@ -39,14 +38,8 @@ from flwr.supercore.utils import parse_app_spec, request_download_link
39
38
  from flwr.supercore.version import package_version as flwr_version
40
39
 
41
40
  from ..auth_plugin.oidc_cli_plugin import OidcCliPlugin
42
- from ..config_utils import (
43
- load_and_validate,
44
- process_loaded_project_config,
45
- validate_federation_in_project_config,
46
- )
47
- from ..constant import FEDERATION_CONFIG_HELP_MESSAGE
48
41
  from ..install import install_from_fab
49
- from ..utils import load_cli_auth_plugin
42
+ from ..utils import load_cli_auth_plugin_from_connection
50
43
 
51
44
  TRY_AGAIN_MESSAGE = "Please try again or press CTRL+C to abort.\n"
52
45
 
@@ -60,38 +53,11 @@ def review(
60
53
  "Version is optional; defaults to the latest."
61
54
  ),
62
55
  ],
63
- app_dir_login: Annotated[
64
- Path,
65
- typer.Argument(
66
- help="Project directory to used for login before reviewing app."
67
- ),
68
- ] = Path("."),
69
- federation: Annotated[
70
- str | None,
71
- typer.Argument(
72
- help="Name of the federation used for login before reviewing app."
73
- ),
74
- ] = None,
75
- federation_config_overrides: Annotated[
76
- list[str] | None,
77
- typer.Option(
78
- "--federation-config",
79
- help=FEDERATION_CONFIG_HELP_MESSAGE,
80
- ),
81
- ] = None,
82
56
  ) -> None:
83
57
  """Download a FAB for <APP-ID>, unpack it for manual review, and upon confirmation
84
58
  sign & submit the review to the Platform."""
85
- # Load configs
86
- pyproject_path = app_dir_login / FAB_CONFIG_FILE if app_dir_login else None
87
- config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
88
- config = process_loaded_project_config(config, errors, warnings)
89
- federation, federation_config = validate_federation_in_project_config(
90
- federation, config, federation_config_overrides
91
- )
59
+ auth_plugin = load_cli_auth_plugin_from_connection(SUPERGRID_ADDRESS)
92
60
 
93
- # Load the authentication plugin
94
- auth_plugin = load_cli_auth_plugin(app_dir_login, federation, federation_config)
95
61
  auth_plugin.load_tokens()
96
62
  if not isinstance(auth_plugin, OidcCliPlugin) or not auth_plugin.access_token:
97
63
  typer.secho(
@@ -17,7 +17,6 @@
17
17
 
18
18
  from abc import ABC, abstractmethod
19
19
  from collections.abc import Sequence
20
- from pathlib import Path
21
20
 
22
21
  from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
23
22
  from flwr.proto.control_pb2_grpc import ControlStub
@@ -35,8 +34,8 @@ class CliAuthPlugin(ABC):
35
34
 
36
35
  Parameters
37
36
  ----------
38
- credentials_path : Path
39
- Path to the Flower account's authentication credentials file.
37
+ host : str
38
+ The address of the SuperLink Control API server.
40
39
  """
41
40
 
42
41
  @staticmethod
@@ -66,20 +65,16 @@ class CliAuthPlugin(ABC):
66
65
  """
67
66
 
68
67
  @abstractmethod
69
- def __init__(self, credentials_path: Path):
68
+ def __init__(self, host: str):
70
69
  """Abstract constructor."""
71
70
 
72
71
  @abstractmethod
73
72
  def store_tokens(self, credentials: AccountAuthCredentials) -> None:
74
- """Store authentication tokens to the `credentials_path`.
75
-
76
- The credentials, including tokens, will be saved as a JSON file
77
- at `credentials_path`.
78
- """
73
+ """Store authentication tokens to the credential store."""
79
74
 
80
75
  @abstractmethod
81
76
  def load_tokens(self) -> None:
82
- """Load authentication tokens from the `credentials_path`."""
77
+ """Load authentication tokens from the credential store."""
83
78
 
84
79
  @abstractmethod
85
80
  def write_tokens_to_metadata(
@@ -16,7 +16,6 @@
16
16
 
17
17
 
18
18
  from collections.abc import Sequence
19
- from pathlib import Path
20
19
 
21
20
  from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
22
21
  from flwr.proto.control_pb2_grpc import ControlStub
@@ -57,7 +56,7 @@ class NoOpCliAuthPlugin(CliAuthPlugin):
57
56
  """
58
57
  raise LoginError("Account authentication is not enabled on this SuperLink.")
59
58
 
60
- def __init__(self, credentials_path: Path) -> None:
59
+ def __init__(self, host: str = "") -> None:
61
60
  pass
62
61
 
63
62
  def store_tokens(self, credentials: AccountAuthCredentials) -> None:
@@ -15,27 +15,25 @@
15
15
  """Flower CLI account auth plugin for OIDC."""
16
16
 
17
17
 
18
- import json
19
18
  import time
20
19
  import webbrowser
21
20
  from collections.abc import Sequence
22
- from pathlib import Path
23
- from typing import Any
24
21
 
25
22
  import typer
26
23
 
27
- from flwr.common.constant import (
28
- ACCESS_TOKEN_KEY,
29
- AUTHN_TYPE_JSON_KEY,
30
- REFRESH_TOKEN_KEY,
31
- AuthnType,
24
+ from flwr.cli.constant import (
25
+ ACCESS_TOKEN_STORE_KEY,
26
+ AUTHN_TYPE_STORE_KEY,
27
+ REFRESH_TOKEN_STORE_KEY,
32
28
  )
29
+ from flwr.common.constant import ACCESS_TOKEN_KEY, REFRESH_TOKEN_KEY, AuthnType
33
30
  from flwr.common.typing import AccountAuthCredentials, AccountAuthLoginDetails
34
31
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
35
32
  GetAuthTokensRequest,
36
33
  GetAuthTokensResponse,
37
34
  )
38
35
  from flwr.proto.control_pb2_grpc import ControlStub
36
+ from flwr.supercore.credential_store import get_credential_store
39
37
 
40
38
  from .auth_plugin import CliAuthPlugin, LoginError
41
39
 
@@ -47,10 +45,11 @@ class OidcCliPlugin(CliAuthPlugin):
47
45
  access to Flower SuperLink.
48
46
  """
49
47
 
50
- def __init__(self, credentials_path: Path):
48
+ def __init__(self, host: str):
51
49
  self.access_token: str | None = None
52
50
  self.refresh_token: str | None = None
53
- self.credentials_path = credentials_path
51
+ self.host = host
52
+ self.store = get_credential_store()
54
53
 
55
54
  @staticmethod
56
55
  def login(
@@ -109,32 +108,29 @@ class OidcCliPlugin(CliAuthPlugin):
109
108
  raise LoginError("Process timed out.")
110
109
 
111
110
  def store_tokens(self, credentials: AccountAuthCredentials) -> None:
112
- """Store authentication tokens to the `credentials_path`.
111
+ """Store authentication tokens to the credential store."""
112
+ host = self.host
113
+ # Retrieve tokens
114
+ access_token = credentials.access_token
115
+ refresh_token = credentials.refresh_token
113
116
 
114
- The credentials, including tokens, will be saved as a JSON file
115
- at `credentials_path`.
116
- """
117
- self.access_token = credentials.access_token
118
- self.refresh_token = credentials.refresh_token
119
- json_dict = {
120
- AUTHN_TYPE_JSON_KEY: AuthnType.OIDC,
121
- ACCESS_TOKEN_KEY: credentials.access_token,
122
- REFRESH_TOKEN_KEY: credentials.refresh_token,
123
- }
117
+ # Store tokens in the credential store
118
+ self.store.set(AUTHN_TYPE_STORE_KEY % host, AuthnType.OIDC.encode("utf-8"))
119
+ self.store.set(ACCESS_TOKEN_STORE_KEY % host, access_token.encode("utf-8"))
120
+ self.store.set(REFRESH_TOKEN_STORE_KEY % host, refresh_token.encode("utf-8"))
124
121
 
125
- with open(self.credentials_path, "w", encoding="utf-8") as file:
126
- json.dump(json_dict, file, indent=4)
122
+ # Update internal state
123
+ self.access_token = access_token
124
+ self.refresh_token = refresh_token
127
125
 
128
126
  def load_tokens(self) -> None:
129
- """Load authentication tokens from the `credentials_path`."""
130
- with open(self.credentials_path, encoding="utf-8") as file:
131
- json_dict: dict[str, Any] = json.load(file)
132
- access_token = json_dict.get(ACCESS_TOKEN_KEY)
133
- refresh_token = json_dict.get(REFRESH_TOKEN_KEY)
127
+ """Load authentication tokens from the credential store."""
128
+ access_token_bytes = self.store.get(ACCESS_TOKEN_STORE_KEY % self.host)
129
+ refresh_token_bytes = self.store.get(REFRESH_TOKEN_STORE_KEY % self.host)
134
130
 
135
- if isinstance(access_token, str) and isinstance(refresh_token, str):
136
- self.access_token = access_token
137
- self.refresh_token = refresh_token
131
+ if access_token_bytes is not None and refresh_token_bytes is not None:
132
+ self.access_token = access_token_bytes.decode("utf-8")
133
+ self.refresh_token = refresh_token_bytes.decode("utf-8")
138
134
 
139
135
  def write_tokens_to_metadata(
140
136
  self, metadata: Sequence[tuple[str, str | bytes]]
@@ -114,57 +114,6 @@ def load(toml_path: Path) -> dict[str, Any] | None:
114
114
  return None
115
115
 
116
116
 
117
- def process_loaded_project_config(
118
- config: dict[str, Any] | None, errors: list[str], warnings: list[str]
119
- ) -> dict[str, Any]:
120
- """Process and return the loaded project configuration.
121
-
122
- This function handles errors and warnings from the `load_and_validate` function,
123
- exits on critical issues, and returns the validated configuration.
124
-
125
- Parameters
126
- ----------
127
- config : dict[str, Any] | None
128
- The loaded configuration dictionary, or None if loading failed.
129
- errors : list[str]
130
- List of error messages from validation.
131
- warnings : list[str]
132
- List of warning messages from validation.
133
-
134
- Returns
135
- -------
136
- dict[str, Any]
137
- The validated configuration dictionary.
138
-
139
- Raises
140
- ------
141
- typer.Exit
142
- If config is None or contains critical errors.
143
- """
144
- if config is None:
145
- typer.secho(
146
- "Project configuration could not be loaded.\n"
147
- "pyproject.toml is invalid:\n"
148
- + "\n".join([f"- {line}" for line in errors]),
149
- fg=typer.colors.RED,
150
- bold=True,
151
- err=True,
152
- )
153
- raise typer.Exit(code=1)
154
-
155
- if warnings:
156
- typer.secho(
157
- "Project configuration is missing the following "
158
- "recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
159
- fg=typer.colors.RED,
160
- bold=True,
161
- )
162
-
163
- typer.secho("Success", fg=typer.colors.GREEN)
164
-
165
- return config
166
-
167
-
168
117
  def validate_federation_in_project_config(
169
118
  federation: str | None,
170
119
  config: dict[str, Any],
@@ -229,61 +178,6 @@ def validate_federation_in_project_config(
229
178
  return federation, federation_config
230
179
 
231
180
 
232
- def validate_certificate_in_federation_config(
233
- app: Path, federation_config: dict[str, Any]
234
- ) -> tuple[bool, bytes | None]:
235
- """Validate the certificates in the Flower project configuration.
236
-
237
- Accepted configurations:
238
- 1. TLS enabled and gRPC will load(*) the trusted certificate bundle:
239
- - Only `address` is provided. `root-certificates` and `insecure` not set.
240
- - `address` is provided and `insecure` set to `false`. `root-certificates` not
241
- set.
242
- (*)gRPC uses a multi-step fallback mechanism to load the trusted certificate
243
- bundle in the following sequence:
244
- a. A configured file path (if set via configuration or environment),
245
- b. An override callback (if registered via
246
- `grpc_set_ssl_roots_override_callback`),
247
- c. The OS trust store (if available),
248
- d. A bundled default certificate file.
249
- 2. TLS enabled with self-signed certificates:
250
- - `address` and `root-certificates` are provided. `insecure` not set.
251
- - `address` and `root-certificates` are provided. `insecure` set to `false`.
252
- 3. TLS disabled. This is not recommended and should only be used for prototyping:
253
- - `address` is provided and `insecure = true`. If `root-certificates` is
254
- set, exit with an error.
255
- """
256
- insecure = get_insecure_flag(federation_config)
257
-
258
- # Process root certificates
259
- if root_certificates := federation_config.get("root-certificates"):
260
- if insecure:
261
- typer.secho(
262
- "❌ `root-certificates` were provided but the `insecure` parameter "
263
- "is set to `True`.",
264
- fg=typer.colors.RED,
265
- bold=True,
266
- err=True,
267
- )
268
- raise typer.Exit(code=1)
269
-
270
- # TLS is enabled with self-signed certificates: attempt to read the file
271
- try:
272
- root_certificates_bytes = (app / root_certificates).read_bytes()
273
- except Exception as e:
274
- typer.secho(
275
- f"❌ Failed to read certificate file `{root_certificates}`: {e}",
276
- fg=typer.colors.RED,
277
- bold=True,
278
- err=True,
279
- )
280
- raise typer.Exit(code=1) from e
281
- else:
282
- root_certificates_bytes = None
283
-
284
- return insecure, root_certificates_bytes
285
-
286
-
287
181
  def load_certificate_in_connection(
288
182
  connection: SuperLinkConnection,
289
183
  ) -> bytes | None:
@@ -336,32 +230,6 @@ def load_certificate_in_connection(
336
230
  return root_certificates_bytes
337
231
 
338
232
 
339
- def exit_if_no_address(federation_config: dict[str, Any], cmd: str) -> None:
340
- """Exit if the provided federation_config has no "address" key.
341
-
342
- Parameters
343
- ----------
344
- federation_config : dict[str, Any]
345
- The federation configuration dictionary to check.
346
- cmd : str
347
- The command name to display in the error message.
348
-
349
- Raises
350
- ------
351
- typer.Exit
352
- If 'address' key is not present in federation_config.
353
- """
354
- if "address" not in federation_config:
355
- typer.secho(
356
- f"❌ `flwr {cmd}` currently works with a SuperLink. Ensure that the "
357
- "correct SuperLink (Control API) address is provided in `pyproject.toml`.",
358
- fg=typer.colors.RED,
359
- bold=True,
360
- err=True,
361
- )
362
- raise typer.Exit(code=1)
363
-
364
-
365
233
  def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
366
234
  """Extract and validate the `insecure` flag from the federation configuration.
367
235
 
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Constants for CLI commands."""
16
16
 
17
+ from flwr.supercore.constant import SUPERGRID_ADDRESS
17
18
 
18
19
  # General help message for config overrides
19
20
  CONFIG_HELP_MESSAGE = (
@@ -96,11 +97,11 @@ class SimulationBackendConfigTomlKey:
96
97
  FLOWER_CONFIG_FILE = "config.toml"
97
98
 
98
99
  # The default configuration for the Flower config file
99
- DEFAULT_FLOWER_CONFIG_TOML = """[superlink]
100
+ DEFAULT_FLOWER_CONFIG_TOML = f"""[superlink]
100
101
  default = "local"
101
102
 
102
103
  [superlink.supergrid]
103
- address = "supergrid.flower.ai"
104
+ address = "{SUPERGRID_ADDRESS}"
104
105
  enable-account-auth = true
105
106
  federation = "YOUR-FEDERATION-HERE"
106
107
 
@@ -109,3 +110,8 @@ options.num-supernodes = 10
109
110
  options.backend.client-resources.num-cpus = 1
110
111
  options.backend.client-resources.num-gpus = 0
111
112
  """
113
+
114
+ # Keys for storing account auth credentials in the credential store
115
+ AUTHN_TYPE_STORE_KEY = "flower.account-auth.%s.authn-type"
116
+ ACCESS_TOKEN_STORE_KEY = "flower.account-auth.%s.oidc-access-token"
117
+ REFRESH_TOKEN_STORE_KEY = "flower.account-auth.%s.oidc-refresh-token"
@@ -16,22 +16,17 @@
16
16
 
17
17
 
18
18
  import io
19
- from pathlib import Path
20
- from typing import Annotated, Any, cast
19
+ from typing import Annotated, Any
21
20
 
22
21
  import typer
23
22
  from rich.console import Console
24
23
  from rich.table import Table
25
24
  from rich.text import Text
26
25
 
27
- from flwr.cli.config_utils import (
28
- exit_if_no_address,
29
- load_and_validate,
30
- process_loaded_project_config,
31
- validate_federation_in_project_config,
32
- )
26
+ from flwr.cli.config_migration import migrate
27
+ from flwr.cli.flower_config import read_superlink_connection
33
28
  from flwr.cli.ls import _get_status_style
34
- from flwr.common.constant import FAB_CONFIG_FILE, NOOP_ACCOUNT_NAME, CliOutputFormat
29
+ from flwr.common.constant import NOOP_ACCOUNT_NAME, CliOutputFormat
35
30
  from flwr.common.logger import print_json_error, redirect_output, restore_output
36
31
  from flwr.common.serde import run_from_proto
37
32
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
@@ -46,18 +41,14 @@ from flwr.proto.node_pb2 import NodeInfo # pylint: disable=E0611
46
41
  from flwr.supercore.utils import humanize_duration
47
42
 
48
43
  from ..run_utils import RunRow, format_runs
49
- from ..utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
44
+ from ..utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
50
45
 
51
46
 
52
47
  def ls( # pylint: disable=R0914, R0913, R0917, R0912
53
48
  ctx: typer.Context,
54
- app: Annotated[
55
- Path,
56
- typer.Argument(help="Path of the Flower project"),
57
- ] = Path("."),
58
- toml_federation: Annotated[
49
+ superlink: Annotated[
59
50
  str | None,
60
- typer.Argument(help="Name of the federation"),
51
+ typer.Argument(help="Name of the SuperLink connection."),
61
52
  ] = None,
62
53
  output_format: Annotated[
63
54
  str,
@@ -77,29 +68,22 @@ def ls( # pylint: disable=R0914, R0913, R0917, R0912
77
68
  ] = None,
78
69
  ) -> None:
79
70
  """List available federations."""
80
- # Resolve command used (list or ls)
81
- command_name = cast(str, ctx.command.name) if ctx.command else "ls"
82
-
83
71
  suppress_output = output_format == CliOutputFormat.JSON
84
72
  captured_output = io.StringIO()
73
+
74
+ if suppress_output:
75
+ redirect_output(captured_output)
76
+
77
+ # Migrate legacy usage if any
78
+ migrate(superlink, args=ctx.args)
79
+
80
+ # Read superlink connection configuration
81
+ superlink_connection = read_superlink_connection(superlink)
82
+ channel = None
83
+
85
84
  try:
86
- if suppress_output:
87
- redirect_output(captured_output)
88
- typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
89
-
90
- pyproject_path = app / FAB_CONFIG_FILE if app else None
91
- config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
92
- config = process_loaded_project_config(config, errors, warnings)
93
- toml_federation_name, federation_config = validate_federation_in_project_config(
94
- toml_federation, config
95
- )
96
- exit_if_no_address(federation_config, f"federation {command_name}")
97
- channel = None
98
85
  try:
99
- auth_plugin = load_cli_auth_plugin(
100
- app, toml_federation_name, federation_config
101
- )
102
- channel = init_channel(app, federation_config, auth_plugin)
86
+ channel = init_channel_from_connection(superlink_connection)
103
87
  stub = ControlStub(channel)
104
88
 
105
89
  if federation: