flwr-nightly 1.26.0.dev20260119__tar.gz → 1.26.0.dev20260121__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.dev20260119 → flwr_nightly-1.26.0.dev20260121}/PKG-INFO +1 -1
  2. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app.py +17 -5
  3. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config_migration.py +122 -48
  4. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/flower_config.py +5 -5
  5. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/log.py +21 -35
  6. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/ls.py +23 -34
  7. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/pull.py +15 -26
  8. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run/run.py +44 -58
  9. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/stop.py +21 -30
  10. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/typing.py +43 -56
  11. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/utils.py +12 -0
  12. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/__init__.py +2 -0
  13. flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sql_linkstate.py +221 -0
  14. flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/corestate/sql_corestate.py +153 -0
  15. flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/sql_mixin.py +292 -0
  16. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/pyproject.toml +1 -1
  17. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/README.md +0 -0
  18. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/__init__.py +0 -0
  19. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/__init__.py +0 -0
  20. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/error.py +0 -0
  21. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/exception.py +0 -0
  22. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/message_type.py +0 -0
  23. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/metadata.py +0 -0
  24. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/user_config.py +0 -0
  25. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/__init__.py +0 -0
  26. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/__init__.py +0 -0
  27. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/publish.py +0 -0
  28. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/review.py +0 -0
  29. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/build.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config/__init__.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config/ls.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config_utils.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/constant.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/example.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/federation/__init__.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/federation/ls.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/install.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/login/__init__.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/login/login.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/new/__init__.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/new/new.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run/__init__.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run_utils.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/__init__.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/ls.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/register.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/unregister.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/__init__.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/client.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/message_handler/__init__.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/message_handler/message_handler.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/__init__.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/centraldp_mods.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/comms_mods.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/localdp_mod.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/utils.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/numpy_client.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/rest_client/__init__.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/rest_client/connection.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/run_info_store.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/typing.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/__init__.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/client_app.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/__init__.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/typing.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/utils.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/__init__.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/args.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/config.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/constant.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/context.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/differential_privacy.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/differential_privacy_constants.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/dp.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/__init__.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit_code.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit_handler.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/signal_handler.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/grpc.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable_utils.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/logger.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/message.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/object_ref.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/parameter.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/__init__.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/array.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/arraychunk.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/arrayrecord.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/configrecord.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/conversion_utils.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/metricrecord.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/recorddict.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/typeddict.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/recorddict_compat.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/retry_invoker.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/serde.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/serde_utils.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/telemetry.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/typing.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/__init__.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/__init__.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/app.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/common/__init__.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/common/constant.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/server/__init__.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/server/app.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/simulation/__init__.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/__init__.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2.py +0 -0
  142. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2.pyi +0 -0
  143. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  144. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  145. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2.py +0 -0
  146. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  147. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  148. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  149. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2.py +0 -0
  150. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2.pyi +0 -0
  151. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2_grpc.py +0 -0
  152. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  153. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2.py +0 -0
  154. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2.pyi +0 -0
  155. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2.py +0 -0
  158. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2.pyi +0 -0
  159. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2.py +0 -0
  162. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2.pyi +0 -0
  163. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2.py +0 -0
  166. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2.pyi +0 -0
  167. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  170. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  171. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2.py +0 -0
  174. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  175. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2.py +0 -0
  178. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2.pyi +0 -0
  179. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2.py +0 -0
  182. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2.pyi +0 -0
  183. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2.py +0 -0
  186. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2.pyi +0 -0
  187. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2.py +0 -0
  190. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  191. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2.py +0 -0
  194. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2.pyi +0 -0
  195. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2.py +0 -0
  198. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  199. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2.py +0 -0
  202. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  203. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2.py +0 -0
  206. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2.pyi +0 -0
  207. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  208. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  209. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/py.typed +0 -0
  210. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/__init__.py +0 -0
  211. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/app.py +0 -0
  212. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/client_manager.py +0 -0
  213. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/client_proxy.py +0 -0
  214. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/__init__.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/app.py +0 -0
  216. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/app_utils.py +0 -0
  217. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/legacy_context.py +0 -0
  219. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/criterion.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/__init__.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/grid.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/grpc_grid.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/inmemory_grid.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/history.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/run_serverapp.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server_app.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server_config.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp/__init__.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp/app.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp_components.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/__init__.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/aggregate.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/bulyan.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedadagrad.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedadam.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavg.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavg_android.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavgm.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedmedian.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedopt.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedprox.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedyogi.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/krum.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/qfedavg.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/strategy.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/__init__.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/utils.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/typing.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/__init__.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/tensorboard.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/validator.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/__init__.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/constant.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/default_workflows.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/__init__.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/exception.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/__init__.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/krum.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/result.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/strategy.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/__init__.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/app.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/legacy_app.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/utils.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/run_simulation.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/simulationio_connection.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/__init__.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/address.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/app_utils.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/cli/__init__.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/constant.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/__init__.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/corestate.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/sqlite_corestate.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/__init__.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/date.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/__init__.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/ffs.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/heartbeat.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/__init__.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/object_store.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/__init__.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/sqlite_mixin.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/__init__.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/README.md +0 -0
  367. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/__init__.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/__init__.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/utils.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/version.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/__init__.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/__init__.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/federation_manager.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/__init__.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/__init__.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/__init__.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/__init__.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/runtime/__init__.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/__init__.py +0 -0
  408. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  409. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  410. {flwr_nightly-1.26.0.dev20260119 → flwr_nightly-1.26.0.dev20260121}/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.dev20260119
