flwr-nightly 1.26.0.dev20260121__tar.gz → 1.26.0.dev20260122__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 (412) hide show
  1. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/PKG-INFO +1 -1
  2. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app.py +7 -7
  3. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/publish.py +6 -30
  4. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/review.py +3 -37
  5. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/auth_plugin.py +5 -10
  6. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +1 -2
  7. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +27 -31
  8. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/constant.py +8 -2
  9. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/federation/ls.py +19 -35
  10. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/login/login.py +29 -42
  11. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/ls.py +19 -33
  12. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/register.py +17 -30
  13. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/unregister.py +17 -31
  14. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/utils.py +38 -208
  15. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/linkstate_factory.py +4 -4
  16. flwr_nightly-1.26.0.dev20260122/py/flwr/server/superlink/linkstate/sql_linkstate.py +1239 -0
  17. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +3 -48
  18. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/utils.py +47 -0
  19. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/constant.py +3 -0
  20. flwr_nightly-1.26.0.dev20260122/py/flwr/supercore/object_store/sql_object_store.py +82 -0
  21. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/sql_mixin.py +22 -5
  22. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/pyproject.toml +1 -1
  23. flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sql_linkstate.py +0 -221
  24. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/README.md +0 -0
  25. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/__init__.py +0 -0
  26. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/__init__.py +0 -0
  27. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/error.py +0 -0
  28. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/exception.py +0 -0
  29. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/message_type.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/metadata.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/app/user_config.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/__init__.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/app_cmd/__init__.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/build.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config/__init__.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config/ls.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config_migration.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/config_utils.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/example.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/federation/__init__.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/flower_config.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/install.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/log.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/login/__init__.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/ls.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/new/__init__.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/new/new.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/pull.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/run/__init__.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/run/run.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/run_utils.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/stop.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/supernode/__init__.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/cli/typing.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/__init__.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/client.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/message_handler/__init__.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/message_handler/message_handler.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/__init__.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/centraldp_mods.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/comms_mods.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/localdp_mod.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/mod/utils.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/numpy_client.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/rest_client/__init__.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/rest_client/connection.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/run_info_store.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/client/typing.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/__init__.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/client_app.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/mod/__init__.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/typing.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/clientapp/utils.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/__init__.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/args.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/config.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/constant.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/context.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/differential_privacy.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/differential_privacy_constants.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/dp.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/__init__.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/exit.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/exit_code.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/exit_handler.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/exit/signal_handler.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/grpc.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/inflatable.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/inflatable_utils.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/logger.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/message.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/object_ref.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/parameter.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/__init__.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/array.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/arraychunk.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/arrayrecord.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/configrecord.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/conversion_utils.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/metricrecord.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/recorddict.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/record/typeddict.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/recorddict_compat.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/retry_invoker.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/serde.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/serde_utils.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/telemetry.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/common/typing.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/__init__.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/__init__.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/app.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/common/__init__.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/common/constant.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/server/__init__.py +0 -0
  142. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/server/app.py +0 -0
  143. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/compat/simulation/__init__.py +0 -0
  144. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/__init__.py +0 -0
  145. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2.py +0 -0
  146. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2.pyi +0 -0
  147. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  148. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  149. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2.py +0 -0
  150. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  151. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  152. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  153. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2.py +0 -0
  154. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2.pyi +0 -0
  155. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2.py +0 -0
  158. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2.pyi +0 -0
  159. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2.py +0 -0
  162. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2.pyi +0 -0
  163. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2.py +0 -0
  166. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2.pyi +0 -0
  167. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2.py +0 -0
  170. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2.pyi +0 -0
  171. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  174. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  175. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2.py +0 -0
  178. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  179. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2.py +0 -0
  182. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2.pyi +0 -0
  183. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2.py +0 -0
  186. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2.pyi +0 -0
  187. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2.py +0 -0
  190. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2.pyi +0 -0
  191. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2.py +0 -0
  194. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  195. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2.py +0 -0
  198. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2.pyi +0 -0
  199. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2.py +0 -0
  202. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  203. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2.py +0 -0
  206. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  207. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  208. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  209. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2.py +0 -0
  210. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2.pyi +0 -0
  211. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  212. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  213. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/py.typed +0 -0
  214. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/__init__.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/app.py +0 -0
  216. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/client_manager.py +0 -0
  217. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/client_proxy.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/__init__.py +0 -0
  219. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/app.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/app_utils.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/compat/legacy_context.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/criterion.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/__init__.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/grid.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/grpc_grid.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/grid/inmemory_grid.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/history.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/run_serverapp.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/server.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/server_app.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/server_config.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/serverapp/__init__.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/serverapp/app.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/serverapp_components.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/__init__.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/aggregate.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/bulyan.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedadagrad.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedadam.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedavg.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedavg_android.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedavgm.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedmedian.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedopt.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedprox.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/fedyogi.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/krum.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/qfedavg.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/strategy/strategy.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/__init__.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/superlink/utils.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/typing.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/utils/__init__.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/utils/tensorboard.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/utils/validator.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/__init__.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/constant.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/default_workflows.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/__init__.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/exception.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/__init__.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/krum.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/result.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/strategy.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/__init__.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/app.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/legacy_app.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/ray_transport/utils.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/run_simulation.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/simulation/simulationio_connection.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/__init__.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/address.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/app_utils.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/cli/__init__.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/__init__.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/corestate.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/corestate/sqlite_corestate.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/credential_store/__init__.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/date.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/__init__.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/ffs.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/heartbeat.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/__init__.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/object_store.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/primitives/__init__.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/sqlite_mixin.py +0 -0
  367. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/__init__.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/README.md +0 -0
  369. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/__init__.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/__init__.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/utils.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supercore/version.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/__init__.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/federation/__init__.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/federation/federation_manager.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/__init__.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/__init__.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/cli/__init__.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/__init__.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/runtime/__init__.py +0 -0
  408. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  409. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/servicer/__init__.py +0 -0
  410. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  411. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  412. {flwr_nightly-1.26.0.dev20260121 → flwr_nightly-1.26.0.dev20260122}/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.dev20260122
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
@@ -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]]
@@ -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:
@@ -15,20 +15,13 @@
15
15
  """Flower command line interface `login` command."""
