flwr-nightly 1.26.0.dev20260122__tar.gz → 1.26.0.dev20260123__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/PKG-INFO +2 -2
  2. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config_utils.py +0 -132
  3. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/utils.py +2 -55
  4. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/__init__.py +0 -2
  5. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/object_store_factory.py +4 -4
  6. flwr_nightly-1.26.0.dev20260122/py/flwr/supercore/object_store/sqlite_object_store.py → flwr_nightly-1.26.0.dev20260123/py/flwr/supercore/object_store/sql_object_store.py +107 -113
  7. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/pyproject.toml +2 -2
  8. flwr_nightly-1.26.0.dev20260122/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -1302
  9. flwr_nightly-1.26.0.dev20260122/py/flwr/supercore/corestate/sqlite_corestate.py +0 -157
  10. flwr_nightly-1.26.0.dev20260122/py/flwr/supercore/object_store/sql_object_store.py +0 -82
  11. flwr_nightly-1.26.0.dev20260122/py/flwr/supercore/sqlite_mixin.py +0 -156
  12. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/README.md +0 -0
  13. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/__init__.py +0 -0
  14. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/__init__.py +0 -0
  15. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/error.py +0 -0
  16. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/exception.py +0 -0
  17. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/message_type.py +0 -0
  18. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/metadata.py +0 -0
  19. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/app/user_config.py +0 -0
  20. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/__init__.py +0 -0
  21. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app.py +0 -0
  22. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/__init__.py +0 -0
  23. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/publish.py +0 -0
  24. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/app_cmd/review.py +0 -0
  25. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  26. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/auth_plugin.py +0 -0
  27. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/noop_auth_plugin.py +0 -0
  28. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  29. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/build.py +0 -0
  30. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/cli_account_auth_interceptor.py +0 -0
  31. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config/__init__.py +0 -0
  32. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config/ls.py +0 -0
  33. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/config_migration.py +0 -0
  34. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/constant.py +0 -0
  35. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/example.py +0 -0
  36. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/federation/__init__.py +0 -0
  37. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/federation/ls.py +0 -0
  38. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/flower_config.py +0 -0
  39. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/install.py +0 -0
  40. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/log.py +0 -0
  41. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/login/__init__.py +0 -0
  42. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/login/login.py +0 -0
  43. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/ls.py +0 -0
  44. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/new/__init__.py +0 -0
  45. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/new/new.py +0 -0
  46. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/pull.py +0 -0
  47. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run/__init__.py +0 -0
  48. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run/run.py +0 -0
  49. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/run_utils.py +0 -0
  50. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/stop.py +0 -0
  51. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/__init__.py +0 -0
  52. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/ls.py +0 -0
  53. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/register.py +0 -0
  54. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/supernode/unregister.py +0 -0
  55. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/cli/typing.py +0 -0
  56. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/__init__.py +0 -0
  57. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/client.py +0 -0
  58. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  59. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  60. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  61. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  62. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  63. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  64. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/grpc_rere_client/node_auth_client_interceptor.py +0 -0
  65. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/message_handler/__init__.py +0 -0
  66. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/message_handler/message_handler.py +0 -0
  67. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/__init__.py +0 -0
  68. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/centraldp_mods.py +0 -0
  69. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/comms_mods.py +0 -0
  70. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/localdp_mod.py +0 -0
  71. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  72. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  73. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  74. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/mod/utils.py +0 -0
  75. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/numpy_client.py +0 -0
  76. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/rest_client/__init__.py +0 -0
  77. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/rest_client/connection.py +0 -0
  78. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/run_info_store.py +0 -0
  79. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/client/typing.py +0 -0
  80. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/__init__.py +0 -0
  81. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/client_app.py +0 -0
  82. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/__init__.py +0 -0
  83. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/centraldp_mods.py +0 -0
  84. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/mod/localdp_mod.py +0 -0
  85. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/typing.py +0 -0
  86. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/clientapp/utils.py +0 -0
  87. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/__init__.py +0 -0
  88. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/args.py +0 -0
  89. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/config.py +0 -0
  90. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/constant.py +0 -0
  91. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/context.py +0 -0
  92. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/differential_privacy.py +0 -0
  93. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/differential_privacy_constants.py +0 -0
  94. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/dp.py +0 -0
  95. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  96. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  97. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/__init__.py +0 -0
  98. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit.py +0 -0
  99. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit_code.py +0 -0
  100. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/exit_handler.py +0 -0
  101. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/exit/signal_handler.py +0 -0
  102. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/grpc.py +0 -0
  103. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable.py +0 -0
  104. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  105. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/inflatable_utils.py +0 -0
  106. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/logger.py +0 -0
  107. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/message.py +0 -0
  108. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/object_ref.py +0 -0
  109. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/parameter.py +0 -0
  110. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/__init__.py +0 -0
  111. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/array.py +0 -0
  112. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/arraychunk.py +0 -0
  113. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/arrayrecord.py +0 -0
  114. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/configrecord.py +0 -0
  115. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/conversion_utils.py +0 -0
  116. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/metricrecord.py +0 -0
  117. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/recorddict.py +0 -0
  118. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/record/typeddict.py +0 -0
  119. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/recorddict_compat.py +0 -0
  120. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/retry_invoker.py +0 -0
  121. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  122. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  123. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  124. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  125. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  126. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  127. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  128. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  129. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/serde.py +0 -0
  130. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/serde_utils.py +0 -0
  131. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/telemetry.py +0 -0
  132. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/common/typing.py +0 -0
  133. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/__init__.py +0 -0
  134. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/__init__.py +0 -0
  135. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/app.py +0 -0
  136. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  137. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  138. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/common/__init__.py +0 -0
  139. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/common/constant.py +0 -0
  140. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/server/__init__.py +0 -0
  141. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/server/app.py +0 -0
  142. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/compat/simulation/__init__.py +0 -0
  143. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/__init__.py +0 -0
  144. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2.py +0 -0
  145. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2.pyi +0 -0
  146. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  147. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  148. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2.py +0 -0
  149. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  150. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  151. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  152. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2.py +0 -0
  153. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2.pyi +0 -0
  154. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2_grpc.py +0 -0
  155. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  156. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2.py +0 -0
  157. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2.pyi +0 -0
  158. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2_grpc.py +0 -0
  159. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  160. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2.py +0 -0
  161. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2.pyi +0 -0
  162. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2.py +0 -0
  165. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2.pyi +0 -0
  166. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2_grpc.py +0 -0
  167. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/federation_pb2_grpc.pyi +0 -0
  168. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2.py +0 -0
  169. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2.pyi +0 -0
  170. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  171. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  172. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  173. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  174. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  175. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  176. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2.py +0 -0
  177. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  178. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2.py +0 -0
  181. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2.pyi +0 -0
  182. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2.py +0 -0
  185. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2.pyi +0 -0
  186. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2.py +0 -0
  189. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2.pyi +0 -0
  190. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2.py +0 -0
  193. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  194. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2.py +0 -0
  197. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2.pyi +0 -0
  198. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2.py +0 -0
  201. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  202. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  203. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  204. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2.py +0 -0
  205. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  206. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  207. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  208. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2.py +0 -0
  209. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2.pyi +0 -0
  210. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  211. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  212. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/py.typed +0 -0
  213. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/__init__.py +0 -0
  214. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/app.py +0 -0
  215. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/client_manager.py +0 -0
  216. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/client_proxy.py +0 -0
  217. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/__init__.py +0 -0
  218. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/app.py +0 -0
  219. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/app_utils.py +0 -0
  220. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  221. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/compat/legacy_context.py +0 -0
  222. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/criterion.py +0 -0
  223. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  224. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/__init__.py +0 -0
  225. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/grid.py +0 -0
  226. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/grpc_grid.py +0 -0
  227. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/grid/inmemory_grid.py +0 -0
  228. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/history.py +0 -0
  229. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/run_serverapp.py +0 -0
  230. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server.py +0 -0
  231. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server_app.py +0 -0
  232. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/server_config.py +0 -0
  233. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp/__init__.py +0 -0
  234. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp/app.py +0 -0
  235. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/serverapp_components.py +0 -0
  236. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/__init__.py +0 -0
  237. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/aggregate.py +0 -0
  238. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/bulyan.py +0 -0
  239. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  240. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  241. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  242. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  243. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  244. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedadagrad.py +0 -0
  245. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedadam.py +0 -0
  246. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavg.py +0 -0
  247. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavg_android.py +0 -0
  248. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedavgm.py +0 -0
  249. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedmedian.py +0 -0
  250. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedopt.py +0 -0
  251. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedprox.py +0 -0
  252. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  253. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  254. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  255. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  256. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/fedyogi.py +0 -0
  257. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/krum.py +0 -0
  258. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/qfedavg.py +0 -0
  259. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/strategy/strategy.py +0 -0
  260. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/__init__.py +0 -0
  261. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  262. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  263. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  264. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  265. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  266. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  267. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  268. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  269. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  270. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  271. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/grpc_rere/node_auth_server_interceptor.py +0 -0
  272. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  273. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  274. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  275. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  276. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  277. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  278. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  279. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  280. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  281. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  282. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  283. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  284. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/sql_linkstate.py +0 -0
  285. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  286. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  287. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  288. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  289. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  290. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  291. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  292. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/superlink/utils.py +0 -0
  293. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/typing.py +0 -0
  294. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/__init__.py +0 -0
  295. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/tensorboard.py +0 -0
  296. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/utils/validator.py +0 -0
  297. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/__init__.py +0 -0
  298. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/constant.py +0 -0
  299. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/default_workflows.py +0 -0
  300. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  301. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  302. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  303. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/__init__.py +0 -0
  304. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/exception.py +0 -0
  305. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/__init__.py +0 -0
  306. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/bulyan.py +0 -0
  307. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/dp_adaptive_clipping.py +0 -0
  308. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/dp_fixed_clipping.py +0 -0
  309. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedadagrad.py +0 -0
  310. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedadam.py +0 -0
  311. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedavg.py +0 -0
  312. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedavgm.py +0 -0
  313. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedmedian.py +0 -0
  314. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedopt.py +0 -0
  315. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedprox.py +0 -0
  316. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedtrimmedavg.py +0 -0
  317. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedxgb_bagging.py +0 -0
  318. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedxgb_cyclic.py +0 -0
  319. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/fedyogi.py +0 -0
  320. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/krum.py +0 -0
  321. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/multikrum.py +0 -0
  322. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/qfedavg.py +0 -0
  323. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/result.py +0 -0
  324. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/strategy.py +0 -0
  325. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/serverapp/strategy/strategy_utils.py +0 -0
  326. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/__init__.py +0 -0
  327. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/app.py +0 -0
  328. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/legacy_app.py +0 -0
  329. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  330. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  331. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  332. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/ray_transport/utils.py +0 -0
  333. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/run_simulation.py +0 -0
  334. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/simulation/simulationio_connection.py +0 -0
  335. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/__init__.py +0 -0
  336. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/address.py +0 -0
  337. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/app_utils.py +0 -0
  338. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/cli/__init__.py +0 -0
  339. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  340. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/constant.py +0 -0
  341. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/__init__.py +0 -0
  342. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/corestate.py +0 -0
  343. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/in_memory_corestate.py +0 -0
  344. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/corestate/sql_corestate.py +0 -0
  345. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/__init__.py +0 -0
  346. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/credential_store.py +0 -0
  347. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/credential_store/file_credential_store.py +0 -0
  348. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/date.py +0 -0
  349. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/__init__.py +0 -0
  350. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  351. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/ffs.py +0 -0
  352. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  353. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  354. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/health_server.py +0 -0
  355. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  356. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/heartbeat.py +0 -0
  357. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  358. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  359. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/__init__.py +0 -0
  360. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  361. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/object_store/object_store.py +0 -0
  362. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/__init__.py +0 -0
  363. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/asymmetric.py +0 -0
  364. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/primitives/asymmetric_ed25519.py +0 -0
  365. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/sql_mixin.py +0 -0
  366. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/__init__.py +0 -0
  367. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/README.md +0 -0
  368. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/__init__.py +0 -0
  369. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/corestate_tables.py +0 -0
  370. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/linkstate_tables.py +0 -0
  371. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/state/schema/objectstore_tables.py +0 -0
  372. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/__init__.py +0 -0
  373. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  374. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  375. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  376. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  377. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  378. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  379. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  380. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/utils.py +0 -0
  381. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supercore/version.py +0 -0
  382. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/__init__.py +0 -0
  383. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/artifact_provider/__init__.py +0 -0
  384. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/artifact_provider/artifact_provider.py +0 -0
  385. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/__init__.py +0 -0
  386. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/auth_plugin.py +0 -0
  387. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/auth_plugin/noop_auth_plugin.py +0 -0
  388. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/__init__.py +0 -0
  389. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/federation_manager.py +0 -0
  390. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/federation/noop_federation_manager.py +0 -0
  391. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/__init__.py +0 -0
  392. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  393. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_account_auth_interceptor.py +0 -0
  394. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  395. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  396. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  397. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  398. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/__init__.py +0 -0
  399. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/__init__.py +0 -0
  400. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  401. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  402. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/__init__.py +0 -0
  403. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  404. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  405. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  406. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/runtime/__init__.py +0 -0
  407. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  408. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/__init__.py +0 -0
  409. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  410. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
  411. {flwr_nightly-1.26.0.dev20260122 → flwr_nightly-1.26.0.dev20260123}/py/flwr/supernode/start_client_internal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.26.0.dev20260122
