flwr-nightly 1.14.0.dev20241216__tar.gz → 1.14.0.dev20241217__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.

Potentially problematic release.


This version of flwr-nightly might be problematic. Click here for more details.

Files changed (327) hide show
  1. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/PKG-INFO +1 -1
  2. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/pyproject.toml +1 -1
  3. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/log.py +8 -6
  4. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/ls.py +7 -4
  5. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/run/run.py +7 -2
  6. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/stop.py +3 -2
  7. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/utils.py +23 -0
  8. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/client.py +0 -32
  9. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/message_handler/message_handler.py +0 -2
  10. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/numpy_client.py +0 -44
  11. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/driver/serverappio_servicer.py +9 -0
  12. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -2
  13. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/simulation/simulationio_servicer.py +13 -0
  14. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/app.py +3 -2
  15. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/run_simulation.py +27 -6
  16. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/LICENSE +0 -0
  17. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/README.md +0 -0
  18. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/__init__.py +0 -0
  19. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/__init__.py +0 -0
  20. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/app.py +0 -0
  21. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/build.py +0 -0
  22. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  23. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/config_utils.py +0 -0
  24. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/example.py +0 -0
  25. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/install.py +0 -0
  26. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/login/__init__.py +0 -0
  27. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/login/login.py +0 -0
  28. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/__init__.py +0 -0
  29. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/new.py +0 -0
  30. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  31. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  32. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  33. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  34. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  35. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  36. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  37. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  38. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  39. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  40. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  41. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  42. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  43. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  44. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  45. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  46. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  47. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  48. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  49. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  50. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  51. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  52. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  53. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  54. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  55. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  56. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  57. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  58. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  59. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  60. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  61. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  62. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  63. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  64. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  65. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  66. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  67. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  68. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  69. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  70. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  71. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  72. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  73. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  74. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  75. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  76. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  77. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  78. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  79. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  80. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  81. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  82. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/cli/run/__init__.py +0 -0
  83. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/__init__.py +0 -0
  84. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/app.py +0 -0
  85. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/client_app.py +0 -0
  86. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/__init__.py +0 -0
  87. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/app.py +0 -0
  88. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/clientappio_servicer.py +0 -0
  89. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/clientapp/utils.py +0 -0
  90. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  91. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  92. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  93. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  94. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_client/connection.py +0 -0
  95. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  96. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  97. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  98. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  99. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/heartbeat.py +0 -0
  100. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/message_handler/__init__.py +0 -0
  101. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  102. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/__init__.py +0 -0
  103. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  104. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/comms_mods.py +0 -0
  105. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  106. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  107. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  108. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  109. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/mod/utils.py +0 -0
  110. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/__init__.py +0 -0
  111. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/in_memory_nodestate.py +0 -0
  112. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/nodestate.py +0 -0
  113. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/nodestate/nodestate_factory.py +0 -0
  114. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/rest_client/__init__.py +0 -0
  115. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/rest_client/connection.py +0 -0
  116. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/run_info_store.py +0 -0
  117. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/supernode/__init__.py +0 -0
  118. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/supernode/app.py +0 -0
  119. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/client/typing.py +0 -0
  120. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/__init__.py +0 -0
  121. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/address.py +0 -0
  122. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/args.py +0 -0
  123. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/auth_plugin/__init__.py +0 -0
  124. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  125. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/config.py +0 -0
  126. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/constant.py +0 -0
  127. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/context.py +0 -0
  128. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/date.py +0 -0
  129. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/differential_privacy.py +0 -0
  130. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  131. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/dp.py +0 -0
  132. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/exit_handlers.py +0 -0
  133. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/grpc.py +0 -0
  134. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/logger.py +0 -0
  135. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/message.py +0 -0
  136. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/object_ref.py +0 -0
  137. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/parameter.py +0 -0
  138. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/pyproject.py +0 -0
  139. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/__init__.py +0 -0
  140. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/configsrecord.py +0 -0
  141. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/conversion_utils.py +0 -0
  142. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/metricsrecord.py +0 -0
  143. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/parametersrecord.py +0 -0
  144. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/recordset.py +0 -0
  145. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/record/typeddict.py +0 -0
  146. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/recordset_compat.py +0 -0
  147. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/retry_invoker.py +0 -0
  148. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  149. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  150. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  151. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  152. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  153. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  154. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  155. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  156. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/serde.py +0 -0
  157. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/telemetry.py +0 -0
  158. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/typing.py +0 -0
  159. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/common/version.py +0 -0
  160. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/__init__.py +0 -0
  161. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  162. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  163. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  164. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  165. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2.py +0 -0
  166. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2.pyi +0 -0
  167. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  168. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  169. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2.py +0 -0
  170. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2.pyi +0 -0
  171. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  172. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  173. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2.py +0 -0
  174. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  175. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  176. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  177. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2.py +0 -0
  178. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  179. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  180. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  181. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  182. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  183. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  184. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  185. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2.py +0 -0
  186. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2.pyi +0 -0
  187. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2_grpc.py +0 -0
  188. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  189. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2.py +0 -0
  190. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2.pyi +0 -0
  191. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  192. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  193. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2.py +0 -0
  194. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2.pyi +0 -0
  195. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  196. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  197. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2.py +0 -0
  198. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  199. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  200. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  201. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2.py +0 -0
  202. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2.pyi +0 -0
  203. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  204. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  205. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2.py +0 -0
  206. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2.pyi +0 -0
  207. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  208. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  209. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2.py +0 -0
  210. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2.pyi +0 -0
  211. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  212. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  213. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2.py +0 -0
  214. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2.pyi +0 -0
  215. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  216. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  217. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2.py +0 -0
  218. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  219. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  220. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  221. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/py.typed +0 -0
  222. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/__init__.py +0 -0
  223. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/app.py +0 -0
  224. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/client_manager.py +0 -0
  225. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/client_proxy.py +0 -0
  226. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/__init__.py +0 -0
  227. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/app.py +0 -0
  228. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/app_utils.py +0 -0
  229. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  230. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/compat/legacy_context.py +0 -0
  231. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/criterion.py +0 -0
  232. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/__init__.py +0 -0
  233. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/driver.py +0 -0
  234. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/grpc_driver.py +0 -0
  235. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  236. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/history.py +0 -0
  237. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/run_serverapp.py +0 -0
  238. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/server.py +0 -0
  239. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/server_app.py +0 -0
  240. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/server_config.py +0 -0
  241. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/serverapp/__init__.py +0 -0
  242. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/serverapp/app.py +0 -0
  243. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/serverapp_components.py +0 -0
  244. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/__init__.py +0 -0
  245. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/aggregate.py +0 -0
  246. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/bulyan.py +0 -0
  247. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  248. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  249. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  250. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  251. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  252. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  253. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedadam.py +0 -0
  254. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedavg.py +0 -0
  255. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  256. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  257. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  258. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedopt.py +0 -0
  259. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedprox.py +0 -0
  260. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  261. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  262. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  263. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  264. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  265. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/krum.py +0 -0
  266. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  267. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/strategy/strategy.py +0 -0
  268. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/__init__.py +0 -0
  269. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  270. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/driver/serverappio_grpc.py +0 -0
  271. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  272. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  273. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  274. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/ffs/ffs_factory.py +0 -0
  275. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  276. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  277. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  278. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  279. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  280. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  281. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  282. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  283. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  284. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  285. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  286. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  287. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  288. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  289. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  290. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  291. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  292. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  293. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  294. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  295. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  296. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  297. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  298. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  299. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/linkstate/utils.py +0 -0
  300. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/simulation/__init__.py +0 -0
  301. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  302. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/superlink/utils.py +0 -0
  303. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/typing.py +0 -0
  304. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/utils/__init__.py +0 -0
  305. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/utils/tensorboard.py +0 -0
  306. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/utils/validator.py +0 -0
  307. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/__init__.py +0 -0
  308. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/constant.py +0 -0
  309. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  310. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  311. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  312. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  313. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/__init__.py +0 -0
  314. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/legacy_app.py +0 -0
  315. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  316. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  317. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  318. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  319. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/simulation/simulationio_connection.py +0 -0
  320. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/__init__.py +0 -0
  321. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/app.py +0 -0
  322. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/deployment.py +0 -0
  323. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/exec_grpc.py +0 -0
  324. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/exec_servicer.py +0 -0
  325. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/exec_user_auth_interceptor.py +0 -0
  326. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/py/flwr/superexec/executor.py +0 -0
  327. {flwr_nightly-1.14.0.dev20241216 → flwr_nightly-1.14.0.dev20241217}/src/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.14.0.dev20241216
