flwr-nightly 1.18.0.dev20250418__tar.gz → 1.18.0.dev20250422__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 (331) hide show
  1. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/PKG-INFO +1 -1
  2. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/config_utils.py +19 -15
  3. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/login/login.py +11 -0
  4. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +4 -4
  5. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/utils.py +10 -11
  6. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/message.py +27 -10
  7. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/record/recorddict.py +107 -58
  8. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/pyproject.toml +1 -1
  9. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/README.md +0 -0
  10. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/__init__.py +0 -0
  11. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/__init__.py +0 -0
  12. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/app.py +0 -0
  13. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  14. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  15. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/build.py +0 -0
  16. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  17. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/constant.py +0 -0
  18. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/example.py +0 -0
  19. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/install.py +0 -0
  20. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/log.py +0 -0
  21. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/login/__init__.py +0 -0
  22. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/ls.py +0 -0
  23. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/__init__.py +0 -0
  24. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/new.py +0 -0
  25. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/__init__.py +0 -0
  26. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  27. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  28. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  29. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  30. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  31. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  32. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  33. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  34. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  35. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  36. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  37. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  38. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  39. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  40. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  41. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  42. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  43. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  44. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  45. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  46. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  47. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  48. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  49. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  50. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  51. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  52. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  53. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  54. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  55. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  56. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  57. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  58. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  59. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  60. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  61. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  62. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  63. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  64. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  65. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  66. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  67. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  68. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  69. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  70. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  71. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  72. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  73. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  74. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  75. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  76. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/run/__init__.py +0 -0
  77. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/run/run.py +0 -0
  78. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/cli/stop.py +0 -0
  79. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/__init__.py +0 -0
  80. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/app.py +0 -0
  81. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/client.py +0 -0
  82. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/client_app.py +0 -0
  83. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/clientapp/__init__.py +0 -0
  84. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/clientapp/app.py +0 -0
  85. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  86. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/clientapp/utils.py +0 -0
  87. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  88. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  89. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  90. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_client/__init__.py +0 -0
  91. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_client/connection.py +0 -0
  92. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  93. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  94. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  95. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  96. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/heartbeat.py +0 -0
  97. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/message_handler/__init__.py +0 -0
  98. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/message_handler/message_handler.py +0 -0
  99. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/__init__.py +0 -0
  100. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/centraldp_mods.py +0 -0
  101. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/comms_mods.py +0 -0
  102. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/localdp_mod.py +0 -0
  103. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  104. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  105. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  106. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/mod/utils.py +0 -0
  107. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/nodestate/__init__.py +0 -0
  108. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  109. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/nodestate/nodestate.py +0 -0
  110. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  111. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/numpy_client.py +0 -0
  112. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/rest_client/__init__.py +0 -0
  113. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/rest_client/connection.py +0 -0
  114. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/run_info_store.py +0 -0
  115. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/supernode/__init__.py +0 -0
  116. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/supernode/app.py +0 -0
  117. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/client/typing.py +0 -0
  118. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/__init__.py +0 -0
  119. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/address.py +0 -0
  120. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/args.py +0 -0
  121. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/auth_plugin/__init__.py +0 -0
  122. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  123. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/config.py +0 -0
  124. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/constant.py +0 -0
  125. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/context.py +0 -0
  126. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/date.py +0 -0
  127. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/differential_privacy.py +0 -0
  128. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/differential_privacy_constants.py +0 -0
  129. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/dp.py +0 -0
  130. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  131. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  132. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/exit/__init__.py +0 -0
  133. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/exit/exit.py +0 -0
  134. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/exit/exit_code.py +0 -0
  135. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/exit_handlers.py +0 -0
  136. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/grpc.py +0 -0
  137. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/logger.py +0 -0
  138. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/object_ref.py +0 -0
  139. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/parameter.py +0 -0
  140. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/pyproject.py +0 -0
  141. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/record/__init__.py +0 -0
  142. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/record/arrayrecord.py +0 -0
  143. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/record/configrecord.py +0 -0
  144. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/record/conversion_utils.py +0 -0
  145. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/record/metricrecord.py +0 -0
  146. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/record/typeddict.py +0 -0
  147. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/recorddict_compat.py +0 -0
  148. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/retry_invoker.py +0 -0
  149. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  150. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  151. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  152. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  153. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  154. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  155. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  156. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  157. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/serde.py +0 -0
  158. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/telemetry.py +0 -0
  159. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/typing.py +0 -0
  160. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/common/version.py +0 -0
  161. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/__init__.py +0 -0
  162. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/clientappio_pb2.py +0 -0
  163. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  164. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  165. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  166. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/error_pb2.py +0 -0
  167. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/error_pb2.pyi +0 -0
  168. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/error_pb2_grpc.py +0 -0
  169. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  170. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/exec_pb2.py +0 -0
  171. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/exec_pb2.pyi +0 -0
  172. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/exec_pb2_grpc.py +0 -0
  173. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  174. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fab_pb2.py +0 -0
  175. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fab_pb2.pyi +0 -0
  176. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  177. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  178. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fleet_pb2.py +0 -0
  179. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fleet_pb2.pyi +0 -0
  180. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  181. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  182. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  183. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  184. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  185. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  186. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/log_pb2.py +0 -0
  187. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/log_pb2.pyi +0 -0
  188. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/log_pb2_grpc.py +0 -0
  189. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  190. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/message_pb2.py +0 -0
  191. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/message_pb2.pyi +0 -0
  192. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/message_pb2_grpc.py +0 -0
  193. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  194. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/node_pb2.py +0 -0
  195. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/node_pb2.pyi +0 -0
  196. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/node_pb2_grpc.py +0 -0
  197. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  198. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/recorddict_pb2.py +0 -0
  199. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  200. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/run_pb2.py +0 -0
  203. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/run_pb2.pyi +0 -0
  204. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/run_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/serverappio_pb2.py +0 -0
  207. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  208. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/simulationio_pb2.py +0 -0
  211. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  212. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  213. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  214. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/transport_pb2.py +0 -0
  215. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/transport_pb2.pyi +0 -0
  216. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  217. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  218. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/py.typed +0 -0
  219. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/__init__.py +0 -0
  220. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/app.py +0 -0
  221. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/client_manager.py +0 -0
  222. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/client_proxy.py +0 -0
  223. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/compat/__init__.py +0 -0
  224. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/compat/app.py +0 -0
  225. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/compat/app_utils.py +0 -0
  226. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  227. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/compat/legacy_context.py +0 -0
  228. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/criterion.py +0 -0
  229. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  230. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/grid/__init__.py +0 -0
  231. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/grid/grid.py +0 -0
  232. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/grid/grpc_grid.py +0 -0
  233. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/grid/inmemory_grid.py +0 -0
  234. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/history.py +0 -0
  235. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/run_serverapp.py +0 -0
  236. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/server.py +0 -0
  237. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/server_app.py +0 -0
  238. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/server_config.py +0 -0
  239. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/serverapp/__init__.py +0 -0
  240. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/serverapp/app.py +0 -0
  241. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/serverapp_components.py +0 -0
  242. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/__init__.py +0 -0
  243. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/aggregate.py +0 -0
  244. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/bulyan.py +0 -0
  245. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  246. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  247. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  248. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  249. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  250. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedadagrad.py +0 -0
  251. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedadam.py +0 -0
  252. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedavg.py +0 -0
  253. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedavg_android.py +0 -0
  254. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedavgm.py +0 -0
  255. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedmedian.py +0 -0
  256. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedopt.py +0 -0
  257. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedprox.py +0 -0
  258. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  259. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  260. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  261. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  262. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/fedyogi.py +0 -0
  263. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/krum.py +0 -0
  264. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/qfedavg.py +0 -0
  265. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/strategy/strategy.py +0 -0
  266. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/__init__.py +0 -0
  267. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/ffs/__init__.py +0 -0
  268. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  269. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/ffs/ffs.py +0 -0
  270. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  271. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  272. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  273. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  274. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  275. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  276. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  277. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  278. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  279. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  280. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  281. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  282. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  283. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  284. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  285. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  286. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  287. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  288. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  289. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  290. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  291. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  292. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  293. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  294. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  295. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  296. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  297. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  298. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  299. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  300. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  301. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  302. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  303. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/superlink/utils.py +0 -0
  304. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/typing.py +0 -0
  305. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/utils/__init__.py +0 -0
  306. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/utils/tensorboard.py +0 -0
  307. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/utils/validator.py +0 -0
  308. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/workflow/__init__.py +0 -0
  309. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/workflow/constant.py +0 -0
  310. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/workflow/default_workflows.py +0 -0
  311. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  312. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  313. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  314. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/__init__.py +0 -0
  315. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/app.py +0 -0
  316. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/legacy_app.py +0 -0
  317. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  318. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  319. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  320. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/ray_transport/utils.py +0 -0
  321. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/run_simulation.py +0 -0
  322. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/simulation/simulationio_connection.py +0 -0
  323. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/__init__.py +0 -0
  324. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/app.py +0 -0
  325. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/deployment.py +0 -0
  326. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/exec_event_log_interceptor.py +0 -0
  327. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/exec_grpc.py +0 -0
  328. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/exec_servicer.py +0 -0
  329. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  330. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/executor.py +0 -0
  331. {flwr_nightly-1.18.0.dev20250418 → flwr_nightly-1.18.0.dev20250422}/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.18.0.dev20250418