3
+ Version: 1.26.0.dev20260121
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
@@ -14,6 +14,9 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface."""
16
16
 
17
+
18
+ from typing import Any, TypedDict
19
+
17
20
  import typer
18
21
  from typer.main import get_command
19
22
 
@@ -37,6 +40,15 @@ from .supernode import ls as supernode_list
37
40
  from .supernode import register as supernode_register
38
41
  from .supernode import unregister as supernode_unregister
39
42
 
43
+
44
+ class CommandKwargs(TypedDict):
45
+ """Keywords for typer command to make mypy happy."""
46
+
47
+ context_settings: dict[str, Any]
48
+
49
+
50
+ ALLOW_EXTRAS: CommandKwargs = {"context_settings": {"allow_extra_args": True}}
51
+
40
52
  app = typer.Typer(
41
53
  help=typer.style(
42
54
  "flwr is the Flower command line interface.",
@@ -51,12 +63,12 @@ app.command()(new)
51
63
  app.command()(run)
52
64
  app.command()(build)
53
65
  app.command()(install)
54
- app.command()(log)
55
- app.command("list")(ls)
56
- app.command(hidden=True)(ls)
57
- app.command()(stop)
66
+ app.command(**ALLOW_EXTRAS)(log)
67
+ app.command("list", **ALLOW_EXTRAS)(ls)
68
+ app.command(hidden=True, **ALLOW_EXTRAS)(ls)
69
+ app.command(**ALLOW_EXTRAS)(stop)
58
70
  app.command()(login)
59
- app.command()(pull)
71
+ app.command(**ALLOW_EXTRAS)(pull)
60
72
 
61
73
  # Create supernode command group
62
74
  supernode_app = typer.Typer(help="Manage SuperNodes")
@@ -57,44 +57,55 @@ CLI_NOTICE = (
57
57
  )
58
58
 
59
59
 
60
- def _is_legacy_usage(superlink: str, args: list[str]) -> bool:
60
+ def _is_legacy_usage(positional_arg_1: str | None, args: list[str]) -> bool:
61
61
  """Check if legacy usage is detected in the given arguments."""
62
+ if positional_arg_1 is None:
63
+ return False
64
+
62
65
  # If one and only one extra argument is given, assume legacy usage
63
66
  if len(args) == 1:
64
67
  return True
65
68
 
66
- # If the `superlink` looks like a path, assume legacy usage
67
- pth = Path(superlink)
68
- if pth.is_absolute() or len(pth.parts) > 1 or superlink in (".", ".."):
69
+ # If the first positional argument looks like a path, assume legacy usage
70
+ pth = Path(positional_arg_1)
71
+ if pth.is_absolute() or len(pth.parts) > 1 or positional_arg_1 in (".", ".."):
69
72
  return True
70
73
 
71
- # Lastly, check if a pyproject.toml file exists at the given superlink
74
+ # Lastly, check if a pyproject.toml file exists at the given path
72
75
  if (pth / "pyproject.toml").exists():
73
76
  return True
74
77
 
75
78
  return False
76
79
 
77
80
 
78
- def _check_is_migratable(app: Path) -> None:
79
- """Check if the given app path contains legacy TOML configuration."""
81
+ def _is_migratable(app: Path) -> tuple[bool, str | None]:
82
+ """Check if the given app path contains legacy TOML configuration.
83
+
84
+ Parameters
85
+ ----------
86
+ app : Path
87
+ Path to the Flower App.
88
+
89
+ Returns
90
+ -------
91
+ tuple[bool, str | None]
92
+ Returns (True, None) if migratable, else (False, reason).
93
+ """
80
94
  toml_path = app / "pyproject.toml"
81
95
  if not toml_path.exists():
82
- raise FileNotFoundError(f"No pyproject.toml found in '{app}'")
96
+ return False, f"No pyproject.toml found in '{app}'"
83
97
  config, errors, _ = load_and_validate(toml_path, check_module=False)
84
98
  if config is None:
85
- raise ValueError(f"Failed to load TOML configuration: {toml_path}")
99
+ return False, f"Failed to load TOML configuration: {toml_path}"
86
100
  if errors:
87
- raise ValueError(
88
- f"Invalid TOML configuration found in '{toml_path}':\n"
89
- + "\n".join(f"- {err}" for err in errors)
90
- )
101
+ err_msg = f"Invalid TOML configuration found in '{toml_path}':\n"
102
+ err_msg += "\n".join(f"- {err}" for err in errors)
103
+ return False, err_msg
91
104
  try:
92
105
  _ = config["tool"]["flwr"]["federations"]
93
- return
106
+ return True, None
94
107
  except KeyError:
95
- raise ValueError(
96
- f"No '[tool.flwr.federations]' section found in '{toml_path}'"
97
- ) from None
108
+ return False, f"No '[tool.flwr.federations]' section found in '{toml_path}'"
98
109
 
99
110
 
100
111
  def _migrate_pyproject_toml_to_flower_config(
@@ -161,23 +172,82 @@ def _comment_out_legacy_toml_config(app: Path) -> None:
161
172
 
162
173
 
163
174
  def migrate(
164
- app: Path,
165
- toml_federation: str | None,
175
+ positional_arg_1: str | None,
176
+ args: list[str],
177
+ ignore_legacy_usage: bool = False,
166
178
  ) -> None:
167
- """Migrate legacy TOML configuration to Flower config."""
179
+ """Migrate legacy TOML configuration to Flower config.
180
+
181
+ Migrates SuperLink connection settings from `[tool.flwr.federations]` in
182
+ pyproject.toml to the new Flower config format when legacy usage is detected
183
+ or the migration is applicable.
184
+
185
+ `flwr run` should call `migrate(app, [], ignore_legacy_usage=True)` to skip
186
+ legacy usage check. Other CLI commands should call `migrate(superlink, ctx.args)`.
187
+
188
+ Parameters
189
+ ----------
190
+ positional_arg_1 : str | None
191
+ The first positional argument.
192
+ args : list[str]
193
+ Additional arguments. In legacy usage, this is the TOML federation name.
194
+ ignore_legacy_usage : bool (default: False)
195
+ Set to `True` only for `flwr run` command to skip legacy usage check.
196
+
197
+ Raises
198
+ ------
199
+ click.UsageError
200
+ If more than one extra argument is provided.
201
+ click.ClickException
202
+ If legacy usage detected but migration fails.
203
+
204
+ Examples
205
+ --------
206
+ The following usages will trigger migration if applicable:
207
+ - `flwr <CMD> . my-federation`
208
+ - `flwr <CMD> ./my-app`
209
+ - `flwr <CMD>`
210
+
211
+ The following usages will NOT trigger migration:
212
+ - `flwr <CMD> named-conn`
213
+
214
+ Notes
215
+ -----
216
+ This function will NOT return when legacy usage is detected to force the user
217
+ to adapt to the new usage pattern after migration.
218
+ """
168
219
  # Initialize Flower config
169
220
  init_flwr_config()
170
221
 
171
- # Print migration notice
172
- typer.echo(CLI_NOTICE)
222
+ # Trigger the same typer error when detecting unexpected extra args
223
+ if len(args) > 1:
224
+ raise click.UsageError(f"Got unexpected extra arguments ({' '.join(args[1:])})")
173
225
 
174
- # Check if migration is applicable
226
+ # Determine app path for migration
227
+ arg1 = positional_arg_1
228
+ app = Path(arg1) if arg1 else Path(".")
175
229
  app = app.resolve()
176
- try:
177
- _check_is_migratable(app)
178
- except (FileNotFoundError, ValueError) as e:
179
- raise click.ClickException(f"Cannot migrate configuration:\n{e}") from e
180
230
 
231
+ # Check if migration is applicable and if legacy usage is detected
232
+ is_migratable, reason = _is_migratable(app)
233
+ is_legacy = _is_legacy_usage(arg1, args) if not ignore_legacy_usage else False
234
+
235
+ # Print notice once if legacy usage detected or migration is applicable
236
+ if is_legacy or is_migratable:
237
+ typer.echo(CLI_NOTICE)
238
+
239
+ if not is_migratable:
240
+ # Raise error if legacy usage is detected but migration is not applicable
241
+ if is_legacy:
242
+ raise click.ClickException(
243
+ f"Cannot migrate configuration:\n{reason}. \nThis is expected if the "
244
+ "migration has been previously carried out. Use `--help` after your "
245
+ "command to see the new usage pattern."
246
+ )
247
+ return # Nothing to migrate
248
+
249
+ # Perform migration
250
+ toml_federation = args[0] if len(args) == 1 else None
181
251
  try:
182
252
  migrated_conns, default_conn = _migrate_pyproject_toml_to_flower_config(
183
253
  app, toml_federation
@@ -197,30 +267,34 @@ def migrate(
197
267
  typer.secho(" (default)", fg=typer.colors.WHITE, nl=False)
198
268
  typer.echo()
199
269
 
200
- # print usage
201
- typer.secho("\nYou should now use the Flower CLI as follows:")
202
- ctx = click.get_current_context()
203
- typer.secho(ctx.get_usage() + "\n", bold=True)
204
-
205
270
  _comment_out_legacy_toml_config(app)
206
271
 
272
+ if is_legacy:
273
+ # print usage
274
+ typer.secho("\nYou should now use the Flower CLI as follows:")
275
+ ctx = click.get_current_context()
276
+ typer.secho(ctx.get_usage() + "\n", bold=True)
207
277
 
208
- def migrate_if_legacy_usage(
209
- superlink: str,
210
- args: list[str],
211
- ) -> bool:
212
- """Migrate legacy TOML configuration to Flower config if legacy usage is
213
- detected."""
214
- # Trigger the same typer error when detecting unexpected extra args
215
- if len(args) > 1:
216
- raise click.UsageError(f"Got unexpected extra arguments ({' '.join(args[1:])})")
278
+ # Abort if legacy usage is detected to force user to adapt to new usage
279
+ raise typer.Exit(code=1)
217
280
 
218
- # Skip migration if no legacy usage is detected
219
- if not _is_legacy_usage(superlink, args):
220
- return False
221
281
 
222
- migrate(
223
- app=Path(superlink),
224
- toml_federation=args[0] if len(args) == 1 else None,
282
+ def warn_if_federation_config_overrides(
283
+ federation_config_overrides: list[str] | None,
284
+ ) -> None:
285
+ """Warn if federation config overrides are provided.
286
+
287
+ Parameters
288
+ ----------
289
+ federation_config_overrides : list[str] | None
290
+ List of federation config override strings.
291
+ """
292
+ if federation_config_overrides is None:
293
+ return
294
+
295
+ typer.secho(
296
+ "⚠️ Warning: `--federation-config` option is deprecated and will be ignored.\n"
297
+ "Use Flower configuration files to set SuperLink connections.",
298
+ fg=typer.colors.YELLOW,
299
+ bold=True,
225
300
  )
226
- return True
@@ -217,17 +217,17 @@ def serialize_superlink_connection(connection: SuperLinkConnection) -> dict[str,
217
217
  """
