flwr-nightly 1.14.0.dev20241216__py3-none-any.whl → 1.15.0.dev20250107__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.
- flwr/cli/log.py +8 -6
- flwr/cli/ls.py +7 -4
- flwr/cli/new/templates/app/.gitignore.tpl +3 -0
- flwr/cli/new/templates/app/pyproject.baseline.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.jax.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.mlx.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.numpy.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl +3 -3
- flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl +1 -1
- flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl +1 -1
- flwr/cli/run/run.py +7 -2
- flwr/cli/stop.py +3 -2
- flwr/cli/utils.py +79 -10
- flwr/client/client.py +0 -32
- flwr/client/message_handler/message_handler.py +0 -2
- flwr/client/numpy_client.py +0 -44
- flwr/client/supernode/app.py +1 -2
- flwr/common/record/recordset.py +1 -1
- flwr/common/secure_aggregation/crypto/symmetric_encryption.py +45 -0
- flwr/common/telemetry.py +13 -3
- flwr/server/app.py +1 -0
- flwr/server/run_serverapp.py +8 -9
- flwr/server/serverapp/app.py +17 -2
- flwr/server/superlink/driver/serverappio_servicer.py +9 -0
- flwr/server/superlink/fleet/vce/vce_api.py +2 -2
- flwr/server/superlink/linkstate/in_memory_linkstate.py +10 -2
- flwr/server/superlink/linkstate/linkstate.py +4 -0
- flwr/server/superlink/linkstate/sqlite_linkstate.py +6 -2
- flwr/server/superlink/simulation/simulationio_servicer.py +13 -0
- flwr/simulation/app.py +15 -4
- flwr/simulation/run_simulation.py +35 -7
- {flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/METADATA +2 -2
- {flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/RECORD +38 -38
- {flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/LICENSE +0 -0
- {flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/WHEEL +0 -0
- {flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/entry_points.txt +0 -0
flwr/server/serverapp/app.py
CHANGED
@@ -25,6 +25,7 @@ from typing import Optional
|
|
25
25
|
|
26
26
|
from flwr.cli.config_utils import get_fab_metadata
|
27
27
|
from flwr.cli.install import install_from_fab
|
28
|
+
from flwr.cli.utils import get_sha256_hash
|
28
29
|
from flwr.common.args import add_args_flwr_app_common
|
29
30
|
from flwr.common.config import (
|
30
31
|
get_flwr_dir,
|
@@ -51,6 +52,7 @@ from flwr.common.serde import (
|
|
51
52
|
run_from_proto,
|
52
53
|
run_status_to_proto,
|
53
54
|
)
|
55
|
+
from flwr.common.telemetry import EventType, event
|
54
56
|
from flwr.common.typing import RunNotRunningException, RunStatus
|
55
57
|
from flwr.proto.run_pb2 import UpdateRunStatusRequest # pylint: disable=E0611
|
56
58
|
from flwr.proto.serverappio_pb2 import ( # pylint: disable=E0611
|
@@ -113,7 +115,8 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
|
|
113
115
|
# Resolve directory where FABs are installed
|
114
116
|
flwr_dir_ = get_flwr_dir(flwr_dir)
|
115
117
|
log_uploader = None
|
116
|
-
|
118
|
+
success = True
|
119
|
+
hash_run_id = None
|
117
120
|
while True:
|
118
121
|
|
119
122
|
try:
|
@@ -129,6 +132,8 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
|
|
129
132
|
run = run_from_proto(res.run)
|
130
133
|
fab = fab_from_proto(res.fab)
|
131
134
|
|
135
|
+
hash_run_id = get_sha256_hash(run.run_id)
|
136
|
+
|
132
137
|
driver.set_run(run.run_id)
|
133
138
|
|
134
139
|
# Start log uploader for this run
|
@@ -171,6 +176,11 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
|
|
171
176
|
UpdateRunStatusRequest(run_id=run.run_id, run_status=run_status_proto)
|
172
177
|
)
|
173
178
|
|
179
|
+
event(
|
180
|
+
EventType.FLWR_SERVERAPP_RUN_ENTER,
|
181
|
+
event_details={"run-id-hash": hash_run_id},
|
182
|
+
)
|
183
|
+
|
174
184
|
# Load and run the ServerApp with the Driver
|
175
185
|
updated_context = run_(
|
176
186
|
driver=driver,
|
@@ -187,17 +197,18 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
|
|
187
197
|
_ = driver._stub.PushServerAppOutputs(out_req)
|
188
198
|
|
189
199
|
run_status = RunStatus(Status.FINISHED, SubStatus.COMPLETED, "")
|
190
|
-
|
191
200
|
except RunNotRunningException:
|
192
201
|
log(INFO, "")
|
193
202
|
log(INFO, "Run ID %s stopped.", run.run_id)
|
194
203
|
log(INFO, "")
|
195
204
|
run_status = None
|
205
|
+
success = False
|
196
206
|
|
197
207
|
except Exception as ex: # pylint: disable=broad-exception-caught
|
198
208
|
exc_entity = "ServerApp"
|
199
209
|
log(ERROR, "%s raised an exception", exc_entity, exc_info=ex)
|
200
210
|
run_status = RunStatus(Status.FINISHED, SubStatus.FAILED, str(ex))
|
211
|
+
success = False
|
201
212
|
|
202
213
|
finally:
|
203
214
|
# Stop log uploader for this run and upload final logs
|
@@ -213,6 +224,10 @@ def run_serverapp( # pylint: disable=R0914, disable=W0212, disable=R0915
|
|
213
224
|
run_id=run.run_id, run_status=run_status_proto
|
214
225
|
)
|
215
226
|
)
|
227
|
+
event(
|
228
|
+
EventType.FLWR_SERVERAPP_RUN_LEAVE,
|
229
|
+
event_details={"run-id-hash": hash_run_id, "success": success},
|
230
|
+
)
|
216
231
|
|
217
232
|
# Stop the loop if `flwr-serverapp` is expected to process a single run
|
218
233
|
if run_once:
|
@@ -159,6 +159,9 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
159
159
|
for task_ins in request.task_ins_list:
|
160
160
|
validation_errors = validate_task_ins_or_res(task_ins)
|
161
161
|
_raise_if(bool(validation_errors), ", ".join(validation_errors))
|
162
|
+
_raise_if(
|
163
|
+
request.run_id != task_ins.run_id, "`task_ins` has mismatched `run_id`"
|
164
|
+
)
|
162
165
|
|
163
166
|
# Store each TaskIns
|
164
167
|
task_ids: list[Optional[UUID]] = []
|
@@ -193,6 +196,12 @@ class ServerAppIoServicer(serverappio_pb2_grpc.ServerAppIoServicer):
|
|
193
196
|
# Read from state
|
194
197
|
task_res_list: list[TaskRes] = state.get_task_res(task_ids=task_ids)
|
195
198
|
|
199
|
+
# Validate request
|
200
|
+
for task_res in task_res_list:
|
201
|
+
_raise_if(
|
202
|
+
request.run_id != task_res.run_id, "`task_res` has mismatched `run_id`"
|
203
|
+
)
|
204
|
+
|
196
205
|
# Delete the TaskIns/TaskRes pairs if TaskRes is found
|
197
206
|
task_ins_ids_to_delete = {
|
198
207
|
UUID(task_res.task.ancestry[0]) for task_res in task_res_list
|
@@ -182,8 +182,8 @@ def run_api(
|
|
182
182
|
f_stop: threading.Event,
|
183
183
|
) -> None:
|
184
184
|
"""Run the VCE."""
|
185
|
-
taskins_queue:
|
186
|
-
taskres_queue:
|
185
|
+
taskins_queue: Queue[TaskIns] = Queue()
|
186
|
+
taskres_queue: Queue[TaskRes] = Queue()
|
187
187
|
|
188
188
|
try:
|
189
189
|
|
@@ -430,10 +430,17 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
430
430
|
"""Retrieve `server_public_key` in urlsafe bytes."""
|
431
431
|
return self.server_public_key
|
432
432
|
|
433
|
+
def clear_supernode_auth_keys_and_credentials(self) -> None:
|
434
|
+
"""Clear stored `node_public_keys` and credentials in the link state if any."""
|
435
|
+
with self.lock:
|
436
|
+
self.server_private_key = None
|
437
|
+
self.server_public_key = None
|
438
|
+
self.node_public_keys.clear()
|
439
|
+
|
433
440
|
def store_node_public_keys(self, public_keys: set[bytes]) -> None:
|
434
441
|
"""Store a set of `node_public_keys` in the link state."""
|
435
442
|
with self.lock:
|
436
|
-
self.node_public_keys
|
443
|
+
self.node_public_keys.update(public_keys)
|
437
444
|
|
438
445
|
def store_node_public_key(self, public_key: bytes) -> None:
|
439
446
|
"""Store a `node_public_key` in the link state."""
|
@@ -442,7 +449,8 @@ class InMemoryLinkState(LinkState): # pylint: disable=R0902,R0904
|
|
442
449
|
|
443
450
|
def get_node_public_keys(self) -> set[bytes]:
|
444
451
|
"""Retrieve all currently stored `node_public_keys` as a set."""
|
445
|
-
|
452
|
+
with self.lock:
|
453
|
+
return self.node_public_keys.copy()
|
446
454
|
|
447
455
|
def get_run_ids(self) -> set[int]:
|
448
456
|
"""Retrieve all run IDs."""
|
@@ -284,6 +284,10 @@ class LinkState(abc.ABC): # pylint: disable=R0904
|
|
284
284
|
def get_server_public_key(self) -> Optional[bytes]:
|
285
285
|
"""Retrieve `server_public_key` in urlsafe bytes."""
|
286
286
|
|
287
|
+
@abc.abstractmethod
|
288
|
+
def clear_supernode_auth_keys_and_credentials(self) -> None:
|
289
|
+
"""Clear stored `node_public_keys` and credentials in the link state if any."""
|
290
|
+
|
287
291
|
@abc.abstractmethod
|
288
292
|
def store_node_public_keys(self, public_keys: set[bytes]) -> None:
|
289
293
|
"""Store a set of `node_public_keys` in the link state."""
|
@@ -761,8 +761,6 @@ class SqliteLinkState(LinkState): # pylint: disable=R0904
|
|
761
761
|
"federation_options, pending_at, starting_at, running_at, finished_at, "
|
762
762
|
"sub_status, details) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
|
763
763
|
)
|
764
|
-
if fab_hash:
|
765
|
-
fab_id, fab_version = "", ""
|
766
764
|
override_config_json = json.dumps(override_config)
|
767
765
|
data = [
|
768
766
|
sint64_run_id,
|
@@ -820,6 +818,12 @@ class SqliteLinkState(LinkState): # pylint: disable=R0904
|
|
820
818
|
public_key = None
|
821
819
|
return public_key
|
822
820
|
|
821
|
+
def clear_supernode_auth_keys_and_credentials(self) -> None:
|
822
|
+
"""Clear stored `node_public_keys` and credentials in the link state if any."""
|
823
|
+
queries = ["DELETE FROM public_key;", "DELETE FROM credential;"]
|
824
|
+
for query in queries:
|
825
|
+
self.query(query)
|
826
|
+
|
823
827
|
def store_node_public_keys(self, public_keys: set[bytes]) -> None:
|
824
828
|
"""Store a set of `node_public_keys` in the link state."""
|
825
829
|
query = "INSERT INTO public_key (public_key) VALUES (?)"
|
@@ -54,6 +54,7 @@ from flwr.proto.simulationio_pb2 import ( # pylint: disable=E0611
|
|
54
54
|
)
|
55
55
|
from flwr.server.superlink.ffs.ffs_factory import FfsFactory
|
56
56
|
from flwr.server.superlink.linkstate import LinkStateFactory
|
57
|
+
from flwr.server.superlink.utils import abort_if
|
57
58
|
|
58
59
|
|
59
60
|
class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
|
@@ -110,6 +111,15 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
|
|
110
111
|
"""Push Simulation process outputs."""
|
111
112
|
log(DEBUG, "SimultionIoServicer.PushSimulationOutputs")
|
112
113
|
state = self.state_factory.state()
|
114
|
+
|
115
|
+
# Abort if the run is not running
|
116
|
+
abort_if(
|
117
|
+
request.run_id,
|
118
|
+
[Status.PENDING, Status.STARTING, Status.FINISHED],
|
119
|
+
state,
|
120
|
+
context,
|
121
|
+
)
|
122
|
+
|
113
123
|
state.set_serverapp_context(request.run_id, context_from_proto(request.context))
|
114
124
|
return PushSimulationOutputsResponse()
|
115
125
|
|
@@ -120,6 +130,9 @@ class SimulationIoServicer(simulationio_pb2_grpc.SimulationIoServicer):
|
|
120
130
|
log(DEBUG, "SimultionIoServicer.UpdateRunStatus")
|
121
131
|
state = self.state_factory.state()
|
122
132
|
|
133
|
+
# Abort if the run is finished
|
134
|
+
abort_if(request.run_id, [Status.FINISHED], state, context)
|
135
|
+
|
123
136
|
# Update the run status
|
124
137
|
state.update_run_status(
|
125
138
|
run_id=request.run_id, new_status=run_status_from_proto(request.run_status)
|
flwr/simulation/app.py
CHANGED
@@ -24,7 +24,8 @@ from typing import Optional
|
|
24
24
|
|
25
25
|
from flwr.cli.config_utils import get_fab_metadata
|
26
26
|
from flwr.cli.install import install_from_fab
|
27
|
-
from flwr.
|
27
|
+
from flwr.cli.utils import get_sha256_hash
|
28
|
+
from flwr.common import EventType, event
|
28
29
|
from flwr.common.args import add_args_flwr_app_common
|
29
30
|
from flwr.common.config import (
|
30
31
|
get_flwr_dir,
|
@@ -48,6 +49,7 @@ from flwr.common.logger import (
|
|
48
49
|
from flwr.common.serde import (
|
49
50
|
configs_record_from_proto,
|
50
51
|
context_from_proto,
|
52
|
+
context_to_proto,
|
51
53
|
fab_from_proto,
|
52
54
|
run_from_proto,
|
53
55
|
run_status_to_proto,
|
@@ -201,8 +203,17 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
|
|
201
203
|
verbose: bool = fed_opt.get("verbose", False)
|
202
204
|
enable_tf_gpu_growth: bool = fed_opt.get("enable_tf_gpu_growth", False)
|
203
205
|
|
206
|
+
event(
|
207
|
+
EventType.FLWR_SIMULATION_RUN_ENTER,
|
208
|
+
event_details={
|
209
|
+
"backend": "ray",
|
210
|
+
"num-supernodes": num_supernodes,
|
211
|
+
"run-id-hash": get_sha256_hash(run.run_id),
|
212
|
+
},
|
213
|
+
)
|
214
|
+
|
204
215
|
# Launch the simulation
|
205
|
-
_run_simulation(
|
216
|
+
updated_context = _run_simulation(
|
206
217
|
server_app_attr=server_app_attr,
|
207
218
|
client_app_attr=client_app_attr,
|
208
219
|
num_supernodes=num_supernodes,
|
@@ -213,11 +224,11 @@ def run_simulation_process( # pylint: disable=R0914, disable=W0212, disable=R09
|
|
213
224
|
verbose_logging=verbose,
|
214
225
|
server_app_run_config=fused_config,
|
215
226
|
is_app=True,
|
216
|
-
exit_event=EventType.
|
227
|
+
exit_event=EventType.FLWR_SIMULATION_RUN_LEAVE,
|
217
228
|
)
|
218
229
|
|
219
230
|
# Send resulting context
|
220
|
-
context_proto =
|
231
|
+
context_proto = context_to_proto(updated_context)
|
221
232
|
out_req = PushSimulationOutputsRequest(
|
222
233
|
run_id=run.run_id, context=context_proto
|
223
234
|
)
|
@@ -24,9 +24,11 @@ import threading
|
|
24
24
|
import traceback
|
25
25
|
from logging import DEBUG, ERROR, INFO, WARNING
|
26
26
|
from pathlib import Path
|
27
|
+
from queue import Empty, Queue
|
27
28
|
from typing import Any, Optional
|
28
29
|
|
29
30
|
from flwr.cli.config_utils import load_and_validate
|
31
|
+
from flwr.cli.utils import get_sha256_hash
|
30
32
|
from flwr.client import ClientApp
|
31
33
|
from flwr.common import Context, EventType, RecordSet, event, log, now
|
32
34
|
from flwr.common.config import get_fused_config_from_dir, parse_config_args
|
@@ -126,7 +128,7 @@ def run_simulation_from_cli() -> None:
|
|
126
128
|
run = Run.create_empty(run_id)
|
127
129
|
run.override_config = override_config
|
128
130
|
|
129
|
-
_run_simulation(
|
131
|
+
_ = _run_simulation(
|
130
132
|
server_app_attr=server_app_attr,
|
131
133
|
client_app_attr=client_app_attr,
|
132
134
|
num_supernodes=args.num_supernodes,
|
@@ -206,7 +208,7 @@ def run_simulation(
|
|
206
208
|
"\n\tflwr.simulation.run_simulationt(...)",
|
207
209
|
)
|
208
210
|
|
209
|
-
_run_simulation(
|
211
|
+
_ = _run_simulation(
|
210
212
|
num_supernodes=num_supernodes,
|
211
213
|
client_app=client_app,
|
212
214
|
server_app=server_app,
|
@@ -229,6 +231,7 @@ def run_serverapp_th(
|
|
229
231
|
has_exception: threading.Event,
|
230
232
|
enable_tf_gpu_growth: bool,
|
231
233
|
run_id: int,
|
234
|
+
ctx_queue: "Queue[Context]",
|
232
235
|
) -> threading.Thread:
|
233
236
|
"""Run SeverApp in a thread."""
|
234
237
|
|
@@ -241,6 +244,7 @@ def run_serverapp_th(
|
|
241
244
|
_server_app_run_config: UserConfig,
|
242
245
|
_server_app_attr: Optional[str],
|
243
246
|
_server_app: Optional[ServerApp],
|
247
|
+
_ctx_queue: "Queue[Context]",
|
244
248
|
) -> None:
|
245
249
|
"""Run SeverApp, after check if GPU memory growth has to be set.
|
246
250
|
|
@@ -261,13 +265,14 @@ def run_serverapp_th(
|
|
261
265
|
)
|
262
266
|
|
263
267
|
# Run ServerApp
|
264
|
-
_run(
|
268
|
+
updated_context = _run(
|
265
269
|
driver=_driver,
|
266
270
|
context=context,
|
267
271
|
server_app_dir=_server_app_dir,
|
268
272
|
server_app_attr=_server_app_attr,
|
269
273
|
loaded_server_app=_server_app,
|
270
274
|
)
|
275
|
+
_ctx_queue.put(updated_context)
|
271
276
|
except Exception as ex: # pylint: disable=broad-exception-caught
|
272
277
|
log(ERROR, "ServerApp thread raised an exception: %s", ex)
|
273
278
|
log(ERROR, traceback.format_exc())
|
@@ -291,6 +296,7 @@ def run_serverapp_th(
|
|
291
296
|
server_app_run_config,
|
292
297
|
server_app_attr,
|
293
298
|
server_app,
|
299
|
+
ctx_queue,
|
294
300
|
),
|
295
301
|
)
|
296
302
|
serverapp_th.start()
|
@@ -313,7 +319,7 @@ def _main_loop(
|
|
313
319
|
server_app: Optional[ServerApp] = None,
|
314
320
|
server_app_attr: Optional[str] = None,
|
315
321
|
server_app_run_config: Optional[UserConfig] = None,
|
316
|
-
) ->
|
322
|
+
) -> Context:
|
317
323
|
"""Start ServerApp on a separate thread, then launch Simulation Engine."""
|
318
324
|
# Initialize StateFactory
|
319
325
|
state_factory = LinkStateFactory(":flwr-in-memory-state:")
|
@@ -323,6 +329,13 @@ def _main_loop(
|
|
323
329
|
server_app_thread_has_exception = threading.Event()
|
324
330
|
serverapp_th = None
|
325
331
|
success = True
|
332
|
+
updated_context = Context(
|
333
|
+
run_id=run.run_id,
|
334
|
+
node_id=0,
|
335
|
+
node_config=UserConfig(),
|
336
|
+
state=RecordSet(),
|
337
|
+
run_config=UserConfig(),
|
338
|
+
)
|
326
339
|
try:
|
327
340
|
# Register run
|
328
341
|
log(DEBUG, "Pre-registering run with id %s", run.run_id)
|
@@ -337,6 +350,7 @@ def _main_loop(
|
|
337
350
|
# Initialize Driver
|
338
351
|
driver = InMemoryDriver(state_factory=state_factory)
|
339
352
|
driver.set_run(run_id=run.run_id)
|
353
|
+
output_context_queue: Queue[Context] = Queue()
|
340
354
|
|
341
355
|
# Get and run ServerApp thread
|
342
356
|
serverapp_th = run_serverapp_th(
|
@@ -349,6 +363,7 @@ def _main_loop(
|
|
349
363
|
has_exception=server_app_thread_has_exception,
|
350
364
|
enable_tf_gpu_growth=enable_tf_gpu_growth,
|
351
365
|
run_id=run.run_id,
|
366
|
+
ctx_queue=output_context_queue,
|
352
367
|
)
|
353
368
|
|
354
369
|
# Start Simulation Engine
|
@@ -366,6 +381,11 @@ def _main_loop(
|
|
366
381
|
flwr_dir=flwr_dir,
|
367
382
|
)
|
368
383
|
|
384
|
+
updated_context = output_context_queue.get(timeout=3)
|
385
|
+
|
386
|
+
except Empty:
|
387
|
+
log(DEBUG, "Queue timeout. No context received.")
|
388
|
+
|
369
389
|
except Exception as ex:
|
370
390
|
log(ERROR, "An exception occurred !! %s", ex)
|
371
391
|
log(ERROR, traceback.format_exc())
|
@@ -375,13 +395,20 @@ def _main_loop(
|
|
375
395
|
finally:
|
376
396
|
# Trigger stop event
|
377
397
|
f_stop.set()
|
378
|
-
event(
|
398
|
+
event(
|
399
|
+
exit_event,
|
400
|
+
event_details={
|
401
|
+
"run-id-hash": get_sha256_hash(run.run_id),
|
402
|
+
"success": success,
|
403
|
+
},
|
404
|
+
)
|
379
405
|
if serverapp_th:
|
380
406
|
serverapp_th.join()
|
381
407
|
if server_app_thread_has_exception.is_set():
|
382
408
|
raise RuntimeError("Exception in ServerApp thread")
|
383
409
|
|
384
410
|
log(DEBUG, "Stopping Simulation Engine now.")
|
411
|
+
return updated_context
|
385
412
|
|
386
413
|
|
387
414
|
# pylint: disable=too-many-arguments,too-many-locals,too-many-positional-arguments
|
@@ -401,7 +428,7 @@ def _run_simulation(
|
|
401
428
|
enable_tf_gpu_growth: bool = False,
|
402
429
|
verbose_logging: bool = False,
|
403
430
|
is_app: bool = False,
|
404
|
-
) ->
|
431
|
+
) -> Context:
|
405
432
|
"""Launch the Simulation Engine."""
|
406
433
|
if backend_config is None:
|
407
434
|
backend_config = {}
|
@@ -480,7 +507,8 @@ def _run_simulation(
|
|
480
507
|
# Set logger propagation to False to prevent duplicated log output in Colab.
|
481
508
|
logger = set_logger_propagation(logger, False)
|
482
509
|
|
483
|
-
_main_loop(*args)
|
510
|
+
updated_context = _main_loop(*args)
|
511
|
+
return updated_context
|
484
512
|
|
485
513
|
|
486
514
|
def _parse_args_run_simulation() -> argparse.ArgumentParser:
|
{flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: flwr-nightly
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.15.0.dev20250107
|
4
4
|
Summary: Flower: A Friendly Federated AI Framework
|
5
5
|
Home-page: https://flower.ai
|
6
6
|
License: Apache-2.0
|
@@ -118,7 +118,7 @@ Flower's goal is to make federated learning accessible to everyone. This series
|
|
118
118
|
|
119
119
|
4. **Custom Clients for Federated Learning**
|
120
120
|
|
121
|
-
[](https://colab.research.google.com/github/adap/flower/blob/main/
|
121
|
+
[](https://colab.research.google.com/github/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb) (or open the [Jupyter Notebook](https://github.com/adap/flower/blob/main/framework/docs/source/tutorial-series-customize-the-client-pytorch.ipynb))
|
122
122
|
|
123
123
|
Stay tuned, more tutorials are coming soon. Topics include **Privacy and Security in Federated Learning**, and **Scaling Federated Learning**.
|
124
124
|
|
{flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/RECORD
RENAMED
@@ -6,14 +6,14 @@ flwr/cli/cli_user_auth_interceptor.py,sha256=rEjgAZmzHO0GjwdyZib6bkTI2X59ErJAZlu
|
|
6
6
|
flwr/cli/config_utils.py,sha256=I4_EMv2f68mfrL_QuOYoAG--yDfKisE7tGiIg09G2YQ,12079
|
7
7
|
flwr/cli/example.py,sha256=uk5CoD0ZITgpY_ffsTbEKf8XOOCSUzByjHPcMSPqV18,2216
|
8
8
|
flwr/cli/install.py,sha256=0AD0qJD79SKgBnWOQlphcubfr4zHk8jTpFgwZbJBI_g,8180
|
9
|
-
flwr/cli/log.py,sha256=
|
9
|
+
flwr/cli/log.py,sha256=O7MBpsJp114PIZb-7Cru-KM6fqyneFQkqoQbQsqQmZU,6121
|
10
10
|
flwr/cli/login/__init__.py,sha256=6_9zOzbPOAH72K2wX3-9dXTAbS7Mjpa5sEn2lA6eHHI,800
|
11
11
|
flwr/cli/login/login.py,sha256=bZZ3hVeGpF5805R0Eg_SBZUGwrLAWmyaoLhLw6vQFcg,2764
|
12
|
-
flwr/cli/ls.py,sha256=
|
12
|
+
flwr/cli/ls.py,sha256=K_3Bt2RfETw4V7J4qgo8_Wx-Y_bWZqttuO879Ppxo5Y,11056
|
13
13
|
flwr/cli/new/__init__.py,sha256=pOQtPT9W4kCIttcKne5m-FtJbvTqdjTVJxzQ9AUYK8I,790
|
14
14
|
flwr/cli/new/new.py,sha256=scyyKt8mzkc3El1bypgkHjKwVQEc2-q4I50PxriPFdI,9922
|
15
15
|
flwr/cli/new/templates/__init__.py,sha256=4luU8RL-CK8JJCstQ_ON809W9bNTkY1l9zSaPKBkgwY,725
|
16
|
-
flwr/cli/new/templates/app/.gitignore.tpl,sha256=
|
16
|
+
flwr/cli/new/templates/app/.gitignore.tpl,sha256=HZJcGQoxp7aUzaPg8Uqch3kNrIESwr9yjimDxJYgXVY,3104
|
17
17
|
flwr/cli/new/templates/app/LICENSE.tpl,sha256=WNHhf_5RCaeuKWyq_K39vmp9F28LxKsB4SpomwSZ2L0,11357
|
18
18
|
flwr/cli/new/templates/app/README.baseline.md.tpl,sha256=4dg2aBS-NIleVyDlxsG8m65Af6LIJ-pZA5ICjGFU5XA,9641
|
19
19
|
flwr/cli/new/templates/app/README.flowertune.md.tpl,sha256=QSG51uifue2KVZz2ZNw8kmOStS7svC2AQ2gTa5E7Bhs,3326
|
@@ -55,22 +55,22 @@ flwr/cli/new/templates/app/code/task.pytorch.py.tpl,sha256=XlJqA4Ix_PloO_zJLhjiN
|
|
55
55
|
flwr/cli/new/templates/app/code/task.sklearn.py.tpl,sha256=SeIIo0rr_6ffn4Qx2xELD18jYXCkcW__NWtYEDXCICM,1843
|
56
56
|
flwr/cli/new/templates/app/code/task.tensorflow.py.tpl,sha256=SKXAZdgBnPpbAbJ90Rb7oQ5ilnopBx_j_JNFoUDeEAI,1732
|
57
57
|
flwr/cli/new/templates/app/code/utils.baseline.py.tpl,sha256=YkHAgppUeD2BnBoGfVB6dEvBfjuIPGsU1gw4CiUi3qA,40
|
58
|
-
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=
|
59
|
-
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256
|
60
|
-
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=
|
61
|
-
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=
|
62
|
-
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=
|
63
|
-
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=
|
64
|
-
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=
|
65
|
-
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=
|
66
|
-
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=
|
58
|
+
flwr/cli/new/templates/app/pyproject.baseline.toml.tpl,sha256=5-xGWgb1s0c4E5KXfQqWzVziJXIsUp1cGwZEsMEI31Q,2666
|
59
|
+
flwr/cli/new/templates/app/pyproject.flowertune.toml.tpl,sha256=-XdX44M9o6dl-EDBLtHLQejFGQlwQnjATgmEpA8cuq4,1873
|
60
|
+
flwr/cli/new/templates/app/pyproject.huggingface.toml.tpl,sha256=QPxFT3_7RSUVwy8jjT6SeWmV9dl2FQ26gUhdp8O7CpI,1143
|
61
|
+
flwr/cli/new/templates/app/pyproject.jax.toml.tpl,sha256=cFFgI0zzzyThm38iXy9OLBkPpZz8mOP1qSagBJvwxGQ,673
|
62
|
+
flwr/cli/new/templates/app/pyproject.mlx.toml.tpl,sha256=1qeTW-GHMAWr-vuMAJ-eijco9IIsftdBeqNH7g8x3Zw,744
|
63
|
+
flwr/cli/new/templates/app/pyproject.numpy.toml.tpl,sha256=nU-ij9nPXxmPgE2SGapXnRfghye8g_Fo1_ub5XpaKAE,612
|
64
|
+
flwr/cli/new/templates/app/pyproject.pytorch.toml.tpl,sha256=PA_dEtWkY6Wf3Ektc9DvSKE81er3yDntf_VTtC1nDHc,710
|
65
|
+
flwr/cli/new/templates/app/pyproject.sklearn.toml.tpl,sha256=d7TwWH-QJN0j-9rs9zHnng_bHeHV7mk138KXqdv5BoE,686
|
66
|
+
flwr/cli/new/templates/app/pyproject.tensorflow.toml.tpl,sha256=r0SZnvoR5a5mEWKJIvQ3rW8C6-2DkhaC8A1fTA0avm0,710
|
67
67
|
flwr/cli/run/__init__.py,sha256=cCsKVB0SFzh2b3QmGba6BHckB85xlhjh3mh4pBpACtY,790
|
68
|
-
flwr/cli/run/run.py,sha256=
|
69
|
-
flwr/cli/stop.py,sha256=
|
70
|
-
flwr/cli/utils.py,sha256=
|
68
|
+
flwr/cli/run/run.py,sha256=BvpjYyUvDhVMvO5cG711ihtdeSbls9p8zVAuFGETLA8,7893
|
69
|
+
flwr/cli/stop.py,sha256=1T9RNRCH8dxjmBT38hFtKAWY9Gb7RMCMCML7kex9WzE,4613
|
70
|
+
flwr/cli/utils.py,sha256=d15VkwxVK-NC1X-LVXXW3_O4-A38ZrlevwSNKNYpJCY,10592
|
71
71
|
flwr/client/__init__.py,sha256=DGDoO0AEAfz-0CUFmLdyUUweAS64-07AOnmDfWUefK4,1192
|
72
72
|
flwr/client/app.py,sha256=XJWu-kPswM52oLYXaOLKr0gj87KPNRI7M0Na9oBsDK4,34784
|
73
|
-
flwr/client/client.py,sha256=
|
73
|
+
flwr/client/client.py,sha256=8o58nd9o6ZFcMIaVYPGcV4MSjBG4H0oFgWiv8ZEO3oA,7895
|
74
74
|
flwr/client/client_app.py,sha256=cTig-N00YzTucbo9zNi6I21J8PlbflU_8J_f5CI-Wpw,10390
|
75
75
|
flwr/client/clientapp/__init__.py,sha256=kZqChGnTChQ1WGSUkIlW2S5bc0d0mzDubCAmZUGRpEY,800
|
76
76
|
flwr/client/clientapp/app.py,sha256=n3IbbQ__QBjd4n7hhP2oydYg66IvrnSXvwi3sZvnWeU,8949
|
@@ -87,7 +87,7 @@ flwr/client/grpc_rere_client/connection.py,sha256=NqKSoYIJblB4lElZ7EKIgDjLb6KYEc
|
|
87
87
|
flwr/client/grpc_rere_client/grpc_adapter.py,sha256=sQo0I9T65t97LFGoW_PrmgaTbd18GFgi2DoAI5wQJ4k,5589
|
88
88
|
flwr/client/heartbeat.py,sha256=cx37mJBH8LyoIN4Lks85wtqT1mnU5GulQnr4pGCvAq0,2404
|
89
89
|
flwr/client/message_handler/__init__.py,sha256=QxxQuBNpFPTHx3KiUNvQSlqMKlEnbRR1kFfc1KVje08,719
|
90
|
-
flwr/client/message_handler/message_handler.py,sha256=
|
90
|
+
flwr/client/message_handler/message_handler.py,sha256=s7FEfYJp5QB259Pj1L94_9AC24Kh5JyKC2U-E6eNkkY,6492
|
91
91
|
flwr/client/message_handler/task_handler.py,sha256=ZDJBKmrn2grRMNl1rU1iGs7FiMHL5VmZiSp_6h9GHVU,1824
|
92
92
|
flwr/client/mod/__init__.py,sha256=37XeXZLFq_tzFVKVtC9JaigM2bSAU7BrGQvMPCE3Q28,1159
|
93
93
|
flwr/client/mod/centraldp_mods.py,sha256=UGwNuqpmOWfLdfJITFgdi1TG-nLjuSb-cbEyoyfDgxQ,5415
|
@@ -101,12 +101,12 @@ flwr/client/nodestate/__init__.py,sha256=6FTlzydo1j0n55Tb-Qo0XmuqTUyRxg3x7jHgo3g
|
|
101
101
|
flwr/client/nodestate/in_memory_nodestate.py,sha256=MKI3jVPARPWJmNGw61k1-9LIXROkTx2PrhWjDM8cpHk,1291
|
102
102
|
flwr/client/nodestate/nodestate.py,sha256=CmHZdR6kVO8tkffg42W0Yb9JdRmrUonZ9deXfUNK6Hg,1024
|
103
103
|
flwr/client/nodestate/nodestate_factory.py,sha256=apUbcJG0a_FUVsc0TkNN3q9yovc9u_J34u9iuLFKTLQ,1430
|
104
|
-
flwr/client/numpy_client.py,sha256=
|
104
|
+
flwr/client/numpy_client.py,sha256=chTkL9dOtK_wgUoYtzp5mfDOC1k8xPAd1qPIsB3hcjA,9581
|
105
105
|
flwr/client/rest_client/__init__.py,sha256=5KGlp7pjc1dhNRkKlaNtUfQmg8wrRFh9lS3P3uRS-7Q,735
|
106
106
|
flwr/client/rest_client/connection.py,sha256=NWBu7Cc8LUTlf7GjJl3rgdCAykrE5suul_xZUV21OgI,12659
|
107
107
|
flwr/client/run_info_store.py,sha256=ZN2Phi4DSLbSyzg8RmzJcVYh1g6eurHOmWRCT7GMtw4,4040
|
108
108
|
flwr/client/supernode/__init__.py,sha256=SUhWOzcgXRNXk1V9UgB5-FaWukqqrOEajVUHEcPkwyQ,865
|
109
|
-
flwr/client/supernode/app.py,sha256=
|
109
|
+
flwr/client/supernode/app.py,sha256=LCZs4ImGkleGgsn-b1AOK-u_P8Gi5nKeSvicEDRDF8Q,11400
|
110
110
|
flwr/client/typing.py,sha256=dxoTBnTMfqXr5J7G3y-uNjqxYCddvxhu89spfj4Lm2U,1048
|
111
111
|
flwr/common/__init__.py,sha256=TVaoFEJE158aui1TPZQiJCDZX4RNHRyI8I55VC80HhI,3901
|
112
112
|
flwr/common/address.py,sha256=9KNYE69WW_QVcyumsux3Qn1wmn4J7f13Y9nHASpvzbA,3018
|
@@ -132,20 +132,20 @@ flwr/common/record/configsrecord.py,sha256=i40jOzBx04ysZKECwaw4FdUXMdY9HgdY8GAqK
|
|
132
132
|
flwr/common/record/conversion_utils.py,sha256=n3I3SI2P6hUjyxbWNc0QAch-SEhfMK6Hm-UUaplAlUc,1393
|
133
133
|
flwr/common/record/metricsrecord.py,sha256=UywkEPbifiu_IyPUFoDJCi8WEVLujlqZERUWAWpc3vs,5752
|
134
134
|
flwr/common/record/parametersrecord.py,sha256=SasHn35JRHsj8G1UT76FgRjaP4ZJasejvgjBV6HnaTg,7748
|
135
|
-
flwr/common/record/recordset.py,sha256=
|
135
|
+
flwr/common/record/recordset.py,sha256=qqIFdRZ0ivQhUhztpdxNIvCRDZQXY_zX0kKDEU9mhfM,8319
|
136
136
|
flwr/common/record/typeddict.py,sha256=q5hL2xkXymuiCprHWb69mUmLpWQk_XXQq0hGQ69YPaw,3599
|
137
137
|
flwr/common/recordset_compat.py,sha256=ViSwA26h6Q55ZmV1LLjSJpcKiipV-p_JpCj4wxdE-Ow,14230
|
138
138
|
flwr/common/retry_invoker.py,sha256=UIDKsn0AitS3fOr43WTqZAdD-TaHkBeTj1QxD7SGba0,14481
|
139
139
|
flwr/common/secure_aggregation/__init__.py,sha256=erPnTWdOfMH0K0HQTmj5foDJ6t3iYcExy2aACy8iZNQ,731
|
140
140
|
flwr/common/secure_aggregation/crypto/__init__.py,sha256=nlHesCWy8xxE5s6qHWnauCtyClcMQ2K0CEXAHakY5n0,738
|
141
141
|
flwr/common/secure_aggregation/crypto/shamir.py,sha256=wCSfEfeaPgJ9Om580-YPUF2ljiyRhq33TRC4HtwxYl8,2779
|
142
|
-
flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=
|
142
|
+
flwr/common/secure_aggregation/crypto/symmetric_encryption.py,sha256=J_pRkxbogc7e1fxRZStZFBdzzG5jeUycshJPpvyCt6g,5333
|
143
143
|
flwr/common/secure_aggregation/ndarrays_arithmetic.py,sha256=zvVAIrIyI6OSzGhpCi8NNaTvPXmoMYQIPJT-NkBg8RU,3013
|
144
144
|
flwr/common/secure_aggregation/quantization.py,sha256=mC4uLf05zeONo8Ke-BY0Tj8UCMOS7VD93zHCzuv3MHU,2304
|
145
145
|
flwr/common/secure_aggregation/secaggplus_constants.py,sha256=9MF-oQh62uD7rt9VeNB-rHf2gBLd5GL3S9OejCxmILY,2183
|
146
146
|
flwr/common/secure_aggregation/secaggplus_utils.py,sha256=OgYd68YBRaHQYLc-YdExj9CSpwL58bVTaPrdHoAj2AE,3214
|
147
147
|
flwr/common/serde.py,sha256=K9ExsqcTPETESkt2HMaNtIQAIAfwmuwtJFlG-59I7Sw,31046
|
148
|
-
flwr/common/telemetry.py,sha256=
|
148
|
+
flwr/common/telemetry.py,sha256=APKVubU_zJNrE-M_rip6S6Fsu41DxY3tAjFWNOgTmC0,9086
|
149
149
|
flwr/common/typing.py,sha256=eTlGl56rdus583r11xHY_ejG-3b3rknqF735UY5zMK8,6025
|
150
150
|
flwr/common/version.py,sha256=aNSxLL49RKeLz8sPcZrsTEWtrAeQ0uxu6tjmfba4O60,1325
|
151
151
|
flwr/proto/__init__.py,sha256=hbY7JYakwZwCkYgCNlmHdc8rtvfoJbAZLalMdc--CGc,683
|
@@ -211,7 +211,7 @@ flwr/proto/transport_pb2_grpc.py,sha256=vLN3EHtx2aEEMCO4f1Upu-l27BPzd3-5pV-u8wPc
|
|
211
211
|
flwr/proto/transport_pb2_grpc.pyi,sha256=AGXf8RiIiW2J5IKMlm_3qT3AzcDa4F3P5IqUjve_esA,766
|
212
212
|
flwr/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
213
213
|
flwr/server/__init__.py,sha256=cEg1oecBu4cKB69iJCqWEylC8b5XW47bl7rQiJsdTvM,1528
|
214
|
-
flwr/server/app.py,sha256=
|
214
|
+
flwr/server/app.py,sha256=qn5gdsDqvJ7o4ZiWpbNBHtYKSZiUJ7SiGfdkUEczTd4,31010
|
215
215
|
flwr/server/client_manager.py,sha256=7Ese0tgrH-i-ms363feYZJKwB8gWnXSmg_hYF2Bju4U,6227
|
216
216
|
flwr/server/client_proxy.py,sha256=4G-oTwhb45sfWLx2uZdcXD98IZwdTS6F88xe3akCdUg,2399
|
217
217
|
flwr/server/compat/__init__.py,sha256=VxnJtJyOjNFQXMNi9hIuzNlZM5n0Hj1p3aq_Pm2udw4,892
|
@@ -225,12 +225,12 @@ flwr/server/driver/driver.py,sha256=u_fMfqLYTroTafGCNwKPHI4lttRL-Z5CqeT3_FHSq-Q,
|
|
225
225
|
flwr/server/driver/grpc_driver.py,sha256=9Vns8XRSc3WmQn8KejJtJftgsg3UzsEwqPC8ekTGSHY,9636
|
226
226
|
flwr/server/driver/inmemory_driver.py,sha256=fCDhbP3OGmqWrUPQlagsMFGbEwFT0pn9OqhxeHr65zg,6614
|
227
227
|
flwr/server/history.py,sha256=qSb5_pPTrwofpSYGsZWzMPkl_4uJ4mJFWesxXDrEvDU,5026
|
228
|
-
flwr/server/run_serverapp.py,sha256=
|
228
|
+
flwr/server/run_serverapp.py,sha256=vIPhvJx0i5sEZO4IKM6ruCXmx4ncat76rh0B4KhdhhM,2446
|
229
229
|
flwr/server/server.py,sha256=1ZsFEptmAV-L2vP2etNC9Ed5CLSxpuKzUFkAPQ4l5Xc,17893
|
230
230
|
flwr/server/server_app.py,sha256=RsgS6PRS5Z74cMUAHzsm8r3LWddwn00MjRs6rlacHt8,6297
|
231
231
|
flwr/server/server_config.py,sha256=CZaHVAsMvGLjpWVcLPkiYxgJN4xfIyAiUrCI3fETKY4,1349
|
232
232
|
flwr/server/serverapp/__init__.py,sha256=L0K-94UDdTyEZ8LDtYybGIIIv3HW6AhSVjXMUfYJQnQ,800
|
233
|
-
flwr/server/serverapp/app.py,sha256=
|
233
|
+
flwr/server/serverapp/app.py,sha256=eh15kToGVRdIFXHyVKa58tWN5Hh3EIXHcYEbcIqqNb0,8467
|
234
234
|
flwr/server/serverapp_components.py,sha256=-IV_CitOfrJclJj2jNdbN1Q65PyFmtKtrTIg1hc6WQw,2118
|
235
235
|
flwr/server/strategy/__init__.py,sha256=tQer2SwjDnvgFFuJMZM-S01Z615N5XK6MaCvpm4BMU0,2836
|
236
236
|
flwr/server/strategy/aggregate.py,sha256=PDvekufza13s9AsVmz9WASunaBs3yCtl8JVliFx9j6Q,13978
|
@@ -259,7 +259,7 @@ flwr/server/strategy/strategy.py,sha256=cXapkD5uDrt5C-RbmWDn9FLoap3Q41i7GKvbmfbC
|
|
259
259
|
flwr/server/superlink/__init__.py,sha256=8tHYCfodUlRD8PCP9fHgvu8cz5N31A2QoRVL0jDJ15E,707
|
260
260
|
flwr/server/superlink/driver/__init__.py,sha256=5soEK5QSvxNjmJQ-CGTWROc4alSAeU0e9Ad9RDhsd3E,717
|
261
261
|
flwr/server/superlink/driver/serverappio_grpc.py,sha256=62371xIRzp3k-eQTaSpb9c4TiSfueSuI7Iw5X3IafOY,2186
|
262
|
-
flwr/server/superlink/driver/serverappio_servicer.py,sha256=
|
262
|
+
flwr/server/superlink/driver/serverappio_servicer.py,sha256=mgyV0XTONO7Vqb7sGOLu6AkCXWpBSeJ2s7ksadK1vE4,12197
|
263
263
|
flwr/server/superlink/ffs/__init__.py,sha256=FAY-zShcfPmOxosok2QyT6hTNMNctG8cH9s_nIl8jkI,840
|
264
264
|
flwr/server/superlink/ffs/disk_ffs.py,sha256=n_Ah0sQwXGVQ9wj5965nLjdkQQbpoHCljjXKFnwftsU,3297
|
265
265
|
flwr/server/superlink/ffs/ffs.py,sha256=qLI1UfosJugu2BKOJWqHIhafTm-YiuKqGf3OGWPH0NM,2395
|
@@ -283,16 +283,16 @@ flwr/server/superlink/fleet/vce/__init__.py,sha256=TZJsKTpYO_djv2EXx9Ji62I8TA0Ji
|
|
283
283
|
flwr/server/superlink/fleet/vce/backend/__init__.py,sha256=cGgal5qpd0_MwEdIqjJbHHSIgGa6GSPoI5_byUwtG_k,1437
|
284
284
|
flwr/server/superlink/fleet/vce/backend/backend.py,sha256=LBAQxnbfPAphVOVIvYMj0QIvVP5O-RQxKQlUGNUj974,2194
|
285
285
|
flwr/server/superlink/fleet/vce/backend/raybackend.py,sha256=jsUkFEVQTnrucK1jNQ_cUM8YwL7W4MQNA1GAf8ibRdg,7156
|
286
|
-
flwr/server/superlink/fleet/vce/vce_api.py,sha256=
|
286
|
+
flwr/server/superlink/fleet/vce/vce_api.py,sha256=WTnUILr1OHS8LfjXQUA3FyWJYdJgdqpFAybyJUD-1Xo,13025
|
287
287
|
flwr/server/superlink/linkstate/__init__.py,sha256=v-2JyJlCB3qyhMNwMjmcNVOq4rkooqFU0LHH8Zo1jls,1064
|
288
|
-
flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=
|
289
|
-
flwr/server/superlink/linkstate/linkstate.py,sha256=
|
288
|
+
flwr/server/superlink/linkstate/in_memory_linkstate.py,sha256=SR6a0wb-xFVQmPEsNseT91jmBeN0Lh1m_lZ6nY6aNS0,21984
|
289
|
+
flwr/server/superlink/linkstate/linkstate.py,sha256=ayQY5eb-2InSldQUnVcx5ABjPU4QhQRV2lEVPVM_818,13114
|
290
290
|
flwr/server/superlink/linkstate/linkstate_factory.py,sha256=ISSMjDlwuN7swxjOeYlTNpI_kuZ8PGkMcJnf1dbhUSE,2069
|
291
|
-
flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=
|
291
|
+
flwr/server/superlink/linkstate/sqlite_linkstate.py,sha256=svP5Vj6Jaq1iazd6q0wWQU0lJslfIJT0XBw8mA1SABs,42879
|
292
292
|
flwr/server/superlink/linkstate/utils.py,sha256=d5uqqIOCKfd54X8CFNfUr3AWqPLpgmzsC_RagRwFugM,13321
|
293
293
|
flwr/server/superlink/simulation/__init__.py,sha256=mg-oapC9dkzEfjXPQFior5lpWj4g9kwbLovptyYM_g0,718
|
294
294
|
flwr/server/superlink/simulation/simulationio_grpc.py,sha256=5wflYW_TS0mjmPG6OYuHMJwXD2_cYmUNhFkdOU0jMWQ,2237
|
295
|
-
flwr/server/superlink/simulation/simulationio_servicer.py,sha256=
|
295
|
+
flwr/server/superlink/simulation/simulationio_servicer.py,sha256=J_TmdqM-Bxgp-iPEI3tvCuBpykw1UX0FouMQalEYAF4,6907
|
296
296
|
flwr/server/superlink/utils.py,sha256=KVb3K_g2vYfu9TnftcN0ewmev133WZcjuEePMm8d7GE,2137
|
297
297
|
flwr/server/typing.py,sha256=5kaRLZuxTEse9A0g7aVna2VhYxU3wTq1f3d3mtw7kXs,1019
|
298
298
|
flwr/server/utils/__init__.py,sha256=pltsPHJoXmUIr3utjwwYxu7_ZAGy5u4MVHzv9iA5Un8,908
|
@@ -305,13 +305,13 @@ flwr/server/workflow/secure_aggregation/__init__.py,sha256=3XlgDOjD_hcukTGl6Bc1B
|
|
305
305
|
flwr/server/workflow/secure_aggregation/secagg_workflow.py,sha256=l2IdMdJjs1bgHs5vQgLSOVzar7v2oxUn46oCrnVE1rM,5839
|
306
306
|
flwr/server/workflow/secure_aggregation/secaggplus_workflow.py,sha256=rfn2etO1nb7u-1oRl-H9q3enJZz3shMINZaBB7rPsC4,29671
|
307
307
|
flwr/simulation/__init__.py,sha256=5UcDVJNjFoSwWqHbGM1hKfTTUUNdwAtuoNvNrfvdkUY,1556
|
308
|
-
flwr/simulation/app.py,sha256=
|
308
|
+
flwr/simulation/app.py,sha256=cQgIJJujFUpBCcydxgakNygibf3Iww6OAWRo7Sq6y8w,9754
|
309
309
|
flwr/simulation/legacy_app.py,sha256=ySggtKEtXe8L77n8qyGXDA7UPv840MXh-QoalzoGiLU,15780
|
310
310
|
flwr/simulation/ray_transport/__init__.py,sha256=wzcEEwUUlulnXsg6raCA1nGpP3LlAQDtJ8zNkCXcVbA,734
|
311
311
|
flwr/simulation/ray_transport/ray_actor.py,sha256=k11yoAPQzFGQU-KnCCP0ZrfPPdUPXXrBe-1DKM5VdW4,18997
|
312
312
|
flwr/simulation/ray_transport/ray_client_proxy.py,sha256=2vjOKoom3B74C6XU-jC3N6DwYmsLdB-lmkHZ_Xrv96o,7367
|
313
313
|
flwr/simulation/ray_transport/utils.py,sha256=wtbQhKQ4jGoiQDLJNQP17m1DSfL22ERhDBGuoeUFaAQ,2393
|
314
|
-
flwr/simulation/run_simulation.py,sha256=
|
314
|
+
flwr/simulation/run_simulation.py,sha256=KFpdL_RxE8NHZ68ZdghmFS6rccmWkO_iQ-kLLE1WUn8,20336
|
315
315
|
flwr/simulation/simulationio_connection.py,sha256=8aAh6MKQkQPMSnWEqA5vua_QzZtoMxG-_-AB23RPhS4,3412
|
316
316
|
flwr/superexec/__init__.py,sha256=fcj366jh4RFby_vDwLroU4kepzqbnJgseZD_jUr_Mko,715
|
317
317
|
flwr/superexec/app.py,sha256=Z6kYHWd62YL0Q4YKyCAbt_BcefNfbKH6V-jCC-1NkZM,1842
|
@@ -321,8 +321,8 @@ flwr/superexec/exec_servicer.py,sha256=8tFwj1fDBF6PzwLhByTlxM-KNZc83bG1UdE92-8DS
|
|
321
321
|
flwr/superexec/exec_user_auth_interceptor.py,sha256=K06OU-l4LnYhTDg071hGJuOaQWEJbZsYi5qxUmmtiG0,3704
|
322
322
|
flwr/superexec/executor.py,sha256=_B55WW2TD1fBINpabSSDRenVHXYmvlfhv-k8hJKU4lQ,3115
|
323
323
|
flwr/superexec/simulation.py,sha256=WQDon15oqpMopAZnwRZoTICYCfHqtkvFSqiTQ2hLD_g,4088
|
324
|
-
flwr_nightly-1.
|
325
|
-
flwr_nightly-1.
|
326
|
-
flwr_nightly-1.
|
327
|
-
flwr_nightly-1.
|
328
|
-
flwr_nightly-1.
|
324
|
+
flwr_nightly-1.15.0.dev20250107.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
325
|
+
flwr_nightly-1.15.0.dev20250107.dist-info/METADATA,sha256=WViuONypdpsZ9HD8sY37AA9v1KR4FA86-PspOAyHPCQ,15810
|
326
|
+
flwr_nightly-1.15.0.dev20250107.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
|
327
|
+
flwr_nightly-1.15.0.dev20250107.dist-info/entry_points.txt,sha256=JlNxX3qhaV18_2yj5a3kJW1ESxm31cal9iS_N_pf1Rk,538
|
328
|
+
flwr_nightly-1.15.0.dev20250107.dist-info/RECORD,,
|
{flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/LICENSE
RENAMED
File without changes
|
{flwr_nightly-1.14.0.dev20241216.dist-info → flwr_nightly-1.15.0.dev20250107.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|