3
+ Version: 1.18.0.dev20250422
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -197,21 +197,7 @@ def validate_certificate_in_federation_config(
197
197
  - `address` is provided and `insecure = true`. If `root-certificates` is
198
198
  set, exit with an error.
199
199
  """
200
- insecure_value = federation_config.get("insecure")
201
- # Determine the insecure flag
202
- if insecure_value is None:
203
- # Not provided, default to False (TLS enabled)
204
- insecure = False
205
- elif isinstance(insecure_value, bool):
206
- insecure = insecure_value
207
- else:
208
- typer.secho(
209
- "❌ Invalid type for `insecure`: expected a boolean if provided. "
210
- "(`insecure = true` or `insecure = false`)",
211
- fg=typer.colors.RED,
212
- bold=True,
213
- )
214
- raise typer.Exit(code=1)
200
+ insecure = get_insecure_flag(federation_config)
215
201
 
216
202
  # Process root certificates
217
203
  if root_certificates := federation_config.get("root-certificates"):
@@ -250,3 +236,21 @@ def exit_if_no_address(federation_config: dict[str, Any], cmd: str) -> None:
250
236
  bold=True,
251
237
  )
252
238
  raise typer.Exit(code=1)
239
+
240
+
241
+ def get_insecure_flag(federation_config: dict[str, Any]) -> bool:
242
+ """Extract and validate the `insecure` flag from the federation configuration."""
243
+ insecure_value = federation_config.get("insecure")
244
+
245
+ if insecure_value is None:
246
+ # Not provided, default to False (TLS enabled)
247
+ return False
248
+ if isinstance(insecure_value, bool):
249
+ return insecure_value
250
+ typer.secho(
251
+ "❌ Invalid type for `insecure`: expected a boolean if provided. "
252
+ "(`insecure = true` or `insecure = false`)",
253
+ fg=typer.colors.RED,
254
+ bold=True,
255
+ )
256
+ raise typer.Exit(code=1)
@@ -22,6 +22,7 @@ import typer
22
22
 
23
23
  from flwr.cli.config_utils import (
24
24
  exit_if_no_address,
25
+ get_insecure_flag,
25
26
  load_and_validate,
26
27
  process_loaded_project_config,
27
28
  validate_federation_in_project_config,
@@ -80,6 +81,16 @@ def login( # pylint: disable=R0914
80
81
  bold=True,
81
82
  )
82
83
  raise typer.Exit(code=1)
84
+ # Check if insecure flag is set to `True`
85
+ insecure = get_insecure_flag(federation_config)
86
+ if insecure:
87
+ typer.secho(
88
+ "❌ `flwr login` requires TLS to be enabled. `insecure` must NOT be set to "
89
+ "`true` in the federation configuration.",
90
+ fg=typer.colors.RED,
91
+ bold=True,
92
+ )
93
+ raise typer.Exit(code=1)
83
94
 
84
95
  channel = init_channel(app, federation_config, None)
85
96
  stub = ExecStub(channel)
@@ -49,7 +49,7 @@ class FlowerClient(NumPyClient):
49
49
  ): # pylint: disable=too-many-arguments
50
50
  self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
51
51
  self.train_cfg = train_cfg
52
- self.training_argumnets = TrainingArguments(**train_cfg.training_arguments)
52
+ self.training_arguments = TrainingArguments(**train_cfg.training_arguments)
53
53
  self.tokenizer = tokenizer
54
54
  self.formatting_prompts_func = formatting_prompts_func
55
55
  self.data_collator = data_collator
@@ -72,14 +72,14 @@ class FlowerClient(NumPyClient):
72
72
  self.train_cfg.learning_rate_min,
73
73
  )
74
74
 
75
- self.training_argumnets.learning_rate = new_lr
76
- self.training_argumnets.output_dir = config["save_path"]
75
+ self.training_arguments.learning_rate = new_lr
76
+ self.training_arguments.output_dir = config["save_path"]
77
77
 
78
78
  # Construct trainer
79
79
  trainer = SFTTrainer(
80
80
  model=self.model,
81
81
  tokenizer=self.tokenizer,
82
- args=self.training_argumnets,
82
+ args=self.training_arguments,
83
83
  max_seq_length=self.train_cfg.seq_length,
84
84
  train_dataset=self.trainset,
85
85
  formatting_func=self.formatting_prompts_func,
@@ -220,17 +220,6 @@ def try_obtain_cli_auth_plugin(
220
220
  if not federation_config.get("enable-user-auth", False):
221
221
  return None
222
222
 
223
- # Check if TLS is enabled. If not, raise an error
224
- if federation_config.get("root-certificates") is None:
225
- typer.secho(
226
- "❌ User authentication requires TLS to be enabled. "
227
- "Please provide 'root-certificates' in the federation"
228
- " configuration.",
229
- fg=typer.colors.RED,
230
- bold=True,
231
- )
232
- raise typer.Exit(code=1)
233
-
234
223
  config_path = get_user_auth_config_path(root_dir, federation)
235
224
 
236
225
  # Get the auth type from the config if not provided
@@ -273,6 +262,16 @@ def init_channel(
273
262
  # Initialize the CLI-side user auth interceptor
274
263
  interceptors: list[grpc.UnaryUnaryClientInterceptor] = []
275
264
  if auth_plugin is not None:
265
+ # Check if TLS is enabled. If not, raise an error
266
+ if insecure:
267
+ typer.secho(
268
+ "❌ User authentication requires TLS to be enabled. "
269
+ "Remove `insecure = true` from the federation configuration.",
270
+ fg=typer.colors.RED,
271
+ bold=True,
272
+ )
273
+ raise typer.Exit(code=1)
274
+
276
275
  auth_plugin.load_tokens()
277
276
  interceptors.append(CliUserAuthInterceptor(auth_plugin))
278
277
 
@@ -36,6 +36,19 @@ MESSAGE_INIT_ERROR_MESSAGE = (
36
36
  )
37
37
 
38
38
 
39
+ class _WarningTracker:
40
+ """A class to track warnings for deprecated properties."""
41
+
42
+ def __init__(self) -> None:
43
+ # These variables are used to ensure that the deprecation warnings
44
+ # for the deprecated properties/class are logged only once.
45
+ self.create_error_reply_logged = False
46
+ self.create_reply_logged = False
47
+
48
+
49
+ _warning_tracker = _WarningTracker()
50
+
51
+
39
52
  class MessageInitializationError(TypeError):
40
53
  """Error raised when initializing a message with invalid arguments."""
41
54
 
@@ -456,11 +469,13 @@ class Message:
456
469
  message : Message
457
470
  A Message containing only the relevant error and metadata.
458
471
  """
459
- warn_deprecated_feature(
460
- "`Message.create_error_reply` is deprecated. "
461
- "Instead of calling `some_message.create_error_reply(some_error, ttl=...)`"
462
- ", use `Message(some_error, reply_to=some_message, ttl=...)`."
463
- )
472
+ if not _warning_tracker.create_error_reply_logged:
473
+ _warning_tracker.create_error_reply_logged = True
474
+ warn_deprecated_feature(
475
+ "`Message.create_error_reply` is deprecated. "
476
+ "Instead of calling `some_message.create_error_reply(some_error, "
477
+ "ttl=...)`, use `Message(some_error, reply_to=some_message, ttl=...)`."
478
+ )
464
479
  if ttl is not None:
465
480
  return Message(error, reply_to=self, ttl=ttl)
466
481
  return Message(error, reply_to=self)
@@ -488,11 +503,13 @@ class Message:
488
503
  Message
489
504
  A new `Message` instance representing the reply.
490
505
  """
491
- warn_deprecated_feature(
492
- "`Message.create_reply` is deprecated. "
493
- "Instead of calling `some_message.create_reply(some_content, ttl=...)`"
494
- ", use `Message(some_content, reply_to=some_message, ttl=...)`."
495
- )
506
+ if not _warning_tracker.create_reply_logged:
507
+ _warning_tracker.create_reply_logged = True
508
+ warn_deprecated_feature(
509
+ "`Message.create_reply` is deprecated. "
510
+ "Instead of calling `some_message.create_reply(some_content, ttl=...)`"
511
+ ", use `Message(some_content, reply_to=some_message, ttl=...)`."
512
+ )
496
513
  if ttl is not None:
497
514
  return Message(content, reply_to=self, ttl=ttl)
498
515
  return Message(content, reply_to=self)
@@ -29,6 +29,22 @@ from .typeddict import TypedDict
29
29
 
30
30
  RecordType = Union[ArrayRecord, MetricRecord, ConfigRecord]
31
31
 
32
+
33
+ class _WarningTracker:
34
+ """A class to track warnings for deprecated properties."""
35
+
36
+ def __init__(self) -> None:
37
+ # These variables are used to ensure that the deprecation warnings
38
+ # for the deprecated properties/class are logged only once.
39
+ self.recordset_init_logged = False
40
+ self.recorddict_init_logged = False
41
+ self.parameters_records_logged = False
42
+ self.metrics_records_logged = False
43
+ self.configs_records_logged = False
44
+
45
+
46
+ _warning_tracker = _WarningTracker()
47
+
32
48
  T = TypeVar("T")
33
49
 
34
50
 
@@ -143,8 +159,34 @@ class RecordDict(TypedDict[str, RecordType]):
143
159
  :code:`MetricRecord` and :code:`ArrayRecord`.
144
160
  """
145
161
 
146
- def __init__(self, records: dict[str, RecordType] | None = None) -> None:
162
+ def __init__(
163
+ self,
164
+ records: dict[str, RecordType] | None = None,
165
+ *,
166
+ parameters_records: dict[str, ArrayRecord] | None = None,
167
+ metrics_records: dict[str, MetricRecord] | None = None,
168
+ configs_records: dict[str, ConfigRecord] | None = None,
169
+ ) -> None:
147
170
  super().__init__(_check_key, _check_value)
171
+
172
+ # Warning for deprecated usage
173
+ if (
174
+ parameters_records is not None
175
+ or metrics_records is not None
176
+ or configs_records is not None
177
+ ):
178
+ log(
179
+ WARN,
180
+ "The arguments `parameters_records`, `metrics_records`, and "
181
+ "`configs_records` of `RecordDict` are deprecated and will "
182
+ "be removed in a future release. "
183
+ "Please pass all records using the `records` argument instead.",
184
+ )
185
+ records = records or {}
186
+ records.update(parameters_records or {})
187
+ records.update(metrics_records or {})
188
+ records.update(configs_records or {})
189
+
148
190
  if records is not None:
149
191
  for key, record in records.items():
150
192
  self[key] = record
@@ -196,6 +238,54 @@ class RecordDict(TypedDict[str, RecordType]):
196
238
  type(value).__name__,
197
239
  )