218
218
  # pylint: disable=protected-access
219
219
  conn_dict: dict[str, Any] = {
220
- SuperLinkConnectionTomlKey.ADDRESS: connection._address,
221
- SuperLinkConnectionTomlKey.ROOT_CERTIFICATES: connection._root_certificates,
220
+ SuperLinkConnectionTomlKey.ADDRESS: connection.address,
221
+ SuperLinkConnectionTomlKey.ROOT_CERTIFICATES: connection.root_certificates,
222
222
  SuperLinkConnectionTomlKey.INSECURE: connection._insecure,
223
223
  SuperLinkConnectionTomlKey.ENABLE_ACCOUNT_AUTH: connection._enable_account_auth,
224
- SuperLinkConnectionTomlKey.FEDERATION: connection._federation,
224
+ SuperLinkConnectionTomlKey.FEDERATION: connection.federation,
225
225
  }
226
226
  # Remove None values
227
227
  conn_dict = {k: v for k, v in conn_dict.items() if v is not None}
228
228
 
229
- if connection._options is not None:
230
- options_dict = _serialize_simulation_options(connection._options)
229
+ if connection.options is not None:
230
+ options_dict = _serialize_simulation_options(connection.options)
231
231
  conn_dict[SuperLinkConnectionTomlKey.OPTIONS] = options_dict
