flwr-nightly 1.11.0.dev20240813__tar.gz → 1.11.0.dev20240815__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (292) hide show
  1. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/PKG-INFO +1 -1
  2. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/pyproject.toml +1 -1
  3. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/run/run.py +6 -2
  4. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/app.py +1 -1
  5. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_rere_client/connection.py +1 -0
  6. flwr_nightly-1.11.0.dev20240815/src/py/flwr/client/process/__init__.py +15 -0
  7. flwr_nightly-1.11.0.dev20240815/src/py/flwr/client/process/clientappio_servicer.py +145 -0
  8. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/rest_client/connection.py +2 -1
  9. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/config.py +7 -2
  10. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/record/recordset.py +9 -7
  11. flwr_nightly-1.11.0.dev20240815/src/py/flwr/common/record/typeddict.py +75 -0
  12. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/recordset_compat.py +6 -6
  13. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/serde.py +24 -2
  14. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/typing.py +1 -0
  15. flwr_nightly-1.11.0.dev20240815/src/py/flwr/proto/exec_pb2.py +44 -0
  16. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/exec_pb2.pyi +7 -4
  17. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/message_pb2.py +2 -2
  18. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/message_pb2.pyi +4 -1
  19. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/app.py +12 -0
  20. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/driver/grpc_driver.py +1 -0
  21. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/driver/driver_grpc.py +3 -0
  22. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/driver/driver_servicer.py +14 -1
  23. flwr_nightly-1.11.0.dev20240815/src/py/flwr/server/superlink/ffs/ffs_factory.py +47 -0
  24. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/state/in_memory_state.py +7 -5
  25. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/state/sqlite_state.py +17 -7
  26. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/state/state.py +4 -3
  27. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/simulation/run_simulation.py +4 -1
  28. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/superexec/exec_servicer.py +1 -1
  29. flwr_nightly-1.11.0.dev20240813/src/py/flwr/common/record/typeddict.py +0 -113
  30. flwr_nightly-1.11.0.dev20240813/src/py/flwr/proto/exec_pb2.py +0 -43
  31. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/LICENSE +0 -0
  32. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/README.md +0 -0
  33. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/__init__.py +0 -0
  34. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/__init__.py +0 -0
  35. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/app.py +0 -0
  36. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/build.py +0 -0
  37. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/config_utils.py +0 -0
  38. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/example.py +0 -0
  39. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/install.py +0 -0
  40. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/__init__.py +0 -0
  41. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/new.py +0 -0
  42. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/__init__.py +0 -0
  43. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/.gitignore.tpl +0 -0
  44. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/README.flowertune.md.tpl +0 -0
  45. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/README.md.tpl +0 -0
  46. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/__init__.py +0 -0
  47. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/__init__.py +0 -0
  48. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/__init__.py.tpl +0 -0
  49. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/client.huggingface.py.tpl +0 -0
  50. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/client.jax.py.tpl +0 -0
  51. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/client.mlx.py.tpl +0 -0
  52. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/client.numpy.py.tpl +0 -0
  53. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/client.pytorch.py.tpl +0 -0
  54. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/client.sklearn.py.tpl +0 -0
  55. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/client.tensorflow.py.tpl +0 -0
  56. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/__init__.py +0 -0
  57. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/app.py.tpl +0 -0
  58. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/client.py.tpl +0 -0
  59. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/config.yaml.tpl +0 -0
  60. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/dataset.py.tpl +0 -0
  61. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/models.py.tpl +0 -0
  62. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/server.py.tpl +0 -0
  63. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/flwr_tune/static_config.yaml.tpl +0 -0
  64. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/server.huggingface.py.tpl +0 -0
  65. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/server.jax.py.tpl +0 -0
  66. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/server.mlx.py.tpl +0 -0
  67. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/server.numpy.py.tpl +0 -0
  68. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/server.pytorch.py.tpl +0 -0
  69. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/server.sklearn.py.tpl +0 -0
  70. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/server.tensorflow.py.tpl +0 -0
  71. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/task.huggingface.py.tpl +0 -0
  72. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/task.jax.py.tpl +0 -0
  73. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/task.mlx.py.tpl +0 -0
  74. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/task.pytorch.py.tpl +0 -0
  75. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/code/task.tensorflow.py.tpl +0 -0
  76. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +0 -0
  77. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +0 -0
  78. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.jax.toml.tpl +0 -0
  79. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +0 -0
  80. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +0 -0
  81. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +0 -0
  82. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +0 -0
  83. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +0 -0
  84. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/run/__init__.py +0 -0
  85. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/cli/utils.py +0 -0
  86. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/__init__.py +0 -0
  87. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/client.py +0 -0
  88. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/client_app.py +0 -0
  89. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  90. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_adapter_client/__init__.py +0 -0
  91. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_adapter_client/connection.py +0 -0
  92. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  93. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_client/connection.py +0 -0
  94. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  95. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_rere_client/client_interceptor.py +0 -0
  96. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/grpc_rere_client/grpc_adapter.py +0 -0
  97. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/heartbeat.py +0 -0
  98. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/message_handler/__init__.py +0 -0
  99. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  100. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  101. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/__init__.py +0 -0
  102. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/centraldp_mods.py +0 -0
  103. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/comms_mods.py +0 -0
  104. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/localdp_mod.py +0 -0
  105. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  106. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/secure_aggregation/secagg_mod.py +0 -0
  107. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  108. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/mod/utils.py +0 -0
  109. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/node_state.py +0 -0
  110. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/node_state_tests.py +0 -0
  111. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/numpy_client.py +0 -0
  112. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/rest_client/__init__.py +0 -0
  113. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/supernode/__init__.py +0 -0
  114. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/supernode/app.py +0 -0
  115. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/client/typing.py +0 -0
  116. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/__init__.py +0 -0
  117. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/address.py +0 -0
  118. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/constant.py +0 -0
  119. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/context.py +0 -0
  120. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/date.py +0 -0
  121. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/differential_privacy.py +0 -0
  122. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/differential_privacy_constants.py +0 -0
  123. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/dp.py +0 -0
  124. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/exit_handlers.py +0 -0
  125. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/grpc.py +0 -0
  126. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/logger.py +0 -0
  127. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/message.py +0 -0
  128. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/object_ref.py +0 -0
  129. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/parameter.py +0 -0
  130. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/pyproject.py +0 -0
  131. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/record/__init__.py +0 -0
  132. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/record/configsrecord.py +0 -0
  133. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/record/conversion_utils.py +0 -0
  134. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/record/metricsrecord.py +0 -0
  135. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/record/parametersrecord.py +0 -0
  136. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/retry_invoker.py +0 -0
  137. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  138. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  139. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  140. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  141. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  142. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  143. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  144. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  145. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/telemetry.py +0 -0
  146. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/common/version.py +0 -0
  147. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/__init__.py +0 -0
  148. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/clientappio_pb2.py +0 -0
  149. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/clientappio_pb2.pyi +0 -0
  150. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/clientappio_pb2_grpc.py +0 -0
  151. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/clientappio_pb2_grpc.pyi +0 -0
  152. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/common_pb2.py +0 -0
  153. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/common_pb2.pyi +0 -0
  154. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/common_pb2_grpc.py +0 -0
  155. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/common_pb2_grpc.pyi +0 -0
  156. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/driver_pb2.py +0 -0
  157. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  158. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  159. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  160. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/error_pb2.py +0 -0
  161. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/error_pb2.pyi +0 -0
  162. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/error_pb2_grpc.py +0 -0
  163. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/error_pb2_grpc.pyi +0 -0
  164. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/exec_pb2_grpc.py +0 -0
  165. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/exec_pb2_grpc.pyi +0 -0
  166. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fab_pb2.py +0 -0
  167. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fab_pb2.pyi +0 -0
  168. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fab_pb2_grpc.py +0 -0
  169. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fab_pb2_grpc.pyi +0 -0
  170. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fleet_pb2.py +0 -0
  171. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  172. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  173. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  174. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/grpcadapter_pb2.py +0 -0
  175. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/grpcadapter_pb2.pyi +0 -0
  176. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/grpcadapter_pb2_grpc.py +0 -0
  177. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/grpcadapter_pb2_grpc.pyi +0 -0
  178. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/message_pb2_grpc.py +0 -0
  179. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/message_pb2_grpc.pyi +0 -0
  180. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/node_pb2.py +0 -0
  181. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/node_pb2.pyi +0 -0
  182. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  183. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  184. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/recordset_pb2.py +0 -0
  185. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  186. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  187. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  188. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/run_pb2.py +0 -0
  189. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/run_pb2.pyi +0 -0
  190. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/run_pb2_grpc.py +0 -0
  191. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/run_pb2_grpc.pyi +0 -0
  192. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/task_pb2.py +0 -0
  193. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/task_pb2.pyi +0 -0
  194. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  195. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  196. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/transport_pb2.py +0 -0
  197. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  198. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  199. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  200. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/py.typed +0 -0
  201. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/__init__.py +0 -0
  202. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/client_manager.py +0 -0
  203. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/client_proxy.py +0 -0
  204. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/compat/__init__.py +0 -0
  205. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/compat/app.py +0 -0
  206. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/compat/app_utils.py +0 -0
  207. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/compat/driver_client_proxy.py +0 -0
  208. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/compat/legacy_context.py +0 -0
  209. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/criterion.py +0 -0
  210. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/driver/__init__.py +0 -0
  211. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/driver/driver.py +0 -0
  212. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/driver/inmemory_driver.py +0 -0
  213. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/history.py +0 -0
  214. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/run_serverapp.py +0 -0
  215. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/server.py +0 -0
  216. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/server_app.py +0 -0
  217. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/server_config.py +0 -0
  218. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/serverapp_components.py +0 -0
  219. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/__init__.py +0 -0
  220. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/aggregate.py +0 -0
  221. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/bulyan.py +0 -0
  222. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/dp_adaptive_clipping.py +0 -0
  223. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/dp_fixed_clipping.py +0 -0
  224. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  225. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  226. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  227. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  228. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedadam.py +0 -0
  229. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedavg.py +0 -0
  230. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  231. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  232. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  233. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedopt.py +0 -0
  234. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedprox.py +0 -0
  235. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  236. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  237. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  238. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  239. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  240. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/krum.py +0 -0
  241. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  242. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/strategy/strategy.py +0 -0
  243. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/__init__.py +0 -0
  244. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/driver/__init__.py +0 -0
  245. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/ffs/__init__.py +0 -0
  246. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/ffs/disk_ffs.py +0 -0
  247. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/ffs/ffs.py +0 -0
  248. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/__init__.py +0 -0
  249. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_adapter/__init__.py +0 -0
  250. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +0 -0
  251. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_bidi/__init__.py +0 -0
  252. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  253. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py +0 -0
  254. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  255. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +0 -0
  256. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_rere/__init__.py +0 -0
  257. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py +0 -0
  258. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +0 -0
  259. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/message_handler/__init__.py +0 -0
  260. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/message_handler/message_handler.py +0 -0
  261. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/rest_rere/__init__.py +0 -0
  262. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/rest_rere/rest_api.py +0 -0
  263. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/vce/__init__.py +0 -0
  264. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/vce/backend/__init__.py +0 -0
  265. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/vce/backend/backend.py +0 -0
  266. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/vce/backend/raybackend.py +0 -0
  267. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/fleet/vce/vce_api.py +0 -0
  268. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/state/__init__.py +0 -0
  269. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/state/state_factory.py +0 -0
  270. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/superlink/state/utils.py +0 -0
  271. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/typing.py +0 -0
  272. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/utils/__init__.py +0 -0
  273. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/utils/tensorboard.py +0 -0
  274. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/utils/validator.py +0 -0
  275. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/workflow/__init__.py +0 -0
  276. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/workflow/constant.py +0 -0
  277. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/workflow/default_workflows.py +0 -0
  278. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/workflow/secure_aggregation/__init__.py +0 -0
  279. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/workflow/secure_aggregation/secagg_workflow.py +0 -0
  280. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/server/workflow/secure_aggregation/secaggplus_workflow.py +0 -0
  281. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/simulation/__init__.py +0 -0
  282. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/simulation/app.py +0 -0
  283. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  284. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  285. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  286. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
  287. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/superexec/__init__.py +0 -0
  288. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/superexec/app.py +0 -0
  289. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/superexec/deployment.py +0 -0
  290. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/superexec/exec_grpc.py +0 -0
  291. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/superexec/executor.py +0 -0
  292. {flwr_nightly-1.11.0.dev20240813 → flwr_nightly-1.11.0.dev20240815}/src/py/flwr/superexec/simulation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.11.0.dev20240813
3
+ Version: 1.11.0.dev20240815
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "flwr-nightly"
7
- version = "1.11.0.dev20240813"
7
+ version = "1.11.0.dev20240815"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.ai>"]
@@ -14,6 +14,7 @@
14
14
  # ==============================================================================
15
15
  """Flower command line interface `run` command."""
16
16
 
17
+ import hashlib
17
18
  import subprocess
18
19
  import sys
19
20
  from logging import DEBUG
@@ -28,7 +29,8 @@ from flwr.cli.config_utils import load_and_validate
28
29
  from flwr.common.config import flatten_dict, parse_config_args
29
30
  from flwr.common.grpc import GRPC_MAX_MESSAGE_LENGTH, create_channel
30
31
  from flwr.common.logger import log
31
- from flwr.common.serde import user_config_to_proto
32
+ from flwr.common.serde import fab_to_proto, user_config_to_proto
33
+ from flwr.common.typing import Fab
32
34
  from flwr.proto.exec_pb2 import StartRunRequest # pylint: disable=E0611
33
35
  from flwr.proto.exec_pb2_grpc import ExecStub
34
36
 
@@ -163,9 +165,11 @@ def _run_with_superexec(
163
165
  stub = ExecStub(channel)
164
166
 
165
167
  fab_path = Path(build(app))
168
+ content = fab_path.read_bytes()
169
+ fab = Fab(hashlib.sha256(content).hexdigest(), content)
166
170
 
167
171
  req = StartRunRequest(
168
- fab_file=fab_path.read_bytes(),
172
+ fab=fab_to_proto(fab),
169
173
  override_config=user_config_to_proto(
170
174
  parse_config_args(config_overrides, separator=",")
171
175
  ),
@@ -398,7 +398,7 @@ def _start_client_internal(
398
398
  runs[run_id] = get_run(run_id)
399
399
  # If get_run is None, i.e., in grpc-bidi mode
400
400
  else:
401
- runs[run_id] = Run(run_id, "", "", {})
401
+ runs[run_id] = Run(run_id, "", "", "", {})
402
402
 
403
403
  # Register context for this run
404
404
  node_state.register_context(
@@ -286,6 +286,7 @@ def grpc_request_response( # pylint: disable=R0913, R0914, R0915
286
286
  run_id,
287
287
  get_run_response.run.fab_id,
288
288
  get_run_response.run.fab_version,
289
+ get_run_response.run.fab_hash,
289
290
  user_config_from_proto(get_run_response.run.override_config),
290
291
  )
291
292
 
@@ -0,0 +1,15 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Flower AppIO service."""
@@ -0,0 +1,145 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """ClientAppIo API servicer."""
16
+
17
+
18
+ from dataclasses import dataclass
19
+ from logging import DEBUG, ERROR
20
+ from typing import Optional
21
+
22
+ import grpc
23
+
24
+ from flwr.common import Context, Message, typing
25
+ from flwr.common.logger import log
26
+ from flwr.common.serde import (
27
+ clientappstatus_to_proto,
28
+ context_from_proto,
29
+ context_to_proto,
30
+ message_from_proto,
31
+ message_to_proto,
32
+ run_to_proto,
33
+ )
34
+ from flwr.common.typing import Run
35
+
36
+ # pylint: disable=E0611
37
+ from flwr.proto import clientappio_pb2_grpc
38
+ from flwr.proto.clientappio_pb2 import ( # pylint: disable=E0401
39
+ PullClientAppInputsRequest,
40
+ PullClientAppInputsResponse,
41
+ PushClientAppOutputsRequest,
42
+ PushClientAppOutputsResponse,
43
+ )
44
+
45
+
46
+ @dataclass
47
+ class ClientAppIoInputs:
48
+ """Specify the inputs to the ClientApp."""
49
+
50
+ message: Message
51
+ context: Context
52
+ run: Run
53
+ token: int
54
+
55
+
56
+ @dataclass
57
+ class ClientAppIoOutputs:
58
+ """Specify the outputs from the ClientApp."""
59
+
60
+ message: Message
61
+ context: Context
62
+
63
+
64
+ # pylint: disable=C0103,W0613,W0201
65
+ class ClientAppIoServicer(clientappio_pb2_grpc.ClientAppIoServicer):
66
+ """ClientAppIo API servicer."""
67
+
68
+ def __init__(self) -> None:
69
+ self.clientapp_input: Optional[ClientAppIoInputs] = None
70
+ self.clientapp_output: Optional[ClientAppIoOutputs] = None
71
+
72
+ def PullClientAppInputs(
73
+ self, request: PullClientAppInputsRequest, context: grpc.ServicerContext
74
+ ) -> PullClientAppInputsResponse:
75
+ """Pull Message, Context, and Run."""
76
+ log(DEBUG, "ClientAppIo.PullClientAppInputs")
77
+ if self.clientapp_input is None:
78
+ raise ValueError(
79
+ "ClientAppIoInputs not set before calling `PullClientAppInputs`."
80
+ )
81
+ if request.token != self.clientapp_input.token:
82
+ context.abort(
83
+ grpc.StatusCode.INVALID_ARGUMENT,
84
+ "Mismatch between ClientApp and SuperNode token",
85
+ )
86
+ return PullClientAppInputsResponse(
87
+ message=message_to_proto(self.clientapp_input.message),
88
+ context=context_to_proto(self.clientapp_input.context),
89
+ run=run_to_proto(self.clientapp_input.run),
90
+ )
91
+
92
+ def PushClientAppOutputs(
93
+ self, request: PushClientAppOutputsRequest, context: grpc.ServicerContext
94
+ ) -> PushClientAppOutputsResponse:
95
+ """Push Message and Context."""
96
+ log(DEBUG, "ClientAppIo.PushClientAppOutputs")
97
+ if self.clientapp_output is None:
98
+ raise ValueError(
99
+ "ClientAppIoOutputs not set before calling `PushClientAppOutputs`."
100
+ )
101
+ if self.clientapp_input is None:
102
+ raise ValueError(
103
+ "ClientAppIoInputs not set before calling `PushClientAppOutputs`."
104
+ )
105
+ if request.token != self.clientapp_input.token:
106
+ context.abort(
107
+ grpc.StatusCode.INVALID_ARGUMENT,
108
+ "Mismatch between ClientApp and SuperNode token",
109
+ )
110
+ try:
111
+ # Update Message and Context
112
+ self.clientapp_output.message = message_from_proto(request.message)
113
+ self.clientapp_output.context = context_from_proto(request.context)
114
+ # Set status
115
+ code = typing.ClientAppOutputCode.SUCCESS
116
+ status = typing.ClientAppOutputStatus(code=code, message="Success")
117
+ proto_status = clientappstatus_to_proto(status=status)
118
+ return PushClientAppOutputsResponse(status=proto_status)
119
+ except Exception as e: # pylint: disable=broad-exception-caught
120
+ log(ERROR, "ClientApp failed to push message to SuperNode, %s", e)
121
+ code = typing.ClientAppOutputCode.UNKNOWN_ERROR
122
+ status = typing.ClientAppOutputStatus(code=code, message="Push failed")
123
+ proto_status = clientappstatus_to_proto(status=status)
124
+ return PushClientAppOutputsResponse(status=proto_status)
125
+
126
+ def set_inputs(self, clientapp_input: ClientAppIoInputs) -> None:
127
+ """Set ClientApp inputs."""
128
+ log(DEBUG, "ClientAppIo.SetInputs")
129
+ if self.clientapp_input is not None or self.clientapp_output is not None:
130
+ raise ValueError(
131
+ "ClientAppIoInputs and ClientAppIoOutputs must not be set before "
132
+ "calling `set_inputs`."
133
+ )
134
+ self.clientapp_input = clientapp_input
135
+
136
+ def get_outputs(self) -> ClientAppIoOutputs:
137
+ """Get ClientApp outputs."""
138
+ log(DEBUG, "ClientAppIo.GetOutputs")
139
+ if self.clientapp_output is None:
140
+ raise ValueError("ClientAppIoOutputs not set before calling `get_outputs`.")
141
+ # Set outputs to a local variable and clear self.clientapp_output
142
+ output: ClientAppIoOutputs = self.clientapp_output
143
+ self.clientapp_input = None
144
+ self.clientapp_output = None
145
+ return output
@@ -358,12 +358,13 @@ def http_request_response( # pylint: disable=,R0913, R0914, R0915
358
358
  # Send the request
359
359
  res = _request(req, GetRunResponse, PATH_GET_RUN)
360
360
  if res is None:
361
- return Run(run_id, "", "", {})
361
+ return Run(run_id, "", "", "", {})
362
362
 
363
363
  return Run(
364
364
  run_id,
365
365
  res.run.fab_id,
366
366
  res.run.fab_version,
367
+ res.run.fab_hash,
367
368
  user_config_from_proto(res.run.override_config),
368
369
  )
369
370
 
@@ -74,10 +74,15 @@ def get_project_config(project_dir: Union[str, Path]) -> Dict[str, Any]:
74
74
  return config
75
75
 
76
76
 
77
- def _fuse_dicts(
77
+ def fuse_dicts(
78
78
  main_dict: UserConfig,
79
79
  override_dict: UserConfig,
80
80
  ) -> UserConfig:
81
+ """Merge a config with the overrides.
82
+
83
+ Remove the nesting by adding the nested keys as prefixes separated by dots, and fuse
84
+ it with the override dict.
85
+ """
81
86
  fused_dict = main_dict.copy()
82
87
 
83
88
  for key, value in override_dict.items():
@@ -96,7 +101,7 @@ def get_fused_config_from_dir(
96
101
  )
97
102
  flat_default_config = flatten_dict(default_config)
98
103
 
99
- return _fuse_dicts(flat_default_config, override_config)
104
+ return fuse_dicts(flat_default_config, override_config)
100
105
 
101
106
 
102
107
  def get_fused_config(run: Run, flwr_dir: Optional[Path]) -> UserConfig:
@@ -15,8 +15,10 @@
15
15
  """RecordSet."""
16
16
 
17
17
 
18
+ from __future__ import annotations
19
+
18
20
  from dataclasses import dataclass
19
- from typing import Dict, Optional, cast
21
+ from typing import cast
20
22
 
21
23
  from .configsrecord import ConfigsRecord
22
24
  from .metricsrecord import MetricsRecord
@@ -34,9 +36,9 @@ class RecordSetData:
34
36
 
35
37
  def __init__(
36
38
  self,
37
- parameters_records: Optional[Dict[str, ParametersRecord]] = None,
38
- metrics_records: Optional[Dict[str, MetricsRecord]] = None,
39
- configs_records: Optional[Dict[str, ConfigsRecord]] = None,
39
+ parameters_records: dict[str, ParametersRecord] | None = None,
40
+ metrics_records: dict[str, MetricsRecord] | None = None,
41
+ configs_records: dict[str, ConfigsRecord] | None = None,
40
42
  ) -> None:
41
43
  self.parameters_records = TypedDict[str, ParametersRecord](
42
44
  self._check_fn_str, self._check_fn_params
@@ -88,9 +90,9 @@ class RecordSet:
88
90
 
89
91
  def __init__(
90
92
  self,
91
- parameters_records: Optional[Dict[str, ParametersRecord]] = None,
92
- metrics_records: Optional[Dict[str, MetricsRecord]] = None,
93
- configs_records: Optional[Dict[str, ConfigsRecord]] = None,
93
+ parameters_records: dict[str, ParametersRecord] | None = None,
94
+ metrics_records: dict[str, MetricsRecord] | None = None,
95
+ configs_records: dict[str, ConfigsRecord] | None = None,
94
96
  ) -> None:
95
97
  data = RecordSetData(
96
98
  parameters_records=parameters_records,
@@ -0,0 +1,75 @@
1
+ # Copyright 2024 Flower Labs GmbH. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ # ==============================================================================
15
+ """Typed dict base class for *Records."""
16
+
17
+
18
+ from typing import Callable, Dict, Generic, Iterator, MutableMapping, TypeVar, cast
19
+
20
+ K = TypeVar("K") # Key type
21
+ V = TypeVar("V") # Value type
22
+
23
+
24
+ class TypedDict(MutableMapping[K, V], Generic[K, V]):
25
+ """Typed dictionary."""
26
+
27
+ def __init__(
28
+ self, check_key_fn: Callable[[K], None], check_value_fn: Callable[[V], None]
29
+ ):
30
+ self.__dict__["_check_key_fn"] = check_key_fn
31
+ self.__dict__["_check_value_fn"] = check_value_fn
32
+ self.__dict__["_data"] = {}
33
+
34
+ def __setitem__(self, key: K, value: V) -> None:
35
+ """Set the given key to the given value after type checking."""
36
+ # Check the types of key and value
37
+ cast(Callable[[K], None], self.__dict__["_check_key_fn"])(key)
38
+ cast(Callable[[V], None], self.__dict__["_check_value_fn"])(value)
39
+
40
+ # Set key-value pair
41
+ cast(Dict[K, V], self.__dict__["_data"])[key] = value
42
+
43
+ def __delitem__(self, key: K) -> None:
44
+ """Remove the item with the specified key."""
45
+ del cast(Dict[K, V], self.__dict__["_data"])[key]
46
+
47
+ def __getitem__(self, item: K) -> V:
48
+ """Return the value for the specified key."""
49
+ return cast(Dict[K, V], self.__dict__["_data"])[item]
50
+
51
+ def __iter__(self) -> Iterator[K]:
52
+ """Yield an iterator over the keys of the dictionary."""
53
+ return iter(cast(Dict[K, V], self.__dict__["_data"]))
54
+
55
+ def __repr__(self) -> str:
56
+ """Return a string representation of the dictionary."""
57
+ return cast(Dict[K, V], self.__dict__["_data"]).__repr__()
58
+
59
+ def __len__(self) -> int:
60
+ """Return the number of items in the dictionary."""
61
+ return len(cast(Dict[K, V], self.__dict__["_data"]))
62
+
63
+ def __contains__(self, key: object) -> bool:
64
+ """Check if the dictionary contains the specified key."""
65
+ return key in cast(Dict[K, V], self.__dict__["_data"])
66
+
67
+ def __eq__(self, other: object) -> bool:
68
+ """Compare this instance to another dictionary or TypedDict."""
69
+ data = cast(Dict[K, V], self.__dict__["_data"])
70
+ if isinstance(other, TypedDict):
71
+ other_data = cast(Dict[K, V], other.__dict__["_data"])
72
+ return data == other_data
73
+ if isinstance(other, dict):
74
+ return data == other
75
+ return NotImplemented
@@ -145,7 +145,7 @@ def _recordset_to_fit_or_evaluate_ins_components(
145
145
  # get config dict
146
146
  config_record = recordset.configs_records[f"{ins_str}.config"]
147
147
  # pylint: disable-next=protected-access
148
- config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record._data)
148
+ config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record)
149
149
 
150
150
  return parameters, config_dict
151
151
 
@@ -213,7 +213,7 @@ def recordset_to_fitres(recordset: RecordSet, keep_input: bool) -> FitRes:
213
213
  )
214
214
  configs_record = recordset.configs_records[f"{ins_str}.metrics"]
215
215
  # pylint: disable-next=protected-access
216
- metrics = _check_mapping_from_recordscalartype_to_scalar(configs_record._data)
216
+ metrics = _check_mapping_from_recordscalartype_to_scalar(configs_record)
217
217
  status = _extract_status_from_recordset(ins_str, recordset)
218
218
 
219
219
  return FitRes(
@@ -274,7 +274,7 @@ def recordset_to_evaluateres(recordset: RecordSet) -> EvaluateRes:
274
274
  configs_record = recordset.configs_records[f"{ins_str}.metrics"]
275
275
 
276
276
  # pylint: disable-next=protected-access
277
- metrics = _check_mapping_from_recordscalartype_to_scalar(configs_record._data)
277
+ metrics = _check_mapping_from_recordscalartype_to_scalar(configs_record)
278
278
  status = _extract_status_from_recordset(ins_str, recordset)
279
279
 
280
280
  return EvaluateRes(
@@ -314,7 +314,7 @@ def recordset_to_getparametersins(recordset: RecordSet) -> GetParametersIns:
314
314
  """Derive GetParametersIns from a RecordSet object."""
315
315
  config_record = recordset.configs_records["getparametersins.config"]
316
316
  # pylint: disable-next=protected-access
317
- config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record._data)
317
+ config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record)
318
318
 
319
319
  return GetParametersIns(config=config_dict)
320
320
 
@@ -365,7 +365,7 @@ def recordset_to_getpropertiesins(recordset: RecordSet) -> GetPropertiesIns:
365
365
  """Derive GetPropertiesIns from a RecordSet object."""
366
366
  config_record = recordset.configs_records["getpropertiesins.config"]
367
367
  # pylint: disable-next=protected-access
368
- config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record._data)
368
+ config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record)
369
369
 
370
370
  return GetPropertiesIns(config=config_dict)
371
371
 
@@ -384,7 +384,7 @@ def recordset_to_getpropertiesres(recordset: RecordSet) -> GetPropertiesRes:
384
384
  res_str = "getpropertiesres"
385
385
  config_record = recordset.configs_records[f"{res_str}.properties"]
386
386
  # pylint: disable-next=protected-access
387
- properties = _check_mapping_from_recordscalartype_to_scalar(config_record._data)
387
+ properties = _check_mapping_from_recordscalartype_to_scalar(config_record)
388
388
 
389
389
  status = _extract_status_from_recordset(res_str, recordset=recordset)
390
390
 
@@ -22,6 +22,7 @@ from google.protobuf.message import Message as GrpcMessage
22
22
  # pylint: disable=E0611
23
23
  from flwr.proto.clientappio_pb2 import ClientAppOutputCode, ClientAppOutputStatus
24
24
  from flwr.proto.error_pb2 import Error as ProtoError
25
+ from flwr.proto.fab_pb2 import Fab as ProtoFab
25
26
  from flwr.proto.message_pb2 import Context as ProtoContext
26
27
  from flwr.proto.message_pb2 import Message as ProtoMessage
27
28
  from flwr.proto.message_pb2 import Metadata as ProtoMetadata
@@ -686,6 +687,19 @@ def message_from_taskres(taskres: TaskRes) -> Message:
686
687
  return message
687
688
 
688
689
 
690
+ # === FAB ===
691
+
692
+
693
+ def fab_to_proto(fab: typing.Fab) -> ProtoFab:
694
+ """Create a proto Fab object from a Python Fab."""
695
+ return ProtoFab(hash_str=fab.hash_str, content=fab.content)
696
+
697
+
698
+ def fab_from_proto(fab: ProtoFab) -> typing.Fab:
699
+ """Create a Python Fab object from a proto Fab."""
700
+ return typing.Fab(fab.hash_str, fab.content)
701
+
702
+
689
703
  # === User configs ===
690
704
 
691
705
 
@@ -745,6 +759,7 @@ def metadata_to_proto(metadata: Metadata) -> ProtoMetadata:
745
759
  group_id=metadata.group_id,
746
760
  ttl=metadata.ttl,
747
761
  message_type=metadata.message_type,
762
+ created_at=metadata.created_at,
748
763
  )
749
764
  return proto
750
765
 
@@ -771,7 +786,9 @@ def message_to_proto(message: Message) -> ProtoMessage:
771
786
  """Serialize `Message` to ProtoBuf."""
772
787
  proto = ProtoMessage(
773
788
  metadata=metadata_to_proto(message.metadata),
774
- content=recordset_to_proto(message.content),
789
+ content=(
790
+ recordset_to_proto(message.content) if message.has_content() else None
791
+ ),
775
792
  error=error_to_proto(message.error) if message.has_error() else None,
776
793
  )
777
794
  return proto
@@ -779,6 +796,7 @@ def message_to_proto(message: Message) -> ProtoMessage:
779
796
 
780
797
  def message_from_proto(message_proto: ProtoMessage) -> Message:
781
798
  """Deserialize `Message` from ProtoBuf."""
799
+ created_at = message_proto.metadata.created_at
782
800
  message = Message(
783
801
  metadata=metadata_from_proto(message_proto.metadata),
784
802
  content=(
@@ -792,6 +810,9 @@ def message_from_proto(message_proto: ProtoMessage) -> Message:
792
810
  else None
793
811
  ),
794
812
  )
813
+ # `.created_at` is set upon Message object construction
814
+ # we need to manually set it to the original value
815
+ message.metadata.created_at = created_at
795
816
  return message
796
817
 
797
818
 
@@ -829,8 +850,8 @@ def run_to_proto(run: typing.Run) -> ProtoRun:
829
850
  run_id=run.run_id,
830
851
  fab_id=run.fab_id,
831
852
  fab_version=run.fab_version,
853
+ fab_hash=run.fab_hash,
832
854
  override_config=user_config_to_proto(run.override_config),
833
- fab_hash="",
834
855
  )
835
856
  return proto
836
857
 
@@ -841,6 +862,7 @@ def run_from_proto(run_proto: ProtoRun) -> typing.Run:
841
862
  run_id=run_proto.run_id,
842
863
  fab_id=run_proto.fab_id,
843
864
  fab_version=run_proto.fab_version,
865
+ fab_hash=run_proto.fab_hash,
844
866
  override_config=user_config_from_proto(run_proto.override_config),
845
867
  )
846
868
  return run
@@ -214,6 +214,7 @@ class Run:
214
214
  run_id: int
215
215
  fab_id: str
216
216
  fab_version: str
217
+ fab_hash: str
217
218
  override_config: UserConfig
218
219
 
219
220
 
@@ -0,0 +1,44 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/exec.proto
4
+ # Protobuf Python Version: 4.25.0
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 transport_pb2 as flwr_dot_proto_dot_transport__pb2
17
+
18
+
19
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/exec.proto\x12\nflwr.proto\x1a\x14\x66lwr/proto/fab.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xdf\x02\n\x0fStartRunRequest\x12\x1c\n\x03\x66\x61\x62\x18\x01 \x01(\x0b\x32\x0f.flwr.proto.Fab\x12H\n\x0foverride_config\x18\x02 \x03(\x0b\x32/.flwr.proto.StartRunRequest.OverrideConfigEntry\x12L\n\x11\x66\x65\x64\x65ration_config\x18\x03 \x03(\x0b\x32\x31.flwr.proto.StartRunRequest.FederationConfigEntry\x1aI\n\x13OverrideConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1aK\n\x15\x46\x65\x64\x65rationConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\"\n\x10StartRunResponse\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"#\n\x11StreamLogsRequest\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\"(\n\x12StreamLogsResponse\x12\x12\n\nlog_output\x18\x01 \x01(\t2\xa0\x01\n\x04\x45xec\x12G\n\x08StartRun\x12\x1b.flwr.proto.StartRunRequest\x1a\x1c.flwr.proto.StartRunResponse\"\x00\x12O\n\nStreamLogs\x12\x1d.flwr.proto.StreamLogsRequest\x1a\x1e.flwr.proto.StreamLogsResponse\"\x00\x30\x01\x62\x06proto3')
20
+
21
+ _globals = globals()
22
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
23
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.exec_pb2', _globals)
24
+ if _descriptor._USE_C_DESCRIPTORS == False:
25
+ DESCRIPTOR._options = None
26
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._options = None
27
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_options = b'8\001'
28
+ _globals['_STARTRUNREQUEST_FEDERATIONCONFIGENTRY']._options = None
29
+ _globals['_STARTRUNREQUEST_FEDERATIONCONFIGENTRY']._serialized_options = b'8\001'
30
+ _globals['_STARTRUNREQUEST']._serialized_start=88
31
+ _globals['_STARTRUNREQUEST']._serialized_end=439
32
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_start=289
33
+ _globals['_STARTRUNREQUEST_OVERRIDECONFIGENTRY']._serialized_end=362
34
+ _globals['_STARTRUNREQUEST_FEDERATIONCONFIGENTRY']._serialized_start=364
35
+ _globals['_STARTRUNREQUEST_FEDERATIONCONFIGENTRY']._serialized_end=439
36
+ _globals['_STARTRUNRESPONSE']._serialized_start=441
37
+ _globals['_STARTRUNRESPONSE']._serialized_end=475
38
+ _globals['_STREAMLOGSREQUEST']._serialized_start=477
39
+ _globals['_STREAMLOGSREQUEST']._serialized_end=512
40
+ _globals['_STREAMLOGSRESPONSE']._serialized_start=514
41
+ _globals['_STREAMLOGSRESPONSE']._serialized_end=554
42
+ _globals['_EXEC']._serialized_start=557
43
+ _globals['_EXEC']._serialized_end=717
44
+ # @@protoc_insertion_point(module_scope)
@@ -3,6 +3,7 @@
3
3
  isort:skip_file
4
4
  """
5
5
  import builtins
6
+ import flwr.proto.fab_pb2
6
7
  import flwr.proto.transport_pb2
7
8
  import google.protobuf.descriptor
8
9
  import google.protobuf.internal.containers
@@ -44,21 +45,23 @@ class StartRunRequest(google.protobuf.message.Message):
44
45
  def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
45
46
  def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
46
47
 
47
- FAB_FILE_FIELD_NUMBER: builtins.int
48
+ FAB_FIELD_NUMBER: builtins.int
48
49
  OVERRIDE_CONFIG_FIELD_NUMBER: builtins.int
49
50
  FEDERATION_CONFIG_FIELD_NUMBER: builtins.int
50
- fab_file: builtins.bytes
51
+ @property
52
+ def fab(self) -> flwr.proto.fab_pb2.Fab: ...
51
53
  @property
52
54
  def override_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
53
55
  @property
54
56
  def federation_config(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, flwr.proto.transport_pb2.Scalar]: ...
55
57
  def __init__(self,
56
58
  *,
57
- fab_file: builtins.bytes = ...,
59
+ fab: typing.Optional[flwr.proto.fab_pb2.Fab] = ...,
58
60
  override_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
59
61
  federation_config: typing.Optional[typing.Mapping[typing.Text, flwr.proto.transport_pb2.Scalar]] = ...,
60
62
  ) -> None: ...
61
- def ClearField(self, field_name: typing_extensions.Literal["fab_file",b"fab_file","federation_config",b"federation_config","override_config",b"override_config"]) -> None: ...
63
+ def HasField(self, field_name: typing_extensions.Literal["fab",b"fab"]) -> builtins.bool: ...
64
+ def ClearField(self, field_name: typing_extensions.Literal["fab",b"fab","federation_config",b"federation_config","override_config",b"override_config"]) -> None: ...
62
65
  global___StartRunRequest = StartRunRequest
63
66
 
64
67
  class StartRunResponse(google.protobuf.message.Message):
@@ -17,7 +17,7 @@ from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
17
17
  from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
18
 
19
19
 
20
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"{\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12&\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xbf\x02\n\x07\x43ontext\x12\x0f\n\x07node_id\x18\x01 \x01(\x12\x12\x38\n\x0bnode_config\x18\x02 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12$\n\x05state\x18\x03 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12\x36\n\nrun_config\x18\x04 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xa7\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x12\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x12\x12\x18\n\x10reply_to_message\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\tb\x06proto3')
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x66lwr/proto/message.proto\x12\nflwr.proto\x1a\x16\x66lwr/proto/error.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"{\n\x07Message\x12&\n\x08metadata\x18\x01 \x01(\x0b\x32\x14.flwr.proto.Metadata\x12&\n\x07\x63ontent\x18\x02 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12 \n\x05\x65rror\x18\x03 \x01(\x0b\x32\x11.flwr.proto.Error\"\xbf\x02\n\x07\x43ontext\x12\x0f\n\x07node_id\x18\x01 \x01(\x12\x12\x38\n\x0bnode_config\x18\x02 \x03(\x0b\x32#.flwr.proto.Context.NodeConfigEntry\x12$\n\x05state\x18\x03 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12\x36\n\nrun_config\x18\x04 \x03(\x0b\x32\".flwr.proto.Context.RunConfigEntry\x1a\x45\n\x0fNodeConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\x1a\x44\n\x0eRunConfigEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12!\n\x05value\x18\x02 \x01(\x0b\x32\x12.flwr.proto.Scalar:\x02\x38\x01\"\xbb\x01\n\x08Metadata\x12\x0e\n\x06run_id\x18\x01 \x01(\x12\x12\x12\n\nmessage_id\x18\x02 \x01(\t\x12\x13\n\x0bsrc_node_id\x18\x03 \x01(\x12\x12\x13\n\x0b\x64st_node_id\x18\x04 \x01(\x12\x12\x18\n\x10reply_to_message\x18\x05 \x01(\t\x12\x10\n\x08group_id\x18\x06 \x01(\t\x12\x0b\n\x03ttl\x18\x07 \x01(\x01\x12\x14\n\x0cmessage_type\x18\x08 \x01(\t\x12\x12\n\ncreated_at\x18\t \x01(\x01\x62\x06proto3')
21
21
 
22
22
  _globals = globals()
23
23
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -37,5 +37,5 @@ if _descriptor._USE_C_DESCRIPTORS == False:
37
37
  _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_start=497
38
38
  _globals['_CONTEXT_RUNCONFIGENTRY']._serialized_end=565
39
39
  _globals['_METADATA']._serialized_start=568
40
- _globals['_METADATA']._serialized_end=735
40
+ _globals['_METADATA']._serialized_end=755
41
41
  # @@protoc_insertion_point(module_scope)
@@ -99,6 +99,7 @@ class Metadata(google.protobuf.message.Message):
99
99
  GROUP_ID_FIELD_NUMBER: builtins.int
100
100
  TTL_FIELD_NUMBER: builtins.int
101
101
  MESSAGE_TYPE_FIELD_NUMBER: builtins.int
102
+ CREATED_AT_FIELD_NUMBER: builtins.int
102
103
  run_id: builtins.int
103
104
  message_id: typing.Text
104
105
  src_node_id: builtins.int
@@ -107,6 +108,7 @@ class Metadata(google.protobuf.message.Message):
107
108
  group_id: typing.Text
108
109
  ttl: builtins.float
109
110
  message_type: typing.Text
111
+ created_at: builtins.float
110
112
  def __init__(self,
111
113
  *,
112
114
  run_id: builtins.int = ...,
@@ -117,6 +119,7 @@ class Metadata(google.protobuf.message.Message):
117
119
  group_id: typing.Text = ...,
118
120
  ttl: builtins.float = ...,
119
121
  message_type: typing.Text = ...,
122
+ created_at: builtins.float = ...,
120
123
  ) -> None: ...
121
- def ClearField(self, field_name: typing_extensions.Literal["dst_node_id",b"dst_node_id","group_id",b"group_id","message_id",b"message_id","message_type",b"message_type","reply_to_message",b"reply_to_message","run_id",b"run_id","src_node_id",b"src_node_id","ttl",b"ttl"]) -> None: ...
124
+ def ClearField(self, field_name: typing_extensions.Literal["created_at",b"created_at","dst_node_id",b"dst_node_id","group_id",b"group_id","message_id",b"message_id","message_type",b"message_type","reply_to_message",b"reply_to_message","run_id",b"run_id","src_node_id",b"src_node_id","ttl",b"ttl"]) -> None: ...
122
125
  global___Metadata = Metadata