16
16
 
17
17
 
18
- from pathlib import Path
19
- from typing import Annotated
18
+ from typing import Annotated, cast
20
19
 
21
20
  import typer
22
21
 
23
22
  from flwr.cli.auth_plugin import LoginError, NoOpCliAuthPlugin
24
- from flwr.cli.config_utils import (
25
- exit_if_no_address,
26
- get_insecure_flag,
27
- load_and_validate,
28
- process_loaded_project_config,
29
- validate_federation_in_project_config,
30
- )
31
23
  from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
24
+ from flwr.cli.utils import init_channel_from_connection
32
25
  from flwr.common.typing import AccountAuthLoginDetails
33
26
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
34
27
  GetLoginDetailsRequest,
@@ -36,58 +29,51 @@ from flwr.proto.control_pb2 import ( # pylint: disable=E0611
36
29
  )
37
30
  from flwr.proto.control_pb2_grpc import ControlStub
38
31
 
39
- from ..utils import (
40
- account_auth_enabled,
41
- flwr_cli_grpc_exc_handler,
42
- init_channel,
43
- load_cli_auth_plugin,
44
- )
32
+ from ..config_migration import migrate, warn_if_federation_config_overrides
33
+ from ..flower_config import read_superlink_connection
34
+ from ..utils import flwr_cli_grpc_exc_handler, load_cli_auth_plugin_from_connection
45
35
 
46
36
 
