flwr-nightly 1.21.0.dev20250811__tar.gz → 1.21.0.dev20250813__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 (395) hide show
  1. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/PKG-INFO +4 -3
  2. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/README.md +3 -2
  3. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/args.py +13 -0
  4. flwr_nightly-1.21.0.dev20250813/py/flwr/proto/simulationio_pb2.py +32 -0
  5. flwr_nightly-1.21.0.dev20250813/py/flwr/proto/simulationio_pb2.pyi +7 -0
  6. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/simulationio_pb2_grpc.py +129 -27
  7. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/simulationio_pb2_grpc.pyi +52 -13
  8. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/app.py +16 -94
  9. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/serverapp/app.py +1 -14
  10. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/simulation/simulationio_servicer.py +97 -21
  11. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/app.py +29 -18
  12. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/app_utils.py +4 -1
  13. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/cli/flwr_clientapp.py +0 -13
  14. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/start_client_internal.py +10 -31
  15. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/pyproject.toml +2 -2
  16. flwr_nightly-1.21.0.dev20250811/py/flwr/proto/simulationio_pb2.py +0 -39
  17. flwr_nightly-1.21.0.dev20250811/py/flwr/proto/simulationio_pb2.pyi +0 -65
  18. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/__init__.py +0 -0
  19. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/app/__init__.py +0 -0
  20. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/app/error.py +0 -0
  21. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/app/metadata.py +0 -0
  22. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/__init__.py +0 -0
  23. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/app.py +0 -0
  24. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  25. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  26. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/build.py +0 -0
  27. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  28. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/config_utils.py +0 -0
  29. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/constant.py +0 -0
  30. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/example.py +0 -0
  31. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/install.py +0 -0
  32. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/log.py +0 -0
  33. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/login/__init__.py +0 -0
  34. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/login/login.py +0 -0
  35. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/ls.py +0 -0
  36. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/__init__.py +0 -0
  37. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/new.py +0 -0
  38. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/__init__.py +0 -0
  39. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  40. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  41. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  42. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  43. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  44. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  45. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  46. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  47. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  48. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  49. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  50. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  51. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  52. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  53. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  54. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  55. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  56. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  57. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  58. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  59. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  60. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  61. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  62. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  63. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  64. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  65. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  66. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  67. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  68. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  69. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  70. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  71. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  72. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  73. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  74. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  75. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  76. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  77. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  78. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  79. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  80. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  81. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  82. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  83. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  84. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  85. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  86. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  87. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  88. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  89. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  90. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/run/__init__.py +0 -0
  91. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/run/run.py +0 -0
  92. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/stop.py +0 -0
  93. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/cli/utils.py +0 -0
  94. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/__init__.py +0 -0
  95. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/client.py +0 -0
  96. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/client_app.py +0 -0
  97. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/clientapp/__init__.py +0 -0
  98. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/clientapp/utils.py +0 -0
  99. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  100. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  101. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  102. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  103. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  104. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  105. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  106. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/message_handler/__init__.py +0 -0
  107. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/message_handler/message_handler.py +0 -0
  108. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/__init__.py +0 -0
  109. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/centraldp_mods.py +0 -0
  110. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/comms_mods.py +0 -0
  111. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/localdp_mod.py +0 -0
  112. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  113. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  114. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  115. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/mod/utils.py +0 -0
  116. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/numpy_client.py +0 -0
  117. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/rest_client/__init__.py +0 -0
  118. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/rest_client/connection.py +0 -0
  119. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/run_info_store.py +0 -0
  120. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/client/typing.py +0 -0
  121. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/clientapp/__init__.py +0 -0
  122. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/__init__.py +0 -0
  123. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/address.py +0 -0
  124. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/auth_plugin/__init__.py +0 -0
  125. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  126. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/config.py +0 -0
  127. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/constant.py +0 -0
  128. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/context.py +0 -0
  129. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/date.py +0 -0
  130. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/differential_privacy.py +0 -0
  131. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/differential_privacy_constants.py +0 -0
  132. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/dp.py +0 -0
  133. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  134. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  135. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/exit/__init__.py +0 -0
  136. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/exit/exit.py +0 -0
  137. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/exit/exit_code.py +0 -0
  138. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/exit_handlers.py +0 -0
  139. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/grpc.py +0 -0
  140. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/heartbeat.py +0 -0
  141. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/inflatable.py +0 -0
  142. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/inflatable_protobuf_utils.py +0 -0
  143. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/inflatable_utils.py +0 -0
  144. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/logger.py +0 -0
  145. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/message.py +0 -0
  146. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/object_ref.py +0 -0
  147. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/parameter.py +0 -0
  148. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/pyproject.py +0 -0
  149. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/__init__.py +0 -0
  150. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/array.py +0 -0
  151. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/arraychunk.py +0 -0
  152. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/arrayrecord.py +0 -0
  153. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/configrecord.py +0 -0
  154. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/conversion_utils.py +0 -0
  155. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/metricrecord.py +0 -0
  156. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/recorddict.py +0 -0
  157. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/record/typeddict.py +0 -0
  158. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/recorddict_compat.py +0 -0
  159. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/retry_invoker.py +0 -0
  160. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  161. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  162. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  163. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  164. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  165. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  166. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  167. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  168. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/serde.py +0 -0
  169. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/serde_utils.py +0 -0
  170. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/telemetry.py +0 -0
  171. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/typing.py +0 -0
  172. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/common/version.py +0 -0
  173. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/__init__.py +0 -0
  174. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/client/__init__.py +0 -0
  175. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/client/app.py +0 -0
  176. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  177. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  178. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/common/__init__.py +0 -0
  179. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/server/__init__.py +0 -0
  180. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/server/app.py +0 -0
  181. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/compat/simulation/__init__.py +0 -0
  182. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/__init__.py +0 -0
  183. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/appio_pb2.py +0 -0
  184. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/appio_pb2.pyi +0 -0
  185. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  186. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  187. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/clientappio_pb2.py +0 -0
  188. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/clientappio_pb2.pyi +0 -0
  189. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  190. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  191. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/control_pb2.py +0 -0
  192. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/control_pb2.pyi +0 -0
  193. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/control_pb2_grpc.py +0 -0
  194. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/control_pb2_grpc.pyi +0 -0
  195. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/error_pb2.py +0 -0
  196. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/error_pb2.pyi +0 -0
  197. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/error_pb2_grpc.py +0 -0
  198. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  199. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fab_pb2.py +0 -0
  200. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fab_pb2.pyi +0 -0
  201. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  202. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  203. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fleet_pb2.py +0 -0
  204. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fleet_pb2.pyi +0 -0
  205. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  206. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  207. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  208. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  209. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  210. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  211. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/heartbeat_pb2.py +0 -0
  212. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  213. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  214. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  215. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/log_pb2.py +0 -0
  216. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/log_pb2.pyi +0 -0
  217. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/log_pb2_grpc.py +0 -0
  218. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  219. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/message_pb2.py +0 -0
  220. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/message_pb2.pyi +0 -0
  221. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/message_pb2_grpc.py +0 -0
  222. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  223. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/node_pb2.py +0 -0
  224. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/node_pb2.pyi +0 -0
  225. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/node_pb2_grpc.py +0 -0
  226. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  227. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/recorddict_pb2.py +0 -0
  228. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  229. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  230. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  231. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/run_pb2.py +0 -0
  232. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/run_pb2.pyi +0 -0
  233. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/run_pb2_grpc.py +0 -0
  234. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  235. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/serverappio_pb2.py +0 -0
  236. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  237. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  238. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  239. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/transport_pb2.py +0 -0
  240. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/transport_pb2.pyi +0 -0
  241. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  242. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  243. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/py.typed +0 -0
  244. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/__init__.py +0 -0
  245. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/client_manager.py +0 -0
  246. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/client_proxy.py +0 -0
  247. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/compat/__init__.py +0 -0
  248. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/compat/app.py +0 -0
  249. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/compat/app_utils.py +0 -0
  250. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  251. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/compat/legacy_context.py +0 -0
  252. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/criterion.py +0 -0
  253. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/fleet_event_log_interceptor.py +0 -0
  254. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/grid/__init__.py +0 -0
  255. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/grid/grid.py +0 -0
  256. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/grid/grpc_grid.py +0 -0
  257. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/grid/inmemory_grid.py +0 -0
  258. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/history.py +0 -0
  259. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/run_serverapp.py +0 -0
  260. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/server.py +0 -0
  261. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/server_app.py +0 -0
  262. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/server_config.py +0 -0
  263. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/serverapp/__init__.py +0 -0
  264. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/serverapp_components.py +0 -0
  265. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/__init__.py +0 -0
  266. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/aggregate.py +0 -0
  267. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/bulyan.py +0 -0
  268. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  269. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  270. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  271. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  272. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  273. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedadagrad.py +0 -0
  274. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedadam.py +0 -0
  275. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedavg.py +0 -0
  276. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedavg_android.py +0 -0
  277. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedavgm.py +0 -0
  278. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedmedian.py +0 -0
  279. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedopt.py +0 -0
  280. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedprox.py +0 -0
  281. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  282. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  283. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  284. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  285. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/fedyogi.py +0 -0
  286. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/krum.py +0 -0
  287. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/qfedavg.py +0 -0
  288. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/strategy/strategy.py +0 -0
  289. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/__init__.py +0 -0
  290. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  291. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  292. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  293. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  294. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  295. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  296. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  297. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  298. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  299. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  300. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  301. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  302. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  303. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  304. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  305. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  306. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  307. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  308. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  309. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  310. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  311. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  312. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  313. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  314. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  315. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  316. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  317. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  318. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +0 -0
  319. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  320. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  321. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/superlink/utils.py +0 -0
  322. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/typing.py +0 -0
  323. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/utils/__init__.py +0 -0
  324. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/utils/tensorboard.py +0 -0
  325. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/utils/validator.py +0 -0
  326. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/workflow/__init__.py +0 -0
  327. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/workflow/constant.py +0 -0
  328. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/workflow/default_workflows.py +0 -0
  329. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  330. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  331. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  332. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/serverapp/__init__.py +0 -0
  333. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/__init__.py +0 -0
  334. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/legacy_app.py +0 -0
  335. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  336. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  337. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  338. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/ray_transport/utils.py +0 -0
  339. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/run_simulation.py +0 -0
  340. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/simulation/simulationio_connection.py +0 -0
  341. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/__init__.py +0 -0
  342. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/cli/__init__.py +0 -0
  343. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/cli/flower_superexec.py +0 -0
  344. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/corestate/__init__.py +0 -0
  345. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/corestate/corestate.py +0 -0
  346. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/ffs/__init__.py +0 -0
  347. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  348. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/ffs/ffs.py +0 -0
  349. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  350. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  351. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  352. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  353. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  354. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/object_store/__init__.py +0 -0
  355. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  356. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/object_store/object_store.py +0 -0
  357. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  358. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/object_store/utils.py +0 -0
  359. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/__init__.py +0 -0
  360. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/plugin/__init__.py +0 -0
  361. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/plugin/base_exec_plugin.py +0 -0
  362. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/plugin/clientapp_exec_plugin.py +0 -0
  363. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/plugin/exec_plugin.py +0 -0
  364. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/plugin/serverapp_exec_plugin.py +0 -0
  365. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/plugin/simulation_exec_plugin.py +0 -0
  366. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/superexec/run_superexec.py +0 -0
  367. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supercore/utils.py +0 -0
  368. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superexec/__init__.py +0 -0
  369. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superexec/deployment.py +0 -0
  370. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superexec/simulation.py +0 -0
  371. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/__init__.py +0 -0
  372. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/executor/__init__.py +0 -0
  373. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/executor/app.py +0 -0
  374. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/executor/deployment.py +0 -0
  375. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/executor/executor.py +0 -0
  376. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/executor/simulation.py +0 -0
  377. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/servicer/__init__.py +0 -0
  378. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/servicer/control/__init__.py +0 -0
  379. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/servicer/control/control_event_log_interceptor.py +0 -0
  380. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/servicer/control/control_grpc.py +0 -0
  381. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/servicer/control/control_license_interceptor.py +0 -0
  382. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/servicer/control/control_servicer.py +0 -0
  383. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/superlink/servicer/control/control_user_auth_interceptor.py +0 -0
  384. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/__init__.py +0 -0
  385. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/cli/__init__.py +0 -0
  386. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  387. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/nodestate/__init__.py +0 -0
  388. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  389. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  390. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  391. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/runtime/__init__.py +0 -0
  392. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/runtime/run_clientapp.py +0 -0
  393. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/servicer/__init__.py +0 -0
  394. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  395. {flwr_nightly-1.21.0.dev20250811 → flwr_nightly-1.21.0.dev20250813}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.21.0.dev20250811