198
240
 
241
+ @property
242
+ def parameters_records(self) -> TypedDict[str, ArrayRecord]:
243
+ """Deprecated property.
244
+
245
+ Use ``array_records`` instead.
246
+ """
247
+ if _warning_tracker.parameters_records_logged:
248
+ _warning_tracker.parameters_records_logged = True
249
+ log(
250
+ WARN,
251
+ "The `parameters_records` property of `RecordDict` "
252
+ "(formerly `RecordSet`) is deprecated and will be removed in a "
253
+ "future release. Please use the `array_records` property instead.",
254
+ )
255
+ return self.array_records
256
+
257
+ @property
258
+ def metrics_records(self) -> TypedDict[str, MetricRecord]:
259
+ """Deprecated property.
260
+
261
+ Use ``metric_records`` instead.
262
+ """
263
+ if not _warning_tracker.metrics_records_logged:
264
+ _warning_tracker.metrics_records_logged = True
265
+ log(
266
+ WARN,
267
+ "The `metrics_records` property of `RecordDict` "
268
+ "(formerly `RecordSet`) is deprecated and will be removed in a "
269
+ "future release. Please use the `metric_records` property instead.",
270
+ )
271
+ return self.metric_records
272
+
273
+ @property
274
+ def configs_records(self) -> TypedDict[str, ConfigRecord]:
275
+ """Deprecated property.
276
+
277
+ Use ``config_records`` instead.
278
+ """
279
+ if not _warning_tracker.configs_records_logged:
280
+ _warning_tracker.configs_records_logged = True
281
+ log(
282
+ WARN,
283
+ "The `configs_records` property of `RecordDict` "
284
+ "(formerly `RecordSet`) is deprecated and will be removed in a "
285
+ "future release. Please use the `config_records` property instead.",
286
+ )
287
+ return self.config_records
288
+
199
289
 
