flwr-nightly 1.20.0.dev20250716__tar.gz → 1.20.0.dev20250718__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 (377) hide show
  1. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/PKG-INFO +1 -1
  2. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/inflatable_protobuf_utils.py +40 -0
  3. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/inflatable_utils.py +78 -1
  4. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/array.py +2 -2
  5. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/serde.py +0 -28
  6. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/client/app.py +14 -31
  7. flwr_nightly-1.20.0.dev20250718/py/flwr/proto/appio_pb2.py +47 -0
  8. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/appio_pb2.pyi +21 -22
  9. flwr_nightly-1.20.0.dev20250718/py/flwr/proto/clientappio_pb2.py +38 -0
  10. flwr_nightly-1.20.0.dev20250718/py/flwr/proto/clientappio_pb2.pyi +54 -0
  11. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/clientappio_pb2_grpc.py +128 -24
  12. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/clientappio_pb2_grpc.pyi +57 -16
  13. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/fleet_event_log_interceptor.py +4 -0
  14. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/grid/grpc_grid.py +5 -2
  15. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +2 -5
  16. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/serverappio/serverappio_servicer.py +5 -9
  17. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/exec_event_log_interceptor.py +4 -0
  18. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/exec_license_interceptor.py +4 -0
  19. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/exec_user_auth_interceptor.py +4 -0
  20. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/runtime/run_clientapp.py +21 -15
  21. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/servicer/clientappio/clientappio_servicer.py +94 -25
  22. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/pyproject.toml +1 -1
  23. flwr_nightly-1.20.0.dev20250716/py/flwr/proto/appio_pb2.py +0 -51
  24. flwr_nightly-1.20.0.dev20250716/py/flwr/proto/clientappio_pb2.py +0 -57
  25. flwr_nightly-1.20.0.dev20250716/py/flwr/proto/clientappio_pb2.pyi +0 -196
  26. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/README.md +0 -0
  27. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/__init__.py +0 -0
  28. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/app/__init__.py +0 -0
  29. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/app/error.py +0 -0
  30. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/app/metadata.py +0 -0
  31. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/__init__.py +0 -0
  32. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/app.py +0 -0
  33. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/auth_plugin/__init__.py +0 -0
  34. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/auth_plugin/oidc_cli_plugin.py +0 -0
  35. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/build.py +0 -0
  36. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/cli_user_auth_interceptor.py +0 -0
  37. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/config_utils.py +0 -0
  38. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/constant.py +0 -0
  39. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/example.py +0 -0
  40. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/install.py +0 -0
  41. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/log.py +0 -0
  42. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/login/__init__.py +0 -0
  43. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/login/login.py +0 -0
  44. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/ls.py +0 -0
  45. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/__init__.py +0 -0
  46. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/new.py +0 -0
  47. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/__init__.py +0 -0
  48. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  49. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/LICENSE.tpl +0 -0
  50. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/README.baseline.md.tpl +0 -0
  51. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  52. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  53. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/__init__.py +0 -0
  54. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/__init__.baseline.py.tpl +0 -0
  55. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  56. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  57. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.baseline.py.tpl +0 -0
  58. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  59. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  60. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  61. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  62. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  63. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  64. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  65. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/dataset.baseline.py.tpl +0 -0
  66. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  67. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/flwr_tune/client_app.py.tpl +0 -0
  68. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  69. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  70. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/flwr_tune/server_app.py.tpl +0 -0
  71. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl +0 -0
  72. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/model.baseline.py.tpl +0 -0
  73. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.baseline.py.tpl +0 -0
  74. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  75. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  76. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  77. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  78. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  79. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  80. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  81. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/strategy.baseline.py.tpl +0 -0
  82. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  83. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  84. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  85. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/task.numpy.py.tpl +0 -0
  86. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  87. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/task.sklearn.py.tpl +0 -0
  88. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  89. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/code/utils.baseline.py.tpl +0 -0
  90. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +0 -0
  91. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  92. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  93. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  94. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  95. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  96. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  97. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  98. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  99. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/run/__init__.py +0 -0
  100. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/run/run.py +0 -0
  101. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/stop.py +0 -0
  102. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/cli/utils.py +0 -0
  103. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/__init__.py +0 -0
  104. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/client.py +0 -0
  105. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/client_app.py +0 -0
  106. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/clientapp/__init__.py +0 -0
  107. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/clientapp/utils.py +0 -0
  108. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  109. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  110. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  111. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  112. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  113. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/grpc_rere_client/connection.py +0 -0
  114. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  115. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/message_handler/__init__.py +0 -0
  116. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/message_handler/message_handler.py +0 -0
  117. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/__init__.py +0 -0
  118. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/centraldp_mods.py +0 -0
  119. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/comms_mods.py +0 -0
  120. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/localdp_mod.py +0 -0
  121. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  122. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  123. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  124. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/mod/utils.py +0 -0
  125. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/numpy_client.py +0 -0
  126. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/rest_client/__init__.py +0 -0
  127. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/rest_client/connection.py +0 -0
  128. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/run_info_store.py +0 -0
  129. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/client/typing.py +0 -0
  130. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/clientapp/__init__.py +0 -0
  131. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/__init__.py +0 -0
  132. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/address.py +0 -0
  133. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/args.py +0 -0
  134. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/auth_plugin/__init__.py +0 -0
  135. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/auth_plugin/auth_plugin.py +0 -0
  136. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/config.py +0 -0
  137. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/constant.py +0 -0
  138. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/context.py +0 -0
  139. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/date.py +0 -0
  140. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/differential_privacy.py +0 -0
  141. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/differential_privacy_constants.py +0 -0
  142. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/dp.py +0 -0
  143. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/event_log_plugin/__init__.py +0 -0
  144. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/event_log_plugin/event_log_plugin.py +0 -0
  145. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/exit/__init__.py +0 -0
  146. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/exit/exit.py +0 -0
  147. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/exit/exit_code.py +0 -0
  148. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/exit_handlers.py +0 -0
  149. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/grpc.py +0 -0
  150. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/heartbeat.py +0 -0
  151. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/inflatable.py +0 -0
  152. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/logger.py +0 -0
  153. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/message.py +0 -0
  154. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/object_ref.py +0 -0
  155. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/parameter.py +0 -0
  156. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/pyproject.py +0 -0
  157. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/__init__.py +0 -0
  158. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/arraychunk.py +0 -0
  159. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/arrayrecord.py +0 -0
  160. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/configrecord.py +0 -0
  161. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/conversion_utils.py +0 -0
  162. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/metricrecord.py +0 -0
  163. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/recorddict.py +0 -0
  164. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/record/typeddict.py +0 -0
  165. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/recorddict_compat.py +0 -0
  166. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/retry_invoker.py +0 -0
  167. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/__init__.py +0 -0
  168. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  169. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  170. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  171. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  172. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/quantization.py +0 -0
  173. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  174. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  175. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/serde_utils.py +0 -0
  176. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/telemetry.py +0 -0
  177. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/typing.py +0 -0
  178. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/common/version.py +0 -0
  179. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/__init__.py +0 -0
  180. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/client/__init__.py +0 -0
  181. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/client/grpc_client/__init__.py +0 -0
  182. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/client/grpc_client/connection.py +0 -0
  183. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/common/__init__.py +0 -0
  184. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/server/__init__.py +0 -0
  185. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/server/app.py +0 -0
  186. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/compat/simulation/__init__.py +0 -0
  187. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/__init__.py +0 -0
  188. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/appio_pb2_grpc.py +0 -0
  189. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/appio_pb2_grpc.pyi +0 -0
  190. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/error_pb2.py +0 -0
  191. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/error_pb2.pyi +0 -0
  192. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/error_pb2_grpc.py +0 -0
  193. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  194. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/exec_pb2.py +0 -0
  195. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/exec_pb2.pyi +0 -0
  196. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/exec_pb2_grpc.py +0 -0
  197. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  198. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fab_pb2.py +0 -0
  199. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fab_pb2.pyi +0 -0
  200. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fab_pb2_grpc.py +0 -0
  201. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  202. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fleet_pb2.py +0 -0
  203. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fleet_pb2.pyi +0 -0
  204. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  205. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  206. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/grpcadapter_pb2.py +0 -0
  207. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  208. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  209. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  210. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/heartbeat_pb2.py +0 -0
  211. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/heartbeat_pb2.pyi +0 -0
  212. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/heartbeat_pb2_grpc.py +0 -0
  213. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/heartbeat_pb2_grpc.pyi +0 -0
  214. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/log_pb2.py +0 -0
  215. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/log_pb2.pyi +0 -0
  216. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/log_pb2_grpc.py +0 -0
  217. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/log_pb2_grpc.pyi +0 -0
  218. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/message_pb2.py +0 -0
  219. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/message_pb2.pyi +0 -0
  220. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/message_pb2_grpc.py +0 -0
  221. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  222. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/node_pb2.py +0 -0
  223. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/node_pb2.pyi +0 -0
  224. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/node_pb2_grpc.py +0 -0
  225. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  226. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/recorddict_pb2.py +0 -0
  227. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/recorddict_pb2.pyi +0 -0
  228. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/recorddict_pb2_grpc.py +0 -0
  229. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/recorddict_pb2_grpc.pyi +0 -0
  230. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/run_pb2.py +0 -0
  231. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/run_pb2.pyi +0 -0
  232. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/run_pb2_grpc.py +0 -0
  233. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  234. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/serverappio_pb2.py +0 -0
  235. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/serverappio_pb2.pyi +0 -0
  236. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/serverappio_pb2_grpc.py +0 -0
  237. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/serverappio_pb2_grpc.pyi +0 -0
  238. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/simulationio_pb2.py +0 -0
  239. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/simulationio_pb2.pyi +0 -0
  240. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/simulationio_pb2_grpc.py +0 -0
  241. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/simulationio_pb2_grpc.pyi +0 -0
  242. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/transport_pb2.py +0 -0
  243. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/transport_pb2.pyi +0 -0
  244. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/transport_pb2_grpc.py +0 -0
  245. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  246. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/py.typed +0 -0
  247. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/__init__.py +0 -0
  248. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/app.py +0 -0
  249. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/client_manager.py +0 -0
  250. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/client_proxy.py +0 -0
  251. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/compat/__init__.py +0 -0
  252. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/compat/app.py +0 -0
  253. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/compat/app_utils.py +0 -0
  254. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/compat/grid_client_proxy.py +0 -0
  255. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/compat/legacy_context.py +0 -0
  256. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/criterion.py +0 -0
  257. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/grid/__init__.py +0 -0
  258. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/grid/grid.py +0 -0
  259. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/grid/inmemory_grid.py +0 -0
  260. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/history.py +0 -0
  261. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/run_serverapp.py +0 -0
  262. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/server.py +0 -0
  263. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/server_app.py +0 -0
  264. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/server_config.py +0 -0
  265. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/serverapp/__init__.py +0 -0
  266. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/serverapp/app.py +0 -0
  267. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/serverapp_components.py +0 -0
  268. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/__init__.py +0 -0
  269. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/aggregate.py +0 -0
  270. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/bulyan.py +0 -0
  271. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  272. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  273. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  274. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  275. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  276. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedadagrad.py +0 -0
  277. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedadam.py +0 -0
  278. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedavg.py +0 -0
  279. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedavg_android.py +0 -0
  280. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedavgm.py +0 -0
  281. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedmedian.py +0 -0
  282. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedopt.py +0 -0
  283. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedprox.py +0 -0
  284. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  285. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  286. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  287. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  288. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/fedyogi.py +0 -0
  289. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/krum.py +0 -0
  290. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/qfedavg.py +0 -0
  291. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/strategy/strategy.py +0 -0
  292. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/__init__.py +0 -0
  293. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/__init__.py +0 -0
  294. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  295. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  296. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  297. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  298. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  299. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  300. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  301. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  302. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  303. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  304. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  305. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  306. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  307. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  308. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  309. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  310. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  311. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  312. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/linkstate/__init__.py +0 -0
  313. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/linkstate/in_memory_linkstate.py +0 -0
  314. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/linkstate/linkstate.py +0 -0
  315. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/linkstate/linkstate_factory.py +0 -0
  316. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/linkstate/sqlite_linkstate.py +0 -0
  317. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/linkstate/utils.py +0 -0
  318. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/serverappio/__init__.py +0 -0
  319. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/serverappio/serverappio_grpc.py +0 -0
  320. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/simulation/__init__.py +0 -0
  321. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/simulation/simulationio_grpc.py +0 -0
  322. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/simulation/simulationio_servicer.py +0 -0
  323. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/superlink/utils.py +0 -0
  324. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/typing.py +0 -0
  325. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/utils/__init__.py +0 -0
  326. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/utils/tensorboard.py +0 -0
  327. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/utils/validator.py +0 -0
  328. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/workflow/__init__.py +0 -0
  329. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/workflow/constant.py +0 -0
  330. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/workflow/default_workflows.py +0 -0
  331. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  332. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  333. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  334. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/serverapp/__init__.py +0 -0
  335. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/__init__.py +0 -0
  336. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/app.py +0 -0
  337. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/legacy_app.py +0 -0
  338. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/ray_transport/__init__.py +0 -0
  339. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  340. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  341. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/ray_transport/utils.py +0 -0
  342. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/run_simulation.py +0 -0
  343. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/simulation/simulationio_connection.py +0 -0
  344. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/__init__.py +0 -0
  345. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/ffs/__init__.py +0 -0
  346. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/ffs/disk_ffs.py +0 -0
  347. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/ffs/ffs.py +0 -0
  348. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/ffs/ffs_factory.py +0 -0
  349. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/grpc_health/__init__.py +0 -0
  350. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/grpc_health/simple_health_servicer.py +0 -0
  351. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/license_plugin/__init__.py +0 -0
  352. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/license_plugin/license_plugin.py +0 -0
  353. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/object_store/__init__.py +0 -0
  354. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/object_store/in_memory_object_store.py +0 -0
  355. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/object_store/object_store.py +0 -0
  356. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/object_store/object_store_factory.py +0 -0
  357. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supercore/utils.py +0 -0
  358. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/__init__.py +0 -0
  359. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/app.py +0 -0
  360. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/deployment.py +0 -0
  361. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/exec_grpc.py +0 -0
  362. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/exec_servicer.py +0 -0
  363. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/executor.py +0 -0
  364. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superexec/simulation.py +0 -0
  365. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/superlink/__init__.py +0 -0
  366. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/__init__.py +0 -0
  367. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/cli/__init__.py +0 -0
  368. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/cli/flower_supernode.py +0 -0
  369. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/cli/flwr_clientapp.py +0 -0
  370. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/nodestate/__init__.py +0 -0
  371. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/nodestate/in_memory_nodestate.py +0 -0
  372. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/nodestate/nodestate.py +0 -0
  373. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/nodestate/nodestate_factory.py +0 -0
  374. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/runtime/__init__.py +0 -0
  375. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/servicer/__init__.py +0 -0
  376. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/servicer/clientappio/__init__.py +0 -0
  377. {flwr_nightly-1.20.0.dev20250716 → flwr_nightly-1.20.0.dev20250718}/py/flwr/supernode/start_client_internal.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: flwr-nightly