232
232
 
233
233
  return conn_dict
@@ -17,25 +17,21 @@
17
17
 
18
18
  import time
19
19
  from logging import DEBUG, ERROR, INFO
20
- from pathlib import Path
21
- from typing import Annotated, Any, cast
20
+ from typing import Annotated, cast
22
21
 
23
22
  import grpc
24
23
  import typer
25
24
 
26
- from flwr.cli.config_utils import (
27
- exit_if_no_address,
28
- load_and_validate,
29
- process_loaded_project_config,
30
- validate_federation_in_project_config,
31
- )
25
+ from flwr.cli.config_migration import migrate, warn_if_federation_config_overrides
32
26
  from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
27
+ from flwr.cli.flower_config import read_superlink_connection
28
+ from flwr.cli.typing import SuperLinkConnection
33
29
  from flwr.common.constant import CONN_RECONNECT_INTERVAL, CONN_REFRESH_PERIOD
34
30
  from flwr.common.logger import log as logger
35
31
  from flwr.proto.control_pb2 import StreamLogsRequest # pylint: disable=E0611
36
32
  from flwr.proto.control_pb2_grpc import ControlStub
37
33
 
38
- from .utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
34
+ from .utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
39
35
 
40
36
 
41
37
  class AllLogsRetrieved(BaseException):