200
290
  class RecordSet(RecordDict):
201
291
  """Deprecated class ``RecordSet``, use ``RecordDict`` instead.
@@ -223,66 +313,25 @@ class RecordSet(RecordDict):
223
313
  my_content = RecordDict()
224
314
  """
225
315
 
226
- _warning_logged = False
227
- _warning_logged_params = False
228
- _warning_logged_metrics = False
229
- _warning_logged_configs = False
230
-
231
- def __init__(self, records: dict[str, RecordType] | None = None) -> None:
232
- if not RecordSet._warning_logged:
233
- RecordSet._warning_logged = True
316
+ def __init__(
317
+ self,
318
+ records: dict[str, RecordType] | None = None,
319
+ *,
320
+ parameters_records: dict[str, ArrayRecord] | None = None,
321
+ metrics_records: dict[str, MetricRecord] | None = None,
322
+ configs_records: dict[str, ConfigRecord] | None = None,
323
+ ) -> None:
324
+ if not _warning_tracker.recordset_init_logged:
325
+ _warning_tracker.recordset_init_logged = True
234
326
  log(
235
327
  WARN,
236
328
  "The `RecordSet` class has been renamed to `RecordDict`. "
237
329
  "Support for `RecordSet` will be removed in a future release. "
238
330
  "Please update your code accordingly.",
239
331
  )