3
- Version: 1.20.0.dev20250716
3
+ Version: 1.20.0.dev20250718
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
@@ -18,6 +18,8 @@
18
18
  from typing import Callable
19
19
 
20
20
  from flwr.proto.message_pb2 import ( # pylint: disable=E0611
21
+ ConfirmMessageReceivedRequest,
22
+ ConfirmMessageReceivedResponse,
21
23
  PullObjectRequest,
22
24
  PullObjectResponse,
23
25
  PushObjectRequest,
@@ -27,6 +29,10 @@ from flwr.proto.node_pb2 import Node # pylint: disable=E0611
27
29
 
28
30
  from .inflatable_utils import ObjectIdNotPreregisteredError, ObjectUnavailableError
29
31
 
32
+ ConfirmMessageReceivedProtobuf = Callable[
33
+ [ConfirmMessageReceivedRequest], ConfirmMessageReceivedResponse
34
+ ]
35
+
30
36
 
31
37
  def make_pull_object_fn_protobuf(
32
38
  pull_object_protobuf: Callable[[PullObjectRequest], PullObjectResponse],
@@ -99,3 +105,37 @@ def make_push_object_fn_protobuf(
99
105
  raise ObjectIdNotPreregisteredError(object_id)
100
106
 
101
107
  return push_object_fn
108
+
109
+
110
+ def make_confirm_message_received_fn_protobuf(
111
+ confirm_message_received_protobuf: ConfirmMessageReceivedProtobuf,
112
+ node: Node,
113
+ run_id: int,
114
+ ) -> Callable[[str], None]:
115
+ """Create a confirm message received function that uses protobuf.
116
+
117
+ Parameters
118
+ ----------
119
+ confirm_message_received_protobuf : ConfirmMessageReceivedProtobuf
120
+ A callable that takes a `ConfirmMessageReceivedRequest` and returns a
121
+ `ConfirmMessageReceivedResponse`, confirming message receipt.
122
+ This function is typically backed by a gRPC client stub.
123
+ node : Node
124
+ The node making the request.
125
+ run_id : int
126
+ The run ID for the current message.
127
+
128
+ Returns
129
+ -------
130
+ Callable[[str], None]
131
+ A wrapper function that takes an object ID and confirms that
132
+ the message has been received.
133
+ """
134
+
135
+ def confirm_message_received_fn(object_id: str) -> None:
136
+ request = ConfirmMessageReceivedRequest(
137
+ node=node, run_id=run_id, message_object_id=object_id
138
+ )
139
+ confirm_message_received_protobuf(request)
140
+
141
+ return confirm_message_received_fn
@@ -19,7 +19,9 @@ import os
19
19
  import random
20
20
  import threading
21
21
  import time
22
- from typing import Callable, Optional
22
+ from typing import Callable, Optional, TypeVar
23
+
24
+ from flwr.proto.message_pb2 import ObjectTree # pylint: disable=E0611
23
25
 
24
26
  from .constant import (
25
27
  HEAD_BODY_DIVIDER,
@@ -38,6 +40,7 @@ from .inflatable import (
38
40
  get_object_head_values_from_object_content,
39
41
  get_object_id,
40
42
  is_valid_sha256_hash,
43
+ iterate_object_tree,
41
44
  )
42
45
  from .message import Message
43
46
  from .record import Array, ArrayRecord, ConfigRecord, MetricRecord, RecordDict
@@ -54,6 +57,8 @@ inflatable_class_registry: dict[str, type[InflatableObject]] = {
54
57
  RecordDict.__qualname__: RecordDict,
55
58
  }
56
59
 
60
+ T = TypeVar("T", bound=InflatableObject)
61
+
57
62
 
58
63
  class ObjectUnavailableError(Exception):
59
64
  """Exception raised when an object has been pre-registered but is not yet
@@ -348,3 +353,75 @@ def validate_object_content(content: bytes) -> None:
348
353
  raise UnexpectedObjectContentError(
349
354
  object_id=get_object_id(content), reason=str(err)
350
355
  ) from err
356
+
357
+
358
+ def pull_and_inflate_object_from_tree( # pylint: disable=R0913
359
+ object_tree: ObjectTree,
360
+ pull_object_fn: Callable[[str], bytes],
361
+ confirm_object_received_fn: Callable[[str], None],
362
+ *,
363
+ return_type: type[T] = InflatableObject, # type: ignore
364
+ max_concurrent_pulls: int = MAX_CONCURRENT_PULLS,
365
+ max_time: Optional[float] = PULL_MAX_TIME,
366
+ max_tries_per_object: Optional[int] = PULL_MAX_TRIES_PER_OBJECT,
367
+ initial_backoff: float = PULL_INITIAL_BACKOFF,
368
+ backoff_cap: float = PULL_BACKOFF_CAP,
369
+ ) -> T:
370
+ """Pull and inflate the head object from the provided object tree.
371
+
372
+ Parameters
373
+ ----------
374
+ object_tree : ObjectTree
375
+ The object tree containing the object ID and its descendants.
376
+ pull_object_fn : Callable[[str], bytes]
377
+ A function that takes an object ID and returns the object content as bytes.
378
+ confirm_object_received_fn : Callable[[str], None]
379
+ A function to confirm that the object has been received.
380
+ return_type : type[T] (default: InflatableObject)
381
+ The type of the object to return. Must be a subclass of `InflatableObject`.
382
+ max_concurrent_pulls : int (default: MAX_CONCURRENT_PULLS)
383
+ The maximum number of concurrent pulls to perform.
384
+ max_time : Optional[float] (default: PULL_MAX_TIME)
385
+ The maximum time to wait for all pulls to complete. If `None`, waits
386
+ indefinitely.
387
+ max_tries_per_object : Optional[int] (default: PULL_MAX_TRIES_PER_OBJECT)
388
+ The maximum number of attempts to pull each object. If `None`, pulls
389
+ indefinitely until the object is available.
390
+ initial_backoff : float (default: PULL_INITIAL_BACKOFF)
391
+ The initial backoff time in seconds for retrying pulls after an
392
+ `ObjectUnavailableError`.
393
+ backoff_cap : float (default: PULL_BACKOFF_CAP)
394
+ The maximum backoff time in seconds. Backoff times will not exceed this value.
395
+
396
+ Returns
397
+ -------
398
+ T
399
+ An instance of the specified return type containing the inflated object.
400
+ """
401
+ # Pull the main object and all its descendants
402
+ pulled_object_contents = pull_objects(
403
+ [tree.object_id for tree in iterate_object_tree(object_tree)],
404
+ pull_object_fn,
405
+ max_concurrent_pulls=max_concurrent_pulls,
406
+ max_time=max_time,
407
+ max_tries_per_object=max_tries_per_object,
408
+ initial_backoff=initial_backoff,
409
+ backoff_cap=backoff_cap,
410
+ )
411
+
412
+ # Confirm that all objects were pulled
413
+ confirm_object_received_fn(object_tree.object_id)
414
+
415
+ # Inflate the main object
416
+ inflated_object = inflate_object_from_contents(
417
+ object_tree.object_id, pulled_object_contents, keep_object_contents=False
418
+ )
419
+
420
+ # Check if the inflated object is of the expected type
421
+ if not isinstance(inflated_object, return_type):
422
+ raise TypeError(
423
+ f"Expected object of type {return_type.__name__}, "
424
+ f"but got {type(inflated_object).__name__}."
425
+ )
426
+
427
+ return inflated_object
@@ -321,8 +321,8 @@ class Array(InflatableObject):
321
321
  Array
322
322
  The inflated Array.
323
323
  """
324
- if not children:
325
- raise ValueError("`Array` objects must have children.")
324
+ if children is None:
325
+ children = {}
326
326
 
327
327
  obj_body = get_object_body(object_content, cls)
328
328
 
@@ -19,7 +19,6 @@ from collections import OrderedDict
19
19
  from typing import Any, cast
20
20
 
21
21
  # pylint: disable=E0611
22
- from flwr.proto.clientappio_pb2 import ClientAppOutputCode, ClientAppOutputStatus
23
22
  from flwr.proto.fab_pb2 import Fab as ProtoFab
24
23
  from flwr.proto.message_pb2 import Context as ProtoContext
25
24
  from flwr.proto.message_pb2 import Message as ProtoMessage
@@ -653,33 +652,6 @@ def run_from_proto(run_proto: ProtoRun) -> typing.Run:
653
652
  return run
654
653
 
655
654
 
656
- # === ClientApp status messages ===
657
-
658
-
659
- def clientappstatus_to_proto(
660
- status: typing.ClientAppOutputStatus,
661
- ) -> ClientAppOutputStatus:
662
- """Serialize `ClientAppOutputStatus` to ProtoBuf."""
663
- code = ClientAppOutputCode.SUCCESS
664
- if status.code == typing.ClientAppOutputCode.DEADLINE_EXCEEDED:
665
- code = ClientAppOutputCode.DEADLINE_EXCEEDED
666
- if status.code == typing.ClientAppOutputCode.UNKNOWN_ERROR:
667
- code = ClientAppOutputCode.UNKNOWN_ERROR
668
- return ClientAppOutputStatus(code=code, message=status.message)
669
-
670
-
671
- def clientappstatus_from_proto(
672
- msg: ClientAppOutputStatus,
673
- ) -> typing.ClientAppOutputStatus:
674
- """Deserialize `ClientAppOutputStatus` from ProtoBuf."""
675
- code = typing.ClientAppOutputCode.SUCCESS
676
- if msg.code == ClientAppOutputCode.DEADLINE_EXCEEDED:
677
- code = typing.ClientAppOutputCode.DEADLINE_EXCEEDED
678
- if msg.code == ClientAppOutputCode.UNKNOWN_ERROR:
679
- code = typing.ClientAppOutputCode.UNKNOWN_ERROR
680
- return typing.ClientAppOutputStatus(code=code, message=msg.message)
681
-
682
-
683
655
  # === Run status ===
684
656
 
685
657
 
@@ -29,8 +29,6 @@ from flwr.cli.config_utils import get_fab_metadata
29
29
  from flwr.cli.install import install_from_fab
30
30
  from flwr.client.client import Client
31
31
  from flwr.client.client_app import ClientApp, LoadClientAppError
32
- from flwr.client.grpc_adapter_client.connection import grpc_adapter
33
- from flwr.client.grpc_rere_client.connection import grpc_request_response
34
32
  from flwr.client.message_handler.message_handler import handle_control_message
35
33
  from flwr.client.numpy_client import NumPyClient
36
34
  from flwr.client.run_info_store import DeprecatedRunInfoStore
@@ -39,10 +37,7 @@ from flwr.common import GRPC_MAX_MESSAGE_LENGTH, Context, EventType, Message, ev
39
37
  from flwr.common.address import parse_address
40
38
  from flwr.common.constant import (
41
39
  MAX_RETRY_DELAY,
42
- TRANSPORT_TYPE_GRPC_ADAPTER,
43
40
  TRANSPORT_TYPE_GRPC_BIDI,
44
- TRANSPORT_TYPE_GRPC_RERE,
45
- TRANSPORT_TYPE_REST,
46
41
  TRANSPORT_TYPES,
47
42
  ErrorCode,
48
43
  )
@@ -121,10 +116,8 @@ def start_client(
121
116
  Starts an insecure gRPC connection when True. Enables HTTPS connection
122
117
  when False, using system certificates if `root_certificates` is None.
123
118
  transport : Optional[str] (default: None)
124
- Configure the transport layer. Allowed values:
125
- - 'grpc-bidi': gRPC, bidirectional streaming
126
- - 'grpc-rere': gRPC, request-response (experimental)
127
- - 'rest': HTTP (experimental)
119
+ **[Deprecated]** This argument is no longer supported and will be
120
+ removed in a future release.
128
121
  authentication_keys : Optional[Tuple[PrivateKey, PublicKey]] (default: None)
129
122
  Tuple containing the elliptic curve private key and public key for
130
123
  authentication from the cryptography library.
@@ -180,6 +173,12 @@ def start_client(
180
173
  )
181
174
  warn_deprecated_feature(name=msg)
182
175
 
176
+ if transport is not None and transport != "grpc-bidi":
177
+ raise ValueError(
178
+ f"Transport type {transport} is not supported. "
179
+ "Use 'grpc-bidi' or None (default) instead."
180
+ )
181
+
183
182
  event(EventType.START_CLIENT_ENTER)
184
183
  start_client_internal(
185
184
  server_address=server_address,
@@ -429,7 +428,7 @@ def start_client_internal(
429
428
 
430
429
  run: Run = runs[run_id]
431
430
  if get_fab is not None and run.fab_hash:
432
- fab = get_fab(run.fab_hash, run_id)
431
+ fab = get_fab(run.fab_hash, run_id) # pylint: disable=E1102
433
432
  # If `ClientApp` runs in the same process, install the FAB
434
433
  install_from_fab(fab.content, flwr_path, True)
435
434
  fab_id, fab_version = get_fab_metadata(fab.content)
@@ -573,10 +572,8 @@ def start_numpy_client(
573
572
  Starts an insecure gRPC connection when True. Enables HTTPS connection
574
573
  when False, using system certificates if `root_certificates` is None.
575
574
  transport : Optional[str] (default: None)
576
- Configure the transport layer. Allowed values:
577
- - 'grpc-bidi': gRPC, bidirectional streaming
578
- - 'grpc-rere': gRPC, request-response (experimental)
579
- - 'rest': HTTP (experimental)
575
+ **[Deprecated]** This argument is no longer supported and will be
576
+ removed in a future release.
580
577
 
581
578
  Examples
582
579
  --------
@@ -672,23 +669,9 @@ def _init_connection(transport: Optional[str], server_address: str) -> tuple[
672
669
  if transport is None:
673
670
  transport = TRANSPORT_TYPE_GRPC_BIDI
674
671
 
675
- # Use either gRPC bidirectional streaming or REST request/response
676
- if transport == TRANSPORT_TYPE_REST:
677
- try:
678
- from requests.exceptions import ConnectionError as RequestsConnectionError
679
-
680
- from flwr.client.rest_client.connection import http_request_response
681
- except ModuleNotFoundError:
682
- flwr_exit(ExitCode.COMMON_MISSING_EXTRA_REST)
683
- if server_address[:4] != "http":
684
- flwr_exit(ExitCode.SUPERNODE_REST_ADDRESS_INVALID)
685
- connection, error_type = http_request_response, RequestsConnectionError
686
- elif transport == TRANSPORT_TYPE_GRPC_RERE:
687
- connection, error_type = grpc_request_response, RpcError
688
- elif transport == TRANSPORT_TYPE_GRPC_ADAPTER:
689
- connection, error_type = grpc_adapter, RpcError
690
- elif transport == TRANSPORT_TYPE_GRPC_BIDI:
691
- connection, error_type = grpc_connection, RpcError # type: ignore[assignment]
672
+ # Use gRPC bidirectional streaming
673
+ if transport == TRANSPORT_TYPE_GRPC_BIDI:
674
+ connection, error_type = grpc_connection, RpcError
692
675
  else:
693
676
  raise ValueError(
694
677
  f"Unknown transport type: {transport} (possible: {TRANSPORT_TYPES})"
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/appio.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 message_pb2 as flwr_dot_proto_dot_message__pb2
16
+ from flwr.proto import fab_pb2 as flwr_dot_proto_dot_fab__pb2
17
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
18
+
19
+
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x66lwr/proto/appio.proto\x12\nflwr.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x14\x66lwr/proto/run.proto\"\x99\x01\n\x16PushAppMessagesRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12*\n\rmessages_list\x18\x02 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\x12\x34\n\x14message_object_trees\x18\x04 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"\xcc\x01\n\x17PushAppMessagesResponse\x12\x13\n\x0bmessage_ids\x18\x01 \x03(\t\x12O\n\x0fobjects_to_push\x18\x02 \x03(\x0b\x32\x36.flwr.proto.PushAppMessagesResponse.ObjectsToPushEntry\x1aK\n\x12ObjectsToPushEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12$\n\x05value\x18\x02 \x01(\x0b\x32\x15.flwr.proto.ObjectIDs:\x02\x38\x01\"L\n\x16PullAppMessagesRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12\x13\n\x0bmessage_ids\x18\x02 \x03(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x04\"{\n\x17PullAppMessagesResponse\x12*\n\rmessages_list\x18\x01 \x03(\x0b\x32\x13.flwr.proto.Message\x12\x34\n\x14message_object_trees\x18\x02 \x03(\x0b\x32\x16.flwr.proto.ObjectTree\"%\n\x14PullAppInputsRequest\x12\r\n\x05token\x18\x01 \x01(\t\"y\n\x15PullAppInputsResponse\x12$\n\x07\x63ontext\x18\x01 \x01(\x0b\x32\x13.flwr.proto.Context\x12\x1c\n\x03run\x18\x02 \x01(\x0b\x32\x0f.flwr.proto.Run\x12\x1c\n\x03\x66\x61\x62\x18\x03 \x01(\x0b\x32\x0f.flwr.proto.Fab\"\\\n\x15PushAppOutputsRequest\x12\r\n\x05token\x18\x01 \x01(\t\x12\x0e\n\x06run_id\x18\x02 \x01(\x04\x12$\n\x07\x63ontext\x18\x03 \x01(\x0b\x32\x13.flwr.proto.Context\"\x18\n\x16PushAppOutputsResponseb\x06proto3')
21
+
22
+ _globals = globals()
23
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
24
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.appio_pb2', _globals)
25
+ if _descriptor._USE_C_DESCRIPTORS == False:
26
+ DESCRIPTOR._options = None
27
+ _globals['_PUSHAPPMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._options = None
28
+ _globals['_PUSHAPPMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_options = b'8\001'
29
+ _globals['_PUSHAPPMESSAGESREQUEST']._serialized_start=109
30
+ _globals['_PUSHAPPMESSAGESREQUEST']._serialized_end=262
31
+ _globals['_PUSHAPPMESSAGESRESPONSE']._serialized_start=265
32
+ _globals['_PUSHAPPMESSAGESRESPONSE']._serialized_end=469
33
+ _globals['_PUSHAPPMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_start=394
34
+ _globals['_PUSHAPPMESSAGESRESPONSE_OBJECTSTOPUSHENTRY']._serialized_end=469
35
+ _globals['_PULLAPPMESSAGESREQUEST']._serialized_start=471
36
+ _globals['_PULLAPPMESSAGESREQUEST']._serialized_end=547
37
+ _globals['_PULLAPPMESSAGESRESPONSE']._serialized_start=549
38
+ _globals['_PULLAPPMESSAGESRESPONSE']._serialized_end=672
39
+ _globals['_PULLAPPINPUTSREQUEST']._serialized_start=674
40
+ _globals['_PULLAPPINPUTSREQUEST']._serialized_end=711
41
+ _globals['_PULLAPPINPUTSRESPONSE']._serialized_start=713
42
+ _globals['_PULLAPPINPUTSRESPONSE']._serialized_end=834
43
+ _globals['_PUSHAPPOUTPUTSREQUEST']._serialized_start=836
44
+ _globals['_PUSHAPPOUTPUTSREQUEST']._serialized_end=928
45
+ _globals['_PUSHAPPOUTPUTSRESPONSE']._serialized_start=930
46
+ _globals['_PUSHAPPOUTPUTSRESPONSE']._serialized_end=954
47
+ # @@protoc_insertion_point(module_scope)
@@ -20,9 +20,11 @@ class PushAppMessagesRequest(google.protobuf.message.Message):
20
20
  PushAppMessages messages
21
21
  """
22
22
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
23
+ TOKEN_FIELD_NUMBER: builtins.int
23
24
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
24
25
  RUN_ID_FIELD_NUMBER: builtins.int
25
26
  MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
27
+ token: typing.Text
26
28
  @property
27
29
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
28
30
  run_id: builtins.int
@@ -30,11 +32,12 @@ class PushAppMessagesRequest(google.protobuf.message.Message):
30
32
  def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
31
33
  def __init__(self,
32
34
  *,
35
+ token: typing.Text = ...,
33
36
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
34
37
  run_id: builtins.int = ...,
35
38
  message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
36
39
  ) -> None: ...
37
- def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","run_id",b"run_id"]) -> None: ...
40
+ def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list","run_id",b"run_id","token",b"token"]) -> None: ...
38
41
  global___PushAppMessagesRequest = PushAppMessagesRequest
39
42
 
40
43
  class PushAppMessagesResponse(google.protobuf.message.Message):
@@ -71,55 +74,48 @@ global___PushAppMessagesResponse = PushAppMessagesResponse
71
74
  class PullAppMessagesRequest(google.protobuf.message.Message):
72
75
  """PullAppMessages messages"""
73
76
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
77
+ TOKEN_FIELD_NUMBER: builtins.int
74
78
  MESSAGE_IDS_FIELD_NUMBER: builtins.int
75
79
  RUN_ID_FIELD_NUMBER: builtins.int
80
+ token: typing.Text
76
81
  @property
77
82
  def message_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
78
83
  run_id: builtins.int
79
84
  def __init__(self,
80
85
  *,
86
+ token: typing.Text = ...,
81
87
  message_ids: typing.Optional[typing.Iterable[typing.Text]] = ...,
82
88
  run_id: builtins.int = ...,
83
89
  ) -> None: ...
84
- def ClearField(self, field_name: typing_extensions.Literal["message_ids",b"message_ids","run_id",b"run_id"]) -> None: ...
90
+ def ClearField(self, field_name: typing_extensions.Literal["message_ids",b"message_ids","run_id",b"run_id","token",b"token"]) -> None: ...
85
91
  global___PullAppMessagesRequest = PullAppMessagesRequest
86
92
 
87
93
  class PullAppMessagesResponse(google.protobuf.message.Message):
88
94
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
89
- class ObjectsToPullEntry(google.protobuf.message.Message):
90
- DESCRIPTOR: google.protobuf.descriptor.Descriptor
91
- KEY_FIELD_NUMBER: builtins.int
92
- VALUE_FIELD_NUMBER: builtins.int
93
- key: typing.Text
94
- @property
95
- def value(self) -> flwr.proto.message_pb2.ObjectIDs: ...
96
- def __init__(self,
97
- *,
98
- key: typing.Text = ...,
99
- value: typing.Optional[flwr.proto.message_pb2.ObjectIDs] = ...,
100
- ) -> None: ...
101
- def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
102
- def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
103
-
104
95
  MESSAGES_LIST_FIELD_NUMBER: builtins.int
105
- OBJECTS_TO_PULL_FIELD_NUMBER: builtins.int
96
+ MESSAGE_OBJECT_TREES_FIELD_NUMBER: builtins.int
106
97
  @property
107
98
  def messages_list(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.Message]: ...
108
99
  @property
109
- def objects_to_pull(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.message_pb2.ObjectIDs]: ...
100
+ def message_object_trees(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[flwr.proto.message_pb2.ObjectTree]: ...
110
101
  def __init__(self,
111
102
  *,
112
103
  messages_list: typing.Optional[typing.Iterable[flwr.proto.message_pb2.Message]] = ...,
113
- objects_to_pull: typing.Optional[typing.Mapping[typing.Text, flwr.proto.message_pb2.ObjectIDs]] = ...,
104
+ message_object_trees: typing.Optional[typing.Iterable[flwr.proto.message_pb2.ObjectTree]] = ...,
114
105
  ) -> None: ...
115
- def ClearField(self, field_name: typing_extensions.Literal["messages_list",b"messages_list","objects_to_pull",b"objects_to_pull"]) -> None: ...
106
+ def ClearField(self, field_name: typing_extensions.Literal["message_object_trees",b"message_object_trees","messages_list",b"messages_list"]) -> None: ...
116
107
  global___PullAppMessagesResponse = PullAppMessagesResponse
117
108
 
118
109
  class PullAppInputsRequest(google.protobuf.message.Message):
119
110
  """PullAppInputs messages"""
120
111
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
112
+ TOKEN_FIELD_NUMBER: builtins.int
113
+ token: typing.Text
121
114
  def __init__(self,
115
+ *,
116
+ token: typing.Text = ...,
122
117
  ) -> None: ...
118
+ def ClearField(self, field_name: typing_extensions.Literal["token",b"token"]) -> None: ...
123
119
  global___PullAppInputsRequest = PullAppInputsRequest
124
120
 
125
121
  class PullAppInputsResponse(google.protobuf.message.Message):
@@ -146,18 +142,21 @@ global___PullAppInputsResponse = PullAppInputsResponse
146
142
  class PushAppOutputsRequest(google.protobuf.message.Message):
147
143
  """PushAppInputs messages"""
148
144
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
145
+ TOKEN_FIELD_NUMBER: builtins.int
149
146
  RUN_ID_FIELD_NUMBER: builtins.int
150
147
  CONTEXT_FIELD_NUMBER: builtins.int
148
+ token: typing.Text
151
149
  run_id: builtins.int
152
150
  @property
153
151
  def context(self) -> flwr.proto.message_pb2.Context: ...
154
152
  def __init__(self,
155
153
  *,
154
+ token: typing.Text = ...,
156
155
  run_id: builtins.int = ...,
157
156
  context: typing.Optional[flwr.proto.message_pb2.Context] = ...,
158
157
  ) -> None: ...
159
158
  def HasField(self, field_name: typing_extensions.Literal["context",b"context"]) -> builtins.bool: ...
160
- def ClearField(self, field_name: typing_extensions.Literal["context",b"context","run_id",b"run_id"]) -> None: ...
159
+ def ClearField(self, field_name: typing_extensions.Literal["context",b"context","run_id",b"run_id","token",b"token"]) -> None: ...
161
160
  global___PushAppOutputsRequest = PushAppOutputsRequest
162
161
 
163
162
  class PushAppOutputsResponse(google.protobuf.message.Message):
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/clientappio.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 fab_pb2 as flwr_dot_proto_dot_fab__pb2
16
+ from flwr.proto import run_pb2 as flwr_dot_proto_dot_run__pb2
17
+ from flwr.proto import message_pb2 as flwr_dot_proto_dot_message__pb2
18
+ from flwr.proto import appio_pb2 as flwr_dot_proto_dot_appio__pb2
19
+
20
+
21
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x66lwr/proto/clientappio.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x14\x66lwr/proto/run.proto\x1a\x18\x66lwr/proto/message.proto\x1a\x16\x66lwr/proto/appio.proto\"%\n#GetRunIdsWithPendingMessagesRequest\"7\n$GetRunIdsWithPendingMessagesResponse\x12\x0f\n\x07run_ids\x18\x01 \x03(\x04\"%\n\x13RequestTokenRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x04\"%\n\x14RequestTokenResponse\x12\r\n\x05token\x18\x01 \x01(\t2\xec\x06\n\x0b\x43lientAppIo\x12\x83\x01\n\x1cGetRunIdsWithPendingMessages\x12/.flwr.proto.GetRunIdsWithPendingMessagesRequest\x1a\x30.flwr.proto.GetRunIdsWithPendingMessagesResponse\"\x00\x12S\n\x0cRequestToken\x12\x1f.flwr.proto.RequestTokenRequest\x1a .flwr.proto.RequestTokenResponse\"\x00\x12\\\n\x13PullClientAppInputs\x12 .flwr.proto.PullAppInputsRequest\x1a!.flwr.proto.PullAppInputsResponse\"\x00\x12_\n\x14PushClientAppOutputs\x12!.flwr.proto.PushAppOutputsRequest\x1a\".flwr.proto.PushAppOutputsResponse\"\x00\x12X\n\x0bPushMessage\x12\".flwr.proto.PushAppMessagesRequest\x1a#.flwr.proto.PushAppMessagesResponse\"\x00\x12X\n\x0bPullMessage\x12\".flwr.proto.PullAppMessagesRequest\x1a#.flwr.proto.PullAppMessagesResponse\"\x00\x12M\n\nPushObject\x12\x1d.flwr.proto.PushObjectRequest\x1a\x1e.flwr.proto.PushObjectResponse\"\x00\x12M\n\nPullObject\x12\x1d.flwr.proto.PullObjectRequest\x1a\x1e.flwr.proto.PullObjectResponse\"\x00\x12q\n\x16\x43onfirmMessageReceived\x12).flwr.proto.ConfirmMessageReceivedRequest\x1a*.flwr.proto.ConfirmMessageReceivedResponse\"\x00\x62\x06proto3')
22
+
23
+ _globals = globals()
24
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
25
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.clientappio_pb2', _globals)
26
+ if _descriptor._USE_C_DESCRIPTORS == False:
27
+ DESCRIPTOR._options = None
28
+ _globals['_GETRUNIDSWITHPENDINGMESSAGESREQUEST']._serialized_start=138
29
+ _globals['_GETRUNIDSWITHPENDINGMESSAGESREQUEST']._serialized_end=175
30
+ _globals['_GETRUNIDSWITHPENDINGMESSAGESRESPONSE']._serialized_start=177
31
+ _globals['_GETRUNIDSWITHPENDINGMESSAGESRESPONSE']._serialized_end=232
32
+ _globals['_REQUESTTOKENREQUEST']._serialized_start=234
33
+ _globals['_REQUESTTOKENREQUEST']._serialized_end=271
34
+ _globals['_REQUESTTOKENRESPONSE']._serialized_start=273
35
+ _globals['_REQUESTTOKENRESPONSE']._serialized_end=310
36
+ _globals['_CLIENTAPPIO']._serialized_start=313
37
+ _globals['_CLIENTAPPIO']._serialized_end=1189
38
+ # @@protoc_insertion_point(module_scope)
@@ -0,0 +1,54 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+ import builtins
6
+ import google.protobuf.descriptor
7
+ import google.protobuf.internal.containers
8
+ import google.protobuf.message
9
+ import typing
10
+ import typing_extensions
11
+
12
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
13
+
14
+ class GetRunIdsWithPendingMessagesRequest(google.protobuf.message.Message):
15
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
16
+ def __init__(self,
17
+ ) -> None: ...
18
+ global___GetRunIdsWithPendingMessagesRequest = GetRunIdsWithPendingMessagesRequest
19
+
20
+ class GetRunIdsWithPendingMessagesResponse(google.protobuf.message.Message):
21
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
22
+ RUN_IDS_FIELD_NUMBER: builtins.int
23
+ @property
24
+ def run_ids(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.int]:
25
+ """List of run IDs"""
26
+ pass
27
+ def __init__(self,
28
+ *,
29
+ run_ids: typing.Optional[typing.Iterable[builtins.int]] = ...,
30
+ ) -> None: ...
31
+ def ClearField(self, field_name: typing_extensions.Literal["run_ids",b"run_ids"]) -> None: ...
32
+ global___GetRunIdsWithPendingMessagesResponse = GetRunIdsWithPendingMessagesResponse
33
+
34
+ class RequestTokenRequest(google.protobuf.message.Message):
35
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
36
+ RUN_ID_FIELD_NUMBER: builtins.int
37
+ run_id: builtins.int
38
+ def __init__(self,
39
+ *,
40
+ run_id: builtins.int = ...,
41
+ ) -> None: ...
42
+ def ClearField(self, field_name: typing_extensions.Literal["run_id",b"run_id"]) -> None: ...
43
+ global___RequestTokenRequest = RequestTokenRequest
44
+
45
+ class RequestTokenResponse(google.protobuf.message.Message):
46
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
47
+ TOKEN_FIELD_NUMBER: builtins.int
48
+ token: typing.Text
49
+ def __init__(self,
50
+ *,
51
+ token: typing.Text = ...,
52
+ ) -> None: ...
53
+ def ClearField(self, field_name: typing_extensions.Literal["token",b"token"]) -> None: ...
54
+ global___RequestTokenResponse = RequestTokenResponse