flwr-nightly 1.12.0.dev20240918__py3-none-any.whl → 1.12.0.dev20241006__py3-none-any.whl

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 (47) hide show
  1. flwr/cli/app.py +2 -0
  2. flwr/cli/log.py +234 -0
  3. flwr/cli/new/new.py +1 -1
  4. flwr/cli/new/templates/app/README.flowertune.md.tpl +1 -1
  5. flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -0
  6. flwr/cli/run/run.py +17 -1
  7. flwr/client/grpc_rere_client/client_interceptor.py +3 -0
  8. flwr/client/grpc_rere_client/connection.py +3 -3
  9. flwr/client/grpc_rere_client/grpc_adapter.py +14 -3
  10. flwr/client/rest_client/connection.py +3 -3
  11. flwr/client/supernode/app.py +1 -0
  12. flwr/common/constant.py +6 -3
  13. flwr/common/secure_aggregation/secaggplus_utils.py +4 -4
  14. flwr/common/serde.py +22 -7
  15. flwr/proto/control_pb2.py +27 -0
  16. flwr/proto/control_pb2.pyi +7 -0
  17. flwr/proto/control_pb2_grpc.py +135 -0
  18. flwr/proto/control_pb2_grpc.pyi +53 -0
  19. flwr/proto/driver_pb2.py +15 -24
  20. flwr/proto/driver_pb2.pyi +0 -52
  21. flwr/proto/driver_pb2_grpc.py +6 -6
  22. flwr/proto/driver_pb2_grpc.pyi +4 -4
  23. flwr/proto/fab_pb2.py +8 -7
  24. flwr/proto/fab_pb2.pyi +7 -1
  25. flwr/proto/fleet_pb2.py +10 -10
  26. flwr/proto/fleet_pb2.pyi +6 -1
  27. flwr/proto/recordset_pb2.py +35 -33
  28. flwr/proto/recordset_pb2.pyi +40 -14
  29. flwr/proto/run_pb2.py +33 -9
  30. flwr/proto/run_pb2.pyi +150 -1
  31. flwr/proto/transport_pb2.py +8 -8
  32. flwr/proto/transport_pb2.pyi +9 -6
  33. flwr/server/run_serverapp.py +2 -2
  34. flwr/server/superlink/driver/driver_servicer.py +2 -2
  35. flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py +17 -2
  36. flwr/server/superlink/fleet/grpc_rere/server_interceptor.py +4 -0
  37. flwr/server/superlink/state/in_memory_state.py +17 -0
  38. flwr/server/superlink/state/sqlite_state.py +44 -6
  39. flwr/server/utils/validator.py +6 -0
  40. flwr/superexec/deployment.py +3 -1
  41. flwr/superexec/exec_servicer.py +68 -3
  42. flwr/superexec/executor.py +2 -1
  43. {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20241006.dist-info}/METADATA +4 -2
  44. {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20241006.dist-info}/RECORD +47 -42
  45. {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20241006.dist-info}/LICENSE +0 -0
  46. {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20241006.dist-info}/WHEEL +0 -0
  47. {flwr_nightly-1.12.0.dev20240918.dist-info → flwr_nightly-1.12.0.dev20241006.dist-info}/entry_points.txt +0 -0
@@ -372,7 +372,18 @@ class SqliteState(State): # pylint: disable=R0904
372
372
  # Create task_id
373
373
  task_id = uuid4()
374
374
 
375
- # Store TaskIns
375
+ task_ins_id = task_res.task.ancestry[0]
376
+ task_ins = self.get_valid_task_ins(task_ins_id)
377
+ if task_ins is None:
378
+ log(
379
+ ERROR,
380
+ "Failed to store TaskRes: "
381
+ "TaskIns with task_id %s does not exist or has expired.",
382
+ task_ins_id,
383
+ )
384
+ return None
385
+
386
+ # Store TaskRes
376
387
  task_res.task_id = str(task_id)
377
388
  data = (task_res_to_dict(task_res),)
378
389
 
@@ -782,8 +793,9 @@ class SqliteState(State): # pylint: disable=R0904
782
793
  # Convert the uint64 value to sint64 for SQLite
783
794
  sint64_run_id = convert_uint64_to_sint64(run_id)
784
795
  query = "SELECT * FROM run WHERE run_id = ?;"
785
- try:
786
- row = self.query(query, (sint64_run_id,))[0]
796
+ rows = self.query(query, (sint64_run_id,))
797
+ if rows:
798
+ row = rows[0]
787
799
  return Run(
788
800
  run_id=convert_sint64_to_uint64(row["run_id"]),
789
801
  fab_id=row["fab_id"],
@@ -791,9 +803,8 @@ class SqliteState(State): # pylint: disable=R0904
791
803
  fab_hash=row["fab_hash"],
792
804
  override_config=json.loads(row["override_config"]),
793
805
  )
794
- except sqlite3.IntegrityError:
795
- log(ERROR, "`run_id` does not exist.")
796
- return None
806
+ log(ERROR, "`run_id` does not exist.")
807
+ return None
797
808
 
798
809
  def acknowledge_ping(self, node_id: int, ping_interval: float) -> bool:
799
810
  """Acknowledge a ping received from a node, serving as a heartbeat."""
@@ -810,6 +821,33 @@ class SqliteState(State): # pylint: disable=R0904
810
821
  log(ERROR, "`node_id` does not exist.")
811
822
  return False
812
823
 
824
+ def get_valid_task_ins(self, task_id: str) -> Optional[dict[str, Any]]:
825
+ """Check if the TaskIns exists and is valid (not expired).
826
+
827
+ Return TaskIns if valid.
828
+ """
829
+ query = """
830
+ SELECT *
831
+ FROM task_ins
832
+ WHERE task_id = :task_id
833
+ """
834
+ data = {"task_id": task_id}
835
+ rows = self.query(query, data)
836
+ if not rows:
837
+ # TaskIns does not exist
838
+ return None
839
+
840
+ task_ins = rows[0]
841
+ created_at = task_ins["created_at"]
842
+ ttl = task_ins["ttl"]
843
+ current_time = time.time()
844
+
845
+ # Check if TaskIns is expired
846
+ if ttl is not None and created_at + ttl <= current_time:
847
+ return None
848
+
849
+ return task_ins
850
+
813
851
 
814
852
  def dict_factory(
815
853
  cursor: sqlite3.Cursor,
@@ -15,6 +15,7 @@
15
15
  """Validators."""
16
16
 
17
17
 
18
+ import time
18
19
  from typing import Union
19
20
 
20
21
  from flwr.proto.task_pb2 import TaskIns, TaskRes # pylint: disable=E0611
@@ -47,6 +48,11 @@ def validate_task_ins_or_res(tasks_ins_res: Union[TaskIns, TaskRes]) -> list[str
47
48
  # unix timestamp of 27 March 2024 00h:00m:00s UTC
48
49
  validation_errors.append("`pushed_at` is not a recent timestamp")
49
50
 
51
+ # Verify TTL and created_at time
52
+ current_time = time.time()
53
+ if tasks_ins_res.task.created_at + tasks_ins_res.task.ttl <= current_time:
54
+ validation_errors.append("Task TTL has expired")
55
+
50
56
  # TaskIns specific
51
57
  if isinstance(tasks_ins_res, TaskIns):
52
58
  # Task producer
@@ -28,8 +28,8 @@ from flwr.common.grpc import create_channel
28
28
  from flwr.common.logger import log
29
29
  from flwr.common.serde import fab_to_proto, user_config_to_proto
30
30
  from flwr.common.typing import Fab, UserConfig
31
- from flwr.proto.driver_pb2 import CreateRunRequest # pylint: disable=E0611
32
31
  from flwr.proto.driver_pb2_grpc import DriverStub
32
+ from flwr.proto.run_pb2 import CreateRunRequest # pylint: disable=E0611
33
33
 
34
34
  from .executor import Executor, RunTracker
35
35
 
@@ -167,6 +167,8 @@ class DeploymentEngine(Executor):
167
167
  # Execute the command
168
168
  proc = subprocess.Popen( # pylint: disable=consider-using-with
169
169
  command,
170
+ stdout=subprocess.PIPE,
171
+ stderr=subprocess.PIPE,
170
172
  text=True,
171
173
  )
172
174
  log(INFO, "Started run %s", str(run_id))
@@ -15,6 +15,10 @@
15
15
  """SuperExec API servicer."""
16
16
 
17
17
 
18
+ import select
19
+ import sys
20
+ import threading
21
+ import time
18
22
  from collections.abc import Generator
19
23
  from logging import ERROR, INFO
20
24
  from typing import Any
@@ -33,6 +37,8 @@ from flwr.proto.exec_pb2 import ( # pylint: disable=E0611
33
37
 
34
38
  from .executor import Executor, RunTracker
35
39
 
40
+ SELECT_TIMEOUT = 1 # Timeout for selecting ready-to-read file descriptors (in seconds)
41
+
36
42
 
37
43
  class ExecServicer(exec_pb2_grpc.ExecServicer):
38
44
  """SuperExec API servicer."""
@@ -59,13 +65,72 @@ class ExecServicer(exec_pb2_grpc.ExecServicer):
59
65
 
60
66
  self.runs[run.run_id] = run
61
67
 
68
+ # Start a background thread to capture the log output
69
+ capture_thread = threading.Thread(
70
+ target=_capture_logs, args=(run,), daemon=True
71
+ )
72
+ capture_thread.start()
73
+
62
74
  return StartRunResponse(run_id=run.run_id)
63
75
 
64
- def StreamLogs(
76
+ def StreamLogs( # pylint: disable=C0103
65
77
  self, request: StreamLogsRequest, context: grpc.ServicerContext
66
78
  ) -> Generator[StreamLogsResponse, Any, None]:
67
79
  """Get logs."""
68
- logs = ["a", "b", "c"]
80
+ log(INFO, "ExecServicer.StreamLogs")
81
+
82
+ # Exit if `run_id` not found
83
+ if request.run_id not in self.runs:
84
+ context.abort(grpc.StatusCode.NOT_FOUND, "Run ID not found")
85
+
86
+ last_sent_index = 0
69
87
  while context.is_active():
70
- for i in range(len(logs)): # pylint: disable=C0200
88
+ # Yield n'th row of logs, if n'th row < len(logs)
89
+ logs = self.runs[request.run_id].logs
90
+ for i in range(last_sent_index, len(logs)):
71
91
  yield StreamLogsResponse(log_output=logs[i])
92
+ last_sent_index = len(logs)
93
+
94
+ # Wait for and continue to yield more log responses only if the
95
+ # run isn't completed yet. If the run is finished, the entire log
96
+ # is returned at this point and the server ends the stream.
97
+ if self.runs[request.run_id].proc.poll() is not None:
98
+ log(INFO, "All logs for run ID `%s` returned", request.run_id)
99
+ context.set_code(grpc.StatusCode.OK)
100
+ context.cancel()
101
+
102
+ time.sleep(1.0) # Sleep briefly to avoid busy waiting
103
+
104
+
105
+ def _capture_logs(
106
+ run: RunTracker,
107
+ ) -> None:
108
+ while True:
109
+ # Explicitly check if Popen.poll() is None. Required for `pytest`.
110
+ if run.proc.poll() is None:
111
+ # Select streams only when ready to read
112
+ ready_to_read, _, _ = select.select(
113
+ [run.proc.stdout, run.proc.stderr],
114
+ [],
115
+ [],
116
+ SELECT_TIMEOUT,
117
+ )
118
+ # Read from std* and append to RunTracker.logs
119
+ for stream in ready_to_read:
120
+ # Flush stdout to view output in real time
121
+ readline = stream.readline()
122
+ sys.stdout.write(readline)
123
+ sys.stdout.flush()
124
+ # Append to logs
125
+ line = readline.rstrip()
126
+ if line:
127
+ run.logs.append(f"{line}")
128
+
129
+ # Close std* to prevent blocking
130
+ elif run.proc.poll() is not None:
131
+ log(INFO, "Subprocess finished, exiting log capture")
132
+ if run.proc.stdout:
133
+ run.proc.stdout.close()
134
+ if run.proc.stderr:
135
+ run.proc.stderr.close()
136
+ break
@@ -15,7 +15,7 @@
15
15
  """Execute and monitor a Flower run."""
16
16
 
17
17
  from abc import ABC, abstractmethod
18
- from dataclasses import dataclass
18
+ from dataclasses import dataclass, field
19
19
  from subprocess import Popen
20
20
  from typing import Optional
21
21
 
@@ -28,6 +28,7 @@ class RunTracker:
28
28
 
29
29
  run_id: int
30
30
  proc: Popen # type: ignore
31
+ logs: list[str] = field(default_factory=list)
31
32
 
32
33
 
33
34
  class Executor(ABC):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flwr-nightly
3
- Version: 1.12.0.dev20240918
3
+ Version: 1.12.0.dev20241006
4
4
  Summary: Flower: A Friendly Federated Learning Framework
5
5
  Home-page: https://flower.ai
6
6
  License: Apache-2.0
@@ -43,7 +43,7 @@ Requires-Dist: requests (>=2.31.0,<3.0.0) ; extra == "rest"
43
43
  Requires-Dist: starlette (>=0.31.0,<0.32.0) ; extra == "rest"
44
44
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
45
45
  Requires-Dist: tomli-w (>=1.0.0,<2.0.0)
46
- Requires-Dist: typer[all] (>=0.9.0,<0.10.0)
46
+ Requires-Dist: typer (>=0.12.5,<0.13.0)
47
47
  Requires-Dist: uvicorn[standard] (>=0.23.0,<0.24.0) ; extra == "rest"
48
48
  Project-URL: Documentation, https://flower.ai
49
49
  Project-URL: Repository, https://github.com/adap/flower
@@ -69,6 +69,7 @@ Description-Content-Type: text/markdown
69
69
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/adap/flower/blob/main/CONTRIBUTING.md)
70
70
  ![Build](https://github.com/adap/flower/actions/workflows/framework.yml/badge.svg)
71
71
  [![Downloads](https://static.pepy.tech/badge/flwr)](https://pepy.tech/project/flwr)
72
+ [![Docker Hub](https://img.shields.io/badge/Docker%20Hub-flwr-blue)](https://hub.docker.com/u/flwr)
72
73
  [![Slack](https://img.shields.io/badge/Chat-Slack-red)](https://flower.ai/join-slack)
73
74
 
74
75
  Flower (`flwr`) is a framework for building federated learning systems. The
@@ -152,6 +153,7 @@ Flower Baselines is a collection of community-contributed projects that reproduc
152
153
  - [FedNova](https://github.com/adap/flower/tree/main/baselines/fednova)
153
154
  - [HeteroFL](https://github.com/adap/flower/tree/main/baselines/heterofl)
154
155
  - [FedAvgM](https://github.com/adap/flower/tree/main/baselines/fedavgm)
156
+ - [FedRep](https://github.com/adap/flower/tree/main/baselines/fedrep)
155
157
  - [FedStar](https://github.com/adap/flower/tree/main/baselines/fedstar)
156
158
  - [FedWav2vec2](https://github.com/adap/flower/tree/main/baselines/fedwav2vec2)
157
159
  - [FjORD](https://github.com/adap/flower/tree/main/baselines/fjord)
@@ -1,17 +1,18 @@
1
1
  flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
2
2
  flwr/cli/__init__.py,sha256=cZJVgozlkC6Ni2Hd_FAIrqefrkCGOV18fikToq-6iLw,720
3
- flwr/cli/app.py,sha256=v66W3QJ226JUy9y51hRwftX53R3oEKl3oOl1Xx-IwgU,1215
3
+ flwr/cli/app.py,sha256=_HDs7HS12Dp7NXIyVrkPs1SKJq3x-XvVZd6y1lvyud4,1255
4
4
  flwr/cli/build.py,sha256=H4xrQPDj7kvZ7Ys65yb-jE86RLEmvIE3pZ3mokZfJHg,5145
5
5
  flwr/cli/config_utils.py,sha256=uJmJAHNoqeSeAC3BAxxoBuYOR9eV3mJg8wrWZgbGp3E,7521
6
6
  flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
7
7
  flwr/cli/install.py,sha256=t5tdeKOsTmG3nuInUoSKBVzUU1RnzA096yzYs013VhE,7065
8
+ flwr/cli/log.py,sha256=uhtcLcFGkazirWnEmet3Wt3rt_q-a13kauQqPLaMaRY,8097
8
9
  flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
9
- flwr/cli/new/new.py,sha256=FvSxGIDsnO7w5Rtq6-Zz3PzD_tkSthNGvYOHeYRcCeI,9570
10
+ flwr/cli/new/new.py,sha256=wpHBmHOq6X04CPwJDaEgu3H5_MsfoEYsYsv3E-EDhzM,9558
10
11
  flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
11
12
  flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
12
13
  flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
13
14
  flwr/cli/new/templates/app/README.baseline.md.tpl,sha256=4dg2aBS-NIleVyDlxsG8m65Af6LIJ-pZA5ICjGFU5XA,9641
14
- flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=lxr_RCGfiDy8QGcMVdjXsUXWM_gLf6cY7UQanGL_FFQ,3304
15
+ flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=QSG51uifue2KVZz2ZNw8kmOStS7svC2AQ2gTa5E7Bhs,3326
15
16
  flwr/cli/new/templates/app/README.md.tpl,sha256=t7w4YFZEcJOxAnuJmNPw5-fDdIJu7PfLd8gFJDiBwwo,436
16
17
  flwr/cli/new/templates/app/__init__.py,sha256=DU7QMY7IhMQyuwm_tja66xU0KXTWQFqzfTqwg-_NJdE,729
17
18
  flwr/cli/new/templates/app/code/__init__.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
@@ -49,7 +50,7 @@ flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=NgbPix74X1t3ybaGjqdls
49
50
  flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=SKXAZdgBnPpbAbJ90Rb7oQ5ilnopBx_j_JNFoUDeEAI,1732
50
51
  flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
51
52
  flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=4gi90W9_B1kj6rYkpvVJxhNX9Yctsv9OH6CzXP-dcE4,2666
52
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=-tW_nwHQCK5JIRI4Cpb0yDVHJO0RUAEOTqCtWJoGHIQ,1827
53
+ flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=bYdDP0O8z741pvy1INnH4UBuP-KFvcyQt6Yo81n4frQ,1853
53
54
  flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=CHJgkPNkJfzJhEbTe15uiV3AhOtIddQi-yofPZsCk3E,1143
54
55
  flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=Tq6jeGcoOKzMwWWYxMVnzMcipLURHLiW69iYlD1ywMg,659
55
56
  flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=SHwYAA2qgIlOAU3Sb9BKSZcZ7O9biACg27MHexXUtDw,741
@@ -58,7 +59,7 @@ flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=vIO1ArukTC76ogYLNmJ
58
59
  flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=jk_5teoyOVM9QdBea8J-nk10S6TKw81QZiiKB54ATF0,654
59
60
  flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=bRIvPCPvTTI4Eo5b61Rmw8WdDw3sjcohciTXgULN5l8,702
60
61
  flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
61
- flwr/cli/run/run.py,sha256=bGfiHFAsoBSRmuz1vLrRtG0IE0ZCDSIqaVOocUKMciw,7938
62
+ flwr/cli/run/run.py,sha256=tLKeWpWJqEBxkOtDKEprL4SBKxH1vHGybQxlCLnXiSQ,8386
62
63
  flwr/cli/utils.py,sha256=emMUdthvoHBTB0iGQp-oFBmA5wV46lw3y3FmfXQPCsc,4500
63
64
  flwr/client/__init__.py,sha256=DGDoO0AEAfz-0CUFmLdyUUweAS64-07AOnmDfWUefK4,1192
64
65
  flwr/client/app.py,sha256=cH0LAmpm6M8rfgc3lJFJ3pEwCVEgMuv-58WvOo6FEw0,31956
@@ -74,9 +75,9 @@ flwr/client/grpc_adapter_client/connection.py,sha256=50LlADsrvvo_kYoGRXOph3ICAmc
74
75
  flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1HxivJ8,735
75
76
  flwr/client/grpc_client/connection.py,sha256=WX0cKlV_S19bYYp52z3PYRrtOdGb52ovvFFVWIz6Uyw,9382
76
77
  flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
77
- flwr/client/grpc_rere_client/client_interceptor.py,sha256=4OlD1ZmUEtrbBDuSBjdJB_yXWUHHag51yhxBPwvmXsU,5260
78
- flwr/client/grpc_rere_client/connection.py,sha256=N67GVj4_7_SuNAjQAJ8ulQxWjFPqOcQnOKW5ebbeeBQ,10927
79
- flwr/client/grpc_rere_client/grpc_adapter.py,sha256=yPsJg8POxKqAtQxR7R2zSzJ85LQsfV7u6xfrsoZbf0g,4999
78
+ flwr/client/grpc_rere_client/client_interceptor.py,sha256=q08lIEeJLvvonNOiejNXvmySbPObteGnbDHhEKDmWzE,5380
79
+ flwr/client/grpc_rere_client/connection.py,sha256=tppAfMTV1yLBNmgS0KuvqGUjaecpA7SWbPIITkfEHcY,10960
80
+ flwr/client/grpc_rere_client/grpc_adapter.py,sha256=sQo0I9T65t97LFGoW_PrmgaTbd18GFgi2DoAI5wQJ4k,5589
80
81
  flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
81
82
  flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
82
83
  flwr/client/message_handler/message_handler.py,sha256=lwBUvnY21GTK9uZPyxfiAPnGav9ueKo7YmyDpzUU6-Y,6524
@@ -93,14 +94,14 @@ flwr/client/node_state.py,sha256=HRKqkgTVGcZXL7nQSQ1nLxNx22eLyaCCIieZ5NZXgnA,394
93
94
  flwr/client/node_state_tests.py,sha256=-4fVsn7y-z9NYBuhq-cjepgxgVuPqqQgDOL4SofrdIo,2239
94
95
  flwr/client/numpy_client.py,sha256=tqGyhIkeeZQGr65BR03B7TWgx4rW3FA7G2874D8z_VU,11167
95
96
  flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
96
- flwr/client/rest_client/connection.py,sha256=UKznSmlbLhS0XtNepmKyMQnaBXTCMYYWyHL9XQm9T-w,12781
97
+ flwr/client/rest_client/connection.py,sha256=icPDYPaTMWn3bQ9g42VUHEppcIVcBJFGuV3leo7mMpo,12814
97
98
  flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
98
- flwr/client/supernode/app.py,sha256=PGsOJG7TXqwnfV6NIyf_YOLKdm0fKjRxUnlPdFLOO3s,11940
99
+ flwr/client/supernode/app.py,sha256=it4jm9GATntwmRJNXfIIfsS8bTIRwba94B1uNy0I2TM,11973
99
100
  flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
100
101
  flwr/common/__init__.py,sha256=TVaoFEJE158aui1TPZQiJCDZX4RNHRyI8I55VC80HhI,3901
101
102
  flwr/common/address.py,sha256=7kM2Rqjw86-c8aKwAvrXerWqznnVv4TFJ62aSAeTn10,3017
102
103
  flwr/common/config.py,sha256=QjsDEDf4xsx8StJV9I80dYWbBp7aBNrJmTlAeLpQpyw,7567
103
- flwr/common/constant.py,sha256=BxVpp2o3h70h-klxiwsyLT7U5woj2GD-TXh92-STlLc,3351
104
+ flwr/common/constant.py,sha256=m2FkF5QzFC_72hFxDioekOHwhilPKCds1axojg77oX8,3606
104
105
  flwr/common/context.py,sha256=5Bd9RCrhLkYZOVR7vr97OVhzVBHQkS1fUsYiIKTwpxU,2239
105
106
  flwr/common/date.py,sha256=OcQuwpb2HxcblTqYm6H223ufop5UZw5N_fzalbpOVzY,891
106
107
  flwr/common/differential_privacy.py,sha256=XwcJ3rWr8S8BZUocc76vLSJAXIf6OHnWkBV6-xlIRuw,6106
@@ -129,8 +130,8 @@ flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=wTDbOaMGZwT
129
130
  flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=zvVAIrIyI6OSzGhpCi8NNaTvPXmoMYQIPJT-NkBg8RU,3013
130
131
  flwr/common/secure_aggregation/quantization.py,sha256=mC4uLf05zeONo8Ke-BY0Tj8UCMOS7VD93zHCzuv3MHU,2304
131
132
  flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
132
- flwr/common/secure_aggregation/secaggplus_utils.py,sha256=vmBBxdVqC7b8BvgXmPOeNJsNI5Yfft1UWLvx7P0S4H8,3189
133
- flwr/common/serde.py,sha256=tucfRG2pQ8v5jMbNrs8AILf5fpcNtvwRETpW6x6hlWY,29241
133
+ flwr/common/secure_aggregation/secaggplus_utils.py,sha256=o7IhHH6J9xqinhQy3TdPgQpoj1XyEpyv3OQFyx81RVQ,3193
134
+ flwr/common/serde.py,sha256=74nN5uqASdqfykSWPOhaTJARA07Iznyg3Nyr-dh-uy4,29918
134
135
  flwr/common/telemetry.py,sha256=PvdlipCPYciqEgmXRwQ1HklP1uyECcNqt9HTBzthmAg,8904
135
136
  flwr/common/typing.py,sha256=ZVviEABqDeGCyo_yM9ft8EbIGA9RaLOeoNHmMnTkmUo,4985
136
137
  flwr/common/version.py,sha256=tCcl_FvxVK206C1dxIJCs4TjL06WmyaODBP19FRHE1c,1324
@@ -143,10 +144,14 @@ flwr/proto/common_pb2.py,sha256=uzSmq0FJdC-MriN9UGPFs7QVIFTKJmX5lyLnzcyZ5WE,2405
143
144
  flwr/proto/common_pb2.pyi,sha256=0ylFO7G79qqLuRg9IQUCBdgyIIFv4m8VzrfoWad4xXU,5394
144
145
  flwr/proto/common_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
145
146
  flwr/proto/common_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
146
- flwr/proto/driver_pb2.py,sha256=gxlDAZUCELzYCkmhxcJdVyGXLmzYFXVFeqlJAIHPChE,4299
147
- flwr/proto/driver_pb2.pyi,sha256=apvTyy7N0SV3H8mueOwgB8aDETtxb6ZuKB1g1nMmJ4o,6390
148
- flwr/proto/driver_pb2_grpc.py,sha256=ZNDFyPfEZt5L3eFqJRwAE_ylwWLTNf1hfXzUGkVpzTI,10462
149
- flwr/proto/driver_pb2_grpc.pyi,sha256=_SLFI7AvJv5JU_7axipERF4oTspRh3bzZswLiKDtV1E,2812
147
+ flwr/proto/control_pb2.py,sha256=yaUkwY2J9uo-fdUIB5aHwVSDOuGunxaUr4ZlggifA_M,1439
148
+ flwr/proto/control_pb2.pyi,sha256=XbFvpZvvrS7QcH5AFXfpRGl4hQvhd3QdKO6x0oTlCCU,165
149
+ flwr/proto/control_pb2_grpc.py,sha256=FFE21nZvEILWpe1WCR5vAwgYEtpzrdG78-_SsU0gZ7w,5783
150
+ flwr/proto/control_pb2_grpc.pyi,sha256=9DU4sgkzJ497a4Nq6kitZWEG4g_5MO8MevichnO0oAg,1672
151
+ flwr/proto/driver_pb2.py,sha256=Z2fRF9mBa0cR0p6cItgyp5Q70WUAsh--kPEq8aIJuZk,3176
152
+ flwr/proto/driver_pb2.pyi,sha256=jUOe6tHWQhddVbB3xtnNvlrztNUcxRHHJS7-LqGO_70,4034
153
+ flwr/proto/driver_pb2_grpc.py,sha256=SGNmNcpsSWRc0jjNyH0xYNB8a7DAxIsXaL9a0M78vZw,10444
154
+ flwr/proto/driver_pb2_grpc.pyi,sha256=wTVkRgVUNq2Jnzo5yhIIqGFiLN_VRB1zpjfqRLD5QnM,2800
150
155
  flwr/proto/error_pb2.py,sha256=LarjKL90LbwkXKlhzNrDssgl4DXcvIPve8NVCXHpsKA,1084
151
156
  flwr/proto/error_pb2.pyi,sha256=ZNH4HhJTU_KfMXlyCeg8FwU-fcUYxTqEmoJPtWtHikc,734
152
157
  flwr/proto/error_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
@@ -155,12 +160,12 @@ flwr/proto/exec_pb2.py,sha256=GH_VWC-BZwWmeWdmjP4IkXvwR8yY1uBZNNwKru-ZZL4,3231
155
160
  flwr/proto/exec_pb2.pyi,sha256=5y6L3xFkAuCfLTn2pVIHQAlXp17YcTTq8WVDS7_MPl4,4273
156
161
  flwr/proto/exec_pb2_grpc.py,sha256=faAN19XEMP8GTKrcIU6jvlWkN44n2KiUsZh_OG0sYcg,4072
157
162
  flwr/proto/exec_pb2_grpc.pyi,sha256=VrFhT1Um3Nb8UC2YqnR9GIiM-Yyx0FqaxVOWljh-G_w,1208
158
- flwr/proto/fab_pb2.py,sha256=ztC3HnD5e-bYpp7lxrlxkdc30haAlBHswTnt4X5G1eg,1432
159
- flwr/proto/fab_pb2.pyi,sha256=wQXdQkcij6CrkmclIT5tU9SkOSZHTqm3PxWJWu4-CPI,1970
163
+ flwr/proto/fab_pb2.py,sha256=3QSDq9pjbZoqVxsmCRDwHO5PrSjzn2vixjYxE-qPmb0,1589
164
+ flwr/proto/fab_pb2.pyi,sha256=fXI108QaFtbl1WWTyslPbIx9c_19D0aYCoFn0xYtL4U,2277
160
165
  flwr/proto/fab_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
161
166
  flwr/proto/fab_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
162
- flwr/proto/fleet_pb2.py,sha256=euBC2M_LfQSwiSK9kFi18OvoV1gnQT4cC9lAMCCiOGY,4729
163
- flwr/proto/fleet_pb2.pyi,sha256=45kQ9YINv3VG0nxWSjCN4SppdepjKW8rRBlxKxz7ud4,7571
167
+ flwr/proto/fleet_pb2.py,sha256=06NAaIAOxTA2UhkBA-VWZKflaVQIzXgPZ3Fb6vtliY0,4789
168
+ flwr/proto/fleet_pb2.pyi,sha256=bkzPOFXaYVZv9jRIA_XqckTR4dLZcfPRmluaGeoqxBY,7851
164
169
  flwr/proto/fleet_pb2_grpc.py,sha256=VyqpAcX-6tiQVehQfRMbCErtIW4Mot1uXUSzRaklZTI,12228
165
170
  flwr/proto/fleet_pb2_grpc.pyi,sha256=VvOtOBwPcgoHRPgj2JENXq2HbcfU8cxp82E9tDfGyEs,3216
166
171
  flwr/proto/grpcadapter_pb2.py,sha256=bb8mW09XzNCpMdr1KuYQkefPFWR8lc8y1uL6Uk0TtsM,1843
@@ -175,20 +180,20 @@ flwr/proto/node_pb2.py,sha256=qrxEpf7Up9XhigP8g9cIHVhmpdKmYpxMdlO67H0xjEM,1081
175
180
  flwr/proto/node_pb2.pyi,sha256=aX3BHhgXvJE1rvcRnEE_gB-5GcaFQ0SJ88yTE223bjI,751
176
181
  flwr/proto/node_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
177
182
  flwr/proto/node_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
178
- flwr/proto/recordset_pb2.py,sha256=un8L0kvBcgFXQIiQweOseeIJBjlOozUvQY9uTQ42Dqo,6009
179
- flwr/proto/recordset_pb2.pyi,sha256=NPzCJWAj1xLWzeZ_xZ6uaObQjQfWGnnqlLtn4J-SoFY,14161
183
+ flwr/proto/recordset_pb2.py,sha256=XjEIDU-YlKSY59qNd0qXTFB4COvMHGiszQ5O1krJ1Ks,6367
184
+ flwr/proto/recordset_pb2.pyi,sha256=ypFNvroU4aIlnN0D6W4XAsOfm0UzTfXhxxL1v7u__Ac,15370
180
185
  flwr/proto/recordset_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
181
186
  flwr/proto/recordset_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
182
- flwr/proto/run_pb2.py,sha256=zTH0YjBETYhQzv2MC5TD8cW8Lvsc89ublkFtGuHp0ek,2102
183
- flwr/proto/run_pb2.pyi,sha256=oIaKIjgyjnifossFMTSqQISEMb1IJYhSYGQYcAGBIS4,3063
187
+ flwr/proto/run_pb2.py,sha256=pwel-8Hzsz1Gw2EHGEFKObgSEKQNth7nGZOEsJQO8fM,4940
188
+ flwr/proto/run_pb2.pyi,sha256=pr7MPml_7gOmBuu7BO-yaU-LexamsJYxnRG-utigVAo,9641
184
189
  flwr/proto/run_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
185
190
  flwr/proto/run_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
186
191
  flwr/proto/task_pb2.py,sha256=R5GfHgL8IJRI_qHWNeILl1Y9zHjvB0tnCvMHmTgF4Is,2361
187
192
  flwr/proto/task_pb2.pyi,sha256=KJVsLm-THY5QjHreHDm_-OS1tyZyD61mx6BzOpoeMjw,4320
188
193
  flwr/proto/task_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
189
194
  flwr/proto/task_pb2_grpc.pyi,sha256=ff2TSiLVnG6IVQcTGzb2DIH3XRSoAvAo_RMcvbMFyc0,76
190
- flwr/proto/transport_pb2.py,sha256=cURzfpCgZvH7GEvBPLvTYijE3HvhK1MePjINk4xYArk,9781
191
- flwr/proto/transport_pb2.pyi,sha256=CZvJRWTU3QWFWLXNFtyLSrSKFatIyMcy-ohzLbQ-G9c,21497
195
+ flwr/proto/transport_pb2.py,sha256=lJsj9rnLiFBhepXuZAIpZysGAqvtXtoSt4h7soU61Do,9824
196
+ flwr/proto/transport_pb2.pyi,sha256=ipHQ03eFBqsxtAuAVefZ2lVr04BZ4YifJCS2eauNmy8,21627
192
197
  flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPcosk,2598
193
198
  flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
194
199
  flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -207,7 +212,7 @@ flwr/server/driver/driver.py,sha256=rGLbOfLhBOn74mUHi_0CMbXqZLX8q_lXqEkcUXoL_wI,
207
212
  flwr/server/driver/grpc_driver.py,sha256=xd1mxRexeiIJrZw9l-urj2zEIncLT8KtNn0l8hIDYZs,9681
208
213
  flwr/server/driver/inmemory_driver.py,sha256=up5L2ux9l0pEUZO3hh8p5LufXntGL95IA4E3e7WsxqY,6465
209
214
  flwr/server/history.py,sha256=qSb5_pPTrwofpSYGsZWzMPkl_4uJ4mJFWesxXDrEvDU,5026
210
- flwr/server/run_serverapp.py,sha256=ASpwKHNlxpDfBe6UPotxkaifXZyKS9ZIrdwtTGLCt3k,10534
215
+ flwr/server/run_serverapp.py,sha256=SaE9hoWLCAPnRXvdAzE4Oi3QaiC8NOTrHxrIGXjgYxU,10531
211
216
  flwr/server/server.py,sha256=1ZsFEptmAV-L2vP2etNC9Ed5CLSxpuKzUFkAPQ4l5Xc,17893
212
217
  flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
213
218
  flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
@@ -239,14 +244,14 @@ flwr/server/strategy/strategy.py,sha256=cXapkD5uDrt5C-RbmWDn9FLoap3Q41i7GKvbmfbC
239
244
  flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
240
245
  flwr/server/superlink/driver/__init__.py,sha256=_JaRW-FdyikHc7souUrnk3mwTGViraEJCeUBY_M_ocs,712
241
246
  flwr/server/superlink/driver/driver_grpc.py,sha256=ej9T21zIquIJEZyWcvapQSQFckh4oFPamOe6P6DhB2s,2048
242
- flwr/server/superlink/driver/driver_servicer.py,sha256=ofxSlotqz1hhvv9Cww2eWoDS5Jpvavge4AtKxTElJNY,6967
247
+ flwr/server/superlink/driver/driver_servicer.py,sha256=x8L8rIO6r7kVdmWZFJp-xmTB0K_Tz1mh-7Akc6I_ZjY,6967
243
248
  flwr/server/superlink/ffs/__init__.py,sha256=FAY-zShcfPmOxosok2QyT6hTNMNctG8cH9s_nIl8jkI,840
244
249
  flwr/server/superlink/ffs/disk_ffs.py,sha256=yCN6CCzegnJIOaHr5nIu49wZQa4g5BByiSKshz50RKU,3296
245
250
  flwr/server/superlink/ffs/ffs.py,sha256=qLI1UfosJugu2BKOJWqHIhafTm-YiuKqGf3OGWPH0NM,2395
246
251
  flwr/server/superlink/ffs/ffs_factory.py,sha256=N_eMuUZggotdGiDQ5r_Tf21xsu_ob0e3jyM6ag7d3kk,1490
247
252
  flwr/server/superlink/fleet/__init__.py,sha256=76od-HhYjOUoZFLFDFCFnNHI4JLAmaXQEAyp7LWlQpc,711
248
253
  flwr/server/superlink/fleet/grpc_adapter/__init__.py,sha256=spBQQJeYz8zPOBOfyMLv87kqWPASGB73AymcLXdFaYA,742
249
- flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py,sha256=3yrZtwSrvNJzwkZJiOnG48hYVT2ERLQmadKmcHpL4gs,5591
254
+ flwr/server/superlink/fleet/grpc_adapter/grpc_adapter_servicer.py,sha256=kE7ejRKR-8rVJsKgvglHn78L2ok6ZJ1Y4frZvgiJvpk,6341
250
255
  flwr/server/superlink/fleet/grpc_bidi/__init__.py,sha256=dkSKQMuMTYh1qSnuN87cAPv_mcdLg3f0PqTABHs8gUE,735
251
256
  flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py,sha256=xbvorZhCHBj0CvFWB7oUeHoY0o750hUkiS0DiTCGHDs,6020
252
257
  flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=JkAH_nIZaqe_9kntrg26od_jaz5XdLFuvNMgGu8xk9Q,6485
@@ -254,7 +259,7 @@ flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=h3EhqgelegVC4E
254
259
  flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=8VFp7K5ollkexR2UmXOrLtxo6H_B79eZkyM_Ro77tSU,12312
255
260
  flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fGDzfTI6n8QOOn2PyWf4eg,758
256
261
  flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=bgoLQEhahVHjdlRDk_58zyKFeMOziiPUXSbYMhOxybY,4757
257
- flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=sAmmPfjuoHPjhyT5oWKEuj4UJFSyyMxDo1O1BzZmQfs,8005
262
+ flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=pgSiH-qrTgDxu4M_jJu-8gvEQnxTdR-qIAawKgxjQ6M,8157
258
263
  flwr/server/superlink/fleet/message_handler/__init__.py,sha256=h8oLD7uo5lKICPy0rRdKRjTYe62u8PKkT_fA4xF5JPA,731
259
264
  flwr/server/superlink/fleet/message_handler/message_handler.py,sha256=NneayZ9FjIf7k2h_R3wQ2wluqYCAyzVVU_Uq7keWay4,4433
260
265
  flwr/server/superlink/fleet/rest_rere/__init__.py,sha256=5jbYbAn75sGv-gBwOPDySE0kz96F6dTYLeMrGqNi4lM,735
@@ -265,15 +270,15 @@ flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LBAQxnbfPAphVOVIvYMj0Q
265
270
  flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=7kB3re3mR53b7E6L6DPSioTSKD3YGtS3uJsPD7Hn2Fw,7155
266
271
  flwr/server/superlink/fleet/vce/vce_api.py,sha256=cGPsjS_4SJHm8jszGjsHh8ZNk9nqWoIQwW_62yKKR1Y,12647
267
272
  flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
268
- flwr/server/superlink/state/in_memory_state.py,sha256=DvPSyK-ITZI9XfW-1M0bljLa6Sj0JIUeHFbg5tKKc2s,13142
269
- flwr/server/superlink/state/sqlite_state.py,sha256=W1qFF8QvQ9CwhqCwE_sqDERiFVb5rqppira7gJSWI-w,32155
273
+ flwr/server/superlink/state/in_memory_state.py,sha256=m7UwCEYwDaUVnPq6AMegmFnHMx7C5ENKHT5GeVaWalM,13792
274
+ flwr/server/superlink/state/sqlite_state.py,sha256=tLdpnXZ4KDdWTMXfCylRlu3pGrR156cGgDq9N_0TK0Y,33244
270
275
  flwr/server/superlink/state/state.py,sha256=KpM894R8RE1N0b-s_Nlii6i0TDxj0DRkKa3Vf24Gt70,8127
271
276
  flwr/server/superlink/state/state_factory.py,sha256=Fo8pBQ1WWrVJK5TOEPZ_zgJE69_mfTGjTO6czh6571o,2021
272
277
  flwr/server/superlink/state/utils.py,sha256=OsF3OOoU4bU4PgLWkypX6EDoFs0L8RP_mHEBG-tVqGA,5227
273
278
  flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
274
279
  flwr/server/utils/__init__.py,sha256=pltsPHJoXmUIr3utjwwYxu7_ZAGy5u4MVHzv9iA5Un8,908
275
280
  flwr/server/utils/tensorboard.py,sha256=gEBD8w_5uaIfp5aw5RYH66lYZpd_SfkObHQ7eDd9MUk,5466
276
- flwr/server/utils/validator.py,sha256=mJSTiJcOKYr9e2YK8yUR1W-bop5EDd_ZnRiaFCa2jSw,5295
281
+ flwr/server/utils/validator.py,sha256=o13PPwjSM7VyUZgzGUiBQTaJLVmRRKi0NSQj6f5HuiA,5512
277
282
  flwr/server/workflow/__init__.py,sha256=SXY0XkwbkezFBxxrFB5hKUtmtAgnYISBkPouR1V71ss,902
278
283
  flwr/server/workflow/constant.py,sha256=q4DLdR8Krlxuewq2AQjwTL75hphxE5ODNz4AhViHMXk,1082
279
284
  flwr/server/workflow/default_workflows.py,sha256=UMC9JgdomKwxql5G0OV4AeRXWI-bMClaLAOn5OrZMnw,14073
@@ -289,13 +294,13 @@ flwr/simulation/ray_transport/utils.py,sha256=TYdtfg1P9VfTdLMOJlifInGpxWHYs9UfUq
289
294
  flwr/simulation/run_simulation.py,sha256=AN62VEoJhqe88VmkJ5dlJPVcDhUXGBaMKo4KjHqUu_8,22744
290
295
  flwr/superexec/__init__.py,sha256=fcj366jh4RFby_vDwLroU4kepzqbnJgseZD_jUr_Mko,715
291
296
  flwr/superexec/app.py,sha256=mKwlsysbtmGPuz4CpWAPDPWAEFZH3b8u0JKRkWpfzuw,6552
292
- flwr/superexec/deployment.py,sha256=sNb-sYdCDkVEALSbC_eBNIulieHwpg7HzgmDIp4wT9o,6267
297
+ flwr/superexec/deployment.py,sha256=TbzOAAaY2sNt7O516w1GS6N5xvt0UV-dML74O6WA2O4,6344
293
298
  flwr/superexec/exec_grpc.py,sha256=ZPq7EP55Vwj0kRcLVuTCokFqfIgBk-7YmDykZoMKi-c,1935
294
- flwr/superexec/exec_servicer.py,sha256=P4bJtQqCr0NiVIa-ss9lvdUM1SbM_ip5g5UqKp3dNL4,2344
295
- flwr/superexec/executor.py,sha256=k_adivto6R2U82DADOHNvdtobehBYreRek1gOEBIQnQ,2318
299
+ flwr/superexec/exec_servicer.py,sha256=TRpwPVl7eI0Y_xlCY6DmVpAo0yFU1gLwzyIeqFw9pyk,4746
300
+ flwr/superexec/executor.py,sha256=-5J-ZLs-uArro3T2pCq0YQRC65cs18M888nufzdYE4E,2375
296
301
  flwr/superexec/simulation.py,sha256=J6pw-RqCSiUed8I_3MasZH4tl57ZmDebPAHNnbb0-vE,7420
297
- flwr_nightly-1.12.0.dev20240918.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
298
- flwr_nightly-1.12.0.dev20240918.dist-info/METADATA,sha256=lnIUhAPYCT7RrWdszYziCh3uNppNN_xtOLQqihPN92I,15452
299
- flwr_nightly-1.12.0.dev20240918.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
300
- flwr_nightly-1.12.0.dev20240918.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
301
- flwr_nightly-1.12.0.dev20240918.dist-info/RECORD,,
302
+ flwr_nightly-1.12.0.dev20241006.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
303
+ flwr_nightly-1.12.0.dev20241006.dist-info/METADATA,sha256=OGFyy8F9HtsY-OAw8UZsNKncs_mkkG4NsNQvlAc0Mx4,15618
304
+ flwr_nightly-1.12.0.dev20241006.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
305
+ flwr_nightly-1.12.0.dev20241006.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
306
+ flwr_nightly-1.12.0.dev20241006.dist-info/RECORD,,