flwr-nightly 1.12.0.dev20241007__py3-none-any.whl → 1.12.0.dev20241010__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.
- flwr/cli/build.py +60 -29
- flwr/cli/config_utils.py +10 -0
- flwr/cli/install.py +60 -20
- flwr/cli/new/new.py +2 -0
- flwr/cli/new/templates/app/code/client.jax.py.tpl +11 -17
- flwr/cli/new/templates/app/code/client.mlx.py.tpl +16 -36
- flwr/cli/new/templates/app/code/client.numpy.py.tpl +4 -5
- flwr/cli/new/templates/app/code/client.pytorch.py.tpl +8 -11
- flwr/cli/new/templates/app/code/client.sklearn.py.tpl +14 -48
- flwr/cli/new/templates/app/code/server.jax.py.tpl +9 -3
- flwr/cli/new/templates/app/code/server.mlx.py.tpl +13 -2
- flwr/cli/new/templates/app/code/server.numpy.py.tpl +7 -2
- flwr/cli/new/templates/app/code/server.pytorch.py.tpl +1 -1
- flwr/cli/new/templates/app/code/server.sklearn.py.tpl +13 -1
- flwr/cli/new/templates/app/code/task.jax.py.tpl +2 -2
- flwr/cli/new/templates/app/code/task.mlx.py.tpl +1 -1
- flwr/cli/new/templates/app/code/task.numpy.py.tpl +7 -0
- flwr/cli/new/templates/app/code/task.pytorch.py.tpl +3 -3
- flwr/cli/new/templates/app/code/task.sklearn.py.tpl +67 -0
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +3 -2
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -0
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +2 -0
- flwr/cli/run/run.py +5 -5
- flwr/client/app.py +13 -3
- flwr/client/clientapp/app.py +5 -2
- flwr/client/clientapp/utils.py +11 -5
- flwr/client/grpc_rere_client/connection.py +3 -0
- flwr/common/config.py +18 -5
- flwr/common/constant.py +3 -0
- flwr/common/message.py +5 -0
- flwr/common/recordset_compat.py +10 -0
- flwr/common/retry_invoker.py +15 -0
- flwr/server/client_manager.py +2 -0
- flwr/server/compat/driver_client_proxy.py +15 -29
- flwr/server/driver/inmemory_driver.py +6 -2
- flwr/server/run_serverapp.py +11 -13
- flwr/server/superlink/driver/driver_servicer.py +1 -1
- flwr/server/superlink/fleet/grpc_bidi/grpc_server.py +3 -1
- flwr/server/superlink/fleet/vce/vce_api.py +1 -1
- flwr/server/superlink/state/in_memory_state.py +26 -8
- flwr/server/superlink/state/sqlite_state.py +46 -11
- flwr/server/superlink/state/state.py +1 -7
- flwr/server/superlink/state/utils.py +0 -10
- {flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/METADATA +1 -1
- {flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/RECORD +49 -47
- {flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/entry_points.txt +0 -0
|
@@ -39,16 +39,20 @@ class InMemoryDriver(Driver):
|
|
|
39
39
|
The identifier of the run.
|
|
40
40
|
state_factory : StateFactory
|
|
41
41
|
A StateFactory embedding a state that this driver can interface with.
|
|
42
|
+
pull_interval : float (default=0.1)
|
|
43
|
+
Sleep duration between calls to `pull_messages`.
|
|
42
44
|
"""
|
|
43
45
|
|
|
44
46
|
def __init__(
|
|
45
47
|
self,
|
|
46
48
|
run_id: int,
|
|
47
49
|
state_factory: StateFactory,
|
|
50
|
+
pull_interval: float = 0.1,
|
|
48
51
|
) -> None:
|
|
49
52
|
self._run_id = run_id
|
|
50
53
|
self._run: Optional[Run] = None
|
|
51
54
|
self.state = state_factory.state()
|
|
55
|
+
self.pull_interval = pull_interval
|
|
52
56
|
self.node = Node(node_id=0, anonymous=True)
|
|
53
57
|
|
|
54
58
|
def _check_message(self, message: Message) -> None:
|
|
@@ -146,7 +150,7 @@ class InMemoryDriver(Driver):
|
|
|
146
150
|
"""
|
|
147
151
|
msg_ids = {UUID(msg_id) for msg_id in message_ids}
|
|
148
152
|
# Pull TaskRes
|
|
149
|
-
task_res_list = self.state.get_task_res(task_ids=msg_ids
|
|
153
|
+
task_res_list = self.state.get_task_res(task_ids=msg_ids)
|
|
150
154
|
# Delete tasks in state
|
|
151
155
|
self.state.delete_tasks(msg_ids)
|
|
152
156
|
# Convert TaskRes to Message
|
|
@@ -180,5 +184,5 @@ class InMemoryDriver(Driver):
|
|
|
180
184
|
if len(msg_ids) == 0:
|
|
181
185
|
break
|
|
182
186
|
# Sleep
|
|
183
|
-
time.sleep(
|
|
187
|
+
time.sleep(self.pull_interval)
|
|
184
188
|
return ret
|
flwr/server/run_serverapp.py
CHANGED
|
@@ -181,19 +181,17 @@ def run_server_app() -> None:
|
|
|
181
181
|
)
|
|
182
182
|
flwr_dir = get_flwr_dir(args.flwr_dir)
|
|
183
183
|
run_ = driver.run
|
|
184
|
-
if run_.fab_hash:
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
app_path = str(get_project_dir(fab_id, fab_version, flwr_dir))
|
|
184
|
+
if not run_.fab_hash:
|
|
185
|
+
raise ValueError("FAB hash not provided.")
|
|
186
|
+
fab_req = GetFabRequest(hash_str=run_.fab_hash)
|
|
187
|
+
# pylint: disable-next=W0212
|
|
188
|
+
fab_res: GetFabResponse = driver._stub.GetFab(fab_req)
|
|
189
|
+
if fab_res.fab.hash_str != run_.fab_hash:
|
|
190
|
+
raise ValueError("FAB hashes don't match.")
|
|
191
|
+
install_from_fab(fab_res.fab.content, flwr_dir, True)
|
|
192
|
+
fab_id, fab_version = get_fab_metadata(fab_res.fab.content)
|
|
193
|
+
|
|
194
|
+
app_path = str(get_project_dir(fab_id, fab_version, run_.fab_hash, flwr_dir))
|
|
197
195
|
config = get_project_config(app_path)
|
|
198
196
|
else:
|
|
199
197
|
# User provided `app_dir`, but not `--run-id`
|
|
@@ -155,7 +155,7 @@ class DriverServicer(driver_pb2_grpc.DriverServicer):
|
|
|
155
155
|
context.add_callback(on_rpc_done)
|
|
156
156
|
|
|
157
157
|
# Read from state
|
|
158
|
-
task_res_list: list[TaskRes] = state.get_task_res(task_ids=task_ids
|
|
158
|
+
task_res_list: list[TaskRes] = state.get_task_res(task_ids=task_ids)
|
|
159
159
|
|
|
160
160
|
context.set_code(grpc.StatusCode.OK)
|
|
161
161
|
return PullTaskResResponse(task_res_list=task_res_list)
|
|
@@ -174,7 +174,7 @@ def generic_create_grpc_server( # pylint: disable=too-many-arguments
|
|
|
174
174
|
|
|
175
175
|
Parameters
|
|
176
176
|
----------
|
|
177
|
-
servicer_and_add_fn :
|
|
177
|
+
servicer_and_add_fn : tuple
|
|
178
178
|
A tuple holding a servicer implementation and a matching
|
|
179
179
|
add_Servicer_to_server function.
|
|
180
180
|
server_address : str
|
|
@@ -214,6 +214,8 @@ def generic_create_grpc_server( # pylint: disable=too-many-arguments
|
|
|
214
214
|
* CA certificate.
|
|
215
215
|
* server certificate.
|
|
216
216
|
* server private key.
|
|
217
|
+
interceptors : Optional[Sequence[grpc.ServerInterceptor]] (default: None)
|
|
218
|
+
A list of gRPC interceptors.
|
|
217
219
|
|
|
218
220
|
Returns
|
|
219
221
|
-------
|
|
@@ -116,6 +116,7 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
116
116
|
# Return TaskIns
|
|
117
117
|
return task_ins_list
|
|
118
118
|
|
|
119
|
+
# pylint: disable=R0911
|
|
119
120
|
def store_task_res(self, task_res: TaskRes) -> Optional[UUID]:
|
|
120
121
|
"""Store one TaskRes."""
|
|
121
122
|
# Validate task
|
|
@@ -129,6 +130,17 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
129
130
|
task_ins_id = task_res.task.ancestry[0]
|
|
130
131
|
task_ins = self.task_ins_store.get(UUID(task_ins_id))
|
|
131
132
|
|
|
133
|
+
# Ensure that the consumer_id of taskIns matches the producer_id of taskRes.
|
|
134
|
+
if (
|
|
135
|
+
task_ins
|
|
136
|
+
and task_res
|
|
137
|
+
and not (
|
|
138
|
+
task_ins.task.consumer.anonymous or task_res.task.producer.anonymous
|
|
139
|
+
)
|
|
140
|
+
and task_ins.task.consumer.node_id != task_res.task.producer.node_id
|
|
141
|
+
):
|
|
142
|
+
return None
|
|
143
|
+
|
|
132
144
|
if task_ins is None:
|
|
133
145
|
log(ERROR, "TaskIns with task_id %s does not exist.", task_ins_id)
|
|
134
146
|
return None
|
|
@@ -178,27 +190,33 @@ class InMemoryState(State): # pylint: disable=R0902,R0904
|
|
|
178
190
|
# Return the new task_id
|
|
179
191
|
return task_id
|
|
180
192
|
|
|
181
|
-
def get_task_res(self, task_ids: set[UUID]
|
|
193
|
+
def get_task_res(self, task_ids: set[UUID]) -> list[TaskRes]:
|
|
182
194
|
"""Get all TaskRes that have not been delivered yet."""
|
|
183
|
-
if limit is not None and limit < 1:
|
|
184
|
-
raise AssertionError("`limit` must be >= 1")
|
|
185
|
-
|
|
186
195
|
with self.lock:
|
|
187
196
|
# Find TaskRes that were not delivered yet
|
|
188
197
|
task_res_list: list[TaskRes] = []
|
|
189
198
|
replied_task_ids: set[UUID] = set()
|
|
190
199
|
for _, task_res in self.task_res_store.items():
|
|
191
200
|
reply_to = UUID(task_res.task.ancestry[0])
|
|
201
|
+
|
|
202
|
+
# Check if corresponding TaskIns exists and is not expired
|
|
203
|
+
task_ins = self.task_ins_store.get(reply_to)
|
|
204
|
+
if task_ins is None:
|
|
205
|
+
log(WARNING, "TaskIns with task_id %s does not exist.", reply_to)
|
|
206
|
+
task_ids.remove(reply_to)
|
|
207
|
+
continue
|
|
208
|
+
|
|
209
|
+
if task_ins.task.created_at + task_ins.task.ttl <= time.time():
|
|
210
|
+
log(WARNING, "TaskIns with task_id %s is expired.", reply_to)
|
|
211
|
+
task_ids.remove(reply_to)
|
|
212
|
+
continue
|
|
213
|
+
|
|
192
214
|
if reply_to in task_ids and task_res.task.delivered_at == "":
|
|
193
215
|
task_res_list.append(task_res)
|
|
194
216
|
replied_task_ids.add(reply_to)
|
|
195
|
-
if limit and len(task_res_list) == limit:
|
|
196
|
-
break
|
|
197
217
|
|
|
198
218
|
# Check if the node is offline
|
|
199
219
|
for task_id in task_ids - replied_task_ids:
|
|
200
|
-
if limit and len(task_res_list) == limit:
|
|
201
|
-
break
|
|
202
220
|
task_ins = self.task_ins_store.get(task_id)
|
|
203
221
|
if task_ins is None:
|
|
204
222
|
continue
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
# ==============================================================================
|
|
15
15
|
"""SQLite based implemenation of server state."""
|
|
16
16
|
|
|
17
|
+
# pylint: disable=too-many-lines
|
|
17
18
|
|
|
18
19
|
import json
|
|
19
20
|
import re
|
|
@@ -150,6 +151,11 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
150
151
|
----------
|
|
151
152
|
log_queries : bool
|
|
152
153
|
Log each query which is executed.
|
|
154
|
+
|
|
155
|
+
Returns
|
|
156
|
+
-------
|
|
157
|
+
list[tuple[str]]
|
|
158
|
+
The list of all tables in the DB.
|
|
153
159
|
"""
|
|
154
160
|
self.conn = sqlite3.connect(self.database_path)
|
|
155
161
|
self.conn.execute("PRAGMA foreign_keys = ON;")
|
|
@@ -389,6 +395,16 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
389
395
|
)
|
|
390
396
|
return None
|
|
391
397
|
|
|
398
|
+
# Ensure that the consumer_id of taskIns matches the producer_id of taskRes.
|
|
399
|
+
if (
|
|
400
|
+
task_ins
|
|
401
|
+
and task_res
|
|
402
|
+
and not (task_ins["consumer_anonymous"] or task_res.task.producer.anonymous)
|
|
403
|
+
and convert_sint64_to_uint64(task_ins["consumer_node_id"])
|
|
404
|
+
!= task_res.task.producer.node_id
|
|
405
|
+
):
|
|
406
|
+
return None
|
|
407
|
+
|
|
392
408
|
# Fail if the TaskRes TTL exceeds the
|
|
393
409
|
# expiration time of the TaskIns it replies to.
|
|
394
410
|
# Condition: TaskIns.created_at + TaskIns.ttl ≥
|
|
@@ -432,8 +448,8 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
432
448
|
|
|
433
449
|
return task_id
|
|
434
450
|
|
|
435
|
-
# pylint: disable-next=R0914
|
|
436
|
-
def get_task_res(self, task_ids: set[UUID]
|
|
451
|
+
# pylint: disable-next=R0912,R0915,R0914
|
|
452
|
+
def get_task_res(self, task_ids: set[UUID]) -> list[TaskRes]:
|
|
437
453
|
"""Get TaskRes for task_ids.
|
|
438
454
|
|
|
439
455
|
Usually, the Driver API calls this method to get results for instructions it has
|
|
@@ -448,8 +464,34 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
448
464
|
will only take effect if enough task_ids are in the set AND are currently
|
|
449
465
|
available. If `limit` is set, it has to be greater than zero.
|
|
450
466
|
"""
|
|
451
|
-
if
|
|
452
|
-
|
|
467
|
+
# Check if corresponding TaskIns exists and is not expired
|
|
468
|
+
task_ids_placeholders = ",".join([f":id_{i}" for i in range(len(task_ids))])
|
|
469
|
+
query = f"""
|
|
470
|
+
SELECT *
|
|
471
|
+
FROM task_ins
|
|
472
|
+
WHERE task_id IN ({task_ids_placeholders})
|
|
473
|
+
AND (created_at + ttl) > CAST(strftime('%s', 'now') AS REAL)
|
|
474
|
+
"""
|
|
475
|
+
query += ";"
|
|
476
|
+
|
|
477
|
+
task_ins_data = {}
|
|
478
|
+
for index, task_id in enumerate(task_ids):
|
|
479
|
+
task_ins_data[f"id_{index}"] = str(task_id)
|
|
480
|
+
|
|
481
|
+
task_ins_rows = self.query(query, task_ins_data)
|
|
482
|
+
|
|
483
|
+
if not task_ins_rows:
|
|
484
|
+
return []
|
|
485
|
+
|
|
486
|
+
for row in task_ins_rows:
|
|
487
|
+
# Convert values from sint64 to uint64
|
|
488
|
+
convert_sint64_values_in_dict_to_uint64(
|
|
489
|
+
row, ["run_id", "producer_node_id", "consumer_node_id"]
|
|
490
|
+
)
|
|
491
|
+
task_ins = dict_to_task_ins(row)
|
|
492
|
+
if task_ins.task.created_at + task_ins.task.ttl <= time.time():
|
|
493
|
+
log(WARNING, "TaskIns with task_id %s is expired.", task_ins.task_id)
|
|
494
|
+
task_ids.remove(UUID(task_ins.task_id))
|
|
453
495
|
|
|
454
496
|
# Retrieve all anonymous Tasks
|
|
455
497
|
if len(task_ids) == 0:
|
|
@@ -465,10 +507,6 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
465
507
|
|
|
466
508
|
data: dict[str, Union[str, float, int]] = {}
|
|
467
509
|
|
|
468
|
-
if limit is not None:
|
|
469
|
-
query += " LIMIT :limit"
|
|
470
|
-
data["limit"] = limit
|
|
471
|
-
|
|
472
510
|
query += ";"
|
|
473
511
|
|
|
474
512
|
for index, task_id in enumerate(task_ids):
|
|
@@ -543,9 +581,6 @@ class SqliteState(State): # pylint: disable=R0904
|
|
|
543
581
|
|
|
544
582
|
# Make TaskRes containing node unavailabe error
|
|
545
583
|
for row in task_ins_rows:
|
|
546
|
-
if limit and len(result) == limit:
|
|
547
|
-
break
|
|
548
|
-
|
|
549
584
|
for row in rows:
|
|
550
585
|
# Convert values from sint64 to uint64
|
|
551
586
|
convert_sint64_values_in_dict_to_uint64(
|
|
@@ -98,7 +98,7 @@ class State(abc.ABC): # pylint: disable=R0904
|
|
|
98
98
|
"""
|
|
99
99
|
|
|
100
100
|
@abc.abstractmethod
|
|
101
|
-
def get_task_res(self, task_ids: set[UUID]
|
|
101
|
+
def get_task_res(self, task_ids: set[UUID]) -> list[TaskRes]:
|
|
102
102
|
"""Get TaskRes for task_ids.
|
|
103
103
|
|
|
104
104
|
Usually, the Driver API calls this method to get results for instructions it has
|
|
@@ -106,12 +106,6 @@ class State(abc.ABC): # pylint: disable=R0904
|
|
|
106
106
|
|
|
107
107
|
Retrieves all TaskRes for the given `task_ids` and returns and empty list of
|
|
108
108
|
none could be found.
|
|
109
|
-
|
|
110
|
-
Constraints
|
|
111
|
-
-----------
|
|
112
|
-
If `limit` is not `None`, return, at most, `limit` number of TaskRes. The limit
|
|
113
|
-
will only take effect if enough task_ids are in the set AND are currently
|
|
114
|
-
available. If `limit` is set, it has to be greater zero.
|
|
115
109
|
"""
|
|
116
110
|
|
|
117
111
|
@abc.abstractmethod
|
|
@@ -100,11 +100,6 @@ def convert_uint64_values_in_dict_to_sint64(
|
|
|
100
100
|
A dictionary where the values are integers to be converted.
|
|
101
101
|
keys : list[str]
|
|
102
102
|
A list of keys in the dictionary whose values need to be converted.
|
|
103
|
-
|
|
104
|
-
Returns
|
|
105
|
-
-------
|
|
106
|
-
None
|
|
107
|
-
This function does not return a value. It modifies `data_dict` in place.
|
|
108
103
|
"""
|
|
109
104
|
for key in keys:
|
|
110
105
|
if key in data_dict:
|
|
@@ -122,11 +117,6 @@ def convert_sint64_values_in_dict_to_uint64(
|
|
|
122
117
|
A dictionary where the values are integers to be converted.
|
|
123
118
|
keys : list[str]
|
|
124
119
|
A list of keys in the dictionary whose values need to be converted.
|
|
125
|
-
|
|
126
|
-
Returns
|
|
127
|
-
-------
|
|
128
|
-
None
|
|
129
|
-
This function does not return a value. It modifies `data_dict` in place.
|
|
130
120
|
"""
|
|
131
121
|
for key in keys:
|
|
132
122
|
if key in data_dict:
|
{flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/RECORD
RENAMED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
flwr/__init__.py,sha256=VmBWedrCxqmt4QvUHBLqyVEH6p7zaFMD_oCHerXHSVw,937
|
|
2
2
|
flwr/cli/__init__.py,sha256=cZJVgozlkC6Ni2Hd_FAIrqefrkCGOV18fikToq-6iLw,720
|
|
3
3
|
flwr/cli/app.py,sha256=_HDs7HS12Dp7NXIyVrkPs1SKJq3x-XvVZd6y1lvyud4,1255
|
|
4
|
-
flwr/cli/build.py,sha256=
|
|
5
|
-
flwr/cli/config_utils.py,sha256=
|
|
4
|
+
flwr/cli/build.py,sha256=WC7e6xPJJqRJvXmi8u0ECRvPThPYQcGOxLEgh9uG0gI,6365
|
|
5
|
+
flwr/cli/config_utils.py,sha256=U0tYiC4uwT68LzXFpiiu6XzzplEo-43BR_ON9t3aHOw,7956
|
|
6
6
|
flwr/cli/example.py,sha256=1bGDYll3BXQY2kRqSN-oICqS5n1b9m0g0RvXTopXHl4,2215
|
|
7
|
-
flwr/cli/install.py,sha256=
|
|
7
|
+
flwr/cli/install.py,sha256=7Dx8zrn49mTktxGOToBhGx8hzsHOViDasMJ43ooKPXc,8646
|
|
8
8
|
flwr/cli/log.py,sha256=uhtcLcFGkazirWnEmet3Wt3rt_q-a13kauQqPLaMaRY,8097
|
|
9
9
|
flwr/cli/new/__init__.py,sha256=cQzK1WH4JP2awef1t2UQ2xjl1agVEz9rwutV18SWV1k,789
|
|
10
|
-
flwr/cli/new/new.py,sha256=
|
|
10
|
+
flwr/cli/new/new.py,sha256=uSiG7aXQzPDnikv2YcjQ86OOLqint0hNWCI0fSQD0jI,9634
|
|
11
11
|
flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
|
|
12
12
|
flwr/cli/new/templates/app/.gitignore.tpl,sha256=XixnHdyeMB2vwkGtGnwHqoWpH-9WChdyG0GXe57duhc,3078
|
|
13
13
|
flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
|
@@ -20,11 +20,11 @@ flwr/cli/new/templates/app/code/__init__.py,sha256=EM6vfvgAILKPaPn7H1wMV1Wi01WyZ
|
|
|
20
20
|
flwr/cli/new/templates/app/code/__init__.py.tpl,sha256=J0Gn74E7khpLyKJVNqOPu7ev93vkcu1PZugsbxtABMw,52
|
|
21
21
|
flwr/cli/new/templates/app/code/client.baseline.py.tpl,sha256=1htktXX3jXX05r0vuG_afjS1sXGtuONW9EpiQ7vSBes,1901
|
|
22
22
|
flwr/cli/new/templates/app/code/client.huggingface.py.tpl,sha256=ifD08KwjdoGieV26hFCgf3PQB6rMhj_NZLo5iUUndm8,1846
|
|
23
|
-
flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=
|
|
24
|
-
flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=
|
|
25
|
-
flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=
|
|
26
|
-
flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=
|
|
27
|
-
flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=
|
|
23
|
+
flwr/cli/new/templates/app/code/client.jax.py.tpl,sha256=4EkcGGmbPAa6dgw8GYII-GfrGsu8VU6amRHpJvF0WuA,1319
|
|
24
|
+
flwr/cli/new/templates/app/code/client.mlx.py.tpl,sha256=gOxt_QUTfGFpofdNaxdwTSLZlkTWHPYGix2OGHC1hYE,2376
|
|
25
|
+
flwr/cli/new/templates/app/code/client.numpy.py.tpl,sha256=DKcnz5-KUf693Va056QTKVofFV3ozJZutK4rQyfvRXc,548
|
|
26
|
+
flwr/cli/new/templates/app/code/client.pytorch.py.tpl,sha256=fuxVmZpjHIueNy_aHWF81531vmi8DGu4CYjYDqmUwWo,1705
|
|
27
|
+
flwr/cli/new/templates/app/code/client.sklearn.py.tpl,sha256=MfhMN-hayGCc3cZ1XpN0A6f67GRveI_tGbq5kjOeP0Q,1871
|
|
28
28
|
flwr/cli/new/templates/app/code/client.tensorflow.py.tpl,sha256=yBiiU7B9Kf70U52cPkNs_dUpYrrTwbUi2os-PAyheaM,1680
|
|
29
29
|
flwr/cli/new/templates/app/code/dataset.baseline.py.tpl,sha256=jbd_exHAk2-Blu_kVutjPO6a_dkJQWb232zxSeXIZ1k,1453
|
|
30
30
|
flwr/cli/new/templates/app/code/flwr_tune/__init__.py,sha256=JgNgBtKdm1jKM9625WxappCAVUGtYAmcjKSsXJ1u3ZQ,748
|
|
@@ -36,39 +36,41 @@ flwr/cli/new/templates/app/code/flwr_tune/strategy.py.tpl,sha256=BhiqRg9w1MGuU5h
|
|
|
36
36
|
flwr/cli/new/templates/app/code/model.baseline.py.tpl,sha256=cSz6-IWsnMl7s04DW4URINiIppCIberrtE8NqK6Qz48,2571
|
|
37
37
|
flwr/cli/new/templates/app/code/server.baseline.py.tpl,sha256=outx7lDXsWS8QXKWOGOiDno6eE8WL7LBD51ZkAuC3WU,1570
|
|
38
38
|
flwr/cli/new/templates/app/code/server.huggingface.py.tpl,sha256=0PJmnZvR9_VPLSak1yVfkOx3dmqo6cynhY1l2s4AZrE,1158
|
|
39
|
-
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=
|
|
40
|
-
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=
|
|
41
|
-
flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=
|
|
42
|
-
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=
|
|
43
|
-
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=
|
|
39
|
+
flwr/cli/new/templates/app/code/server.jax.py.tpl,sha256=IHk57syZhvO4nWVHGxE9S8f5DTxRKIrTitDufF4RhMY,828
|
|
40
|
+
flwr/cli/new/templates/app/code/server.mlx.py.tpl,sha256=GAqalaI-U2uRdttNeRn75k1FzdEW3rmgT-ywuKkFdK4,988
|
|
41
|
+
flwr/cli/new/templates/app/code/server.numpy.py.tpl,sha256=xbQlLCKutnOqlbLQPZsaL9WM7vnebTceiU8a0HaUcZk,740
|
|
42
|
+
flwr/cli/new/templates/app/code/server.pytorch.py.tpl,sha256=gvBsGA_Jg9kAH8xTxjzTjMcvBtciuccOwQFbO7ey8tU,916
|
|
43
|
+
flwr/cli/new/templates/app/code/server.sklearn.py.tpl,sha256=JoDYjPU99aKTTfjKsCtKHzMICiOR9pi8JGVBsxFpWO4,1133
|
|
44
44
|
flwr/cli/new/templates/app/code/server.tensorflow.py.tpl,sha256=xMhQ7AumowgLkgUilgjVK7IbpRhPjslhVJU-vID6NY8,856
|
|
45
45
|
flwr/cli/new/templates/app/code/strategy.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
46
46
|
flwr/cli/new/templates/app/code/task.huggingface.py.tpl,sha256=ua6cAhJYPUCwML20DEucM0F4ZzzsEVQLYrRvhQ7CGRE,3347
|
|
47
|
-
flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=
|
|
48
|
-
flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=
|
|
49
|
-
flwr/cli/new/templates/app/code/task.
|
|
47
|
+
flwr/cli/new/templates/app/code/task.jax.py.tpl,sha256=jK03Y0HUvVFjUB-cYnvYB-WCRdr451aYklP1o6G5rx8,1530
|
|
48
|
+
flwr/cli/new/templates/app/code/task.mlx.py.tpl,sha256=YxH5z4s5kOh5_9DIY9pvzqURckLDfgdanTA68_iM_Wo,2946
|
|
49
|
+
flwr/cli/new/templates/app/code/task.numpy.py.tpl,sha256=MsjJK8DAvM3ex6JTfZuBVqoBKJfCCjIHMUOPkspiSQ0,124
|
|
50
|
+
flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=XlJqA4Ix_PloO_zJLhjiN5vDj16w3I4CPVGdmbe8asE,3800
|
|
51
|
+
flwr/cli/new/templates/app/code/task.sklearn.py.tpl,sha256=SeIIo0rr_6ffn4Qx2xELD18jYXCkcW__NWtYEDXCICM,1843
|
|
50
52
|
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=SKXAZdgBnPpbAbJ90Rb7oQ5ilnopBx_j_JNFoUDeEAI,1732
|
|
51
53
|
flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
|
52
54
|
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=4gi90W9_B1kj6rYkpvVJxhNX9Yctsv9OH6CzXP-dcE4,2666
|
|
53
|
-
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=
|
|
55
|
+
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=z02u1QgZ9qZ5_3Q1TKCIRgnnMufbPaKUfsacUuTou4I,1853
|
|
54
56
|
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=CHJgkPNkJfzJhEbTe15uiV3AhOtIddQi-yofPZsCk3E,1143
|
|
55
|
-
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=
|
|
56
|
-
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=
|
|
57
|
+
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=v1DVriLky0ow9yc0NK91_6VkxkzpPsheIxbb2c0LcYQ,673
|
|
58
|
+
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=S4QDy7UXboJt60R3LE7z97_QU1idb0ob8A_N7O3cifo,765
|
|
57
59
|
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=-FCi64ygMgQke3zApUt0XtkIBo3WtQoPAPhtp_FqkPE,612
|
|
58
60
|
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=vIO1ArukTC76ogYLNmJIl25MOE_nEELj3IcTZZJjohU,710
|
|
59
|
-
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=
|
|
61
|
+
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=fdlIN_sip1mrbOtqpeag60Kj56aYrA-0HEq9lYZLNnM,686
|
|
60
62
|
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=bRIvPCPvTTI4Eo5b61Rmw8WdDw3sjcohciTXgULN5l8,702
|
|
61
63
|
flwr/cli/run/__init__.py,sha256=oCd6HmQDx-sqver1gecgx-uMA38BLTSiiKpl7RGNceg,789
|
|
62
|
-
flwr/cli/run/run.py,sha256=
|
|
64
|
+
flwr/cli/run/run.py,sha256=NMCeDfImxta1VEeBqqkP05xsuBK6YWFTd7Qj_bIEA2Y,8394
|
|
63
65
|
flwr/cli/utils.py,sha256=emMUdthvoHBTB0iGQp-oFBmA5wV46lw3y3FmfXQPCsc,4500
|
|
64
66
|
flwr/client/__init__.py,sha256=DGDoO0AEAfz-0CUFmLdyUUweAS64-07AOnmDfWUefK4,1192
|
|
65
|
-
flwr/client/app.py,sha256=
|
|
67
|
+
flwr/client/app.py,sha256=q-hExXwM3lru1TdYVE6HA3hKgwjhmbO_6Iq6oifVGpk,32712
|
|
66
68
|
flwr/client/client.py,sha256=gy6WVlMUFAp8oevN4xpQPX30vPOIYGVqdbuFlTWkyG4,9080
|
|
67
69
|
flwr/client/client_app.py,sha256=cTig-N00YzTucbo9zNi6I21J8PlbflU_8J_f5CI-Wpw,10390
|
|
68
70
|
flwr/client/clientapp/__init__.py,sha256=kZqChGnTChQ1WGSUkIlW2S5bc0d0mzDubCAmZUGRpEY,800
|
|
69
|
-
flwr/client/clientapp/app.py,sha256
|
|
71
|
+
flwr/client/clientapp/app.py,sha256=ddPi3jPYO7-uGZBZ0O91NbP2x-HVOiqFGEkprdsMAUU,7882
|
|
70
72
|
flwr/client/clientapp/clientappio_servicer.py,sha256=5L6bjw_j3Mnx9kRFwYwxDNABKurBO5q1jZOWE_X11wQ,8522
|
|
71
|
-
flwr/client/clientapp/utils.py,sha256=
|
|
73
|
+
flwr/client/clientapp/utils.py,sha256=Xg23Q7g7r9jrxXEbvJ9wXal_uAqYK3mi087u0QER6-I,4343
|
|
72
74
|
flwr/client/dpfedavg_numpy_client.py,sha256=4KsEvzavDKyVDU1V0kMqffTwu1lNdUCYQN-i0DTYVN8,7404
|
|
73
75
|
flwr/client/grpc_adapter_client/__init__.py,sha256=QyNWIbsq9DpyMk7oemiO1P3TBFfkfkctnJ1JoAkTl3s,742
|
|
74
76
|
flwr/client/grpc_adapter_client/connection.py,sha256=50LlADsrvvo_kYoGRXOph3ICAmcaQcPDEYuBmA6l5PI,3971
|
|
@@ -76,7 +78,7 @@ flwr/client/grpc_client/__init__.py,sha256=LsnbqXiJhgQcB0XzAlUQgPx011Uf7Y7yabIC1
|
|
|
76
78
|
flwr/client/grpc_client/connection.py,sha256=WX0cKlV_S19bYYp52z3PYRrtOdGb52ovvFFVWIz6Uyw,9382
|
|
77
79
|
flwr/client/grpc_rere_client/__init__.py,sha256=MK-oSoV3kwUEQnIwl0GN4OpiHR7eLOrMA8ikunET130,752
|
|
78
80
|
flwr/client/grpc_rere_client/client_interceptor.py,sha256=q08lIEeJLvvonNOiejNXvmySbPObteGnbDHhEKDmWzE,5380
|
|
79
|
-
flwr/client/grpc_rere_client/connection.py,sha256=
|
|
81
|
+
flwr/client/grpc_rere_client/connection.py,sha256=OgDQ9TFVrPV-X4UgduduxOICRvz834zd8zG7QrYvgM0,11152
|
|
80
82
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=sQo0I9T65t97LFGoW_PrmgaTbd18GFgi2DoAI5wQJ4k,5589
|
|
81
83
|
flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
|
|
82
84
|
flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
|
|
@@ -100,8 +102,8 @@ flwr/client/supernode/app.py,sha256=it4jm9GATntwmRJNXfIIfsS8bTIRwba94B1uNy0I2TM,
|
|
|
100
102
|
flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
|
|
101
103
|
flwr/common/__init__.py,sha256=TVaoFEJE158aui1TPZQiJCDZX4RNHRyI8I55VC80HhI,3901
|
|
102
104
|
flwr/common/address.py,sha256=7kM2Rqjw86-c8aKwAvrXerWqznnVv4TFJ62aSAeTn10,3017
|
|
103
|
-
flwr/common/config.py,sha256=
|
|
104
|
-
flwr/common/constant.py,sha256=
|
|
105
|
+
flwr/common/config.py,sha256=hlj3Div9D53cIg7ur-d1xr6sAHM0shAR3aQyOsOxZuE,7779
|
|
106
|
+
flwr/common/constant.py,sha256=cUP0lErfb0s1ACnErm_T5kIks0xnEi2X5UNnzmXRSW4,3757
|
|
105
107
|
flwr/common/context.py,sha256=5Bd9RCrhLkYZOVR7vr97OVhzVBHQkS1fUsYiIKTwpxU,2239
|
|
106
108
|
flwr/common/date.py,sha256=OcQuwpb2HxcblTqYm6H223ufop5UZw5N_fzalbpOVzY,891
|
|
107
109
|
flwr/common/differential_privacy.py,sha256=XwcJ3rWr8S8BZUocc76vLSJAXIf6OHnWkBV6-xlIRuw,6106
|
|
@@ -110,7 +112,7 @@ flwr/common/dp.py,sha256=vddkvyjV2FhRoN4VuU2LeAM1UBn7dQB8_W-Qdiveal8,1978
|
|
|
110
112
|
flwr/common/exit_handlers.py,sha256=MracJaBeoCOC7TaXK9zCJQxhrMSx9ZtczK237qvhBpU,2806
|
|
111
113
|
flwr/common/grpc.py,sha256=6Yi28JjAll19nxYJlOT9B03RN8dvJZP9zUoR3RSmxoY,2487
|
|
112
114
|
flwr/common/logger.py,sha256=zAjaGrr_UWMkIdi1xG9tY764qJHIYM8LsPgMfBsyp64,8117
|
|
113
|
-
flwr/common/message.py,sha256=
|
|
115
|
+
flwr/common/message.py,sha256=OpVvfWDHBVwcW-P_xToxSyo77cPFoCn_1cFwV2bfr4A,13801
|
|
114
116
|
flwr/common/object_ref.py,sha256=5lgWqYaJR28UdFc-iirWw9YqFXMfgkOOAdfJc1AVibE,8711
|
|
115
117
|
flwr/common/parameter.py,sha256=-bFAUayToYDF50FZGrBC1hQYJCQDtB2bbr3ZuVLMtdE,2095
|
|
116
118
|
flwr/common/pyproject.py,sha256=EI_ovbCHGmhYrdPx0RSDi5EkFZFof-8m1PA54c0ZTjc,1385
|
|
@@ -121,8 +123,8 @@ flwr/common/record/metricsrecord.py,sha256=UywkEPbifiu_IyPUFoDJCi8WEVLujlqZERUWA
|
|
|
121
123
|
flwr/common/record/parametersrecord.py,sha256=IjnewX8Ea6JXLRWcPMVole2sNjwzRVjBVvzoey5gqtw,7747
|
|
122
124
|
flwr/common/record/recordset.py,sha256=sSofrBycZSqiHR4TzfI4_QoIIN-5B1LnMG0C9CiByAo,8312
|
|
123
125
|
flwr/common/record/typeddict.py,sha256=q5hL2xkXymuiCprHWb69mUmLpWQk_XXQq0hGQ69YPaw,3599
|
|
124
|
-
flwr/common/recordset_compat.py,sha256=
|
|
125
|
-
flwr/common/retry_invoker.py,sha256=
|
|
126
|
+
flwr/common/recordset_compat.py,sha256=ViSwA26h6Q55ZmV1LLjSJpcKiipV-p_JpCj4wxdE-Ow,14230
|
|
127
|
+
flwr/common/retry_invoker.py,sha256=u5dHcRMoyS8ABL3Fjk4P5P1lgRYYa1edfLGzWXxwyAc,11969
|
|
126
128
|
flwr/common/secure_aggregation/__init__.py,sha256=erPnTWdOfMH0K0HQTmj5foDJ6t3iYcExy2aACy8iZNQ,731
|
|
127
129
|
flwr/common/secure_aggregation/crypto/__init__.py,sha256=nlHesCWy8xxE5s6qHWnauCtyClcMQ2K0CEXAHakY5n0,738
|
|
128
130
|
flwr/common/secure_aggregation/crypto/shamir.py,sha256=wCSfEfeaPgJ9Om580-YPUF2ljiyRhq33TRC4HtwxYl8,2779
|
|
@@ -199,20 +201,20 @@ flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve
|
|
|
199
201
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
200
202
|
flwr/server/__init__.py,sha256=cEg1oecBu4cKB69iJCqWEylC8b5XW47bl7rQiJsdTvM,1528
|
|
201
203
|
flwr/server/app.py,sha256=aPl20uTV7jKz5RbjLE2saYIMm5GUJ-wHI_J4AMhi1xg,24423
|
|
202
|
-
flwr/server/client_manager.py,sha256=
|
|
204
|
+
flwr/server/client_manager.py,sha256=7Ese0tgrH-i-ms363feYZJKwB8gWnXSmg_hYF2Bju4U,6227
|
|
203
205
|
flwr/server/client_proxy.py,sha256=4G-oTwhb45sfWLx2uZdcXD98IZwdTS6F88xe3akCdUg,2399
|
|
204
206
|
flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw4,892
|
|
205
207
|
flwr/server/compat/app.py,sha256=5vkHHm_h-4cMthvWD1GJo1ZW3eihytjGgvsgfXUK9gA,3298
|
|
206
208
|
flwr/server/compat/app_utils.py,sha256=i8MseZQculltLTsRIEe4XUnmAuu3LF3WzGjYi0c-cps,3425
|
|
207
|
-
flwr/server/compat/driver_client_proxy.py,sha256=
|
|
209
|
+
flwr/server/compat/driver_client_proxy.py,sha256=Af0bRUEVZNcCYRxt3DjpLPdvVYpTgz6LSlILtI_8DQY,5010
|
|
208
210
|
flwr/server/compat/legacy_context.py,sha256=wBzBcfV6YO6IQGriM_FdJ5XZfiBBEEJdS_OdAiF47dY,1804
|
|
209
211
|
flwr/server/criterion.py,sha256=ypbAexbztzGUxNen9RCHF91QeqiEQix4t4Ih3E-42MM,1061
|
|
210
212
|
flwr/server/driver/__init__.py,sha256=bikRv6CjTwSvYh7tf10gziU5o2YotOWhhftz2tr3KDc,886
|
|
211
213
|
flwr/server/driver/driver.py,sha256=rGLbOfLhBOn74mUHi_0CMbXqZLX8q_lXqEkcUXoL_wI,5238
|
|
212
214
|
flwr/server/driver/grpc_driver.py,sha256=xd1mxRexeiIJrZw9l-urj2zEIncLT8KtNn0l8hIDYZs,9681
|
|
213
|
-
flwr/server/driver/inmemory_driver.py,sha256=
|
|
215
|
+
flwr/server/driver/inmemory_driver.py,sha256=QsYY4-aUVgLl7gVly8EW4D-NZzsCB58MhYkYUrFTEIw,6638
|
|
214
216
|
flwr/server/history.py,sha256=qSb5_pPTrwofpSYGsZWzMPkl_4uJ4mJFWesxXDrEvDU,5026
|
|
215
|
-
flwr/server/run_serverapp.py,sha256=
|
|
217
|
+
flwr/server/run_serverapp.py,sha256=5zoXSzLWKAuhK33cLYN-y5LzTgKqIyioNmzs7MIrDOA,10498
|
|
216
218
|
flwr/server/server.py,sha256=1ZsFEptmAV-L2vP2etNC9Ed5CLSxpuKzUFkAPQ4l5Xc,17893
|
|
217
219
|
flwr/server/server_app.py,sha256=1hul76ospG8L_KooK_ewn1sWPNTNYLTtZMeGNOBNruA,6267
|
|
218
220
|
flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
|
|
@@ -244,7 +246,7 @@ flwr/server/strategy/strategy.py,sha256=cXapkD5uDrt5C-RbmWDn9FLoap3Q41i7GKvbmfbC
|
|
|
244
246
|
flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
|
|
245
247
|
flwr/server/superlink/driver/__init__.py,sha256=_JaRW-FdyikHc7souUrnk3mwTGViraEJCeUBY_M_ocs,712
|
|
246
248
|
flwr/server/superlink/driver/driver_grpc.py,sha256=ej9T21zIquIJEZyWcvapQSQFckh4oFPamOe6P6DhB2s,2048
|
|
247
|
-
flwr/server/superlink/driver/driver_servicer.py,sha256=
|
|
249
|
+
flwr/server/superlink/driver/driver_servicer.py,sha256=6c_0PP2-Pec9JVJTZZK_3yfrQ8dwAfzhn43mPzT2rYw,6955
|
|
248
250
|
flwr/server/superlink/ffs/__init__.py,sha256=FAY-zShcfPmOxosok2QyT6hTNMNctG8cH9s_nIl8jkI,840
|
|
249
251
|
flwr/server/superlink/ffs/disk_ffs.py,sha256=yCN6CCzegnJIOaHr5nIu49wZQa4g5BByiSKshz50RKU,3296
|
|
250
252
|
flwr/server/superlink/ffs/ffs.py,sha256=qLI1UfosJugu2BKOJWqHIhafTm-YiuKqGf3OGWPH0NM,2395
|
|
@@ -256,7 +258,7 @@ flwr/server/superlink/fleet/grpc_bidi/__init__.py,sha256=dkSKQMuMTYh1qSnuN87cAPv
|
|
|
256
258
|
flwr/server/superlink/fleet/grpc_bidi/flower_service_servicer.py,sha256=xbvorZhCHBj0CvFWB7oUeHoY0o750hUkiS0DiTCGHDs,6020
|
|
257
259
|
flwr/server/superlink/fleet/grpc_bidi/grpc_bridge.py,sha256=JkAH_nIZaqe_9kntrg26od_jaz5XdLFuvNMgGu8xk9Q,6485
|
|
258
260
|
flwr/server/superlink/fleet/grpc_bidi/grpc_client_proxy.py,sha256=h3EhqgelegVC4EjOXH5birmAnMoCBJcP7jpHYCnHZPk,4887
|
|
259
|
-
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=
|
|
261
|
+
flwr/server/superlink/fleet/grpc_bidi/grpc_server.py,sha256=01eorJIL7LVTRkxAnJjZp3HLlJzWZzg2cVOGAWxF0Ag,12427
|
|
260
262
|
flwr/server/superlink/fleet/grpc_rere/__init__.py,sha256=j2hyC342am-_Hgp1g80Y3fGDzfTI6n8QOOn2PyWf4eg,758
|
|
261
263
|
flwr/server/superlink/fleet/grpc_rere/fleet_servicer.py,sha256=bgoLQEhahVHjdlRDk_58zyKFeMOziiPUXSbYMhOxybY,4757
|
|
262
264
|
flwr/server/superlink/fleet/grpc_rere/server_interceptor.py,sha256=pgSiH-qrTgDxu4M_jJu-8gvEQnxTdR-qIAawKgxjQ6M,8157
|
|
@@ -268,13 +270,13 @@ flwr/server/superlink/fleet/vce/__init__.py,sha256=36MHKiefnJeyjwMQzVUK4m06Ojon3
|
|
|
268
270
|
flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=Onq16E2M2Wha2K1zvhcquT1jOveQL2cgIrgqWvAPH9Y,1436
|
|
269
271
|
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LBAQxnbfPAphVOVIvYMj0QIvVP5O-RQxKQlUGNUj974,2194
|
|
270
272
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=7kB3re3mR53b7E6L6DPSioTSKD3YGtS3uJsPD7Hn2Fw,7155
|
|
271
|
-
flwr/server/superlink/fleet/vce/vce_api.py,sha256=
|
|
273
|
+
flwr/server/superlink/fleet/vce/vce_api.py,sha256=4f4xEcTKXkj6Wc9jg30hzJR1RX7ECxkfsCj0CKfC9xE,12661
|
|
272
274
|
flwr/server/superlink/state/__init__.py,sha256=Gj2OTFLXvA-mAjBvwuKDM3rDrVaQPcIoybSa2uskMTE,1003
|
|
273
|
-
flwr/server/superlink/state/in_memory_state.py,sha256=
|
|
274
|
-
flwr/server/superlink/state/sqlite_state.py,sha256=
|
|
275
|
-
flwr/server/superlink/state/state.py,sha256=
|
|
275
|
+
flwr/server/superlink/state/in_memory_state.py,sha256=yuyk8R9veNxaSFFhWQg9odUBYPO-1EzcKiulqcXRc1M,15668
|
|
276
|
+
flwr/server/superlink/state/sqlite_state.py,sha256=HJwiD3SMp7yVqcyer-nJbdQ5uS06Cs5qjuN79dSTJWM,35614
|
|
277
|
+
flwr/server/superlink/state/state.py,sha256=c8ZJbZA3x_SMd87M041-QuTDDTEzac4kbrLY4YHmUY8,7829
|
|
276
278
|
flwr/server/superlink/state/state_factory.py,sha256=Fo8pBQ1WWrVJK5TOEPZ_zgJE69_mfTGjTO6czh6571o,2021
|
|
277
|
-
flwr/server/superlink/state/utils.py,sha256=
|
|
279
|
+
flwr/server/superlink/state/utils.py,sha256=AC5u_A2toAW_ocCrng5ioxwoNhobocJAJMgjFvg-dJI,4997
|
|
278
280
|
flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
|
|
279
281
|
flwr/server/utils/__init__.py,sha256=pltsPHJoXmUIr3utjwwYxu7_ZAGy5u4MVHzv9iA5Un8,908
|
|
280
282
|
flwr/server/utils/tensorboard.py,sha256=gEBD8w_5uaIfp5aw5RYH66lYZpd_SfkObHQ7eDd9MUk,5466
|
|
@@ -299,8 +301,8 @@ flwr/superexec/exec_grpc.py,sha256=ZPq7EP55Vwj0kRcLVuTCokFqfIgBk-7YmDykZoMKi-c,1
|
|
|
299
301
|
flwr/superexec/exec_servicer.py,sha256=TRpwPVl7eI0Y_xlCY6DmVpAo0yFU1gLwzyIeqFw9pyk,4746
|
|
300
302
|
flwr/superexec/executor.py,sha256=-5J-ZLs-uArro3T2pCq0YQRC65cs18M888nufzdYE4E,2375
|
|
301
303
|
flwr/superexec/simulation.py,sha256=J6pw-RqCSiUed8I_3MasZH4tl57ZmDebPAHNnbb0-vE,7420
|
|
302
|
-
flwr_nightly-1.12.0.
|
|
303
|
-
flwr_nightly-1.12.0.
|
|
304
|
-
flwr_nightly-1.12.0.
|
|
305
|
-
flwr_nightly-1.12.0.
|
|
306
|
-
flwr_nightly-1.12.0.
|
|
304
|
+
flwr_nightly-1.12.0.dev20241010.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
305
|
+
flwr_nightly-1.12.0.dev20241010.dist-info/METADATA,sha256=5IR5Je6HzFFGIR62wjqICS5QuSKMugIizNgcJJ3_8iE,15618
|
|
306
|
+
flwr_nightly-1.12.0.dev20241010.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
|
307
|
+
flwr_nightly-1.12.0.dev20241010.dist-info/entry_points.txt,sha256=WUCbqhLEOzjx_lyATIM0-f0e8kOVaQjzwOvyOxHrMhs,434
|
|
308
|
+
flwr_nightly-1.12.0.dev20241010.dist-info/RECORD,,
|
{flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/LICENSE
RENAMED
|
File without changes
|
{flwr_nightly-1.12.0.dev20241007.dist-info → flwr_nightly-1.12.0.dev20241010.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|