3
+ Version: 1.14.0.dev20241217
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.14.0.dev20241216"
7
+ version = "1.14.0.dev20241217"
8
8
  description = "Flower: A Friendly Federated AI Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -34,7 +34,7 @@ from flwr.common.logger import log as logger
34
34
  from flwr.proto.exec_pb2 import StreamLogsRequest # pylint: disable=E0611
35
35
  from flwr.proto.exec_pb2_grpc import ExecStub
36
36
 
37
- from .utils import init_channel, try_obtain_cli_auth_plugin
37
+ from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
38
38
 
39
39
 
40
40
  def start_stream(
@@ -88,8 +88,9 @@ def stream_logs(
88
88
  latest_timestamp = 0.0
89
89
  res = None
90
90
  try:
91
- for res in stub.StreamLogs(req, timeout=duration):
92
- print(res.log_output, end="")
91
+ with unauthenticated_exc_handler():
92
+ for res in stub.StreamLogs(req, timeout=duration):
93
+ print(res.log_output, end="")
93
94
  except grpc.RpcError as e:
94
95
  # pylint: disable=E1101
95
96
  if e.code() != grpc.StatusCode.DEADLINE_EXCEEDED:
@@ -109,9 +110,10 @@ def print_logs(run_id: int, channel: grpc.Channel, timeout: int) -> None:
109
110
  try:
110
111
  while True:
111
112
  try:
112
- # Enforce timeout for graceful exit
113
- for res in stub.StreamLogs(req, timeout=timeout):
114
- print(res.log_output)
113
+ with unauthenticated_exc_handler():
114
+ # Enforce timeout for graceful exit
115
+ for res in stub.StreamLogs(req, timeout=timeout):
116
+ print(res.log_output)
115
117
  except grpc.RpcError as e:
116
118
  # pylint: disable=E1101
117
119
  if e.code() == grpc.StatusCode.DEADLINE_EXCEEDED:
@@ -43,7 +43,7 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
43
43
  )
44
44
  from flwr.proto.exec_pb2_grpc import ExecStub
45
45
 
46
- from .utils import init_channel, try_obtain_cli_auth_plugin
46
+ from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
47
47
 
48
48
  _RunListType = tuple[int, str, str, str, str, str, str, str, str]
49
49
 
@@ -99,7 +99,6 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
99
99
  try:
100
100
  if suppress_output:
101
101
  redirect_output(captured_output)
102
-
103
102
  # Load and validate federation config
104
103
  typer.secho("Loading project configuration... ", fg=typer.colors.BLUE)
105
104
 
@@ -132,6 +131,8 @@ def ls( # pylint: disable=too-many-locals, too-many-branches
132
131
  _list_runs(stub, output_format)
133
132
 
134
133
  except ValueError as err:
134
+ if suppress_output:
135
+ redirect_output(captured_output)
135
136
  typer.secho(
136
137
  f"❌ {err}",
137
138
  fg=typer.colors.RED,
@@ -295,7 +296,8 @@ def _list_runs(
295
296
  output_format: str = CliOutputFormat.DEFAULT,
296
297
  ) -> None:
297
298
  """List all runs."""
298
- res: ListRunsResponse = stub.ListRuns(ListRunsRequest())
299
+ with unauthenticated_exc_handler():
300
+ res: ListRunsResponse = stub.ListRuns(ListRunsRequest())
299
301
  run_dict = {run_id: run_from_proto(proto) for run_id, proto in res.run_dict.items()}
300
302
 
301
303
  formatted_runs = _format_runs(run_dict, res.now)
@@ -311,7 +313,8 @@ def _display_one_run(
311
313
  output_format: str = CliOutputFormat.DEFAULT,
312
314
  ) -> None:
313
315
  """Display information about a specific run."""
314
- res: ListRunsResponse = stub.ListRuns(ListRunsRequest(run_id=run_id))
316
+ with unauthenticated_exc_handler():
317
+ res: ListRunsResponse = stub.ListRuns(ListRunsRequest(run_id=run_id))
315
318
  if not res.run_dict:
316
319
  raise ValueError(f"Run ID {run_id} not found")
317
320
 
@@ -48,7 +48,11 @@ from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
48
48
  from flwr.proto.exec_pb2_grpc import ExecStub
49
49
 
50
50
  from ..log import start_stream
51
- from ..utils import init_channel, try_obtain_cli_auth_plugin
51
+ from ..utils import (
52
+ init_channel,
53
+ try_obtain_cli_auth_plugin,
54
+ unauthenticated_exc_handler,
55
+ )
52
56
 
53
57
  CONN_REFRESH_PERIOD = 60 # Connection refresh period for log streaming (seconds)
54
58
 
@@ -166,7 +170,8 @@ def _run_with_exec_api(
166
170
  override_config=user_config_to_proto(parse_config_args(config_overrides)),
167
171
  federation_options=configs_record_to_proto(c_record),
168
172
  )
169
- res = stub.StartRun(req)
173
+ with unauthenticated_exc_handler():
174
+ res = stub.StartRun(req)
170
175
 
171
176
  if res.HasField("run_id"):
172
177
  typer.secho(f"🎊 Successfully started run {res.run_id}", fg=typer.colors.GREEN)
@@ -34,7 +34,7 @@ from flwr.common.logger import print_json_error, redirect_output, restore_output
34
34
  from flwr.proto.exec_pb2 import StopRunRequest, StopRunResponse # pylint: disable=E0611
35
35
  from flwr.proto.exec_pb2_grpc import ExecStub
36
36
 
37
- from .utils import init_channel, try_obtain_cli_auth_plugin
37
+ from .utils import init_channel, try_obtain_cli_auth_plugin, unauthenticated_exc_handler
38
38
 
39
39
 
40
40
  def stop( # pylint: disable=R0914
@@ -113,7 +113,8 @@ def stop( # pylint: disable=R0914
113
113
 
114
114
  def _stop_run(stub: ExecStub, run_id: int, output_format: str) -> None:
115
115
  """Stop a run."""
116
- response: StopRunResponse = stub.StopRun(request=StopRunRequest(run_id=run_id))
116
+ with unauthenticated_exc_handler():
117
+ response: StopRunResponse = stub.StopRun(request=StopRunRequest(run_id=run_id))
117
118
  if response.success:
118
119
  typer.secho(f"✅ Run {run_id} successfully stopped.", fg=typer.colors.GREEN)
119
120
  if output_format == CliOutputFormat.JSON:
@@ -18,6 +18,8 @@
18
18
  import hashlib
19
19
  import json
20
20
  import re
21
+ from collections.abc import Iterator
22
+ from contextlib import contextmanager
21
23
  from logging import DEBUG
22
24
  from pathlib import Path
23
25
  from typing import Any, Callable, Optional, cast
@@ -231,3 +233,24 @@ def init_channel(
231
233
  )
232
234
  channel.subscribe(on_channel_state_change)
233
235
  return channel
236
+
237
+
238
+ @contextmanager
239
+ def unauthenticated_exc_handler() -> Iterator[None]:
240
+ """Context manager to handle gRPC UNAUTHENTICATED errors.
241
+
242
+ It catches grpc.RpcError exceptions with UNAUTHENTICATED status, informs the user,
243
+ and exits the application. All other exceptions will be allowed to escape.
244
+ """
245
+ try:
246
+ yield
247
+ except grpc.RpcError as e:
248
+ if e.code() != grpc.StatusCode.UNAUTHENTICATED:
249
+ raise
250
+ typer.secho(
251
+ "❌ Authentication failed. Please run `flwr login`"
252
+ " to authenticate and try again.",
253
+ fg=typer.colors.RED,
254
+ bold=True,
255
+ )
256
+ raise typer.Exit(code=1) from None
@@ -22,7 +22,6 @@ from abc import ABC
22
22
 
23
23
  from flwr.common import (
24
24
  Code,
25
- Context,
26
25
  EvaluateIns,
27
26
  EvaluateRes,
28
27
  FitIns,
@@ -34,14 +33,11 @@ from flwr.common import (
34
33
  Parameters,
35
34
  Status,
36
35
  )
37
- from flwr.common.logger import warn_deprecated_feature_with_example
38
36
 
39
37
 
40
38
  class Client(ABC):
41
39
  """Abstract base class for Flower clients."""
42
40
 
43
- _context: Context
44
-
45
41
  def get_properties(self, ins: GetPropertiesIns) -> GetPropertiesRes:
46
42
  """Return set of client's properties.
47
43
 
@@ -143,34 +139,6 @@ class Client(ABC):
143
139
  metrics={},
144
140
  )
145
141
 
146
- @property
147
- def context(self) -> Context:
148
- """Getter for `Context` client attribute."""
149
- warn_deprecated_feature_with_example(
150
- "Accessing the context via the client's attribute is deprecated.",
151
- example_message="Instead, pass it to the client's "
152
- "constructor in your `client_fn()` which already "
153
- "receives a context object.",
154
- code_example="def client_fn(context: Context) -> Client:\n\n"
155
- "\t\t# Your existing client_fn\n\n"
156
- "\t\t# Pass `context` to the constructor\n"
157
- "\t\treturn FlowerClient(context).to_client()",
158
- )
159
- return self._context
160
-
161
- @context.setter
162
- def context(self, context: Context) -> None:
163
- """Setter for `Context` client attribute."""
164
- self._context = context
165
-
166
- def get_context(self) -> Context:
167
- """Get the run context from this client."""
168
- return self.context
169
-
170
- def set_context(self, context: Context) -> None:
171
- """Apply a run context to this client."""
172
- self.context = context
173
-
174
142
  def to_client(self) -> Client:
175
143
  """Return client (itself)."""
176
144
  return self
@@ -105,8 +105,6 @@ def handle_legacy_message_from_msgtype(
105
105
  "Please use `NumPyClient.to_client()` method to convert it to `Client`.",
106
106
  )
107
107
 
108
- client.set_context(context)
109
-
110
108
  message_type = message.metadata.message_type
111
109
 
112
110
  # Handle GetPropertiesIns
@@ -21,13 +21,11 @@ from typing import Callable
21
21
  from flwr.client.client import Client
22
22
  from flwr.common import (
23
23
  Config,
24
- Context,
25
24
  NDArrays,
26
25
  Scalar,
27
26
  ndarrays_to_parameters,
28
27
  parameters_to_ndarrays,
29
28
  )
30
- from flwr.common.logger import warn_deprecated_feature_with_example
31
29
  from flwr.common.typing import (
32
30
  Code,
33
31
  EvaluateIns,
@@ -71,8 +69,6 @@ Example
71
69
  class NumPyClient(ABC):
72
70
  """Abstract base class for Flower clients using NumPy."""
73
71
 
74
- _context: Context
75
-
76
72
  def get_properties(self, config: Config) -> dict[str, Scalar]:
77
73
  """Return a client's set of properties.
78
74
 
@@ -175,34 +171,6 @@ class NumPyClient(ABC):
175
171
  _ = (self, parameters, config)
176
172
  return 0.0, 0, {}
177
173
 
178
- @property
179
- def context(self) -> Context:
180
- """Getter for `Context` client attribute."""
181
- warn_deprecated_feature_with_example(
182
- "Accessing the context via the client's attribute is deprecated.",
183
- example_message="Instead, pass it to the client's "
184
- "constructor in your `client_fn()` which already "
185
- "receives a context object.",
186
- code_example="def client_fn(context: Context) -> Client:\n\n"
187
- "\t\t# Your existing client_fn\n\n"
188
- "\t\t# Pass `context` to the constructor\n"
189
- "\t\treturn FlowerClient(context).to_client()",
190
- )
191
- return self._context
192
-
193
- @context.setter
194
- def context(self, context: Context) -> None:
195
- """Setter for `Context` client attribute."""
196
- self._context = context
197
-
198
- def get_context(self) -> Context:
199
- """Get the run context from this client."""
200
- return self.context
201
-
202
- def set_context(self, context: Context) -> None:
203
- """Apply a run context to this client."""
204
- self.context = context
205
-
206
174
  def to_client(self) -> Client:
207
175
  """Convert to object to Client type and return it."""
208
176
  return _wrap_numpy_client(client=self)
@@ -299,21 +267,9 @@ def _evaluate(self: Client, ins: EvaluateIns) -> EvaluateRes:
299
267
  )
300
268
 
301
269
 
302
- def _get_context(self: Client) -> Context:
303
- """Return context of underlying NumPyClient."""
304
- return self.numpy_client.get_context() # type: ignore
305
-
306
-
307
- def _set_context(self: Client, context: Context) -> None:
308
- """Apply context to underlying NumPyClient."""
309
- self.numpy_client.set_context(context) # type: ignore
310
-
311
-
312
270
  def _wrap_numpy_client(client: NumPyClient) -> Client:
313
271
  member_dict: dict[str, Callable] = { # type: ignore
314
272
  "__init__": _constructor,
315
- "get_context": _get_context,
316
- "set_context": _set_context,
317
273
  }
318
274
 
319
275
  # Add wrapper type methods (if overridden)
@@ -159,6 +159,9 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
159
159
  for task_ins in request.task_ins_list:
160
160
  validation_errors = validate_task_ins_or_res(task_ins)
161
161
  _raise_if(bool(validation_errors), ", ".join(validation_errors))
162
+ _raise_if(
163
+ request.run_id != task_ins.run_id, "`task_ins` has mismatched `run_id`"
164
+ )
162
165
 
163
166
  # Store each TaskIns
164
167
  task_ids: list[Optional[UUID]] = []
@@ -193,6 +196,12 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
193
196
  # Read from state
194
197
  task_res_list: list[TaskRes] = state.get_task_res(task_ids=task_ids)
195
198
 
199
+ # Validate request
200
+ for task_res in task_res_list:
201
+ _raise_if(
202
+ request.run_id != task_res.run_id, "`task_res` has mismatched `run_id`"
203
+ )
204
+
196
205
  # Delete the TaskIns/TaskRes pairs if TaskRes is found
197
206
  task_ins_ids_to_delete = {
198
207
  UUID(task_res.task.ancestry[0]) for task_res in task_res_list
@@ -761,8 +761,6 @@ class SqliteLinkState(LinkState): # pylint: disable=R0904
761
761
  "federation_options, pending_at, starting_at, running_at, finished_at, "
762
762
  "sub_status, details) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
763
763
  )
764
- if fab_hash:
765
- fab_id, fab_version = "", ""
766
764
  override_config_json = json.dumps(override_config)
767
765
  data = [
768
766
  sint64_run_id,
@@ -54,6 +54,7 @@ from flwr.proto.simulationio_pb2 import ( # pylint: disable=E0611
54
54
  )
55
55
  from flwr.server.superlink.ffs.ffs_factory import FfsFactory
56
56
  from flwr.server.superlink.linkstate import LinkStateFactory
57
+ from flwr.server.superlink.utils import abort_if
57
58
 
58
59
 
59
60
  class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
@@ -110,6 +111,15 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
110
111
  """Push Simulation process outputs."""
111
112
  log(DEBUG, "SimultionIoServicer.PushSimulationOutputs")
112
113
  state = self.state_factory.state()
114
+
115
+ # Abort if the run is not running
116
+ abort_if(
117
+ request.run_id,
118
+ [Status.PENDING, Status.STARTING, Status.FINISHED],
119
+ state,
120
+ context,
121
+ )
122
+
113
123
  state.set_serverapp_context(request.run_id, context_from_proto(request.context))
114
124
  return PushSimulationOutputsResponse()
115
125
 
@@ -120,6 +130,9 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
120
130
  log(DEBUG, "SimultionIoServicer.UpdateRunStatus")
121
131
  state = self.state_factory.state()
122
132
 
133
+ # Abort if the run is finished
134
+ abort_if(request.run_id, [Status.FINISHED], state, context)
135
+
123
136
  # Update the run status
124
137
  state.update_run_status(
125
138
  run_id=request.run_id, new_status=run_status_from_proto(request.run_status)
@@ -48,6 +48,7 @@ from flwr.common.logger import (
48
48
  from flwr.common.serde import (
49
49
  configs_record_from_proto,
50
50
  context_from_proto,
51
+ context_to_proto,
51
52
  fab_from_proto,
52
53
  run_from_proto,
53
54
  run_status_to_proto,
@@ -202,7 +203,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
202
203
  enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", False)
203
204
 
204
205
  # Launch the simulation
205
- _run_simulation(
206
+ updated_context = _run_simulation(
206
207
  server_app_attr=server_app_attr,
207
208
  client_app_attr=client_app_attr,
208
209
  num_supernodes=num_supernodes,
@@ -217,7 +218,7 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
217
218
  )
218
219
 
219
220
  # Send resulting context
220
- context_proto = None # context_to_proto(updated_context)
221
+ context_proto = context_to_proto(updated_context)
221
222
  out_req = PushSimulationOutputsRequest(
222
223
  run_id=run.run_id, context=context_proto
223
224
  )
@@ -24,6 +24,7 @@ import threading
24
24
  import traceback
25
25
  from logging import DEBUG, ERROR, INFO, WARNING
26
26
  from pathlib import Path
27
+ from queue import Empty, Queue
27
28
  from typing import Any, Optional
28
29
 
29
30
  from flwr.cli.config_utils import load_and_validate
@@ -126,7 +127,7 @@ def run_simulation_from_cli() -> None:
126
127
  run = Run.create_empty(run_id)
127
128
  run.override_config = override_config
128
129
 
129
- _run_simulation(
130
+ _ = _run_simulation(
130
131
  server_app_attr=server_app_attr,
131
132
  client_app_attr=client_app_attr,
132
133
  num_supernodes=args.num_supernodes,
@@ -206,7 +207,7 @@ def run_simulation(
206
207
  "\n\tflwr.simulation.run_simulationt(...)",
207
208
  )
208
209
 
209
- _run_simulation(
210
+ _ = _run_simulation(
210
211
  num_supernodes=num_supernodes,
211
212
  client_app=client_app,
212
213
  server_app=server_app,
@@ -229,6 +230,7 @@ def run_serverapp_th(
229
230
  has_exception: threading.Event,
230
231
  enable_tf_gpu_growth: bool,
231
232
  run_id: int,
233
+ ctx_queue: "Queue[Context]",
232
234
  ) -> threading.Thread:
233
235
  """Run SeverApp in a thread."""
234
236
 
@@ -241,6 +243,7 @@ def run_serverapp_th(
241
243
  _server_app_run_config: UserConfig,
242
244
  _server_app_attr: Optional[str],
243
245
  _server_app: Optional[ServerApp],
246
+ _ctx_queue: "Queue[Context]",
244
247
  ) -> None:
245
248
  """Run SeverApp, after check if GPU memory growth has to be set.
246
249
 
@@ -261,13 +264,14 @@ def run_serverapp_th(
261
264
  )
262
265
 
263
266
  # Run ServerApp
264
- _run(
267
+ updated_context = _run(
265
268
  driver=_driver,
266
269
  context=context,
267
270
  server_app_dir=_server_app_dir,
268
271
  server_app_attr=_server_app_attr,
269
272
  loaded_server_app=_server_app,
270
273
  )
274
+ _ctx_queue.put(updated_context)
271
275
  except Exception as ex: # pylint: disable=broad-exception-caught
272
276
  log(ERROR, "ServerApp thread raised an exception: %s", ex)
273
277
  log(ERROR, traceback.format_exc())
@@ -291,6 +295,7 @@ def run_serverapp_th(
291
295
  server_app_run_config,
292
296
  server_app_attr,
293
297
  server_app,
298
+ ctx_queue,
294
299
  ),
295
300
  )
296
301
  serverapp_th.start()
@@ -313,7 +318,7 @@ def _main_loop(
313
318
  server_app: Optional[ServerApp] = None,
314
319
  server_app_attr: Optional[str] = None,
315
320
  server_app_run_config: Optional[UserConfig] = None,
316
- ) -> None:
321
+ ) -> Context:
317
322
  """Start ServerApp on a separate thread, then launch Simulation Engine."""
318
323
  # Initialize StateFactory
319
324
  state_factory = LinkStateFactory(":flwr-in-memory-state:")
@@ -323,6 +328,13 @@ def _main_loop(
323
328
  server_app_thread_has_exception = threading.Event()
324
329
  serverapp_th = None
325
330
  success = True
331
+ updated_context = Context(
332
+ run_id=run.run_id,
333
+ node_id=0,
334
+ node_config=UserConfig(),
335
+ state=RecordSet(),
336
+ run_config=UserConfig(),
337
+ )
326
338
  try:
327
339
  # Register run
328
340
  log(DEBUG, "Pre-registering run with id %s", run.run_id)
@@ -337,6 +349,7 @@ def _main_loop(
337
349
  # Initialize Driver
338
350
  driver = InMemoryDriver(state_factory=state_factory)
339
351
  driver.set_run(run_id=run.run_id)
352
+ output_context_queue: "Queue[Context]" = Queue()
340
353
 
341
354
  # Get and run ServerApp thread
342
355
  serverapp_th = run_serverapp_th(
@@ -349,6 +362,7 @@ def _main_loop(
349
362
  has_exception=server_app_thread_has_exception,
350
363
  enable_tf_gpu_growth=enable_tf_gpu_growth,
351
364
  run_id=run.run_id,
365
+ ctx_queue=output_context_queue,
352
366
  )
353
367
 
354
368
  # Start Simulation Engine
@@ -366,6 +380,11 @@ def _main_loop(
366
380
  flwr_dir=flwr_dir,
367
381
  )
368
382
 
383
+ updated_context = output_context_queue.get(timeout=3)
384
+
385
+ except Empty:
386
+ log(DEBUG, "Queue timeout. No context received.")
387
+
369
388
  except Exception as ex:
370
389
  log(ERROR, "An exception occurred !! %s", ex)
371
390
  log(ERROR, traceback.format_exc())
@@ -382,6 +401,7 @@ def _main_loop(
382
401
  raise RuntimeError("Exception in ServerApp thread")
383
402
 
384
403
  log(DEBUG, "Stopping Simulation Engine now.")
404
+ return updated_context
385
405
 
386
406
 
387
407
  # pylint: disable=too-many-arguments,too-many-locals,too-many-positional-arguments
@@ -401,7 +421,7 @@ def _run_simulation(
401
421
  enable_tf_gpu_growth: bool = False,
402
422
  verbose_logging: bool = False,
403
423
  is_app: bool = False,
404
- ) -> None:
424
+ ) -> Context:
405
425
  """Launch the Simulation Engine."""
406
426
  if backend_config is None:
407
427
  backend_config = {}
@@ -480,7 +500,8 @@ def _run_simulation(
480
500
  # Set logger propagation to False to prevent duplicated log output in Colab.
481
501
  logger = set_logger_propagation(logger, False)
482
502
 
483
- _main_loop(*args)
503
+ updated_context = _main_loop(*args)
504
+ return updated_context
484
505
 
485
506
 
486
507
  def _parse_args_run_simulation() -> argparse.ArgumentParser: