flwr-nightly 1.8.0.dev20240209__tar.gz → 1.8.0.dev20240211__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/PKG-INFO +1 -1
  2. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/pyproject.toml +4 -3
  3. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/__init__.py +1 -2
  4. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/__init__.py +2 -2
  5. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/app.py +10 -10
  6. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/clientapp.py +1 -1
  7. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/telemetry.py +9 -5
  8. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/__init__.py +6 -3
  9. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/app.py +112 -19
  10. {flwr_nightly-1.8.0.dev20240209/src/py/flwr → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server}/driver/app.py +1 -1
  11. {flwr_nightly-1.8.0.dev20240209/src/py/flwr → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server}/driver/driver.py +1 -1
  12. flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink/__init__.py +15 -0
  13. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/driver/driver_servicer.py +1 -1
  14. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/grpc_bidi/flower_service_servicer.py +6 -2
  15. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/grpc_bidi/grpc_client_proxy.py +5 -1
  16. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/grpc_bidi/grpc_server.py +5 -3
  17. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/grpc_rere/fleet_servicer.py +2 -2
  18. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/message_handler/message_handler.py +1 -1
  19. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/rest_rere/rest_api.py +2 -2
  20. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/state/in_memory_state.py +1 -1
  21. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/LICENSE +0 -0
  22. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/README.md +0 -0
  23. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/client.py +0 -0
  24. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/dpfedavg_numpy_client.py +0 -0
  25. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/grpc_client/__init__.py +0 -0
  26. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/grpc_client/connection.py +0 -0
  27. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/grpc_rere_client/__init__.py +0 -0
  28. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/grpc_rere_client/connection.py +0 -0
  29. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/message_handler/__init__.py +0 -0
  30. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/message_handler/message_handler.py +0 -0
  31. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/message_handler/task_handler.py +0 -0
  32. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/mod/__init__.py +0 -0
  33. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/mod/secure_aggregation/__init__.py +0 -0
  34. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/mod/secure_aggregation/secaggplus_mod.py +0 -0
  35. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/mod/utils.py +0 -0
  36. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/node_state.py +0 -0
  37. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/node_state_tests.py +0 -0
  38. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/numpy_client.py +0 -0
  39. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/rest_client/__init__.py +0 -0
  40. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/rest_client/connection.py +0 -0
  41. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/client/typing.py +0 -0
  42. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/__init__.py +0 -0
  43. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/address.py +0 -0
  44. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/configsrecord.py +0 -0
  45. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/constant.py +0 -0
  46. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/context.py +0 -0
  47. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/date.py +0 -0
  48. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/dp.py +0 -0
  49. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/grpc.py +0 -0
  50. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/logger.py +0 -0
  51. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/message.py +0 -0
  52. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/metricsrecord.py +0 -0
  53. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/parameter.py +0 -0
  54. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/parametersrecord.py +0 -0
  55. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/recordset.py +0 -0
  56. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/recordset_compat.py +0 -0
  57. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/retry_invoker.py +0 -0
  58. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/__init__.py +0 -0
  59. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/crypto/__init__.py +0 -0
  60. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/crypto/shamir.py +0 -0
  61. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/crypto/symmetric_encryption.py +0 -0
  62. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/ndarrays_arithmetic.py +0 -0
  63. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/quantization.py +0 -0
  64. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/secaggplus_constants.py +0 -0
  65. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/secure_aggregation/secaggplus_utils.py +0 -0
  66. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/serde.py +0 -0
  67. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/typing.py +0 -0
  68. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/common/version.py +0 -0
  69. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/__init__.py +0 -0
  70. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/driver_pb2.py +0 -0
  71. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/driver_pb2.pyi +0 -0
  72. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/driver_pb2_grpc.py +0 -0
  73. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/driver_pb2_grpc.pyi +0 -0
  74. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/fleet_pb2.py +0 -0
  75. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/fleet_pb2.pyi +0 -0
  76. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/fleet_pb2_grpc.py +0 -0
  77. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/fleet_pb2_grpc.pyi +0 -0
  78. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/node_pb2.py +0 -0
  79. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/node_pb2.pyi +0 -0
  80. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/node_pb2_grpc.py +0 -0
  81. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/node_pb2_grpc.pyi +0 -0
  82. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/recordset_pb2.py +0 -0
  83. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/recordset_pb2.pyi +0 -0
  84. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/recordset_pb2_grpc.py +0 -0
  85. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/recordset_pb2_grpc.pyi +0 -0
  86. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/task_pb2.py +0 -0
  87. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/task_pb2.pyi +0 -0
  88. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/task_pb2_grpc.py +0 -0
  89. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/task_pb2_grpc.pyi +0 -0
  90. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/transport_pb2.py +0 -0
  91. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/transport_pb2.pyi +0 -0
  92. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/transport_pb2_grpc.py +0 -0
  93. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/proto/transport_pb2_grpc.pyi +0 -0
  94. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/py.typed +0 -0
  95. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/client_manager.py +0 -0
  96. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/client_proxy.py +0 -0
  97. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/criterion.py +0 -0
  98. {flwr_nightly-1.8.0.dev20240209/src/py/flwr → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server}/driver/__init__.py +0 -0
  99. {flwr_nightly-1.8.0.dev20240209/src/py/flwr → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server}/driver/driver_client_proxy.py +0 -0
  100. {flwr_nightly-1.8.0.dev20240209/src/py/flwr → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server}/driver/grpc_driver.py +0 -0
  101. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/history.py +0 -0
  102. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/server.py +0 -0
  103. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/__init__.py +0 -0
  104. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/aggregate.py +0 -0
  105. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/bulyan.py +0 -0
  106. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/dpfedavg_adaptive.py +0 -0
  107. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/dpfedavg_fixed.py +0 -0
  108. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fault_tolerant_fedavg.py +0 -0
  109. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedadagrad.py +0 -0
  110. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedadam.py +0 -0
  111. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedavg.py +0 -0
  112. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedavg_android.py +0 -0
  113. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedavgm.py +0 -0
  114. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedmedian.py +0 -0
  115. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedopt.py +0 -0
  116. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedprox.py +0 -0
  117. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedtrimmedavg.py +0 -0
  118. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedxgb_bagging.py +0 -0
  119. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedxgb_cyclic.py +0 -0
  120. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedxgb_nn_avg.py +0 -0
  121. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/fedyogi.py +0 -0
  122. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/krum.py +0 -0
  123. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/qfedavg.py +0 -0
  124. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/strategy/strategy.py +0 -0
  125. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/driver/__init__.py +0 -0
  126. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/__init__.py +0 -0
  127. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/grpc_bidi/__init__.py +0 -0
  128. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/grpc_bidi/grpc_bridge.py +0 -0
  129. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/grpc_rere/__init__.py +0 -0
  130. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/message_handler/__init__.py +0 -0
  131. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/fleet/rest_rere/__init__.py +0 -0
  132. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/state/__init__.py +0 -0
  133. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/state/sqlite_state.py +0 -0
  134. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/state/state.py +0 -0
  135. {flwr_nightly-1.8.0.dev20240209/src/py/flwr/server → flwr_nightly-1.8.0.dev20240211/src/py/flwr/server/superlink}/state/state_factory.py +0 -0
  136. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/utils/__init__.py +0 -0
  137. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/utils/tensorboard.py +0 -0
  138. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/server/utils/validator.py +0 -0
  139. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/simulation/__init__.py +0 -0
  140. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/simulation/app.py +0 -0
  141. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/simulation/ray_transport/__init__.py +0 -0
  142. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/simulation/ray_transport/ray_actor.py +0 -0
  143. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/src/py/flwr/simulation/ray_transport/ray_client_proxy.py +0 -0
  144. {flwr_nightly-1.8.0.dev20240209 → flwr_nightly-1.8.0.dev20240211}/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.8.0.dev20240209
3
+ Version: 1.8.0.dev20240211
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.8.0-dev20240209"
7
+ version = "1.8.0-dev20240211"
8
8
  description = "Flower: A Friendly Federated Learning Framework"
9
9
  license = "Apache-2.0"
10
10
  authors = ["The Flower Authors <hello@flower.dev>"]
@@ -54,8 +54,9 @@ exclude = [
54
54
  [tool.poetry.scripts]
55
55
  flower-driver-api = "flwr.server:run_driver_api"
56
56
  flower-fleet-api = "flwr.server:run_fleet_api"
57
- flower-server = "flwr.server:run_server"
58
- flower-client = "flwr.client:run_client"
57
+ flower-superlink = "flwr.server:run_superlink"
58
+ flower-client-app = "flwr.client:run_client_app"
59
+ flower-server-app = "flwr.server:run_server_app"
59
60
 
60
61
  [tool.poetry.dependencies]
61
62
  python = "^3.8"
@@ -17,12 +17,11 @@
17
17
 
18
18
  from flwr.common.version import package_version as _package_version
19
19
 
20
- from . import client, common, driver, server, simulation
20
+ from . import client, common, server, simulation
21
21
 
22
22
  __all__ = [
23
23
  "client",
24
24
  "common",
25
- "driver",
26
25
  "server",
27
26
  "simulation",
28
27
  ]
@@ -15,7 +15,7 @@
15
15
  """Flower client."""
16
16
 
17
17
 
18
- from .app import run_client as run_client
18
+ from .app import run_client_app as run_client_app
19
19
  from .app import start_client as start_client
20
20
  from .app import start_numpy_client as start_numpy_client
21
21
  from .client import Client as Client
@@ -28,7 +28,7 @@ __all__ = [
28
28
  "ClientApp",
29
29
  "ClientFn",
30
30
  "NumPyClient",
31
- "run_client",
31
+ "run_client_app",
32
32
  "start_client",
33
33
  "start_numpy_client",
34
34
  ]
@@ -45,13 +45,13 @@ from .node_state import NodeState
45
45
  from .numpy_client import NumPyClient
46
46
 
47
47
 
48
- def run_client() -> None:
49
- """Run Flower client."""
50
- event(EventType.RUN_CLIENT_ENTER)
48
+ def run_client_app() -> None:
49
+ """Run Flower client app."""
50
+ event(EventType.RUN_CLIENT_APP_ENTER)
51
51
 
52
52
  log(INFO, "Long-running Flower client starting")
53
53
 
54
- args = _parse_args_client().parse_args()
54
+ args = _parse_args_run_client_app().parse_args()
55
55
 
56
56
  # Obtain certificates
57
57
  if args.insecure:
@@ -86,7 +86,7 @@ def run_client() -> None:
86
86
 
87
87
  log(
88
88
  DEBUG,
89
- "Flower will load ClientApp `%s` to execute tasks",
89
+ "Flower will load ClientApp `%s`",
90
90
  getattr(args, "client-app"),
91
91
  )
92
92
 
@@ -105,13 +105,13 @@ def run_client() -> None:
105
105
  root_certificates=root_certificates,
106
106
  insecure=args.insecure,
107
107
  )
108
- event(EventType.RUN_CLIENT_LEAVE)
108
+ event(EventType.RUN_CLIENT_APP_LEAVE)
109
109
 
110
110
 
111
- def _parse_args_client() -> argparse.ArgumentParser:
112
- """Parse command line arguments."""
111
+ def _parse_args_run_client_app() -> argparse.ArgumentParser:
112
+ """Parse flower-client-app command line arguments."""
113
113
  parser = argparse.ArgumentParser(
114
- description="Start a long-running Flower client",
114
+ description="Start a Flower client app",
115
115
  )
116
116
 
117
117
  parser.add_argument(
@@ -145,7 +145,7 @@ def _parse_args_client() -> argparse.ArgumentParser:
145
145
  "--dir",
146
146
  default="",
147
147
  help="Add specified directory to the PYTHONPATH and load Flower "
148
- "callable from there."
148
+ "app from there."
149
149
  " Default: current working directory.",
150
150
  )
151
151
 
@@ -46,7 +46,7 @@ class ClientApp:
46
46
  If the above code is in a Python module called `client`, it can be started as
47
47
  follows:
48
48
 
49
- >>> flower-client client:app --insecure
49
+ >>> flower-client-app client:app --insecure
50
50
 
51
51
  In this `client:app` example, `client` refers to the Python module `client.py` in
52
52
  which the previous code lives in and `app` refers to the global attribute `app` that
@@ -137,8 +137,8 @@ class EventType(str, Enum):
137
137
  RUN_FLEET_API_LEAVE = auto()
138
138
 
139
139
  # Driver API and Fleet API
140
- RUN_SERVER_ENTER = auto()
141
- RUN_SERVER_LEAVE = auto()
140
+ RUN_SUPERLINK_ENTER = auto()
141
+ RUN_SUPERLINK_LEAVE = auto()
142
142
 
143
143
  # Simulation
144
144
  START_SIMULATION_ENTER = auto()
@@ -152,9 +152,13 @@ class EventType(str, Enum):
152
152
  START_DRIVER_ENTER = auto()
153
153
  START_DRIVER_LEAVE = auto()
154
154
 
155
- # SuperNode: flower-client
156
- RUN_CLIENT_ENTER = auto()
157
- RUN_CLIENT_LEAVE = auto()
155
+ # flower-client-app
156
+ RUN_CLIENT_APP_ENTER = auto()
157
+ RUN_CLIENT_APP_LEAVE = auto()
158
+
159
+ # flower-server-app
160
+ RUN_SERVER_APP_ENTER = auto()
161
+ RUN_SERVER_APP_LEAVE = auto()
158
162
 
159
163
 
160
164
  # Use the ThreadPoolExecutor with max_workers=1 to have a queue
@@ -15,11 +15,12 @@
15
15
  """Flower server."""
16
16
 
17
17
 
18
- from . import strategy
18
+ from . import driver, strategy
19
19
  from .app import ServerConfig as ServerConfig
20
20
  from .app import run_driver_api as run_driver_api
21
21
  from .app import run_fleet_api as run_fleet_api
22
- from .app import run_server as run_server
22
+ from .app import run_server_app as run_server_app
23
+ from .app import run_superlink as run_superlink
23
24
  from .app import start_server as start_server
24
25
  from .client_manager import ClientManager as ClientManager
25
26
  from .client_manager import SimpleClientManager as SimpleClientManager
@@ -28,10 +29,12 @@ from .server import Server as Server
28
29
 
29
30
  __all__ = [
30
31
  "ClientManager",
32
+ "driver",
31
33
  "History",
32
34
  "run_driver_api",
33
35
  "run_fleet_api",
34
- "run_server",
36
+ "run_server_app",
37
+ "run_superlink",
35
38
  "Server",
36
39
  "ServerConfig",
37
40
  "SimpleClientManager",
@@ -20,7 +20,7 @@ import importlib.util
20
20
  import sys
21
21
  import threading
22
22
  from dataclasses import dataclass
23
- from logging import ERROR, INFO, WARN
23
+ from logging import DEBUG, ERROR, INFO, WARN
24
24
  from os.path import isfile
25
25
  from pathlib import Path
26
26
  from signal import SIGINT, SIGTERM, signal
@@ -44,16 +44,16 @@ from flwr.proto.fleet_pb2_grpc import ( # pylint: disable=E0611
44
44
  add_FleetServicer_to_server,
45
45
  )
46
46
  from flwr.server.client_manager import ClientManager, SimpleClientManager
47
- from flwr.server.driver.driver_servicer import DriverServicer
48
- from flwr.server.fleet.grpc_bidi.grpc_server import (
49
- generic_create_grpc_server,
50
- start_grpc_server,
51
- )
52
- from flwr.server.fleet.grpc_rere.fleet_servicer import FleetServicer
53
47
  from flwr.server.history import History
54
48
  from flwr.server.server import Server
55
- from flwr.server.state import StateFactory
56
49
  from flwr.server.strategy import FedAvg, Strategy
50
+ from flwr.server.superlink.driver.driver_servicer import DriverServicer
51
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_server import (
52
+ generic_create_grpc_server,
53
+ start_grpc_server,
54
+ )
55
+ from flwr.server.superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
56
+ from flwr.server.superlink.state import StateFactory
57
57
 
58
58
  ADDRESS_DRIVER_API = "0.0.0.0:9091"
59
59
  ADDRESS_FLEET_API_GRPC_RERE = "0.0.0.0:9092"
@@ -75,6 +75,60 @@ class ServerConfig:
75
75
  round_timeout: Optional[float] = None
76
76
 
77
77
 
78
+ def run_server_app() -> None:
79
+ """Run Flower server app."""
80
+ event(EventType.RUN_SERVER_APP_ENTER)
81
+
82
+ args = _parse_args_run_server_app().parse_args()
83
+
84
+ # Obtain certificates
85
+ if args.insecure:
86
+ if args.root_certificates is not None:
87
+ sys.exit(
88
+ "Conflicting options: The '--insecure' flag disables HTTPS, "
89
+ "but '--root-certificates' was also specified. Please remove "
90
+ "the '--root-certificates' option when running in insecure mode, "
91
+ "or omit '--insecure' to use HTTPS."
92
+ )
93
+ log(
94
+ WARN,
95
+ "Option `--insecure` was set. "
96
+ "Starting insecure HTTP client connected to %s.",
97
+ args.server,
98
+ )
99
+ root_certificates = None
100
+ else:
101
+ # Load the certificates if provided, or load the system certificates
102
+ cert_path = args.root_certificates
103
+ if cert_path is None:
104
+ root_certificates = None
105
+ else:
106
+ root_certificates = Path(cert_path).read_bytes()
107
+ log(
108
+ DEBUG,
109
+ "Starting secure HTTPS client connected to %s "
110
+ "with the following certificates: %s.",
111
+ args.server,
112
+ cert_path,
113
+ )
114
+
115
+ log(
116
+ DEBUG,
117
+ "Flower will load ServerApp `%s`",
118
+ getattr(args, "server-app"),
119
+ )
120
+
121
+ log(
122
+ DEBUG,
123
+ "root_certificates: `%s`",
124
+ root_certificates,
125
+ )
126
+
127
+ log(WARN, "Not implemented: run_server_app")
128
+
129
+ event(EventType.RUN_SERVER_APP_LEAVE)
130
+
131
+
78
132
  def start_server( # pylint: disable=too-many-arguments,too-many-locals
79
133
  *,
80
134
  server_address: str = ADDRESS_FLEET_API_GRPC_BIDI,
@@ -239,7 +293,7 @@ def run_driver_api() -> None:
239
293
  """Run Flower server (Driver API)."""
240
294
  log(INFO, "Starting Flower server (Driver API)")
241
295
  event(EventType.RUN_DRIVER_API_ENTER)
242
- args = _parse_args_driver().parse_args()
296
+ args = _parse_args_run_driver_api().parse_args()
243
297
 
244
298
  # Parse IP address
245
299
  parsed_address = parse_address(args.driver_api_address)
@@ -276,7 +330,7 @@ def run_fleet_api() -> None:
276
330
  """Run Flower server (Fleet API)."""
277
331
  log(INFO, "Starting Flower server (Fleet API)")
278
332
  event(EventType.RUN_FLEET_API_ENTER)
279
- args = _parse_args_fleet().parse_args()
333
+ args = _parse_args_run_fleet_api().parse_args()
280
334
 
281
335
  # Obtain certificates
282
336
  certificates = _try_obtain_certificates(args)
@@ -344,11 +398,11 @@ def run_fleet_api() -> None:
344
398
 
345
399
 
346
400
  # pylint: disable=too-many-branches, too-many-locals, too-many-statements
347
- def run_server() -> None:
401
+ def run_superlink() -> None:
348
402
  """Run Flower server (Driver API and Fleet API)."""
349
403
  log(INFO, "Starting Flower server")
350
- event(EventType.RUN_SERVER_ENTER)
351
- args = _parse_args_server().parse_args()
404
+ event(EventType.RUN_SUPERLINK_ENTER)
405
+ args = _parse_args_run_superlink().parse_args()
352
406
 
353
407
  # Parse IP address
354
408
  parsed_address = parse_address(args.driver_api_address)
@@ -419,7 +473,7 @@ def run_server() -> None:
419
473
  _register_exit_handlers(
420
474
  grpc_servers=grpc_servers,
421
475
  bckg_threads=bckg_threads,
422
- event_type=EventType.RUN_SERVER_LEAVE,
476
+ event_type=EventType.RUN_SUPERLINK_LEAVE,
423
477
  )
424
478
 
425
479
  # Block
@@ -561,7 +615,7 @@ def _run_fleet_api_rest(
561
615
  try:
562
616
  import uvicorn
563
617
 
564
- from flwr.server.fleet.rest_rere.rest_api import app as fast_api_app
618
+ from flwr.server.superlink.fleet.rest_rere.rest_api import app as fast_api_app
565
619
  except ModuleNotFoundError:
566
620
  sys.exit(MISSING_EXTRA_REST)
567
621
  if workers != 1:
@@ -584,7 +638,7 @@ def _run_fleet_api_rest(
584
638
  raise ValueError(validation_exceptions)
585
639
 
586
640
  uvicorn.run(
587
- app="flwr.server.fleet.rest_rere.rest_api:app",
641
+ app="flwr.server.superlink.fleet.rest_rere.rest_api:app",
588
642
  port=port,
589
643
  host=host,
590
644
  reload=False,
@@ -621,7 +675,7 @@ def _validate_ssl_files(
621
675
  return validation_exceptions
622
676
 
623
677
 
624
- def _parse_args_driver() -> argparse.ArgumentParser:
678
+ def _parse_args_run_driver_api() -> argparse.ArgumentParser:
625
679
  """Parse command line arguments for Driver API."""
626
680
  parser = argparse.ArgumentParser(
627
681
  description="Start a Flower Driver API server. "
@@ -638,7 +692,7 @@ def _parse_args_driver() -> argparse.ArgumentParser:
638
692
  return parser
639
693
 
640
694
 
641
- def _parse_args_fleet() -> argparse.ArgumentParser:
695
+ def _parse_args_run_fleet_api() -> argparse.ArgumentParser:
642
696
  """Parse command line arguments for Fleet API."""
643
697
  parser = argparse.ArgumentParser(
644
698
  description="Start a Flower Fleet API server."
@@ -655,7 +709,7 @@ def _parse_args_fleet() -> argparse.ArgumentParser:
655
709
  return parser
656
710
 
657
711
 
658
- def _parse_args_server() -> argparse.ArgumentParser:
712
+ def _parse_args_run_superlink() -> argparse.ArgumentParser:
659
713
  """Parse command line arguments for both Driver API and Fleet API."""
660
714
  parser = argparse.ArgumentParser(
661
715
  description="This will start a Flower server "
@@ -760,3 +814,42 @@ def _add_args_fleet_api(parser: argparse.ArgumentParser) -> None:
760
814
  type=int,
761
815
  default=1,
762
816
  )
817
+
818
+
819
+ def _parse_args_run_server_app() -> argparse.ArgumentParser:
820
+ """Parse flower-server-app command line arguments."""
821
+ parser = argparse.ArgumentParser(
822
+ description="Start a Flower server app",
823
+ )
824
+
825
+ parser.add_argument(
826
+ "server-app",
827
+ help="For example: `server:app` or `project.package.module:wrapper.app`",
828
+ )
829
+ parser.add_argument(
830
+ "--insecure",
831
+ action="store_true",
832
+ help="Run the server app without HTTPS. By default, the app runs with "
833
+ "HTTPS enabled. Use this flag only if you understand the risks.",
834
+ )
835
+ parser.add_argument(
836
+ "--root-certificates",
837
+ metavar="ROOT_CERT",
838
+ type=str,
839
+ help="Specifies the path to the PEM-encoded root certificate file for "
840
+ "establishing secure HTTPS connections.",
841
+ )
842
+ parser.add_argument(
843
+ "--server",
844
+ default="0.0.0.0:9092",
845
+ help="Server address",
846
+ )
847
+ parser.add_argument(
848
+ "--dir",
849
+ default="",
850
+ help="Add specified directory to the PYTHONPATH and load Flower "
851
+ "app from there."
852
+ " Default: current working directory.",
853
+ )
854
+
855
+ return parser
@@ -72,7 +72,7 @@ def start_driver( # pylint: disable=too-many-arguments, too-many-locals
72
72
  An implementation of the abstract base class
73
73
  `flwr.server.strategy.Strategy`. If no strategy is provided, then
74
74
  `start_server` will use `flwr.server.strategy.FedAvg`.
75
- client_manager : Optional[flwr.server.DriverClientManager] (default: None)
75
+ client_manager : Optional[flwr.server.ClientManager] (default: None)
76
76
  An implementation of the class `flwr.server.ClientManager`. If no
77
77
  implementation is provided, then `start_driver` will use
78
78
  `flwr.server.SimpleClientManager`.
@@ -17,7 +17,6 @@
17
17
 
18
18
  from typing import Iterable, List, Optional, Tuple
19
19
 
20
- from flwr.driver.grpc_driver import DEFAULT_SERVER_ADDRESS_DRIVER, GrpcDriver
21
20
  from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
22
21
  CreateRunRequest,
23
22
  GetNodesRequest,
@@ -26,6 +25,7 @@ from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
26
25
  )
27
26
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
28
27
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
28
+ from flwr.server.driver.grpc_driver import DEFAULT_SERVER_ADDRESS_DRIVER, GrpcDriver
29
29
 
30
30
 
31
31
  class Driver:
@@ -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 SuperLink."""
@@ -35,7 +35,7 @@ from flwr.proto.driver_pb2 import ( # pylint: disable=E0611
35
35
  )
36
36
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
37
37
  from flwr.proto.task_pb2 import TaskRes # pylint: disable=E0611
38
- from flwr.server.state import State, StateFactory
38
+ from flwr.server.superlink.state import State, StateFactory
39
39
  from flwr.server.utils.validator import validate_task_ins_or_res
40
40
 
41
41
 
@@ -30,8 +30,12 @@ from flwr.proto.transport_pb2 import ( # pylint: disable=E0611
30
30
  ServerMessage,
31
31
  )
32
32
  from flwr.server.client_manager import ClientManager
33
- from flwr.server.fleet.grpc_bidi.grpc_bridge import GrpcBridge, InsWrapper, ResWrapper
34
- from flwr.server.fleet.grpc_bidi.grpc_client_proxy import GrpcClientProxy
33
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_bridge import (
34
+ GrpcBridge,
35
+ InsWrapper,
36
+ ResWrapper,
37
+ )
38
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_client_proxy import GrpcClientProxy
35
39
 
36
40
 
37
41
  def default_bridge_factory() -> GrpcBridge:
@@ -24,7 +24,11 @@ from flwr.proto.transport_pb2 import ( # pylint: disable=E0611
24
24
  ServerMessage,
25
25
  )
26
26
  from flwr.server.client_proxy import ClientProxy
27
- from flwr.server.fleet.grpc_bidi.grpc_bridge import GrpcBridge, InsWrapper, ResWrapper
27
+ from flwr.server.superlink.fleet.grpc_bidi.grpc_bridge import (
28
+ GrpcBridge,
29
+ InsWrapper,
30
+ ResWrapper,
31
+ )
28
32
 
29
33
 
30
34
  class GrpcClientProxy(ClientProxy):
@@ -28,9 +28,11 @@ from flwr.proto.transport_pb2_grpc import ( # pylint: disable=E0611
28
28
  add_FlowerServiceServicer_to_server,
29
29
  )
30
30
  from flwr.server.client_manager import ClientManager
31
- from flwr.server.driver.driver_servicer import DriverServicer
32
- from flwr.server.fleet.grpc_bidi.flower_service_servicer import FlowerServiceServicer
33
- from flwr.server.fleet.grpc_rere.fleet_servicer import FleetServicer
31
+ from flwr.server.superlink.driver.driver_servicer import DriverServicer
32
+ from flwr.server.superlink.fleet.grpc_bidi.flower_service_servicer import (
33
+ FlowerServiceServicer,
34
+ )
35
+ from flwr.server.superlink.fleet.grpc_rere.fleet_servicer import FleetServicer
34
36
 
35
37
  INVALID_CERTIFICATES_ERR_MSG = """
36
38
  When setting any of root_certificate, certificate, or private_key,
@@ -31,8 +31,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
31
31
  PushTaskResRequest,
32
32
  PushTaskResResponse,
33
33
  )
34
- from flwr.server.fleet.message_handler import message_handler
35
- from flwr.server.state import StateFactory
34
+ from flwr.server.superlink.fleet.message_handler import message_handler
35
+ from flwr.server.superlink.state import StateFactory
36
36
 
37
37
 
38
38
  class FleetServicer(fleet_pb2_grpc.FleetServicer):
@@ -31,7 +31,7 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
31
31
  )
32
32
  from flwr.proto.node_pb2 import Node # pylint: disable=E0611
33
33
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
34
- from flwr.server.state import State
34
+ from flwr.server.superlink.state import State
35
35
 
36
36
 
37
37
  def create_node(
@@ -24,8 +24,8 @@ from flwr.proto.fleet_pb2 import ( # pylint: disable=E0611
24
24
  PullTaskInsRequest,
25
25
  PushTaskResRequest,
26
26
  )
27
- from flwr.server.fleet.message_handler import message_handler
28
- from flwr.server.state import State
27
+ from flwr.server.superlink.fleet.message_handler import message_handler
28
+ from flwr.server.superlink.state import State
29
29
 
30
30
  try:
31
31
  from starlette.applications import Starlette
@@ -23,7 +23,7 @@ from uuid import UUID, uuid4
23
23
 
24
24
  from flwr.common import log, now
25
25
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
26
- from flwr.server.state.state import State
26
+ from flwr.server.superlink.state.state import State
27
27
  from flwr.server.utils import validate_task_ins_or_res
28
28
 
29
29