@@ -158,23 +154,21 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
158
154
 
159
155
 
160
156
  def log(
157
+ ctx: typer.Context,
161
158
  run_id: Annotated[
162
159
  int,
163
160
  typer.Argument(help="The Flower run ID to query"),
164
161
  ],
165
- app: Annotated[
166
- Path,
167
- typer.Argument(help="Path of the Flower project to run"),
168
- ] = Path("."),
169
- federation: Annotated[
162
+ superlink: Annotated[
170
163
  str | None,
171
- typer.Argument(help="Name of the federation to run the app on"),
164
+ typer.Argument(help="Name of the SuperLink connection."),
172
165
  ] = None,
173
166
  federation_config_overrides: Annotated[
174
167
  list[str] | None,
175
168
  typer.Option(
176
169
  "--federation-config",
177
170
  help=FEDERATION_CONFIG_HELP_MESSAGE,
171
+ hidden=True,
178
172
  ),
179
173
  ] = None,
180
174
  stream: Annotated[
@@ -190,27 +184,24 @@ def log(
190
184
  Retrieve and display logs from a Flower run. Logs can be streamed in real-time (with
191
185
  --stream) or printed once (with --show).
192
186
  """
193
- typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
187
+ # Warn `--federation-config` is ignored
188
+ warn_if_federation_config_overrides(federation_config_overrides)
194
189
 
195
- pyproject_path = app / "pyproject.toml" if app else None
196
- config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
197
- config = process_loaded_project_config(config, errors, warnings)
198
- federation, federation_config = validate_federation_in_project_config(
199
- federation, config, federation_config_overrides
200
- )
201
- exit_if_no_address(federation_config, "log")
190
+ # Migrate legacy usage if any
191
+ migrate(superlink, args=ctx.args)
192
+
193
+ # Read superlink connection configuration
194
+ superlink_connection = read_superlink_connection(superlink)
202
195
 
203
196
  try:
204
- _log_with_control_api(app, federation, federation_config, run_id, stream)
197
+ _log_with_control_api(superlink_connection, run_id, stream)
205
198
  except Exception as err: # pylint: disable=broad-except
206
199
  typer.secho(str(err), fg=typer.colors.RED, bold=True, err=True)
207
200
  raise typer.Exit(code=1) from None
208
201
 
209
202
 
210
203
  def _log_with_control_api(
211
- app: Path,
212
- federation: str,
213
- federation_config: dict[str, Any],
204
+ superlink_connection: SuperLinkConnection,
214
205
  run_id: int,
215
206
  stream: bool,
216
207
  ) -> None:
@@ -218,19 +209,14 @@ def _log_with_control_api(
218
209
 
219
210
  Parameters
220
211
  ----------
221
- app : Path
222
- Path to the Flower app directory.
223
- federation : str
224
- Name of the federation.
225
- federation_config : dict[str, Any]
226
- Federation configuration dictionary.
212
+ superlink_connection : SuperLinkConnection
213
+ Superlink connection configuration.
227
214
  run_id : int
228
215
  The unique identifier of the run to retrieve logs from.
229
216
  stream : bool
230
217
  If True, stream logs continuously; if False, print once.
231
218
  """
232
- auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
233
- channel = init_channel(app, federation_config, auth_plugin)
219
+ channel = init_channel_from_connection(superlink_connection)
234
220
 
235
221
  if stream:
236
222
  start_stream(run_id, channel, CONN_REFRESH_PERIOD)
@@ -17,22 +17,17 @@
17
17
 
18
18
  import io
19
19
  import json
20
- from pathlib import Path
21
- from typing import Annotated, cast
20
+ from typing import Annotated
22
21
 
23
22
  import typer
24
23
  from rich.console import Console
25
24
  from rich.table import Table
26
25
  from rich.text import Text
27
26
 
28
- from flwr.cli.config_utils import (
29
- exit_if_no_address,
30
- load_and_validate,
31
- process_loaded_project_config,
32
- validate_federation_in_project_config,
33
- )
27
+ from flwr.cli.config_migration import migrate, warn_if_federation_config_overrides
34
28
  from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
35
- from flwr.common.constant import FAB_CONFIG_FILE, CliOutputFormat, Status, SubStatus
29
+ from flwr.cli.flower_config import read_superlink_connection
30
+ from flwr.common.constant import CliOutputFormat, Status, SubStatus
36
31
  from flwr.common.logger import print_json_error, redirect_output, restore_output
37
32
  from flwr.common.serde import run_from_proto
38
33
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
@@ -43,24 +38,21 @@ from flwr.proto.control_pb2_grpc import ControlStub
43
38
  from flwr.supercore.utils import humanize_bytes, humanize_duration
44
39
 
45
40
  from .run_utils import RunRow, format_runs
46
- from .utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
41
+ from .utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
47
42
 
48
43
 
49
44
  def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
50
45
  ctx: typer.Context,
51
- app: Annotated[
52
- Path,
53
- typer.Argument(help="Path of the Flower project"),
54
- ] = Path("."),
55
- federation: Annotated[
46
+ superlink: Annotated[
56
47
  str | None,
57
- typer.Argument(help="Name of the federation"),
48
+ typer.Argument(help="Name of the SuperLink connection."),
58
49
  ] = None,
59
50
  federation_config_overrides: Annotated[
60
51
  list[str] | None,
61
52
  typer.Option(
62
53
  "--federation-config",
63
54
  help=FEDERATION_CONFIG_HELP_MESSAGE,
55
+ hidden=True,
64
56
  ),
65
57
  ] = None,
66
58
  runs: Annotated[
@@ -99,32 +91,29 @@ def ls( # pylint: disable=too-many-locals, too-many-branches, R0913, R0917
99
91
 
100
92
  All timestamps follow ISO 8601, UTC and are formatted as ``YYYY-MM-DD HH:MM:SSZ``.
101
93
  """
102
- # Resolve command used (list or ls)
103
- command_name = cast(str, ctx.command.name) if ctx.command else "list"
104
-
105
94
  suppress_output = output_format == CliOutputFormat.JSON
106
95
  captured_output = io.StringIO()
96
+
97
+ if suppress_output:
98
+ redirect_output(captured_output)
99
+
100
+ # Warn `--federation-config` is ignored
101
+ warn_if_federation_config_overrides(federation_config_overrides)
102
+
103
+ # Migrate legacy usage if any
104
+ migrate(superlink, args=ctx.args)
105
+
106
+ # Read superlink connection configuration
107
+ superlink_connection = read_superlink_connection(superlink)
108
+ channel = None
109
+
107
110
  try:
108
- if suppress_output:
109
- redirect_output(captured_output)
110
- # Load and validate federation config
111
- typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
112
-
113
- pyproject_path = app / FAB_CONFIG_FILE if app else None
114
- config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
115
- config = process_loaded_project_config(config, errors, warnings)
116
- federation, federation_config = validate_federation_in_project_config(
117
- federation, config, federation_config_overrides
118
- )
119
- exit_if_no_address(federation_config, command_name)
120
- channel = None
121
111
  try:
122
112
  if runs and run_id is not None:
123
113
  raise ValueError(
124
114
  "The options '--runs' and '--run-id' are mutually exclusive."
125
115
  )
126
- auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
127
- channel = init_channel(app, federation_config, auth_plugin)
116
+ channel = init_channel_from_connection(superlink_connection)
128
117
  stub = ControlStub(channel)
129
118
 
130
119
  # Display information about a specific run ID
@@ -15,46 +15,38 @@
15
15
  """Flower command line interface `pull` command."""
16
16
 
17
17
 
18
- from pathlib import Path
19
18
  from typing import Annotated
20
19
 
21
20
  import typer
22
21
 
23
- from flwr.cli.config_utils import (
24
- exit_if_no_address,
25
- load_and_validate,
26
- process_loaded_project_config,
27
- validate_federation_in_project_config,
28
- )
22
+ from flwr.cli.config_migration import migrate, warn_if_federation_config_overrides
29
23
  from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE
30
- from flwr.common.constant import FAB_CONFIG_FILE
24
+ from flwr.cli.flower_config import read_superlink_connection
31
25
  from flwr.proto.control_pb2 import ( # pylint: disable=E0611
32
26
  PullArtifactsRequest,
33
27
  PullArtifactsResponse,
34
28
  )
35
29
  from flwr.proto.control_pb2_grpc import ControlStub
36
30
 
37
- from .utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
31
+ from .utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
38
32
 
39
33
 
40
34
  def pull( # pylint: disable=R0914
35
+ ctx: typer.Context,
41
36
  run_id: Annotated[
42
37
  int,
43
38
  typer.Argument(help="Run ID to pull artifacts from."),
44
39
  ],
45
- app: Annotated[
46
- Path,
47
- typer.Argument(help="Path of the Flower App to run."),
48
- ] = Path("."),
49
- federation: Annotated[
40
+ superlink: Annotated[
50
41
  str | None,
51
- typer.Argument(help="Name of the federation."),
42
+ typer.Argument(help="Name of the SuperLink connection."),
52
43
  ] = None,
53
44
  federation_config_overrides: Annotated[
54
45
  list[str] | None,
55
46
  typer.Option(
56
47
  "--federation-config",
57
48
  help=FEDERATION_CONFIG_HELP_MESSAGE,
49
+ hidden=True,
58
50
  ),
59
51
  ] = None,
60
52
  ) -> None:
@@ -63,20 +55,17 @@ def pull( # pylint: disable=R0914
63
55
  Retrieve a download URL for artifacts generated during a completed Flower run. The
64
56
  artifacts can then be downloaded from the provided URL.
65
57
  """
66
- typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
58
+ # Warn `--federation-config` is ignored
59
+ warn_if_federation_config_overrides(federation_config_overrides)
60
+
61
+ # Migrate legacy usage if any
62
+ migrate(superlink, args=ctx.args)
67
63
 
68
- pyproject_path = app / FAB_CONFIG_FILE if app else None
69
- config, errors, warnings = load_and_validate(pyproject_path, check_module=False)
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, "pull")
64
+ # Read superlink connection configuration
65
+ superlink_connection = read_superlink_connection(superlink)
75
66
  channel = None
76
67
  try:
77
-
78
- auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
79
- channel = init_channel(app, federation_config, auth_plugin)
68
+ channel = init_channel_from_connection(superlink_connection)
80
69
  stub = ControlStub(channel)
81
70
  with flwr_cli_grpc_exc_handler():
82
71
  res: PullArtifactsResponse = stub.PullArtifacts(