47
- def login( # pylint: disable=R0914
48
- app: Annotated[
49
- Path,
50
- typer.Argument(help="Path of the Flower App to run."),
51
- ] = Path("."),
52
- federation: Annotated[
37
+ def login(
38
+ ctx: typer.Context,
39
+ superlink: Annotated[
53
40
  str | None,
54
- typer.Argument(help="Name of the federation to login into."),
41
+ typer.Argument(help="Name of the SuperLink connection."),
55
42
  ] = None,
56
43
  federation_config_overrides: Annotated[
57
44
  list[str] | None,
58
45
  typer.Option(
59
46
  "--federation-config",
60
47
  help=FEDERATION_CONFIG_HELP_MESSAGE,
48
+ hidden=True,
61
49
  ),
62
50
  ] = None,
63
51
  ) -> None:
64
52
  """Login to Flower SuperLink."""
65
- typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
53
+ # Warn `--federation-config` is ignored
54
+ warn_if_federation_config_overrides(federation_config_overrides)
66
55
 
67
- pyproject_path = app / "pyproject.toml" if app else None
68
- config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
56
+ # Migrate legacy usage if any
57
+ migrate(superlink, args=ctx.args)
69
58
 
70
- config = process_loaded_project_config(config, errors, warnings)
71
- federation, federation_config = validate_federation_in_project_config(
72
- federation, config, federation_config_overrides
73
- )
74
- exit_if_no_address(federation_config, "login")
59
+ # Read superlink connection configuration
60
+ superlink_connection = read_superlink_connection(superlink)
61
+ superlink = superlink_connection.name
75
62
 
76
63
  # Check if `enable-account-auth` is set to `true`
77
-
78
- if not account_auth_enabled(federation_config):
64
+ if not superlink_connection.enable_account_auth:
79
65
  typer.secho(
80
- "❌ Account authentication is not enabled for the federation "
81
- f"'{federation}'. To enable it, set `enable-account-auth = true` "
82
- "in the federation configuration.",
66
+ "❌ Account authentication is not enabled for the SuperLink connection "
67
+ f"'{superlink}'. To enable it, set `enable-account-auth = true` "
68
+ "in the configuration.",
83
69
  fg=typer.colors.RED,
84
70
  bold=True,
85
71
  err=True,
86
72
  )
87
73
  raise typer.Exit(code=1)
74
+
88
75
  # Check if insecure flag is set to `True`
89
- insecure = get_insecure_flag(federation_config)
90
- if insecure:
76
+ if superlink_connection.insecure:
91
77
  typer.secho(
92
78
  "❌ `flwr login` requires TLS to be enabled. `insecure` must NOT be set to "
93
79
  "`true` in the federation configuration.",
@@ -97,7 +83,7 @@ def login( # pylint: disable=R0914
97
83
  )
98
84
  raise typer.Exit(code=1)
99
85
 
100
- channel = init_channel(app, federation_config, NoOpCliAuthPlugin(Path()))
86
+ channel = init_channel_from_connection(superlink_connection, NoOpCliAuthPlugin())
101
87
  stub = ControlStub(channel)
102
88
 
103
89
  login_request = GetLoginDetailsRequest()
@@ -105,8 +91,9 @@ def login( # pylint: disable=R0914
105
91
  login_response: GetLoginDetailsResponse = stub.GetLoginDetails(login_request)
106
92
 
107
93
  # Get the auth plugin
108
- authn_type = login_response.authn_type
109
- auth_plugin = load_cli_auth_plugin(app, federation, federation_config, authn_type)
94
+ authn_plugin = load_cli_auth_plugin_from_connection(
95
+ cast(str, superlink_connection.address), login_response.authn_type
96
+ )
110
97
 
111
98
  # Login
112
99
  details = AccountAuthLoginDetails(
@@ -118,7 +105,7 @@ def login( # pylint: disable=R0914
118
105
  )
119
106
  try:
120
107
  with flwr_cli_grpc_exc_handler():
121
- credentials = auth_plugin.login(details, stub)
108
+ credentials = authn_plugin.login(details, stub)
122
109
  typer.secho(
123
110
  "✅ Login successful.",
124
111
  fg=typer.colors.GREEN,
@@ -134,4 +121,4 @@ def login( # pylint: disable=R0914
134
121
  raise typer.Exit(code=1) from None
135
122
 
136
123
  # Store the tokens
137
- auth_plugin.store_tokens(credentials)
124
+ authn_plugin.store_tokens(credentials)