flwr-nightly 1.26.0.dev20260120__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.dev20260120 → flwr_nightly-1.26.0.dev20260121}/PKG-INFO +1 -1
  2. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app.py +17 -5
  3. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config_migration.py +34 -12
  4. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/log.py +21 -35
  5. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/ls.py +23 -34
  6. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/pull.py +15 -26
  7. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run/run.py +44 -58
  8. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/stop.py +21 -30
  9. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/utils.py +13 -1
  10. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/__init__.py +2 -0
  11. flwr_nightly-1.26.0.dev20260121/py/flwr/server/superlink/linkstate/sql_linkstate.py +221 -0
  12. flwr_nightly-1.26.0.dev20260121/py/flwr/supercore/corestate/sql_corestate.py +153 -0
  13. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/sql_mixin.py +77 -38
  14. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/pyproject.toml +1 -1
  15. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/README.md +0 -0
  16. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/__init__.py +0 -0
  17. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/__init__.py +0 -0
  18. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/error.py +0 -0
  19. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/exception.py +0 -0
  20. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/message_type.py +0 -0
  21. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/metadata.py +0 -0
  22. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/app/user_config.py +0 -0
  23. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/__init__.py +0 -0
  24. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/__init__.py +0 -0
  25. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/publish.py +0 -0
  26. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/app_cmd/review.py +0 -0
  27. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  28. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  29. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/build.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config/__init__.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config/ls.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/config_utils.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/constant.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/example.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/federation/__init__.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/federation/ls.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/flower_config.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/install.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/login/__init__.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/login/login.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/new/__init__.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/new/new.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run/__init__.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/run_utils.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/__init__.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/ls.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/register.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/supernode/unregister.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/cli/typing.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/__init__.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/client.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260120 → 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.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/message_handler/__init__.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/message_handler/message_handler.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/__init__.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/centraldp_mods.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/comms_mods.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/localdp_mod.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/mod/utils.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/numpy_client.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/rest_client/__init__.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/rest_client/connection.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/run_info_store.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/client/typing.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/__init__.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/client_app.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/__init__.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/typing.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/clientapp/utils.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/__init__.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/args.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/config.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/constant.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/context.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/differential_privacy.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/differential_privacy_constants.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/dp.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/__init__.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit_code.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/exit_handler.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/exit/signal_handler.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/grpc.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/inflatable_utils.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/logger.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/message.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/object_ref.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/parameter.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/__init__.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/array.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/arraychunk.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/arrayrecord.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/configrecord.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/conversion_utils.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/metricrecord.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/recorddict.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/record/typeddict.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/recorddict_compat.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/retry_invoker.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/serde.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/serde_utils.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/telemetry.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/common/typing.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/__init__.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/__init__.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/app.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/common/__init__.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/common/constant.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/server/__init__.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/server/app.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/compat/simulation/__init__.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/__init__.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2.py +0 -0
  142. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2.pyi +0 -0
  143. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  144. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  145. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2.py +0 -0
  146. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  147. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  148. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  149. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2.py +0 -0
  150. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2.pyi +0 -0
  151. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2_grpc.py +0 -0
  152. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  153. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2.py +0 -0
  154. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2.pyi +0 -0
  155. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2_grpc.py +0 -0
  156. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  157. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2.py +0 -0
  158. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2.pyi +0 -0
  159. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  160. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  161. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2.py +0 -0
  162. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2.pyi +0 -0
  163. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2.py +0 -0
  166. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2.pyi +0 -0
  167. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  170. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  171. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2.py +0 -0
  174. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  175. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2.py +0 -0
  178. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2.pyi +0 -0
  179. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2.py +0 -0
  182. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2.pyi +0 -0
  183. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2.py +0 -0
  186. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2.pyi +0 -0
  187. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2.py +0 -0
  190. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  191. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2.py +0 -0
  194. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2.pyi +0 -0
  195. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2.py +0 -0
  198. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  199. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2.py +0 -0
  202. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  203. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2.py +0 -0
  206. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2.pyi +0 -0
  207. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  208. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  209. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/py.typed +0 -0
  210. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/__init__.py +0 -0
  211. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/app.py +0 -0
  212. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/client_manager.py +0 -0
  213. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/client_proxy.py +0 -0
  214. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/__init__.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/app.py +0 -0
  216. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/app_utils.py +0 -0
  217. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/compat/legacy_context.py +0 -0
  219. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/criterion.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/__init__.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/grid.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/grpc_grid.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/grid/inmemory_grid.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/history.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/run_serverapp.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server_app.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/server_config.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp/__init__.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp/app.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/serverapp_components.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/__init__.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/aggregate.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/bulyan.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedadagrad.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedadam.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavg.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavg_android.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedavgm.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedmedian.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedopt.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedprox.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/fedyogi.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/krum.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/qfedavg.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/strategy/strategy.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/__init__.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260120 → 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.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260120 → 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.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260120 → 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.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260120 → 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.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/superlink/utils.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/typing.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/__init__.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/tensorboard.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/utils/validator.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/__init__.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/constant.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/default_workflows.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/__init__.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/exception.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/__init__.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/krum.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/result.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/strategy.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/__init__.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/app.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/legacy_app.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/ray_transport/utils.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/run_simulation.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/simulation/simulationio_connection.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/__init__.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/address.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/app_utils.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/cli/__init__.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/constant.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/__init__.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/corestate.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/corestate/sqlite_corestate.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/__init__.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/date.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/__init__.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/ffs.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/heartbeat.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/__init__.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/object_store.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/object_store/sqlite_object_store.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/__init__.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/sqlite_mixin.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/__init__.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/README.md +0 -0
  367. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/__init__.py +0 -0
  368. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/__init__.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/utils.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supercore/version.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/__init__.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/__init__.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/federation_manager.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/__init__.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/__init__.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/__init__.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/__init__.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/runtime/__init__.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/__init__.py +0 -0
  408. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  409. {flwr_nightly-1.26.0.dev20260120 → flwr_nightly-1.26.0.dev20260121}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  410. {flwr_nightly-1.26.0.dev20260120 → 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.dev20260120
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,21 +57,21 @@ CLI_NOTICE = (
57
57
  )
58
58
 
59
59
 
60
- def _is_legacy_usage(superlink: str | None, 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 superlink is None:
62
+ if positional_arg_1 is None:
63
63
  return False
64
64
 
65
65
  # If one and only one extra argument is given, assume legacy usage
66
66
  if len(args) == 1:
67
67
  return True
68
68
 
69
- # If the `superlink` looks like a path, assume legacy usage
70
- pth = Path(superlink)
71
- 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 (".", ".."):
72
72
  return True
73
73
 
74
- # 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
75
75
  if (pth / "pyproject.toml").exists():
76
76
  return True
77
77
 
@@ -172,7 +172,7 @@ def _comment_out_legacy_toml_config(app: Path) -> None:
172
172
 
173
173
 
174
174
  def migrate(
175
- superlink: str | None,
175
+ positional_arg_1: str | None,
176
176
  args: list[str],
177
177
  ignore_legacy_usage: bool = False,
178
178
  ) -> None:
@@ -182,13 +182,13 @@ def migrate(
182
182
  pyproject.toml to the new Flower config format when legacy usage is detected
183
183
  or the migration is applicable.
184
184
 
185
- `flwr run` should call `migrate(superlink, [], ignore_legacy_usage=True)` to skip
185
+ `flwr run` should call `migrate(app, [], ignore_legacy_usage=True)` to skip
186
186
  legacy usage check. Other CLI commands should call `migrate(superlink, ctx.args)`.
187
187
 
188
188
  Parameters
189
189
  ----------
190
- superlink : str | None
191
- Value of the `[SUPERLINK]` argument provided to the CLI command.
190
+ positional_arg_1 : str | None
191
+ The first positional argument.
192
192
  args : list[str]
193
193
  Additional arguments. In legacy usage, this is the TOML federation name.
194
194
  ignore_legacy_usage : bool (default: False)
@@ -224,12 +224,13 @@ def migrate(
224
224
  raise click.UsageError(f"Got unexpected extra arguments ({' '.join(args[1:])})")
225
225
 
226
226
  # Determine app path for migration
227
- app = Path(superlink) if superlink else Path(".")
227
+ arg1 = positional_arg_1
228
+ app = Path(arg1) if arg1 else Path(".")
228
229
  app = app.resolve()
229
230
 
230
231
  # Check if migration is applicable and if legacy usage is detected
231
232
  is_migratable, reason = _is_migratable(app)
232
- is_legacy = _is_legacy_usage(superlink, args) if not ignore_legacy_usage else False
233
+ is_legacy = _is_legacy_usage(arg1, args) if not ignore_legacy_usage else False
233
234
 
234
235
  # Print notice once if legacy usage detected or migration is applicable
235
236
  if is_legacy or is_migratable:
@@ -276,3 +277,24 @@ def migrate(
276
277
 
277
278
  # Abort if legacy usage is detected to force user to adapt to new usage
278
279
  raise typer.Exit(code=1)
280
+
281
+
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,
300
+ )
@@ -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(
@@ -26,15 +26,15 @@ import typer
26
26
  from rich.console import Console
27
27
 
28
28
  from flwr.cli.build import build_fab_from_disk, get_fab_filename
29
+ from flwr.cli.config_migration import migrate, warn_if_federation_config_overrides
29
30
  from flwr.cli.config_utils import load as load_toml
30
- from flwr.cli.config_utils import (
31
- load_and_validate,
32
- process_loaded_project_config,
33
- validate_federation_in_project_config,
34
- )
35
31
  from flwr.cli.constant import FEDERATION_CONFIG_HELP_MESSAGE, RUN_CONFIG_HELP_MESSAGE
32
+ from flwr.cli.flower_config import (
33
+ _serialize_simulation_options,
34
+ read_superlink_connection,
35
+ )
36
+ from flwr.cli.typing import SuperLinkConnection, SuperLinkSimulationOptions
36
37
  from flwr.common.config import (
37
- flatten_dict,
38
38
  get_metadata_from_config,
39
39
  parse_config_args,
40
40
  user_config_to_configrecord,
@@ -49,7 +49,7 @@ from flwr.supercore.constant import NOOP_FEDERATION
49
49
  from flwr.supercore.utils import parse_app_spec
50
50
 
51
51
  from ..log import start_stream
52
- from ..utils import flwr_cli_grpc_exc_handler, init_channel, load_cli_auth_plugin
52
+ from ..utils import flwr_cli_grpc_exc_handler, init_channel_from_connection
53
53
 
54
54
  CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
55
55
 
@@ -60,9 +60,9 @@ def run(
60
60
  Path,
61
61
  typer.Argument(help="Path of the Flower App to run."),
62
62
  ] = Path("."),
63
- federation: Annotated[
63
+ superlink: Annotated[
64
64
  str | None,
65
- typer.Argument(help="Name of the federation to run the app on."),
65
+ typer.Argument(help="Name of the SuperLink connection."),
66
66
  ] = None,
67
67
  run_config_overrides: Annotated[
68
68
  list[str] | None,
@@ -77,6 +77,7 @@ def run(
77
77
  typer.Option(
78
78
  "--federation-config",
79
79
  help=FEDERATION_CONFIG_HELP_MESSAGE,
80
+ hidden=True,
80
81
  ),
81
82
  ] = None,
82
83
  stream: Annotated[
@@ -99,9 +100,20 @@ def run(
99
100
  """Run Flower App."""
100
101
  suppress_output = output_format == CliOutputFormat.JSON
101
102
  captured_output = io.StringIO()
103
+
104
+ if suppress_output:
105
+ redirect_output(captured_output)
106
+
107
+ # Warn `--federation-config` is ignored
108
+ warn_if_federation_config_overrides(federation_config_overrides)
109
+
110
+ # Migrate legacy usage if any
111
+ migrate(str(app), [], ignore_legacy_usage=True)
112
+
113
+ # Read superlink connection configuration
114
+ superlink_connection = read_superlink_connection(superlink)
115
+
102
116
  try:
103
- if suppress_output:
104
- redirect_output(captured_output)
105
117
 
106
118
  # Determine if app is remote
107
119
  app_spec = None
@@ -116,27 +128,11 @@ def run(
116
128
  app_spec = app_str
117
129
  # Set `app` to current directory for credential storage
118
130
  app = Path(".")
119
- is_remote_app = app_spec is not None
120
-
121
- typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
122
131
 
123
- # Disable the validation for remote apps
124
- pyproject_path = app / "pyproject.toml" if not is_remote_app else None
125
- # `./pyproject.toml` will be loaded when `pyproject_path` is None
126
- config, errors, warnings = load_and_validate(
127
- pyproject_path, check_module=not is_remote_app
128
- )
129
- config = process_loaded_project_config(config, errors, warnings)
130
-
131
- federation, federation_config = validate_federation_in_project_config(
132
- federation, config, federation_config_overrides
133
- )
134
-
135
- if "address" in federation_config:
132
+ if superlink_connection.address:
136
133
  _run_with_control_api(
137
134
  app,
138
- federation,
139
- federation_config,
135
+ superlink_connection,
140
136
  run_config_overrides,
141
137
  stream,
142
138
  output_format,
@@ -144,7 +140,9 @@ def run(
144
140
  )
145
141
  else:
146
142
  _run_without_control_api(
147
- app, federation_config, run_config_overrides, federation
143
+ app=app,
144
+ simulation_options=superlink_connection.options, # type: ignore
145
+ config_overrides=run_config_overrides,
148
146
  )
149
147
  except (typer.Exit, Exception) as err: # pylint: disable=broad-except
150
148
  if suppress_output:
@@ -167,8 +165,7 @@ def run(
167
165
  # pylint: disable-next=R0913, R0914, R0917
168
166
  def _run_with_control_api(
169
167
  app: Path,
170
- federation: str,
171
- federation_config: dict[str, Any],
168
+ superlink_connection: SuperLinkConnection,
172
169
  config_overrides: list[str] | None,
173
170
  stream: bool,
174
171
  output_format: str,
@@ -177,8 +174,7 @@ def _run_with_control_api(
177
174
  channel = None
178
175
  is_remote_app = app_spec is not None
179
176
  try:
180
- auth_plugin = load_cli_auth_plugin(app, federation, federation_config)
181
- channel = init_channel(app, federation_config, auth_plugin)
177
+ channel = init_channel_from_connection(superlink_connection)
182
178
  stub = ControlStub(channel)
183
179
 
184
180
  # Build FAB if local app
@@ -194,16 +190,19 @@ def _run_with_control_api(
194
190
  fab_id = fab_version = fab_hash = ""
195
191
  fab = Fab(fab_hash, b"", {})
196
192
 
197
- real_federation: str = federation_config.get("federation", NOOP_FEDERATION)
193
+ federation: str = superlink_connection.federation or NOOP_FEDERATION
198
194
 
199
195
  # Construct a `ConfigRecord` out of a flattened `UserConfig`
200
- fed_config = flatten_dict(federation_config.get("options", {}))
201
- c_record = user_config_to_configrecord(fed_config)
196
+ options = {}
197
+ if superlink_connection.options:
198
+ options = _serialize_simulation_options(superlink_connection.options)
199
+
200
+ c_record = user_config_to_configrecord(options)
202
201
 
203
202
  req = StartRunRequest(
204
203
  fab=fab_to_proto(fab),
205
204
  override_config=user_config_to_proto(parse_config_args(config_overrides)),
206
- federation=real_federation,
205
+ federation=federation,
207
206
  federation_options=config_record_to_proto(c_record),
208
207
  app_spec=app_spec or "",
209
208
  )
@@ -246,26 +245,12 @@ def _run_with_control_api(
246
245
 
247
246
  def _run_without_control_api(
248
247
  app: Path | None,
249
- federation_config: dict[str, Any],
248
+ simulation_options: SuperLinkSimulationOptions,
250
249
  config_overrides: list[str] | None,
251
- federation: str,
252
250
  ) -> None:
253
- try:
254
- num_supernodes = federation_config["options"]["num-supernodes"]
255
- verbose: bool | None = federation_config["options"].get("verbose")
256
- backend_cfg = federation_config["options"].get("backend", {})
257
- except KeyError as err:
258
- typer.secho(
259
- "❌ The project's `pyproject.toml` needs to declare the number of"
260
- " SuperNodes in the simulation. To simulate 10 SuperNodes,"
261
- " use the following notation:\n\n"
262
- f"[tool.flwr.federations.{federation}]\n"
263
- "options.num-supernodes = 10\n",
264
- fg=typer.colors.RED,
265
- bold=True,
266
- err=True,
267
- )
268
- raise typer.Exit(code=1) from err
251
+
252
+ num_supernodes = simulation_options.num_supernodes
253
+ verbose = False # bool | None = superlink_connection.options.verbose
269
254
 
270
255
  command = [
271
256
  "flower-simulation",
@@ -275,9 +260,10 @@ def _run_without_control_api(
275
260
  f"{num_supernodes}",
276
261
  ]
277
262
 
278
- if backend_cfg:
263
+ if simulation_options.backend:
279
264
  # Stringify as JSON
280
- command.extend(["--backend-config", json.dumps(backend_cfg)])
265
+ backend_serial = _serialize_simulation_options(simulation_options)
266
+ command.extend(["--backend-config", json.dumps(backend_serial)])
281
267
 
282
268
  if verbose:
283
269
  command.extend(["--verbose"])