flwr-nightly 1.7.0.dev20240122__tar.gz → 1.7.0.dev20240123__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/PKG-INFO +1 -1
  2. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/pyproject.toml +1 -1
  3. flwr_nightly-1.7.0.dev20240123/src/py/flwr/common/recordset_compat.py +401 -0
  4. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/serde.py +32 -0
  5. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/recordset_pb2.py +15 -1
  6. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/recordset_pb2.pyi +65 -0
  7. flwr_nightly-1.7.0.dev20240123/src/py/flwr/proto/task_pb2.py +47 -0
  8. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/task_pb2.pyi +9 -5
  9. flwr_nightly-1.7.0.dev20240122/src/py/flwr/common/recordset_utils.py +0 -87
  10. flwr_nightly-1.7.0.dev20240122/src/py/flwr/proto/task_pb2.py +0 -45
  11. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/LICENSE +0 -0
  12. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/README.md +0 -0
  13. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/__init__.py +0 -0
  14. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/__init__.py +0 -0
  15. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/app.py +0 -0
  16. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/client.py +0 -0
  17. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  18. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/flower.py +0 -0
  19. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  20. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/grpc_client/connection.py +0 -0
  21. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  22. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  23. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/message_handler/__init__.py +0 -0
  24. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  25. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  26. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/middleware/__init__.py +0 -0
  27. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/middleware/utils.py +0 -0
  28. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/node_state.py +0 -0
  29. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/node_state_tests.py +0 -0
  30. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/numpy_client.py +0 -0
  31. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/rest_client/__init__.py +0 -0
  32. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/rest_client/connection.py +0 -0
  33. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/run_state.py +0 -0
  34. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/secure_aggregation/__init__.py +0 -0
  35. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/secure_aggregation/handler.py +0 -0
  36. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/secure_aggregation/secaggplus_handler.py +0 -0
  37. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/client/typing.py +0 -0
  38. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/__init__.py +0 -0
  39. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/address.py +0 -0
  40. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/configsrecord.py +0 -0
  41. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/constant.py +0 -0
  42. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/date.py +0 -0
  43. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/dp.py +0 -0
  44. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/flowercontext.py +0 -0
  45. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/grpc.py +0 -0
  46. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/logger.py +0 -0
  47. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/metricsrecord.py +0 -0
  48. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/parameter.py +0 -0
  49. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/parametersrecord.py +0 -0
  50. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/recordset.py +0 -0
  51. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/retry_invoker.py +0 -0
  52. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  53. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  54. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  55. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  56. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  57. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  58. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  59. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  60. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/telemetry.py +0 -0
  61. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/typing.py +0 -0
  62. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/common/version.py +0 -0
  63. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/driver/__init__.py +0 -0
  64. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/driver/app.py +0 -0
  65. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/driver/driver.py +0 -0
  66. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/driver/driver_client_proxy.py +0 -0
  67. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/driver/grpc_driver.py +0 -0
  68. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/flower/__init__.py +0 -0
  69. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/__init__.py +0 -0
  70. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/driver_pb2.py +0 -0
  71. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  72. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  73. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  74. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/fleet_pb2.py +0 -0
  75. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  76. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  77. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  78. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/node_pb2.py +0 -0
  79. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/node_pb2.pyi +0 -0
  80. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  81. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  82. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  83. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  84. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  85. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  86. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/transport_pb2.py +0 -0
  87. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  88. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  89. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  90. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/py.typed +0 -0
  91. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/__init__.py +0 -0
  92. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/app.py +0 -0
  93. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/client_manager.py +0 -0
  94. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/client_proxy.py +0 -0
  95. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/criterion.py +0 -0
  96. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/driver/__init__.py +0 -0
  97. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/driver/driver_servicer.py +0 -0
  98. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/__init__.py +0 -0
  99. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_bidi/__init__.py +0 -0
  100. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_bidi/driver_client_manager.py +0 -0
  101. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_bidi/flower_service_servicer.py +0 -0
  102. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_bidi/grpc_bridge.py +0 -0
  103. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_bidi/grpc_client_proxy.py +0 -0
  104. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_bidi/grpc_server.py +0 -0
  105. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_bidi/ins_scheduler.py +0 -0
  106. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_rere/__init__.py +0 -0
  107. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/grpc_rere/fleet_servicer.py +0 -0
  108. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/message_handler/__init__.py +0 -0
  109. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/message_handler/message_handler.py +0 -0
  110. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/rest_rere/__init__.py +0 -0
  111. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/fleet/rest_rere/rest_api.py +0 -0
  112. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/history.py +0 -0
  113. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/server.py +0 -0
  114. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/state/__init__.py +0 -0
  115. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/state/in_memory_state.py +0 -0
  116. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/state/sqlite_state.py +0 -0
  117. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/state/state.py +0 -0
  118. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/state/state_factory.py +0 -0
  119. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/__init__.py +0 -0
  120. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/aggregate.py +0 -0
  121. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/bulyan.py +0 -0
  122. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  123. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  124. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  125. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  126. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedadam.py +0 -0
  127. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedavg.py +0 -0
  128. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  129. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  130. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  131. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedopt.py +0 -0
  132. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedprox.py +0 -0
  133. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  134. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  135. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  136. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  137. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  138. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/krum.py +0 -0
  139. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  140. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/strategy/strategy.py +0 -0
  141. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/utils/__init__.py +0 -0
  142. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/utils/tensorboard.py +0 -0
  143. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/server/utils/validator.py +0 -0
  144. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/simulation/__init__.py +0 -0
  145. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/simulation/app.py +0 -0
  146. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  147. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  148. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  149. {flwr_nightly-1.7.0.dev20240122 → flwr_nightly-1.7.0.dev20240123}/src/py/flwr/simulation/ray_transport/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.7.0.dev20240122
3
+ Version: 1.7.0.dev20240123
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.dev
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.7.0-dev20240122"
7
+ version = "1.7.0-dev20240123"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.dev>"]
@@ -0,0 +1,401 @@
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
+ """RecordSet utilities."""
16
+
17
+
18
+ from typing import Dict, Mapping, OrderedDict, Tuple, Union, cast, get_args
19
+
20
+ from .configsrecord import ConfigsRecord
21
+ from .metricsrecord import MetricsRecord
22
+ from .parametersrecord import Array, ParametersRecord
23
+ from .recordset import RecordSet
24
+ from .typing import (
25
+ Code,
26
+ ConfigsRecordValues,
27
+ EvaluateIns,
28
+ EvaluateRes,
29
+ FitIns,
30
+ FitRes,
31
+ GetParametersIns,
32
+ GetParametersRes,
33
+ GetPropertiesIns,
34
+ GetPropertiesRes,
35
+ MetricsRecordValues,
36
+ Parameters,
37
+ Scalar,
38
+ Status,
39
+ )
40
+
41
+
42
+ def parametersrecord_to_parameters(
43
+ record: ParametersRecord, keep_input: bool = False
44
+ ) -> Parameters:
45
+ """Convert ParameterRecord to legacy Parameters.
46
+
47
+ Warning: Because `Arrays` in `ParametersRecord` encode more information of the
48
+ array-like or tensor-like data (e.g their datatype, shape) than `Parameters` it
49
+ might not be possible to reconstruct such data structures from `Parameters` objects
50
+ alone. Additional information or metadta must be provided from elsewhere.
51
+
52
+ Parameters
53
+ ----------
54
+ record : ParametersRecord
55
+ The record to be conveted into Parameters.
56
+ keep_input : bool (default: False)
57
+ A boolean indicating whether entries in the record should be deleted from the
58
+ input dictionary immediately after adding them to the record.
59
+ """
60
+ parameters = Parameters(tensors=[], tensor_type="")
61
+
62
+ for key in list(record.data.keys()):
63
+ parameters.tensors.append(record[key].data)
64
+
65
+ if not parameters.tensor_type:
66
+ # Setting from first array in record. Recall the warning in the docstrings
67
+ # of this function.
68
+ parameters.tensor_type = record[key].stype
69
+
70
+ if not keep_input:
71
+ del record.data[key]
72
+
73
+ return parameters
74
+
75
+
76
+ def parameters_to_parametersrecord(
77
+ parameters: Parameters, keep_input: bool = False
78
+ ) -> ParametersRecord:
79
+ """Convert legacy Parameters into a single ParametersRecord.
80
+
81
+ Because there is no concept of names in the legacy Parameters, arbitrary keys will
82
+ be used when constructing the ParametersRecord. Similarly, the shape and data type
83
+ won't be recorded in the Array objects.
84
+
85
+ Parameters
86
+ ----------
87
+ parameters : Parameters
88
+ Parameters object to be represented as a ParametersRecord.
89
+ keep_input : bool (default: False)
90
+ A boolean indicating whether parameters should be deleted from the input
91
+ Parameters object (i.e. a list of serialized NumPy arrays) immediately after
92
+ adding them to the record.
93
+ """
94
+ tensor_type = parameters.tensor_type
95
+
96
+ p_record = ParametersRecord()
97
+
98
+ num_arrays = len(parameters.tensors)
99
+ for idx in range(num_arrays):
100
+ if keep_input:
101
+ tensor = parameters.tensors[idx]
102
+ else:
103
+ tensor = parameters.tensors.pop(0)
104
+ p_record.set_parameters(
105
+ OrderedDict(
106
+ {str(idx): Array(data=tensor, dtype="", stype=tensor_type, shape=[])}
107
+ )
108
+ )
109
+
110
+ return p_record
111
+
112
+
113
+ def _check_mapping_from_recordscalartype_to_scalar(
114
+ record_data: Mapping[str, Union[ConfigsRecordValues, MetricsRecordValues]]
115
+ ) -> Dict[str, Scalar]:
116
+ """Check mapping `common.*RecordValues` into `common.Scalar` is possible."""
117
+ for value in record_data.values():
118
+ if not isinstance(value, get_args(Scalar)):
119
+ raise TypeError(
120
+ "There is not a 1:1 mapping between `common.Scalar` types and those "
121
+ "supported in `common.ConfigsRecordValues` or "
122
+ "`common.ConfigsRecordValues`. Consider casting your values to a type "
123
+ "supported by the `common.RecordSet` infrastructure. "
124
+ f"You used type: {type(value)}"
125
+ )
126
+ return cast(Dict[str, Scalar], record_data)
127
+
128
+
129
+ def _recordset_to_fit_or_evaluate_ins_components(
130
+ recordset: RecordSet,
131
+ ins_str: str,
132
+ keep_input: bool,
133
+ ) -> Tuple[Parameters, Dict[str, Scalar]]:
134
+ """Derive Fit/Evaluate Ins from a RecordSet."""
135
+ # get Array and construct Parameters
136
+ parameters_record = recordset.get_parameters(f"{ins_str}.parameters")
137
+
138
+ parameters = parametersrecord_to_parameters(
139
+ parameters_record, keep_input=keep_input
140
+ )
141
+
142
+ # get config dict
143
+ config_record = recordset.get_configs(f"{ins_str}.config")
144
+
145
+ config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record.data)
146
+
147
+ return parameters, config_dict
148
+
149
+
150
+ def _fit_or_evaluate_ins_to_recordset(
151
+ ins: Union[FitIns, EvaluateIns], keep_input: bool
152
+ ) -> RecordSet:
153
+ recordset = RecordSet()
154
+
155
+ ins_str = "fitins" if isinstance(ins, FitIns) else "evaluateins"
156
+ recordset.set_parameters(
157
+ name=f"{ins_str}.parameters",
158
+ record=parameters_to_parametersrecord(ins.parameters, keep_input=keep_input),
159
+ )
160
+
161
+ recordset.set_configs(
162
+ name=f"{ins_str}.config", record=ConfigsRecord(ins.config) # type: ignore
163
+ )
164
+
165
+ return recordset
166
+
167
+
168
+ def _embed_status_into_recordset(
169
+ res_str: str, status: Status, recordset: RecordSet
170
+ ) -> RecordSet:
171
+ status_dict: Dict[str, ConfigsRecordValues] = {
172
+ "code": int(status.code.value),
173
+ "message": status.message,
174
+ }
175
+ # we add it to a `ConfigsRecord`` because the `status.message`` is a string
176
+ # and `str` values aren't supported in `MetricsRecords`
177
+ recordset.set_configs(f"{res_str}.status", record=ConfigsRecord(status_dict))
178
+ return recordset
179
+
180
+
181
+ def _extract_status_from_recordset(res_str: str, recordset: RecordSet) -> Status:
182
+ status = recordset.get_configs(f"{res_str}.status")
183
+ code = cast(int, status["code"])
184
+ return Status(code=Code(code), message=str(status["message"]))
185
+
186
+
187
+ def recordset_to_fitins(recordset: RecordSet, keep_input: bool) -> FitIns:
188
+ """Derive FitIns from a RecordSet object."""
189
+ parameters, config = _recordset_to_fit_or_evaluate_ins_components(
190
+ recordset,
191
+ ins_str="fitins",
192
+ keep_input=keep_input,
193
+ )
194
+
195
+ return FitIns(parameters=parameters, config=config)
196
+
197
+
198
+ def fitins_to_recordset(fitins: FitIns, keep_input: bool) -> RecordSet:
199
+ """Construct a RecordSet from a FitIns object."""
200
+ return _fit_or_evaluate_ins_to_recordset(fitins, keep_input)
201
+
202
+
203
+ def recordset_to_fitres(recordset: RecordSet, keep_input: bool) -> FitRes:
204
+ """Derive FitRes from a RecordSet object."""
205
+ ins_str = "fitres"
206
+ parameters = parametersrecord_to_parameters(
207
+ recordset.get_parameters(f"{ins_str}.parameters"), keep_input=keep_input
208
+ )
209
+
210
+ num_examples = cast(
211
+ int, recordset.get_metrics(f"{ins_str}.num_examples")["num_examples"]
212
+ )
213
+ configs_record = recordset.get_configs(f"{ins_str}.metrics")
214
+
215
+ metrics = _check_mapping_from_recordscalartype_to_scalar(configs_record.data)
216
+ status = _extract_status_from_recordset(ins_str, recordset)
217
+
218
+ return FitRes(
219
+ status=status, parameters=parameters, num_examples=num_examples, metrics=metrics
220
+ )
221
+
222
+
223
+ def fitres_to_recordset(fitres: FitRes, keep_input: bool) -> RecordSet:
224
+ """Construct a RecordSet from a FitRes object."""
225
+ recordset = RecordSet()
226
+
227
+ res_str = "fitres"
228
+
229
+ recordset.set_configs(
230
+ name=f"{res_str}.metrics", record=ConfigsRecord(fitres.metrics) # type: ignore
231
+ )
232
+ recordset.set_metrics(
233
+ name=f"{res_str}.num_examples",
234
+ record=MetricsRecord({"num_examples": fitres.num_examples}),
235
+ )
236
+ recordset.set_parameters(
237
+ name=f"{res_str}.parameters",
238
+ record=parameters_to_parametersrecord(fitres.parameters, keep_input),
239
+ )
240
+
241
+ # status
242
+ recordset = _embed_status_into_recordset(res_str, fitres.status, recordset)
243
+
244
+ return recordset
245
+
246
+
247
+ def recordset_to_evaluateins(recordset: RecordSet, keep_input: bool) -> EvaluateIns:
248
+ """Derive EvaluateIns from a RecordSet object."""
249
+ parameters, config = _recordset_to_fit_or_evaluate_ins_components(
250
+ recordset,
251
+ ins_str="evaluateins",
252
+ keep_input=keep_input,
253
+ )
254
+
255
+ return EvaluateIns(parameters=parameters, config=config)
256
+
257
+
258
+ def evaluateins_to_recordset(evaluateins: EvaluateIns, keep_input: bool) -> RecordSet:
259
+ """Construct a RecordSet from a EvaluateIns object."""
260
+ return _fit_or_evaluate_ins_to_recordset(evaluateins, keep_input)
261
+
262
+
263
+ def recordset_to_evaluateres(recordset: RecordSet) -> EvaluateRes:
264
+ """Derive EvaluateRes from a RecordSet object."""
265
+ ins_str = "evaluateres"
266
+
267
+ loss = cast(int, recordset.get_metrics(f"{ins_str}.loss")["loss"])
268
+
269
+ num_examples = cast(
270
+ int, recordset.get_metrics(f"{ins_str}.num_examples")["num_examples"]
271
+ )
272
+ configs_record = recordset.get_configs(f"{ins_str}.metrics")
273
+
274
+ metrics = _check_mapping_from_recordscalartype_to_scalar(configs_record.data)
275
+ status = _extract_status_from_recordset(ins_str, recordset)
276
+
277
+ return EvaluateRes(
278
+ status=status, loss=loss, num_examples=num_examples, metrics=metrics
279
+ )
280
+
281
+
282
+ def evaluateres_to_recordset(evaluateres: EvaluateRes) -> RecordSet:
283
+ """Construct a RecordSet from a EvaluateRes object."""
284
+ recordset = RecordSet()
285
+
286
+ res_str = "evaluateres"
287
+ # loss
288
+ recordset.set_metrics(
289
+ name=f"{res_str}.loss",
290
+ record=MetricsRecord({"loss": evaluateres.loss}),
291
+ )
292
+
293
+ # num_examples
294
+ recordset.set_metrics(
295
+ name=f"{res_str}.num_examples",
296
+ record=MetricsRecord({"num_examples": evaluateres.num_examples}),
297
+ )
298
+
299
+ # metrics
300
+ recordset.set_configs(
301
+ name=f"{res_str}.metrics",
302
+ record=ConfigsRecord(evaluateres.metrics), # type: ignore
303
+ )
304
+
305
+ # status
306
+ recordset = _embed_status_into_recordset(
307
+ f"{res_str}", evaluateres.status, recordset
308
+ )
309
+
310
+ return recordset
311
+
312
+
313
+ def recordset_to_getparametersins(recordset: RecordSet) -> GetParametersIns:
314
+ """Derive GetParametersIns from a RecordSet object."""
315
+ config_record = recordset.get_configs("getparametersins.config")
316
+
317
+ config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record.data)
318
+
319
+ return GetParametersIns(config=config_dict)
320
+
321
+
322
+ def getparametersins_to_recordset(getparameters_ins: GetParametersIns) -> RecordSet:
323
+ """Construct a RecordSet from a GetParametersIns object."""
324
+ recordset = RecordSet()
325
+
326
+ recordset.set_configs(
327
+ name="getparametersins.config",
328
+ record=ConfigsRecord(getparameters_ins.config), # type: ignore
329
+ )
330
+ return recordset
331
+
332
+
333
+ def getparametersres_to_recordset(getparametersres: GetParametersRes) -> RecordSet:
334
+ """Construct a RecordSet from a GetParametersRes object."""
335
+ recordset = RecordSet()
336
+ res_str = "getparametersres"
337
+ parameters_record = parameters_to_parametersrecord(getparametersres.parameters)
338
+ recordset.set_parameters(f"{res_str}.parameters", parameters_record)
339
+
340
+ # status
341
+ recordset = _embed_status_into_recordset(
342
+ res_str, getparametersres.status, recordset
343
+ )
344
+
345
+ return recordset
346
+
347
+
348
+ def recordset_to_getparametersres(recordset: RecordSet) -> GetParametersRes:
349
+ """Derive GetParametersRes from a RecordSet object."""
350
+ res_str = "getparametersres"
351
+ parameters = parametersrecord_to_parameters(
352
+ recordset.get_parameters(f"{res_str}.parameters")
353
+ )
354
+
355
+ status = _extract_status_from_recordset(res_str, recordset)
356
+ return GetParametersRes(status=status, parameters=parameters)
357
+
358
+
359
+ def recordset_to_getpropertiesins(recordset: RecordSet) -> GetPropertiesIns:
360
+ """Derive GetPropertiesIns from a RecordSet object."""
361
+ config_record = recordset.get_configs("getpropertiesins.config")
362
+ config_dict = _check_mapping_from_recordscalartype_to_scalar(config_record.data)
363
+
364
+ return GetPropertiesIns(config=config_dict)
365
+
366
+
367
+ def getpropertiesins_to_recordset(getpropertiesins: GetPropertiesIns) -> RecordSet:
368
+ """Construct a RecordSet from a GetPropertiesRes object."""
369
+ recordset = RecordSet()
370
+ recordset.set_configs(
371
+ name="getpropertiesins.config",
372
+ record=ConfigsRecord(getpropertiesins.config), # type: ignore
373
+ )
374
+ return recordset
375
+
376
+
377
+ def recordset_to_getpropertiesres(recordset: RecordSet) -> GetPropertiesRes:
378
+ """Derive GetPropertiesRes from a RecordSet object."""
379
+ res_str = "getpropertiesres"
380
+ config_record = recordset.get_configs(f"{res_str}.properties")
381
+ properties = _check_mapping_from_recordscalartype_to_scalar(config_record.data)
382
+
383
+ status = _extract_status_from_recordset(res_str, recordset=recordset)
384
+
385
+ return GetPropertiesRes(status=status, properties=properties)
386
+
387
+
388
+ def getpropertiesres_to_recordset(getpropertiesres: GetPropertiesRes) -> RecordSet:
389
+ """Construct a RecordSet from a GetPropertiesRes object."""
390
+ recordset = RecordSet()
391
+ res_str = "getpropertiesres"
392
+ recordset.set_configs(
393
+ name=f"{res_str}.properties",
394
+ record=ConfigsRecord(getpropertiesres.properties), # type: ignore
395
+ )
396
+ # status
397
+ recordset = _embed_status_into_recordset(
398
+ res_str, getpropertiesres.status, recordset
399
+ )
400
+
401
+ return recordset
@@ -28,6 +28,7 @@ from flwr.proto.recordset_pb2 import DoubleList
28
28
  from flwr.proto.recordset_pb2 import MetricsRecord as ProtoMetricsRecord
29
29
  from flwr.proto.recordset_pb2 import MetricsRecordValue as ProtoMetricsRecordValue
30
30
  from flwr.proto.recordset_pb2 import ParametersRecord as ProtoParametersRecord
31
+ from flwr.proto.recordset_pb2 import RecordSet as ProtoRecordSet
31
32
  from flwr.proto.recordset_pb2 import Sint64List, StringList
32
33
  from flwr.proto.task_pb2 import Value
33
34
  from flwr.proto.transport_pb2 import (
@@ -45,6 +46,7 @@ from . import typing
45
46
  from .configsrecord import ConfigsRecord
46
47
  from .metricsrecord import MetricsRecord
47
48
  from .parametersrecord import Array, ParametersRecord
49
+ from .recordset import RecordSet
48
50
 
49
51
  # === ServerMessage message ===
50
52
 
@@ -719,3 +721,33 @@ def configs_record_from_proto(record_proto: ProtoConfigsRecord) -> ConfigsRecord
719
721
  ),
720
722
  keep_input=False,
721
723
  )
724
+
725
+
726
+ # === RecordSet message ===
727
+
728
+
729
+ def recordset_to_proto(recordset: RecordSet) -> ProtoRecordSet:
730
+ """Serialize RecordSet to ProtoBuf."""
731
+ return ProtoRecordSet(
732
+ parameters={
733
+ k: parameters_record_to_proto(v) for k, v in recordset.parameters.items()
734
+ },
735
+ metrics={k: metrics_record_to_proto(v) for k, v in recordset.metrics.items()},
736
+ configs={k: configs_record_to_proto(v) for k, v in recordset.configs.items()},
737
+ )
738
+
739
+
740
+ def recordset_from_proto(recordset_proto: ProtoRecordSet) -> RecordSet:
741
+ """Deserialize RecordSet from ProtoBuf."""
742
+ return RecordSet(
743
+ parameters={
744
+ k: parameters_record_from_proto(v)
745
+ for k, v in recordset_proto.parameters.items()
746
+ },
747
+ metrics={
748
+ k: metrics_record_from_proto(v) for k, v in recordset_proto.metrics.items()
749
+ },
750
+ configs={
751
+ k: configs_record_from_proto(v) for k, v in recordset_proto.configs.items()
752
+ },
753
+ )
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lwr/proto/recordset.proto\x12\nflwr.proto\"\x1a\n\nDoubleList\x12\x0c\n\x04vals\x18\x01 \x03(\x01\"\x1a\n\nSint64List\x12\x0c\n\x04vals\x18\x01 \x03(\x12\"\x18\n\x08\x42oolList\x12\x0c\n\x04vals\x18\x01 \x03(\x08\"\x1a\n\nStringList\x12\x0c\n\x04vals\x18\x01 \x03(\t\"\x19\n\tBytesList\x12\x0c\n\x04vals\x18\x01 \x03(\x0c\"B\n\x05\x41rray\x12\r\n\x05\x64type\x18\x01 \x01(\t\x12\r\n\x05shape\x18\x02 \x03(\x05\x12\r\n\x05stype\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"\x9f\x01\n\x12MetricsRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12-\n\x0bsint64_list\x18\x16 \x01(\x0b\x32\x16.flwr.proto.Sint64ListH\x00\x42\x07\n\x05value\"\xd9\x02\n\x12\x43onfigsRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12\x10\n\x06string\x18\x04 \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x05 \x01(\x0cH\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12-\n\x0bsint64_list\x18\x16 \x01(\x0b\x32\x16.flwr.proto.Sint64ListH\x00\x12)\n\tbool_list\x18\x17 \x01(\x0b\x32\x14.flwr.proto.BoolListH\x00\x12-\n\x0bstring_list\x18\x18 \x01(\x0b\x32\x16.flwr.proto.StringListH\x00\x12+\n\nbytes_list\x18\x19 \x01(\x0b\x32\x15.flwr.proto.BytesListH\x00\x42\x07\n\x05value\"M\n\x10ParametersRecord\x12\x11\n\tdata_keys\x18\x01 \x03(\t\x12&\n\x0b\x64\x61ta_values\x18\x02 \x03(\x0b\x32\x11.flwr.proto.Array\"\x8f\x01\n\rMetricsRecord\x12\x31\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32#.flwr.proto.MetricsRecord.DataEntry\x1aK\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.flwr.proto.MetricsRecordValue:\x02\x38\x01\"\x8f\x01\n\rConfigsRecord\x12\x31\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32#.flwr.proto.ConfigsRecord.DataEntry\x1aK\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.flwr.proto.ConfigsRecordValue:\x02\x38\x01\x62\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x66lwr/proto/recordset.proto\x12\nflwr.proto\"\x1a\n\nDoubleList\x12\x0c\n\x04vals\x18\x01 \x03(\x01\"\x1a\n\nSint64List\x12\x0c\n\x04vals\x18\x01 \x03(\x12\"\x18\n\x08\x42oolList\x12\x0c\n\x04vals\x18\x01 \x03(\x08\"\x1a\n\nStringList\x12\x0c\n\x04vals\x18\x01 \x03(\t\"\x19\n\tBytesList\x12\x0c\n\x04vals\x18\x01 \x03(\x0c\"B\n\x05\x41rray\x12\r\n\x05\x64type\x18\x01 \x01(\t\x12\r\n\x05shape\x18\x02 \x03(\x05\x12\r\n\x05stype\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"\x9f\x01\n\x12MetricsRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12-\n\x0bsint64_list\x18\x16 \x01(\x0b\x32\x16.flwr.proto.Sint64ListH\x00\x42\x07\n\x05value\"\xd9\x02\n\x12\x43onfigsRecordValue\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12\x10\n\x06string\x18\x04 \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x05 \x01(\x0cH\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12-\n\x0bsint64_list\x18\x16 \x01(\x0b\x32\x16.flwr.proto.Sint64ListH\x00\x12)\n\tbool_list\x18\x17 \x01(\x0b\x32\x14.flwr.proto.BoolListH\x00\x12-\n\x0bstring_list\x18\x18 \x01(\x0b\x32\x16.flwr.proto.StringListH\x00\x12+\n\nbytes_list\x18\x19 \x01(\x0b\x32\x15.flwr.proto.BytesListH\x00\x42\x07\n\x05value\"M\n\x10ParametersRecord\x12\x11\n\tdata_keys\x18\x01 \x03(\t\x12&\n\x0b\x64\x61ta_values\x18\x02 \x03(\x0b\x32\x11.flwr.proto.Array\"\x8f\x01\n\rMetricsRecord\x12\x31\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32#.flwr.proto.MetricsRecord.DataEntry\x1aK\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.flwr.proto.MetricsRecordValue:\x02\x38\x01\"\x8f\x01\n\rConfigsRecord\x12\x31\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32#.flwr.proto.ConfigsRecord.DataEntry\x1aK\n\tDataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12-\n\x05value\x18\x02 \x01(\x0b\x32\x1e.flwr.proto.ConfigsRecordValue:\x02\x38\x01\"\x97\x03\n\tRecordSet\x12\x39\n\nparameters\x18\x01 \x03(\x0b\x32%.flwr.proto.RecordSet.ParametersEntry\x12\x33\n\x07metrics\x18\x02 \x03(\x0b\x32\".flwr.proto.RecordSet.MetricsEntry\x12\x33\n\x07\x63onfigs\x18\x03 \x03(\x0b\x32\".flwr.proto.RecordSet.ConfigsEntry\x1aO\n\x0fParametersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12+\n\x05value\x18\x02 \x01(\x0b\x32\x1c.flwr.proto.ParametersRecord:\x02\x38\x01\x1aI\n\x0cMetricsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.flwr.proto.MetricsRecord:\x02\x38\x01\x1aI\n\x0c\x43onfigsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12(\n\x05value\x18\x02 \x01(\x0b\x32\x19.flwr.proto.ConfigsRecord:\x02\x38\x01\x62\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -25,6 +25,12 @@ if _descriptor._USE_C_DESCRIPTORS == False:
25
25
  _globals['_METRICSRECORD_DATAENTRY']._serialized_options = b'8\001'
26
26
  _globals['_CONFIGSRECORD_DATAENTRY']._options = None
27
27
  _globals['_CONFIGSRECORD_DATAENTRY']._serialized_options = b'8\001'
28
+ _globals['_RECORDSET_PARAMETERSENTRY']._options = None
29
+ _globals['_RECORDSET_PARAMETERSENTRY']._serialized_options = b'8\001'
30
+ _globals['_RECORDSET_METRICSENTRY']._options = None
31
+ _globals['_RECORDSET_METRICSENTRY']._serialized_options = b'8\001'
32
+ _globals['_RECORDSET_CONFIGSENTRY']._options = None
33
+ _globals['_RECORDSET_CONFIGSENTRY']._serialized_options = b'8\001'
28
34
  _globals['_DOUBLELIST']._serialized_start=42
29
35
  _globals['_DOUBLELIST']._serialized_end=68
30
36
  _globals['_SINT64LIST']._serialized_start=70
@@ -51,4 +57,12 @@ if _descriptor._USE_C_DESCRIPTORS == False:
51
57
  _globals['_CONFIGSRECORD']._serialized_end=1126
52
58
  _globals['_CONFIGSRECORD_DATAENTRY']._serialized_start=1051
53
59
  _globals['_CONFIGSRECORD_DATAENTRY']._serialized_end=1126
60
+ _globals['_RECORDSET']._serialized_start=1129
61
+ _globals['_RECORDSET']._serialized_end=1536
62
+ _globals['_RECORDSET_PARAMETERSENTRY']._serialized_start=1307
63
+ _globals['_RECORDSET_PARAMETERSENTRY']._serialized_end=1386
64
+ _globals['_RECORDSET_METRICSENTRY']._serialized_start=1388
65
+ _globals['_RECORDSET_METRICSENTRY']._serialized_end=1461
66
+ _globals['_RECORDSET_CONFIGSENTRY']._serialized_start=1463
67
+ _globals['_RECORDSET_CONFIGSENTRY']._serialized_end=1536
54
68
  # @@protoc_insertion_point(module_scope)
@@ -238,3 +238,68 @@ class ConfigsRecord(google.protobuf.message.Message):
238
238
  ) -> None: ...
239
239
  def ClearField(self, field_name: typing_extensions.Literal["data",b"data"]) -> None: ...
240
240
  global___ConfigsRecord = ConfigsRecord
241
+
242
+ class RecordSet(google.protobuf.message.Message):
243
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
244
+ class ParametersEntry(google.protobuf.message.Message):
245
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
246
+ KEY_FIELD_NUMBER: builtins.int
247
+ VALUE_FIELD_NUMBER: builtins.int
248
+ key: typing.Text
249
+ @property
250
+ def value(self) -> global___ParametersRecord: ...
251
+ def __init__(self,
252
+ *,
253
+ key: typing.Text = ...,
254
+ value: typing.Optional[global___ParametersRecord] = ...,
255
+ ) -> None: ...
256
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
257
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
258
+
259
+ class MetricsEntry(google.protobuf.message.Message):
260
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
261
+ KEY_FIELD_NUMBER: builtins.int
262
+ VALUE_FIELD_NUMBER: builtins.int
263
+ key: typing.Text
264
+ @property
265
+ def value(self) -> global___MetricsRecord: ...
266
+ def __init__(self,
267
+ *,
268
+ key: typing.Text = ...,
269
+ value: typing.Optional[global___MetricsRecord] = ...,
270
+ ) -> None: ...
271
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
272
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
273
+
274
+ class ConfigsEntry(google.protobuf.message.Message):
275
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
276
+ KEY_FIELD_NUMBER: builtins.int
277
+ VALUE_FIELD_NUMBER: builtins.int
278
+ key: typing.Text
279
+ @property
280
+ def value(self) -> global___ConfigsRecord: ...
281
+ def __init__(self,
282
+ *,
283
+ key: typing.Text = ...,
284
+ value: typing.Optional[global___ConfigsRecord] = ...,
285
+ ) -> None: ...
286
+ def HasField(self, field_name: typing_extensions.Literal["value",b"value"]) -> builtins.bool: ...
287
+ def ClearField(self, field_name: typing_extensions.Literal["key",b"key","value",b"value"]) -> None: ...
288
+
289
+ PARAMETERS_FIELD_NUMBER: builtins.int
290
+ METRICS_FIELD_NUMBER: builtins.int
291
+ CONFIGS_FIELD_NUMBER: builtins.int
292
+ @property
293
+ def parameters(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ParametersRecord]: ...
294
+ @property
295
+ def metrics(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___MetricsRecord]: ...
296
+ @property
297
+ def configs(self) -> google.protobuf.internal.containers.MessageMap[typing.Text, global___ConfigsRecord]: ...
298
+ def __init__(self,
299
+ *,
300
+ parameters: typing.Optional[typing.Mapping[typing.Text, global___ParametersRecord]] = ...,
301
+ metrics: typing.Optional[typing.Mapping[typing.Text, global___MetricsRecord]] = ...,
302
+ configs: typing.Optional[typing.Mapping[typing.Text, global___ConfigsRecord]] = ...,
303
+ ) -> None: ...
304
+ def ClearField(self, field_name: typing_extensions.Literal["configs",b"configs","metrics",b"metrics","parameters",b"parameters"]) -> None: ...
305
+ global___RecordSet = RecordSet
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: flwr/proto/task.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 node_pb2 as flwr_dot_proto_dot_node__pb2
16
+ from flwr.proto import recordset_pb2 as flwr_dot_proto_dot_recordset__pb2
17
+ from flwr.proto import transport_pb2 as flwr_dot_proto_dot_transport__pb2
18
+
19
+
20
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x15\x66lwr/proto/task.proto\x12\nflwr.proto\x1a\x15\x66lwr/proto/node.proto\x1a\x1a\x66lwr/proto/recordset.proto\x1a\x1a\x66lwr/proto/transport.proto\"\xff\x02\n\x04Task\x12\"\n\x08producer\x18\x01 \x01(\x0b\x32\x10.flwr.proto.Node\x12\"\n\x08\x63onsumer\x18\x02 \x01(\x0b\x32\x10.flwr.proto.Node\x12\x12\n\ncreated_at\x18\x03 \x01(\t\x12\x14\n\x0c\x64\x65livered_at\x18\x04 \x01(\t\x12\x0b\n\x03ttl\x18\x05 \x01(\t\x12\x10\n\x08\x61ncestry\x18\x06 \x03(\t\x12\x11\n\ttask_type\x18\x07 \x01(\t\x12(\n\trecordset\x18\x08 \x01(\x0b\x32\x15.flwr.proto.RecordSet\x12<\n\x15legacy_server_message\x18\x65 \x01(\x0b\x32\x19.flwr.proto.ServerMessageB\x02\x18\x01\x12<\n\x15legacy_client_message\x18\x66 \x01(\x0b\x32\x19.flwr.proto.ClientMessageB\x02\x18\x01\x12-\n\x02sa\x18g \x01(\x0b\x32\x1d.flwr.proto.SecureAggregationB\x02\x18\x01\"\\\n\x07TaskIns\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\\\n\x07TaskRes\x12\x0f\n\x07task_id\x18\x01 \x01(\t\x12\x10\n\x08group_id\x18\x02 \x01(\t\x12\x0e\n\x06run_id\x18\x03 \x01(\x12\x12\x1e\n\x04task\x18\x04 \x01(\x0b\x32\x10.flwr.proto.Task\"\xcc\x02\n\x05Value\x12\x10\n\x06\x64ouble\x18\x01 \x01(\x01H\x00\x12\x10\n\x06sint64\x18\x02 \x01(\x12H\x00\x12\x0e\n\x04\x62ool\x18\x03 \x01(\x08H\x00\x12\x10\n\x06string\x18\x04 \x01(\tH\x00\x12\x0f\n\x05\x62ytes\x18\x05 \x01(\x0cH\x00\x12-\n\x0b\x64ouble_list\x18\x15 \x01(\x0b\x32\x16.flwr.proto.DoubleListH\x00\x12-\n\x0bsint64_list\x18\x16 \x01(\x0b\x32\x16.flwr.proto.Sint64ListH\x00\x12)\n\tbool_list\x18\x17 \x01(\x0b\x32\x14.flwr.proto.BoolListH\x00\x12-\n\x0bstring_list\x18\x18 \x01(\x0b\x32\x16.flwr.proto.StringListH\x00\x12+\n\nbytes_list\x18\x19 \x01(\x0b\x32\x15.flwr.proto.BytesListH\x00\x42\x07\n\x05value\"\xa0\x01\n\x11SecureAggregation\x12\x44\n\x0cnamed_values\x18\x01 \x03(\x0b\x32..flwr.proto.SecureAggregation.NamedValuesEntry\x1a\x45\n\x10NamedValuesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12 \n\x05value\x18\x02 \x01(\x0b\x32\x11.flwr.proto.Value:\x02\x38\x01\x62\x06proto3')
21
+
22
+ _globals = globals()
23
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
24
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'flwr.proto.task_pb2', _globals)
25
+ if _descriptor._USE_C_DESCRIPTORS == False:
26
+ DESCRIPTOR._options = None
27
+ _globals['_TASK'].fields_by_name['legacy_server_message']._options = None
28
+ _globals['_TASK'].fields_by_name['legacy_server_message']._serialized_options = b'\030\001'
29
+ _globals['_TASK'].fields_by_name['legacy_client_message']._options = None
30
+ _globals['_TASK'].fields_by_name['legacy_client_message']._serialized_options = b'\030\001'
31
+ _globals['_TASK'].fields_by_name['sa']._options = None
32
+ _globals['_TASK'].fields_by_name['sa']._serialized_options = b'\030\001'
33
+ _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._options = None
34
+ _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_options = b'8\001'
35
+ _globals['_TASK']._serialized_start=117
36
+ _globals['_TASK']._serialized_end=500
37
+ _globals['_TASKINS']._serialized_start=502
38
+ _globals['_TASKINS']._serialized_end=594
39
+ _globals['_TASKRES']._serialized_start=596
40
+ _globals['_TASKRES']._serialized_end=688
41
+ _globals['_VALUE']._serialized_start=691
42
+ _globals['_VALUE']._serialized_end=1023
43
+ _globals['_SECUREAGGREGATION']._serialized_start=1026
44
+ _globals['_SECUREAGGREGATION']._serialized_end=1186
45
+ _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_start=1117
46
+ _globals['_SECUREAGGREGATION_NAMEDVALUESENTRY']._serialized_end=1186
47
+ # @@protoc_insertion_point(module_scope)
@@ -23,9 +23,10 @@ class Task(google.protobuf.message.Message):
23
23
  TTL_FIELD_NUMBER: builtins.int
24
24
  ANCESTRY_FIELD_NUMBER: builtins.int
25
25
  TASK_TYPE_FIELD_NUMBER: builtins.int
26
- SA_FIELD_NUMBER: builtins.int
26
+ RECORDSET_FIELD_NUMBER: builtins.int
27
27
  LEGACY_SERVER_MESSAGE_FIELD_NUMBER: builtins.int
28
28
  LEGACY_CLIENT_MESSAGE_FIELD_NUMBER: builtins.int
29
+ SA_FIELD_NUMBER: builtins.int
29
30
  @property
30
31
  def producer(self) -> flwr.proto.node_pb2.Node: ...
31
32
  @property
@@ -37,11 +38,13 @@ class Task(google.protobuf.message.Message):
37
38
  def ancestry(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[typing.Text]: ...
38
39
  task_type: typing.Text
39
40
  @property
40
- def sa(self) -> global___SecureAggregation: ...
41
+ def recordset(self) -> flwr.proto.recordset_pb2.RecordSet: ...
41
42
  @property
42
43
  def legacy_server_message(self) -> flwr.proto.transport_pb2.ServerMessage: ...
43
44
  @property
44
45
  def legacy_client_message(self) -> flwr.proto.transport_pb2.ClientMessage: ...
46
+ @property
47
+ def sa(self) -> global___SecureAggregation: ...
45
48
  def __init__(self,
46
49
  *,
47
50
  producer: typing.Optional[flwr.proto.node_pb2.Node] = ...,
@@ -51,12 +54,13 @@ class Task(google.protobuf.message.Message):
51
54
  ttl: typing.Text = ...,
52
55
  ancestry: typing.Optional[typing.Iterable[typing.Text]] = ...,
53
56
  task_type: typing.Text = ...,
54
- sa: typing.Optional[global___SecureAggregation] = ...,
57
+ recordset: typing.Optional[flwr.proto.recordset_pb2.RecordSet] = ...,
55
58
  legacy_server_message: typing.Optional[flwr.proto.transport_pb2.ServerMessage] = ...,
56
59
  legacy_client_message: typing.Optional[flwr.proto.transport_pb2.ClientMessage] = ...,
60
+ sa: typing.Optional[global___SecureAggregation] = ...,
57
61
  ) -> None: ...
58
- def HasField(self, field_name: typing_extensions.Literal["consumer",b"consumer","legacy_client_message",b"legacy_client_message","legacy_server_message",b"legacy_server_message","producer",b"producer","sa",b"sa"]) -> builtins.bool: ...
59
- def ClearField(self, field_name: typing_extensions.Literal["ancestry",b"ancestry","consumer",b"consumer","created_at",b"created_at","delivered_at",b"delivered_at","legacy_client_message",b"legacy_client_message","legacy_server_message",b"legacy_server_message","producer",b"producer","sa",b"sa","task_type",b"task_type","ttl",b"ttl"]) -> None: ...
62
+ def HasField(self, field_name: typing_extensions.Literal["consumer",b"consumer","legacy_client_message",b"legacy_client_message","legacy_server_message",b"legacy_server_message","producer",b"producer","recordset",b"recordset","sa",b"sa"]) -> builtins.bool: ...
63
+ def ClearField(self, field_name: typing_extensions.Literal["ancestry",b"ancestry","consumer",b"consumer","created_at",b"created_at","delivered_at",b"delivered_at","legacy_client_message",b"legacy_client_message","legacy_server_message",b"legacy_server_message","producer",b"producer","recordset",b"recordset","sa",b"sa","task_type",b"task_type","ttl",b"ttl"]) -> None: ...
60
64
  global___Task = Task
61
65
 
62
66
  class TaskIns(google.protobuf.message.Message):