240
- super().__init__(records)
241
-
242
- @property
243
- def parameters_records(self) -> TypedDict[str, ArrayRecord]:
244
- """Deprecated property.
245
-
246
- Use ``array_records`` instead.
247
- """
248
- if not RecordSet._warning_logged_params:
249
- RecordSet._warning_logged_params = True
250
- log(
251
- WARN,
252
- "`RecordSet.parameters_records` has been deprecated "
253
- "and will be removed in a future release. Please use "
254
- "`RecordDict.array_records` instead.",
255
- )
256
- return self.array_records
257
-
258
- @property
259
- def metrics_records(self) -> TypedDict[str, MetricRecord]:
260
- """Deprecated property.
261
-
262
- Use ``metric_records`` instead.
263
- """
264
- if not RecordSet._warning_logged_metrics:
265
- RecordSet._warning_logged_metrics = True
266
- log(
267
- WARN,
268
- "`RecordSet.metrics_records` has been deprecated "
269
- "and will be removed in a future release. Please use "
270
- "`RecordDict.metric_records` instead.",
271
- )
272
- return self.metric_records
273
-
274
- @property
275
- def configs_records(self) -> TypedDict[str, ConfigRecord]:
276
- """Deprecated property.
277
-
278
- Use ``config_records`` instead.
279
- """
280
- if not RecordSet._warning_logged_configs:
281
- RecordSet._warning_logged_configs = True
282
- log(
283
- WARN,
284
- "`RecordSet.configs_records` has been deprecated "
285
- "and will be removed in a future release. Please use "
286
- "`RecordDict.config_records` instead.",
287
- )
288
- return self.config_records
332
+ super().__init__(
333
+ records,
334
+ parameters_records=parameters_records,
335
+ metrics_records=metrics_records,
336
+ configs_records=configs_records,
337
+ )
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.18.0.dev20250418"
7
+ version = "1.18.0.dev20250422"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]