3
+ Version: 1.26.0.dev20260123
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -45,7 +45,7 @@ Requires-Dist: ray (==2.51.1) ; (python_version >= "3.10" and python_version < "
45
45
  Requires-Dist: ray (==2.51.1) ; (sys_platform != "win32" and python_version == "3.13") and (extra == "simulation")
46
46
  Requires-Dist: requests (>=2.31.0,<3.0.0)
47
47
  Requires-Dist: rich (>=13.5.0,<14.0.0)
48
- Requires-Dist: starlette (>=0.45.2,<0.46.0) ; extra == "rest"
48
+ Requires-Dist: starlette (>=0.47.2,<0.48.0) ; extra == "rest"
49
49
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
50
50
  Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
51
51
  Requires-Dist: typer (>=0.12.5,<0.21.0)
@@ -114,57 +114,6 @@ def load(toml_path: Path) -> dict[str, Any] | None:
114
114
  return None
115
115
 
116
116
 
117
- def process_loaded_project_config(
118
- config: dict[str, Any] | None, errors: list[str], warnings: list[str]
119
- ) -> dict[str, Any]:
120
- """Process and return the loaded project configuration.
121
-
122
- This function handles errors and warnings from the `load_and_validate` function,
123
- exits on critical issues, and returns the validated configuration.
124
-
125
- Parameters
126
- ----------
127
- config : dict[str, Any] | None
128
- The loaded configuration dictionary, or None if loading failed.
129
- errors : list[str]
130
- List of error messages from validation.
131
- warnings : list[str]
132
- List of warning messages from validation.
133
-
134
- Returns
135
- -------
136
- dict[str, Any]
137
- The validated configuration dictionary.
138
-
139
- Raises
140
- ------
141
- typer.Exit
142
- If config is None or contains critical errors.
143
- """
144
- if config is None:
145
- typer.secho(
146
- "Project configuration could not be loaded.\n"
147
- "pyproject.toml is invalid:\n"
148
- + "\n".join([f"- {line}" for line in errors]),
149
- fg=typer.colors.RED,
150
- bold=True,
151
- err=True,
152
- )
153
- raise typer.Exit(code=1)
154
-
155
- if warnings:
156
- typer.secho(
157
- "Project configuration is missing the following "
158
- "recommended properties:\n" + "\n".join([f"- {line}" for line in warnings]),
159
- fg=typer.colors.RED,
160
- bold=True,
161
- )
162
-
163
- typer.secho("Success", fg=typer.colors.GREEN)
164
-
165
- return config
166
-
167
-
168
117
  def validate_federation_in_project_config(
169
118
  federation: str | None,
170
119
  config: dict[str, Any],
@@ -229,61 +178,6 @@ def validate_federation_in_project_config(
229
178
  return federation, federation_config
230
179
 
231
180
 
232
- def validate_certificate_in_federation_config(
233
- app: Path, federation_config: dict[str, Any]
234
- ) -> tuple[bool, bytes | None]:
235
- """Validate the certificates in the Flower project configuration.
236
-
237
- Accepted configurations:
238
- 1. TLS enabled and gRPC will load(*) the trusted certificate bundle:
239
- - Only `address` is provided. `root-certificates` and `insecure` not set.
240
- - `address` is provided and `insecure` set to `false`. `root-certificates` not
241
- set.
242
- (*)gRPC uses a multi-step fallback mechanism to load the trusted certificate
243
- bundle in the following sequence:
244
- a. A configured file path (if set via configuration or environment),
245
- b. An override callback (if registered via
246
- `grpc_set_ssl_roots_override_callback`),
247
- c. The OS trust store (if available),
248
- d. A bundled default certificate file.
249
- 2. TLS enabled with self-signed certificates:
250
- - `address` and `root-certificates` are provided. `insecure` not set.
251
- - `address` and `root-certificates` are provided. `insecure` set to `false`.
252
- 3. TLS disabled. This is not recommended and should only be used for prototyping:
253
- - `address` is provided and `insecure = true`. If `root-certificates` is
254
- set, exit with an error.
255
- """
256
- insecure = get_insecure_flag(federation_config)
257
-
258
- # Process root certificates
259
- if root_certificates := federation_config.get("root-certificates"):
260
- if insecure:
261
- typer.secho(
262
- "❌ `root-certificates` were provided but the `insecure` parameter "
263
- "is set to `True`.",
264
- fg=typer.colors.RED,
265
- bold=True,
266
- err=True,
267
- )
268
- raise typer.Exit(code=1)
269
-
270
- # TLS is enabled with self-signed certificates: attempt to read the file
271
- try:
272
- root_certificates_bytes = (app / root_certificates).read_bytes()
273
- except Exception as e:
274
- typer.secho(
275
- f"❌ Failed to read certificate file `{root_certificates}`: {e}",
276
- fg=typer.colors.RED,
277
- bold=True,
278
- err=True,
279
- )
280
- raise typer.Exit(code=1) from e
281
- else:
282
- root_certificates_bytes = None
283
-
284
- return insecure, root_certificates_bytes
285
-
286
-
287
181
  def load_certificate_in_connection(
288
182
  connection: SuperLinkConnection,
289
183
  ) -> bytes | None:
@@ -336,32 +230,6 @@ def load_certificate_in_connection(
336
230
  return root_certificates_bytes
337
231
 
338
232
 
339
- def exit_if_no_address(federation_config: dict[str, Any], cmd: str) -> None:
340
- """Exit if the provided federation_config has no "address" key.
341
-
342
- Parameters
343
- ----------
344
- federation_config : dict[str, Any]
345
- The federation configuration dictionary to check.
346
- cmd : str
347
- The command name to display in the error message.
348
-
349
- Raises
350
- ------
351
- typer.Exit
352
- If 'address' key is not present in federation_config.
353
- """
354
- if "address" not in federation_config:
355
- typer.secho(
356
- f"❌ `flwr {cmd}` currently works with a SuperLink. Ensure that the "
357
- "correct SuperLink (Control API) address is provided in `pyproject.toml`.",
358
- fg=typer.colors.RED,
359
- bold=True,
360
- err=True,
361
- )
362
- raise typer.Exit(code=1)
363
-
364
-
365
233
  def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
366
234
  """Extract and validate the `insecure` flag from the federation configuration.
367
235
 
@@ -20,7 +20,7 @@ import json
20
20
  from collections.abc import Callable, Iterable, Iterator
21
21
  from contextlib import contextmanager
22
22
  from pathlib import Path
23
- from typing import Any, cast
23
+ from typing import cast
24
24
 
25
25
  import click
26
26
  import grpc
@@ -50,10 +50,7 @@ from flwr.supercore.credential_store import get_credential_store
50
50
 
51
51
  from .auth_plugin import CliAuthPlugin, get_cli_plugin_class
52
52
  from .cli_account_auth_interceptor import CliAccountAuthInterceptor
53
- from .config_utils import (
54
- load_certificate_in_connection,
55
- validate_certificate_in_federation_config,
56
- )
53
+ from .config_utils import load_certificate_in_connection
57
54
  from .constant import AUTHN_TYPE_STORE_KEY
58
55
 
59
56
 
@@ -197,18 +194,6 @@ def get_authn_type(host: str) -> str:
197
194
  return authn_type.decode("utf-8")
198
195
 
199
196
 
200
- def load_cli_auth_plugin(
201
- root_dir: Path,
202
- federation: str,
203
- federation_config: dict[str, Any],
204
- authn_type: str | None = None,
205
- ) -> CliAuthPlugin:
206
- """."""
207
- raise RuntimeError(
208
- "Deprecated function. Use `load_cli_auth_plugin_from_connection`"
209
- )
210
-
211
-
212
197
  def load_cli_auth_plugin_from_connection(
213
198
  host: str, authn_type: str | None = None
214
199
  ) -> CliAuthPlugin:
@@ -246,44 +231,6 @@ def load_cli_auth_plugin_from_connection(
246
231
  raise typer.Exit(code=1) from None
247
232
 
248
233
 
249
- def init_channel(
250
- app: Path, federation_config: dict[str, Any], auth_plugin: CliAuthPlugin
251
- ) -> grpc.Channel:
252
- """Initialize gRPC channel to the Control API.
253
-
254
- Parameters
255
- ----------
256
- app : Path
257
- Path to the Flower app directory.
258
- federation_config : dict[str, Any]
259
- Federation configuration dictionary containing address and TLS settings.
260
- auth_plugin : CliAuthPlugin
261
- Authentication plugin instance for handling credentials.
262
-
263
- Returns
264
- -------
265
- grpc.Channel
266
- Configured gRPC channel with authentication interceptors.
267
- """
268
- insecure, root_certificates_bytes = validate_certificate_in_federation_config(
269
- app, federation_config
270
- )
271
-
272
- # Load tokens
273
- auth_plugin.load_tokens()
274
-
275
- # Create the gRPC channel
276
- channel = create_channel(
277
- server_address=federation_config["address"],
278
- insecure=insecure,
279
- root_certificates=root_certificates_bytes,
280
- max_message_length=GRPC_MAX_MESSAGE_LENGTH,
281
- interceptors=[CliAccountAuthInterceptor(auth_plugin)],
282
- )
283
- channel.subscribe(on_channel_state_change)
284
- return channel
285
-
286
-
287
234
  def require_superlink_address(connection: SuperLinkConnection) -> str:
288
235
  """Return the SuperLink address or exit if it is not configured."""
289
236
  if connection.address is None:
@@ -19,12 +19,10 @@ from .in_memory_linkstate import InMemoryLinkState as InMemoryLinkState
19
19
  from .linkstate import LinkState as LinkState
20
20
  from .linkstate_factory import LinkStateFactory as LinkStateFactory
21
21
  from .sql_linkstate import SqlLinkState as SqlLinkState
22
- from .sqlite_linkstate import SqliteLinkState as SqliteLinkState
23
22
 
24
23
  __all__ = [
25
24
  "InMemoryLinkState",
26
25
  "LinkState",
27
26
  "LinkStateFactory",
28
27
  "SqlLinkState",
29
- "SqliteLinkState",
30
28
  ]
@@ -22,7 +22,7 @@ from flwr.supercore.constant import FLWR_IN_MEMORY_DB_NAME
22
22
 
23
23
  from .in_memory_object_store import InMemoryObjectStore
24
24
  from .object_store import ObjectStore
25
- from .sqlite_object_store import SqliteObjectStore
25
+ from .sql_object_store import SqlObjectStore
26
26
 
27
27
 
28
28
  class ObjectStoreFactory:
@@ -56,8 +56,8 @@ class ObjectStoreFactory:
56
56
  log(DEBUG, "Using InMemoryObjectStore")
57
57
  return self.store_instance
58
58
 
59
- # SqliteObjectStore
60
- store = SqliteObjectStore(self.database)
59
+ # SqlObjectStore
60
+ store = SqlObjectStore(self.database)
61
61
  store.initialize()
62
- log(DEBUG, "Using SqliteObjectStore")
62
+ log(DEBUG, "Using SqlObjectStore")
63
63
  return store
@@ -1,4 +1,4 @@
1
- # Copyright 2025 Flower Labs GmbH. All Rights Reserved.
1
+ # Copyright 2026 Flower Labs GmbH. All Rights Reserved.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,10 +12,10 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
- """Flower SQLite ObjectStore implementation."""
15
+ """Flower SQLAlchemy-based ObjectStore implementation."""
16
16
 
17
17
 
18
- from typing import cast
18
+ from sqlalchemy import MetaData
19
19
 
20
20
  from flwr.common.inflatable import (
21
21
  get_object_id,
@@ -24,52 +24,23 @@ from flwr.common.inflatable import (
24
24
  )
25
25
  from flwr.common.inflatable_utils import validate_object_content
26
26
  from flwr.proto.message_pb2 import ObjectTree # pylint: disable=E0611
27
- from flwr.supercore.sqlite_mixin import SqliteMixin
27
+ from flwr.supercore.sql_mixin import SqlMixin
28
+ from flwr.supercore.state.schema.objectstore_tables import create_objectstore_metadata
28
29
  from flwr.supercore.utils import uint64_to_int64
29
30
 
30
31
  from .object_store import NoObjectInStoreError, ObjectStore
31
32
 
32
- SQL_CREATE_OBJECTS = """
33
- CREATE TABLE IF NOT EXISTS objects (
34
- object_id TEXT PRIMARY KEY,
35
- content BLOB,
36
- is_available INTEGER NOT NULL CHECK (is_available IN (0,1)),
37
- ref_count INTEGER NOT NULL
38
- );
39
- """
40
- SQL_CREATE_OBJECT_CHILDREN = """
41
- CREATE TABLE IF NOT EXISTS object_children (
42
- parent_id TEXT NOT NULL,
43
- child_id TEXT NOT NULL,
44
- FOREIGN KEY (parent_id) REFERENCES objects(object_id) ON DELETE CASCADE,
45
- FOREIGN KEY (child_id) REFERENCES objects(object_id) ON DELETE CASCADE,
46
- PRIMARY KEY (parent_id, child_id)
47
- );
48
- """
49
- SQL_CREATE_RUN_OBJECTS = """
50
- CREATE TABLE IF NOT EXISTS run_objects (
51
- run_id INTEGER NOT NULL,
52
- object_id TEXT NOT NULL,
53
- FOREIGN KEY (object_id) REFERENCES objects(object_id) ON DELETE CASCADE,
54
- PRIMARY KEY (run_id, object_id)
55
- );
56
- """
57
-
58
-
59
- class SqliteObjectStore(ObjectStore, SqliteMixin):
60
- """SQLite-based implementation of the ObjectStore interface."""
33
+
34
+ class SqlObjectStore(ObjectStore, SqlMixin):
35
+ """SQLAlchemy-based implementation of the ObjectStore interface."""
61
36
 
62
37
  def __init__(self, database_path: str, verify: bool = True) -> None:
63
38
  super().__init__(database_path)
64
39
  self.verify = verify
65
40
 
66
- def get_sql_statements(self) -> tuple[str, ...]:
67
- """Return SQL statements for ObjectStore tables."""
68
- return (
69
- SQL_CREATE_OBJECTS,
70
- SQL_CREATE_OBJECT_CHILDREN,
71
- SQL_CREATE_RUN_OBJECTS,
72
- )
41
+ def get_metadata(self) -> MetaData:
42
+ """Return SQLAlchemy MetaData for ObjectStore tables."""
43
+ return create_objectstore_metadata()
73
44
 
74
45
  def preregister(self, run_id: int, object_tree: ObjectTree) -> list[str]:
75
46
  """Identify and preregister missing objects in the `ObjectStore`."""
@@ -80,56 +51,64 @@ class SqliteObjectStore(ObjectStore, SqliteMixin):
80
51
  raise ValueError(f"Invalid object ID format: {obj_id}")
81
52
 
82
53
  child_ids = [child.object_id for child in tree_node.children]
83
- with self.conn:
84
- row = self.conn.execute(
85
- "SELECT object_id, is_available FROM objects WHERE object_id=?",
86
- (obj_id,),
87
- ).fetchone()
88
- if row is None:
54
+ with self.session():
55
+ rows = self.query(
56
+ "SELECT object_id, is_available FROM objects "
57
+ "WHERE object_id = :object_id",
58
+ {"object_id": obj_id},
59
+ )
60
+ if not rows:
89
61
  # Insert new object
90
- self.conn.execute(
91
- "INSERT INTO objects"
62
+ self.query(
63
+ "INSERT INTO objects "
92
64
  "(object_id, content, is_available, ref_count) "
93
- "VALUES (?, ?, ?, ?)",
94
- (obj_id, b"", 0, 0),
65
+ "VALUES (:object_id, :content, :is_available, :ref_count)",
66
+ {
67
+ "object_id": obj_id,
68
+ "content": b"",
69
+ "is_available": 0,
70
+ "ref_count": 0,
71
+ },
95
72
  )
96
73
  for cid in child_ids:
97
- self.conn.execute(
98
- "INSERT INTO object_children(parent_id, child_id) "
99
- "VALUES (?, ?)",
100
- (obj_id, cid),
74
+ self.query(
75
+ "INSERT INTO object_children (parent_id, child_id) "
76
+ "VALUES (:parent_id, :child_id)",
77
+ {"parent_id": obj_id, "child_id": cid},
101
78
  )
102
- self.conn.execute(
79
+ self.query(
103
80
  "UPDATE objects SET ref_count = ref_count + 1 "
104
- "WHERE object_id = ?",
105
- (cid,),
81
+ "WHERE object_id = :object_id",
82
+ {"object_id": cid},
106
83
  )
107
84
  new_objects.append(obj_id)
108
85
  else:
109
86
  # Add to the list of new objects if not available
110
- if not row["is_available"]:
87
+ if not rows[0]["is_available"]:
111
88
  new_objects.append(obj_id)
112
89
 
113
90
  # Ensure run mapping
114
- self.conn.execute(
115
- "INSERT OR IGNORE INTO run_objects(run_id, object_id) "
116
- "VALUES (?, ?)",
117
- (uint64_to_int64(run_id), obj_id),
91
+ self.query(
92
+ "INSERT INTO run_objects (run_id, object_id) "
93
+ "VALUES (:run_id, :object_id) ON CONFLICT DO NOTHING",
94
+ {"run_id": uint64_to_int64(run_id), "object_id": obj_id},
118
95
  )
119
96
  return new_objects
120
97
 
121
98
  def get_object_tree(self, object_id: str) -> ObjectTree:
122
99
  """Get the object tree for a given object ID."""
123
- with self.conn:
124
- row = self.conn.execute(
125
- "SELECT object_id FROM objects WHERE object_id=?", (object_id,)
126
- ).fetchone()
127
- if not row:
100
+ with self.session():
101
+ rows = self.query(
102
+ "SELECT object_id FROM objects WHERE object_id = :object_id",
103
+ {"object_id": object_id},
104
+ )
105
+ if not rows:
128
106
  raise NoObjectInStoreError(
129
107
  f"Object {object_id} was not pre-registered."
130
108
  )
131
109
  children = self.query(
132
- "SELECT child_id FROM object_children WHERE parent_id=?", (object_id,)
110
+ "SELECT child_id FROM object_children WHERE parent_id = :parent_id",
111
+ {"parent_id": object_id},
133
112
  )
134
113
 
135
114
  # Build the object trees of all children
@@ -157,61 +136,71 @@ class SqliteObjectStore(ObjectStore, SqliteMixin):
157
136
  # Validate object content
158
137
  validate_object_content(content=object_content)
159
138
 
160
- with self.conn:
139
+ with self.session():
161
140
  # Only allow adding the object if it has been preregistered
162
- row = self.conn.execute(
163
- "SELECT is_available FROM objects WHERE object_id=?", (object_id,)
164
- ).fetchone()
165
- if row is None:
141
+ rows = self.query(
142
+ "SELECT is_available FROM objects WHERE object_id = :object_id",
143
+ {"object_id": object_id},
144
+ )
145
+ if not rows:
166
146
  raise NoObjectInStoreError(
167
147
  f"Object with ID '{object_id}' was not pre-registered."
168
148
  )
169
149
 
170
150
  # Return if object is already present in the store
171
- if row["is_available"]:
151
+ if rows[0]["is_available"]:
172
152
  return
173
153
 
174
154
  # Update the object entry in the store
175
- self.conn.execute(
176
- "UPDATE objects SET content=?, is_available=1 WHERE object_id=?",
177
- (object_content, object_id),
155
+ self.query(
156
+ "UPDATE objects SET content = :content, is_available = 1 "
157
+ "WHERE object_id = :object_id",
158
+ {"content": object_content, "object_id": object_id},
178
159
  )
179
160
 
180
161
  def get(self, object_id: str) -> bytes | None:
181
162
  """Get an object from the store."""
182
- rows = self.query("SELECT content FROM objects WHERE object_id=?", (object_id,))
163
+ rows = self.query(
164
+ "SELECT content FROM objects WHERE object_id = :oid", {"oid": object_id}
165
+ )
183
166
  return rows[0]["content"] if rows else None
184
167
 
185
168
  def delete(self, object_id: str) -> None:
186
169
  """Delete an object and its unreferenced descendants from the store."""
187
- with self.conn:
188
- row = self.conn.execute(
189
- "SELECT ref_count FROM objects WHERE object_id=?", (object_id,)
190
- ).fetchone()
170
+ with self.session():
171
+ rows = self.query(
172
+ "SELECT ref_count FROM objects WHERE object_id = :object_id",
173
+ {"object_id": object_id},
174
+ )
191
175
 
192
176
  # If the object is not in the store, nothing to delete
193
- if row is None:
177
+ if not rows:
194
178
  return
195
179
 
196
180
  # Skip deletion if there are still references
197
- if row["ref_count"] > 0:
181
+ if rows[0]["ref_count"] > 0:
198
182
  return
199
183
 
200
184
  # Deleting will cascade via FK, but we need to decrement children first
201
- children = self.conn.execute(
202
- "SELECT child_id FROM object_children WHERE parent_id=?", (object_id,)
203
- ).fetchall()
185
+ children = self.query(
186
+ "SELECT child_id FROM object_children WHERE parent_id = :parent_id",
187
+ {"parent_id": object_id},
188
+ )
204
189
  child_ids = [child["child_id"] for child in children]
205
190
 
206
191
  if child_ids:
207
- placeholders = ", ".join("?" for _ in child_ids)
208
- query = f"""
209
- UPDATE objects SET ref_count = ref_count - 1
210
- WHERE object_id IN ({placeholders})
211
- """
212
- self.conn.execute(query, child_ids)
192
+ placeholders = ", ".join(f":cid{i}" for i in range(len(child_ids)))
193
+ params = {f"cid{i}": cid for i, cid in enumerate(child_ids)}
194
+ self.query(
195
+ "UPDATE objects SET ref_count = ref_count - 1 "
196
+ f"WHERE object_id IN ({placeholders})",
197
+ params,
198
+ )
213
199
 
214
- self.conn.execute("DELETE FROM objects WHERE object_id=?", (object_id,))
200
+ self.query(
201
+ "DELETE FROM objects WHERE object_id = :object_id",
202
+ {"object_id": object_id},
203
+ )
215
204
 
216
205
  # Recursively clean children
217
206
  for child_id in child_ids:
@@ -220,34 +209,39 @@ class SqliteObjectStore(ObjectStore, SqliteMixin):
220
209
  def delete_objects_in_run(self, run_id: int) -> None:
221
210
  """Delete all objects that were registered in a specific run."""
222
211
  run_id_sint = uint64_to_int64(run_id)
223
- with self.conn:
224
- objs = self.conn.execute(
225
- "SELECT object_id FROM run_objects WHERE run_id=?", (run_id_sint,)
226
- ).fetchall()
212
+ with self.session():
213
+ objs = self.query(
214
+ "SELECT object_id FROM run_objects WHERE run_id = :run_id",
215
+ {"run_id": run_id_sint},
216
+ )
227
217
  for obj in objs:
228
218
  object_id = obj["object_id"]
229
- row = self.conn.execute(
230
- "SELECT ref_count FROM objects WHERE object_id=?", (object_id,)
231
- ).fetchone()
232
- if row and row["ref_count"] == 0:
219
+ rows = self.query(
220
+ "SELECT ref_count FROM objects WHERE object_id=:object_id",
221
+ {"object_id": object_id},
222
+ )
223
+ if rows and rows[0]["ref_count"] == 0:
233
224
  self.delete(object_id)
234
- self.conn.execute("DELETE FROM run_objects WHERE run_id=?", (run_id_sint,))
225
+ self.query(
226
+ "DELETE FROM run_objects WHERE run_id = :run_id",
227
+ {"run_id": run_id_sint},
228
+ )
235
229
 
236
230
  def clear(self) -> None:
237
231
  """Clear the store."""
238
- with self.conn:
239
- self.conn.execute("DELETE FROM object_children;")
240
- self.conn.execute("DELETE FROM run_objects;")
241
- self.conn.execute("DELETE FROM objects;")
232
+ with self.session():
233
+ self.query("DELETE FROM object_children")
234
+ self.query("DELETE FROM run_objects")
235
+ self.query("DELETE FROM objects")
242
236
 
243
237
  def __contains__(self, object_id: str) -> bool:
244
238
  """Check if an object_id is in the store."""
245
- row = self.conn.execute(
246
- "SELECT 1 FROM objects WHERE object_id=?", (object_id,)
247
- ).fetchone()
248
- return row is not None
239
+ rows = self.query(
240
+ "SELECT 1 FROM objects WHERE object_id = :oid", {"oid": object_id}
241
+ )
242
+ return len(rows) > 0
249
243
 
250
244
  def __len__(self) -> int:
251
245
  """Return the number of objects in the store."""
252
- row = self.conn.execute("SELECT COUNT(*) AS cnt FROM objects;").fetchone()
253
- return cast(int, row["cnt"])
246
+ rows = self.query("SELECT COUNT(*) AS cnt FROM objects")
247
+ return int(rows[0]["cnt"])
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.26.0.dev20260122"
7
+ version = "1.26.0.dev20260123"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -85,7 +85,7 @@ ray = [
85
85
  { version = "==2.51.1", optional = true, python = "==3.13", markers = "sys_platform != 'win32'" },
86
86
  ]
87
87
  # Optional dependencies (REST transport layer)
88
- starlette = { version = "^0.45.2", optional = true }
88
+ starlette = { version = "^0.47.2", optional = true }
89
89
  uvicorn = { version = "^0.34.0", extras = ["standard"], optional = true }
90
90
 
91
91
  [tool.poetry.extras]