3
+ Version: 1.21.0.dev20250813
4
4
  Summary: Flower: A Friendly Federated AI Framework
5
5
  License: Apache-2.0
6
6
  Keywords: Artificial Intelligence,Federated AI,Federated Analytics,Federated Evaluation,Federated Learning,Flower,Machine Learning
@@ -172,8 +172,9 @@ Flower Baselines is a collection of community-contributed projects that reproduc
172
172
  - [FedOpt](https://github.com/adap/flower/tree/main/baselines/flwr_baselines/flwr_baselines/publications/adaptive_federated_optimization)
173
173
 
174
174
  Please refer to the [Flower Baselines Documentation](https://flower.ai/docs/baselines/) for a detailed categorization of baselines and for additional info including:
175
- * [How to use Flower Baselines](https://flower.ai/docs/baselines/how-to-use-baselines.html)
176
- * [How to contribute a new Flower Baseline](https://flower.ai/docs/baselines/how-to-contribute-baselines.html)
175
+
176
+ - [How to use Flower Baselines](https://flower.ai/docs/baselines/how-to-use-baselines.html)
177
+ - [How to contribute a new Flower Baseline](https://flower.ai/docs/baselines/how-to-contribute-baselines.html)
177
178
 
178
179
  ## Flower Usage Examples
179
180
 
@@ -116,8 +116,9 @@ Flower Baselines is a collection of community-contributed projects that reproduc
116
116
  - [FedOpt](https://github.com/adap/flower/tree/main/baselines/flwr_baselines/flwr_baselines/publications/adaptive_federated_optimization)
117
117
 
118
118
  Please refer to the [Flower Baselines Documentation](https://flower.ai/docs/baselines/) for a detailed categorization of baselines and for additional info including:
119
- * [How to use Flower Baselines](https://flower.ai/docs/baselines/how-to-use-baselines.html)
120
- * [How to contribute a new Flower Baseline](https://flower.ai/docs/baselines/how-to-contribute-baselines.html)
119
+
120
+ - [How to use Flower Baselines](https://flower.ai/docs/baselines/how-to-use-baselines.html)
121
+ - [How to contribute a new Flower Baseline](https://flower.ai/docs/baselines/how-to-contribute-baselines.html)
121
122
 
122
123
  ## Flower Usage Examples
123
124
 
@@ -28,6 +28,12 @@ from flwr.common.logger import log
28
28
 
29
29
  def add_args_flwr_app_common(parser: argparse.ArgumentParser) -> None:
30
30
  """Add common Flower arguments for flwr-*app to the provided parser."""
31
+ parser.add_argument(
32
+ "--token",
33
+ type=str,
34
+ required=False,
35
+ help="Unique token generated by AppIo API for each app execution",
36
+ )
31
37
  parser.add_argument(
32
38
  "--flwr-dir",
33
39
  default=None,
@@ -47,6 +53,13 @@ def add_args_flwr_app_common(parser: argparse.ArgumentParser) -> None:
47
53
  "is not encrypted. By default, the server runs with HTTPS enabled. "
48
54
  "Use this flag only if you understand the risks.",
49
55
  )
56
+ parser.add_argument(
57
+ "--parent-pid",
58
+ type=int,
59
+ default=None,
60
+ help="The PID of the parent process. When set, the process will terminate "
61
+ "when the parent process exits.",
62
+ )
50
63
 
51
64
 
52
65
  def try_obtain_root_certificates(
@@ -0,0 +1,32 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/simulationio.proto
4
+ # Protobuf Python Version: 4.25.1
5
+ """Generated protocol buffer code."""
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ from google.protobuf.internal import builder as _builder
10
+ # @@protoc_insertion_point(imports)
11
+
12
+ _sym_db = _symbol_database.Default()
13
+
14
+
15
+ from flwr.proto import heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
16
+ from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
17
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
18
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
19
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
20
+ from flwr.proto import appio_pb2 as flwr_dot_proto_dot_appio__pb2
21
+
22
+
23
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x66lwr/proto/simulationio.proto\x12\nflwr.proto\x1a\x1a\x66lwr/proto/heartbeat.proto\x1a\x14\x66lwr/proto/log.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x16\x66lwr/proto/appio.proto2\x84\x07\n\x0cSimulationIo\x12_\n\x10ListAppsToLaunch\x12#.flwr.proto.ListAppsToLaunchRequest\x1a$.flwr.proto.ListAppsToLaunchResponse\"\x00\x12S\n\x0cRequestToken\x12\x1f.flwr.proto.RequestTokenRequest\x1a .flwr.proto.RequestTokenResponse\"\x00\x12\x41\n\x06GetRun\x12\x19.flwr.proto.GetRunRequest\x1a\x1a.flwr.proto.GetRunResponse\"\x00\x12V\n\rPullAppInputs\x12 .flwr.proto.PullAppInputsRequest\x1a!.flwr.proto.PullAppInputsResponse\"\x00\x12Y\n\x0ePushAppOutputs\x12!.flwr.proto.PushAppOutputsRequest\x1a\".flwr.proto.PushAppOutputsResponse\"\x00\x12\\\n\x0fUpdateRunStatus\x12\".flwr.proto.UpdateRunStatusRequest\x1a#.flwr.proto.UpdateRunStatusResponse\"\x00\x12G\n\x08PushLogs\x12\x1b.flwr.proto.PushLogsRequest\x1a\x1c.flwr.proto.PushLogsResponse\"\x00\x12k\n\x14GetFederationOptions\x12\'.flwr.proto.GetFederationOptionsRequest\x1a(.flwr.proto.GetFederationOptionsResponse\"\x00\x12S\n\x0cGetRunStatus\x12\x1f.flwr.proto.GetRunStatusRequest\x1a .flwr.proto.GetRunStatusResponse\"\x00\x12_\n\x10SendAppHeartbeat\x12#.flwr.proto.SendAppHeartbeatRequest\x1a$.flwr.proto.SendAppHeartbeatResponse\"\x00\x62\x06proto3')
24
+
25
+ _globals = globals()
26
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
27
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.simulationio_pb2', _globals)
28
+ if _descriptor._USE_C_DESCRIPTORS == False:
29
+ DESCRIPTOR._options = None
30
+ _globals['_SIMULATIONIO']._serialized_start=190
31
+ _globals['_SIMULATIONIO']._serialized_end=1090
32
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,7 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import google.protobuf.descriptor
6
+
7
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
@@ -2,10 +2,10 @@
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
4
 
5
+ from flwr.proto import appio_pb2 as flwr_dot_proto_dot_appio__pb2
5
6
  from flwr.proto import heartbeat_pb2 as flwr_dot_proto_dot_heartbeat__pb2
6
7
  from flwr.proto import log_pb2 as flwr_dot_proto_dot_log__pb2
7
8
  from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
8
- from flwr.proto import simulationio_pb2 as flwr_dot_proto_dot_simulationio__pb2
9
9
 
10
10
 
11
11
  class SimulationIoStub(object):
@@ -17,15 +17,30 @@ class SimulationIoStub(object):
17
17
  Args:
18
18
  channel: A grpc.Channel.
19
19
  """
20
- self.PullSimulationInputs = channel.unary_unary(
21
- '/flwr.proto.SimulationIo/PullSimulationInputs',
22
- request_serializer=flwr_dot_proto_dot_simulationio__pb2.PullSimulationInputsRequest.SerializeToString,
23
- response_deserializer=flwr_dot_proto_dot_simulationio__pb2.PullSimulationInputsResponse.FromString,
20
+ self.ListAppsToLaunch = channel.unary_unary(
21
+ '/flwr.proto.SimulationIo/ListAppsToLaunch',
22
+ request_serializer=flwr_dot_proto_dot_appio__pb2.ListAppsToLaunchRequest.SerializeToString,
23
+ response_deserializer=flwr_dot_proto_dot_appio__pb2.ListAppsToLaunchResponse.FromString,
24
24
  )
25
- self.PushSimulationOutputs = channel.unary_unary(
26
- '/flwr.proto.SimulationIo/PushSimulationOutputs',
27
- request_serializer=flwr_dot_proto_dot_simulationio__pb2.PushSimulationOutputsRequest.SerializeToString,
28
- response_deserializer=flwr_dot_proto_dot_simulationio__pb2.PushSimulationOutputsResponse.FromString,
25
+ self.RequestToken = channel.unary_unary(
26
+ '/flwr.proto.SimulationIo/RequestToken',
27
+ request_serializer=flwr_dot_proto_dot_appio__pb2.RequestTokenRequest.SerializeToString,
28
+ response_deserializer=flwr_dot_proto_dot_appio__pb2.RequestTokenResponse.FromString,
29
+ )
30
+ self.GetRun = channel.unary_unary(
31
+ '/flwr.proto.SimulationIo/GetRun',
32
+ request_serializer=flwr_dot_proto_dot_run__pb2.GetRunRequest.SerializeToString,
33
+ response_deserializer=flwr_dot_proto_dot_run__pb2.GetRunResponse.FromString,
34
+ )
35
+ self.PullAppInputs = channel.unary_unary(
36
+ '/flwr.proto.SimulationIo/PullAppInputs',
37
+ request_serializer=flwr_dot_proto_dot_appio__pb2.PullAppInputsRequest.SerializeToString,
38
+ response_deserializer=flwr_dot_proto_dot_appio__pb2.PullAppInputsResponse.FromString,
39
+ )
40
+ self.PushAppOutputs = channel.unary_unary(
41
+ '/flwr.proto.SimulationIo/PushAppOutputs',
42
+ request_serializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsRequest.SerializeToString,
43
+ response_deserializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsResponse.FromString,
29
44
  )
30
45
  self.UpdateRunStatus = channel.unary_unary(
31
46
  '/flwr.proto.SimulationIo/UpdateRunStatus',
@@ -57,14 +72,35 @@ class SimulationIoStub(object):
57
72
  class SimulationIoServicer(object):
58
73
  """Missing associated documentation comment in .proto file."""
59
74
 
60
- def PullSimulationInputs(self, request, context):
75
+ def ListAppsToLaunch(self, request, context):
76
+ """List runs to launch
77
+ """
78
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
79
+ context.set_details('Method not implemented!')
80
+ raise NotImplementedError('Method not implemented!')
81
+
82
+ def RequestToken(self, request, context):
83
+ """Request token for a run
84
+ """
85
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
86
+ context.set_details('Method not implemented!')
87
+ raise NotImplementedError('Method not implemented!')
88
+
89
+ def GetRun(self, request, context):
90
+ """Get run details
91
+ """
92
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
93
+ context.set_details('Method not implemented!')
94
+ raise NotImplementedError('Method not implemented!')
95
+
96
+ def PullAppInputs(self, request, context):
61
97
  """Pull Simulation inputs
62
98
  """
63
99
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
64
100
  context.set_details('Method not implemented!')
65
101
  raise NotImplementedError('Method not implemented!')
66
102
 
67
- def PushSimulationOutputs(self, request, context):
103
+ def PushAppOutputs(self, request, context):
68
104
  """Push Simulation outputs
69
105
  """
70
106
  context.set_code(grpc.StatusCode.UNIMPLEMENTED)
@@ -109,15 +145,30 @@ class SimulationIoServicer(object):
109
145
 
110
146
  def add_SimulationIoServicer_to_server(servicer, server):
111
147
  rpc_method_handlers = {
112
- 'PullSimulationInputs': grpc.unary_unary_rpc_method_handler(
113
- servicer.PullSimulationInputs,
114
- request_deserializer=flwr_dot_proto_dot_simulationio__pb2.PullSimulationInputsRequest.FromString,
115
- response_serializer=flwr_dot_proto_dot_simulationio__pb2.PullSimulationInputsResponse.SerializeToString,
148
+ 'ListAppsToLaunch': grpc.unary_unary_rpc_method_handler(
149
+ servicer.ListAppsToLaunch,
150
+ request_deserializer=flwr_dot_proto_dot_appio__pb2.ListAppsToLaunchRequest.FromString,
151
+ response_serializer=flwr_dot_proto_dot_appio__pb2.ListAppsToLaunchResponse.SerializeToString,
152
+ ),
153
+ 'RequestToken': grpc.unary_unary_rpc_method_handler(
154
+ servicer.RequestToken,
155
+ request_deserializer=flwr_dot_proto_dot_appio__pb2.RequestTokenRequest.FromString,
156
+ response_serializer=flwr_dot_proto_dot_appio__pb2.RequestTokenResponse.SerializeToString,
116
157
  ),
117
- 'PushSimulationOutputs': grpc.unary_unary_rpc_method_handler(
118
- servicer.PushSimulationOutputs,
119
- request_deserializer=flwr_dot_proto_dot_simulationio__pb2.PushSimulationOutputsRequest.FromString,
120
- response_serializer=flwr_dot_proto_dot_simulationio__pb2.PushSimulationOutputsResponse.SerializeToString,
158
+ 'GetRun': grpc.unary_unary_rpc_method_handler(
159
+ servicer.GetRun,
160
+ request_deserializer=flwr_dot_proto_dot_run__pb2.GetRunRequest.FromString,
161
+ response_serializer=flwr_dot_proto_dot_run__pb2.GetRunResponse.SerializeToString,
162
+ ),
163
+ 'PullAppInputs': grpc.unary_unary_rpc_method_handler(
164
+ servicer.PullAppInputs,
165
+ request_deserializer=flwr_dot_proto_dot_appio__pb2.PullAppInputsRequest.FromString,
166
+ response_serializer=flwr_dot_proto_dot_appio__pb2.PullAppInputsResponse.SerializeToString,
167
+ ),
168
+ 'PushAppOutputs': grpc.unary_unary_rpc_method_handler(
169
+ servicer.PushAppOutputs,
170
+ request_deserializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsRequest.FromString,
171
+ response_serializer=flwr_dot_proto_dot_appio__pb2.PushAppOutputsResponse.SerializeToString,
121
172
  ),
122
173
  'UpdateRunStatus': grpc.unary_unary_rpc_method_handler(
123
174
  servicer.UpdateRunStatus,
@@ -155,7 +206,58 @@ class SimulationIo(object):
155
206
  """Missing associated documentation comment in .proto file."""
156
207
 
157
208
  @staticmethod
158
- def PullSimulationInputs(request,
209
+ def ListAppsToLaunch(request,
210
+ target,
211
+ options=(),
212
+ channel_credentials=None,
213
+ call_credentials=None,
214
+ insecure=False,
215
+ compression=None,
216
+ wait_for_ready=None,
217
+ timeout=None,
218
+ metadata=None):
219
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.SimulationIo/ListAppsToLaunch',
220
+ flwr_dot_proto_dot_appio__pb2.ListAppsToLaunchRequest.SerializeToString,
221
+ flwr_dot_proto_dot_appio__pb2.ListAppsToLaunchResponse.FromString,
222
+ options, channel_credentials,
223
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
224
+
225
+ @staticmethod
226
+ def RequestToken(request,
227
+ target,
228
+ options=(),
229
+ channel_credentials=None,
230
+ call_credentials=None,
231
+ insecure=False,
232
+ compression=None,
233
+ wait_for_ready=None,
234
+ timeout=None,
235
+ metadata=None):
236
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.SimulationIo/RequestToken',
237
+ flwr_dot_proto_dot_appio__pb2.RequestTokenRequest.SerializeToString,
238
+ flwr_dot_proto_dot_appio__pb2.RequestTokenResponse.FromString,
239
+ options, channel_credentials,
240
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
241
+
242
+ @staticmethod
243
+ def GetRun(request,
244
+ target,
245
+ options=(),
246
+ channel_credentials=None,
247
+ call_credentials=None,
248
+ insecure=False,
249
+ compression=None,
250
+ wait_for_ready=None,
251
+ timeout=None,
252
+ metadata=None):
253
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.SimulationIo/GetRun',
254
+ flwr_dot_proto_dot_run__pb2.GetRunRequest.SerializeToString,
255
+ flwr_dot_proto_dot_run__pb2.GetRunResponse.FromString,
256
+ options, channel_credentials,
257
+ insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
258
+
259
+ @staticmethod
260
+ def PullAppInputs(request,
159
261
  target,
160
262
  options=(),
161
263
  channel_credentials=None,
@@ -165,14 +267,14 @@ class SimulationIo(object):
165
267
  wait_for_ready=None,
166
268
  timeout=None,
167
269
  metadata=None):
168
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.SimulationIo/PullSimulationInputs',
169
- flwr_dot_proto_dot_simulationio__pb2.PullSimulationInputsRequest.SerializeToString,
170
- flwr_dot_proto_dot_simulationio__pb2.PullSimulationInputsResponse.FromString,
270
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.SimulationIo/PullAppInputs',
271
+ flwr_dot_proto_dot_appio__pb2.PullAppInputsRequest.SerializeToString,
272
+ flwr_dot_proto_dot_appio__pb2.PullAppInputsResponse.FromString,
171
273
  options, channel_credentials,
172
274
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
173
275
 
174
276
  @staticmethod
175
- def PushSimulationOutputs(request,
277
+ def PushAppOutputs(request,
176
278
  target,
177
279
  options=(),
178
280
  channel_credentials=None,
@@ -182,9 +284,9 @@ class SimulationIo(object):
182
284
  wait_for_ready=None,
183
285
  timeout=None,
184
286
  metadata=None):
185
- return grpc.experimental.unary_unary(request, target, '/flwr.proto.SimulationIo/PushSimulationOutputs',
186
- flwr_dot_proto_dot_simulationio__pb2.PushSimulationOutputsRequest.SerializeToString,
187
- flwr_dot_proto_dot_simulationio__pb2.PushSimulationOutputsResponse.FromString,
287
+ return grpc.experimental.unary_unary(request, target, '/flwr.proto.SimulationIo/PushAppOutputs',
288
+ flwr_dot_proto_dot_appio__pb2.PushAppOutputsRequest.SerializeToString,
289
+ flwr_dot_proto_dot_appio__pb2.PushAppOutputsResponse.FromString,
188
290
  options, channel_credentials,
189
291
  insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
190
292
 
@@ -3,22 +3,37 @@
3
3
  isort:skip_file
4
4
  """
5
5
  import abc
6
+ import flwr.proto.appio_pb2
6
7
  import flwr.proto.heartbeat_pb2
7
8
  import flwr.proto.log_pb2
8
9
  import flwr.proto.run_pb2
9
- import flwr.proto.simulationio_pb2
10
10
  import grpc
11
11
 
12
12
  class SimulationIoStub:
13
13
  def __init__(self, channel: grpc.Channel) -> None: ...
14
- PullSimulationInputs: grpc.UnaryUnaryMultiCallable[
15
- flwr.proto.simulationio_pb2.PullSimulationInputsRequest,
16
- flwr.proto.simulationio_pb2.PullSimulationInputsResponse]
14
+ ListAppsToLaunch: grpc.UnaryUnaryMultiCallable[
15
+ flwr.proto.appio_pb2.ListAppsToLaunchRequest,
16
+ flwr.proto.appio_pb2.ListAppsToLaunchResponse]
17
+ """List runs to launch"""
18
+
19
+ RequestToken: grpc.UnaryUnaryMultiCallable[
20
+ flwr.proto.appio_pb2.RequestTokenRequest,
21
+ flwr.proto.appio_pb2.RequestTokenResponse]
22
+ """Request token for a run"""
23
+
24
+ GetRun: grpc.UnaryUnaryMultiCallable[
25
+ flwr.proto.run_pb2.GetRunRequest,
26
+ flwr.proto.run_pb2.GetRunResponse]
27
+ """Get run details"""
28
+
29
+ PullAppInputs: grpc.UnaryUnaryMultiCallable[
30
+ flwr.proto.appio_pb2.PullAppInputsRequest,
31
+ flwr.proto.appio_pb2.PullAppInputsResponse]
17
32
  """Pull Simulation inputs"""
18
33
 
19
- PushSimulationOutputs: grpc.UnaryUnaryMultiCallable[
20
- flwr.proto.simulationio_pb2.PushSimulationOutputsRequest,
21
- flwr.proto.simulationio_pb2.PushSimulationOutputsResponse]
34
+ PushAppOutputs: grpc.UnaryUnaryMultiCallable[
35
+ flwr.proto.appio_pb2.PushAppOutputsRequest,
36
+ flwr.proto.appio_pb2.PushAppOutputsResponse]
22
37
  """Push Simulation outputs"""
23
38
 
24
39
  UpdateRunStatus: grpc.UnaryUnaryMultiCallable[
@@ -49,18 +64,42 @@ class SimulationIoStub:
49
64
 
50
65
  class SimulationIoServicer(metaclass=abc.ABCMeta):
51
66
  @abc.abstractmethod
52
- def PullSimulationInputs(self,
53
- request: flwr.proto.simulationio_pb2.PullSimulationInputsRequest,
67
+ def ListAppsToLaunch(self,
68
+ request: flwr.proto.appio_pb2.ListAppsToLaunchRequest,
54
69
  context: grpc.ServicerContext,
55
- ) -> flwr.proto.simulationio_pb2.PullSimulationInputsResponse:
70
+ ) -> flwr.proto.appio_pb2.ListAppsToLaunchResponse:
71
+ """List runs to launch"""
72
+ pass
73
+
74
+ @abc.abstractmethod
75
+ def RequestToken(self,
76
+ request: flwr.proto.appio_pb2.RequestTokenRequest,
77
+ context: grpc.ServicerContext,
78
+ ) -> flwr.proto.appio_pb2.RequestTokenResponse:
79
+ """Request token for a run"""
80
+ pass
81
+
82
+ @abc.abstractmethod
83
+ def GetRun(self,
84
+ request: flwr.proto.run_pb2.GetRunRequest,
85
+ context: grpc.ServicerContext,
86
+ ) -> flwr.proto.run_pb2.GetRunResponse:
87
+ """Get run details"""
88
+ pass
89
+
90
+ @abc.abstractmethod
91
+ def PullAppInputs(self,
92
+ request: flwr.proto.appio_pb2.PullAppInputsRequest,
93
+ context: grpc.ServicerContext,
94
+ ) -> flwr.proto.appio_pb2.PullAppInputsResponse:
56
95
  """Pull Simulation inputs"""
57
96
  pass
58
97
 
59
98
  @abc.abstractmethod
60
- def PushSimulationOutputs(self,
61
- request: flwr.proto.simulationio_pb2.PushSimulationOutputsRequest,
99
+ def PushAppOutputs(self,
100
+ request: flwr.proto.appio_pb2.PushAppOutputsRequest,
62
101
  context: grpc.ServicerContext,
63
- ) -> flwr.proto.simulationio_pb2.PushSimulationOutputsResponse:
102
+ ) -> flwr.proto.appio_pb2.PushAppOutputsResponse:
64
103
  """Push Simulation outputs"""
65
104
  pass
66
105
 
@@ -18,9 +18,8 @@
18
18
  import argparse
19
19
  import csv
20
20
  import importlib.util
21
- import multiprocessing
22
- import multiprocessing.context
23
21
  import os
22
+ import subprocess
24
23
  import sys
25
24
  import threading
26
25
  from collections.abc import Sequence
@@ -55,6 +54,7 @@ from flwr.common.constant import (
55
54
  TRANSPORT_TYPE_GRPC_RERE,
56
55
  TRANSPORT_TYPE_REST,
57
56
  EventLogWriterType,
57
+ ExecPluginType,
58
58
  )
59
59
  from flwr.common.event_log_plugin import EventLogWriterPlugin
60
60
  from flwr.common.exit import ExitCode, flwr_exit
@@ -69,8 +69,6 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
69
69
  )
70
70
  from flwr.proto.grpcadapter_pb2_grpc import add_GrpcAdapterServicer_to_server
71
71
  from flwr.server.fleet_event_log_interceptor import FleetEventLogInterceptor
72
- from flwr.server.serverapp.app import flwr_serverapp
73
- from flwr.simulation.app import flwr_simulation
74
72
  from flwr.supercore.ffs import FfsFactory
75
73
  from flwr.supercore.object_store import ObjectStoreFactory
76
74
  from flwr.superlink.executor import load_executor
@@ -219,10 +217,10 @@ def run_superlink() -> None:
219
217
 
220
218
  # Determine Exec plugin
221
219
  # If simulation is used, don't start ServerAppIo and Fleet APIs
222
- sim_exec = executor.__class__.__qualname__ == "SimulationEngine"
220
+ is_simulation = executor.__class__.__qualname__ == "SimulationEngine"
223
221
  bckg_threads: list[threading.Thread] = []
224
222
 
225
- if sim_exec:
223
+ if is_simulation:
226
224
  simulationio_server: grpc.Server = run_simulationio_api_grpc(
227
225
  address=simulationio_address,
228
226
  state_factory=state_factory,
@@ -340,25 +338,18 @@ def run_superlink() -> None:
340
338
  io_address = (
341
339
  f"{CLIENT_OCTET}:{_port}" if _octet == SERVER_OCTET else serverappio_address
342
340
  )
343
- address_arg = (
344
- "--simulationio-api-address" if sim_exec else "--serverappio-api-address"
345
- )
346
- address = simulationio_address if sim_exec else io_address
347
- cmd = "flwr-simulation" if sim_exec else "flwr-serverapp"
348
-
349
- # Scheduler thread
350
- scheduler_th = threading.Thread(
351
- target=_flwr_scheduler,
352
- args=(
353
- state_factory,
354
- address_arg,
355
- address,
356
- cmd,
357
- ),
358
- daemon=True,
359
- )
360
- scheduler_th.start()
361
- bckg_threads.append(scheduler_th)
341
+ command = ["flower-superexec", "--insecure"]
342
+ command += [
343
+ "--appio-api-address",
344
+ simulationio_address if is_simulation else io_address,
345
+ ]
346
+ command += [
347
+ "--plugin-type",
348
+ ExecPluginType.SIMULATION if is_simulation else ExecPluginType.SERVER_APP,
349
+ ]
350
+ command += ["--parent-pid", str(os.getpid())]
351
+ # pylint: disable-next=consider-using-with
352
+ subprocess.Popen(command)
362
353
 
363
354
  # Graceful shutdown
364
355
  register_exit_handlers(
@@ -376,75 +367,6 @@ def run_superlink() -> None:
376
367
  flwr_exit(ExitCode.SUPERLINK_THREAD_CRASH)
377
368
 
378
369
 
379
- def _run_flwr_command(args: list[str], main_pid: int) -> None:
380
- # Monitor the main process in case of SIGKILL
381
- def main_process_monitor() -> None:
382
- while True:
383
- sleep(1)
384
- if os.getppid() != main_pid:
385
- os.kill(os.getpid(), 9)
386
-
387
- threading.Thread(target=main_process_monitor, daemon=True).start()
388
-
389
- # Run the command
390
- sys.argv = args
391
- if args[0] == "flwr-serverapp":
392
- flwr_serverapp()
393
- elif args[0] == "flwr-simulation":
394
- flwr_simulation()
395
- else:
396
- raise ValueError(f"Unknown command: {args[0]}")
397
-
398
-
399
- def _flwr_scheduler(
400
- state_factory: LinkStateFactory,
401
- io_api_arg: str,
402
- io_api_address: str,
403
- cmd: str,
404
- ) -> None:
405
- log(DEBUG, "Started %s scheduler thread.", cmd)
406
- state = state_factory.state()
407
- run_id_to_proc: dict[int, multiprocessing.context.SpawnProcess] = {}
408
-
409
- # Use the "spawn" start method for multiprocessing.
410
- mp_spawn_context = multiprocessing.get_context("spawn")
411
-
412
- # Periodically check for a pending run in the LinkState
413
- while True:
414
- sleep(0.1)
415
- pending_run_id = state.get_pending_run_id()
416
-
417
- if pending_run_id and pending_run_id not in run_id_to_proc:
418
-
419
- log(
420
- INFO,
421
- "Launching %s subprocess. Connects to SuperLink on %s",
422
- cmd,
423
- io_api_address,
424
- )
425
- # Start subprocess
426
- command = [
427
- cmd,
428
- "--run-once",
429
- io_api_arg,
430
- io_api_address,
431
- "--insecure",
432
- ]
433
-
434
- proc = mp_spawn_context.Process(
435
- target=_run_flwr_command, args=(command, os.getpid()), daemon=True
436
- )
437
- proc.start()
438
-
439
- # Store the process
440
- run_id_to_proc[pending_run_id] = proc
441
-
442
- # Clean up finished processes
443
- for run_id, proc in list(run_id_to_proc.items()):
444
- if not proc.is_alive():
445
- del run_id_to_proc[run_id]
446
-
447
-
448
370
  def _format_address(address: str) -> tuple[str, str, int]:
449
371
  parsed_address = parse_address(address)
450
372
  if not parsed_address:
@@ -92,7 +92,7 @@ def flwr_serverapp() -> None:
92
92
  serverappio_api_address=args.serverappio_api_address,
93
93
  log_queue=log_queue,
94
94
  token=args.token,
95
- run_once=args.run_once,
95
+ run_once=(args.token is not None) or args.run_once,
96
96
  flwr_dir=args.flwr_dir,
97
97
  certificates=None,
98
98
  parent_pid=args.parent_pid,
@@ -287,19 +287,6 @@ def _parse_args_run_flwr_serverapp() -> argparse.ArgumentParser:
287
287
  help="Address of SuperLink's ServerAppIo API (IPv4, IPv6, or a domain name)."
288
288
  f"By default, it is set to {SERVERAPPIO_API_DEFAULT_CLIENT_ADDRESS}.",
289
289
  )
290
- parser.add_argument(
291
- "--token",
292
- type=str,
293
- required=False,
294
- help="Unique token generated by SuperNode for each ServerApp execution",
295
- )
296
- parser.add_argument(
297
- "--parent-pid",
298
- type=int,
299
- default=None,
300
- help="The PID of the parent process. When set, the process will terminate "
301
- "when the parent process exits.",
302
- )
303
290
  parser.add_argument(
304
291
  "--run-once",
305
292
  action="store_true",